void WaypointListWidget::OnModified(DataField &df) { if (filter_widget.IsDataField(NAME, df)) { dialog_state.name = df.GetAsString(); /* pass the focus to the list so the user can use the up/down keys to select an item right away after the text input dialog has been closed; however if the value was changed by incrementing/decrementing the first letter (cursor left/right), don't move the focus; we don't know for sure how the value was changed, but if the filter has only one letter, it's most likely changed by left/right */ if (dialog_state.name.length() > 1) GetList().SetFocus(); } else if (filter_widget.IsDataField(DISTANCE, df)) { const DataFieldEnum &dfe = (const DataFieldEnum &)df; dialog_state.distance_index = dfe.GetValue(); } else if (filter_widget.IsDataField(DIRECTION, df)) { const DataFieldEnum &dfe = (const DataFieldEnum &)df; dialog_state.direction_index = dfe.GetValue(); } else if (filter_widget.IsDataField(TYPE, df)) { const DataFieldEnum &dfe = (const DataFieldEnum &)df; dialog_state.type_index = (TypeFilter)dfe.GetValue(); } UpdateList(); }
gcc_pure static bool CanSendSettings(const DataField &df) { const TCHAR *driver_name = df.GetAsString(); if (driver_name == NULL) return false; const struct DeviceRegister *driver = FindDriverByName(driver_name); if (driver == NULL) return false; return driver->CanSendSettings(); }
gcc_pure static bool SupportsBulkBaudRate(const DataField &df) { const TCHAR *driver_name = df.GetAsString(); if (driver_name == NULL) return false; const struct DeviceRegister *driver = FindDriverByName(driver_name); if (driver == NULL) return false; return driver->SupportsBulkBaudRate(); }
void FilterDataFieldListener::OnModified(DataField &df) { if (&df == name_control->GetDataField()) dialog_state.name = df.GetAsString(); else if (&df == distance_filter->GetDataField()) dialog_state.distance_index = df.GetAsInteger(); else if (&df == direction_filter->GetDataField()) dialog_state.direction_index = df.GetAsInteger(); else if (&df == type_filter->GetDataField()) dialog_state.type_index = (TypeFilter)df.GetAsInteger(); UpdateList(); }
gcc_pure static bool CanPassThrough(const DataField &df) { const TCHAR *driver_name = df.GetAsString(); if (driver_name == nullptr) return false; const struct DeviceRegister *driver = FindDriverByName(driver_name); if (driver == nullptr) return false; return driver->HasPassThrough(); }
bool EditDataFieldDialog(const TCHAR *caption, DataField &df, const TCHAR *help_text) { if (df.GetType() == DataField::Type::FILE) { return FilePicker(caption, (FileDataField &)df, help_text); } else if (df.SupportsCombolist()) { return ComboPicker(caption, df, help_text); } else if (df.GetType() == DataField::Type::ROUGH_TIME) { RoughTimeDataField &tdf = (RoughTimeDataField &)df; RoughTime value = tdf.GetValue(); if (!TimeEntryDialog(caption, value, tdf.GetTimeZone(), true)) return false; tdf.ModifyValue(value); return true; } else if (df.GetType() == DataField::Type::GEOPOINT) { GeoPointDataField &gdf = (GeoPointDataField &)df; GeoPoint value = gdf.GetValue(); if (!GeoPointEntryDialog(caption, value, gdf.GetFormat(), false)) return false; gdf.ModifyValue(value); return true; } else { const TCHAR *value = df.GetAsString(); if (value == NULL) return false; StaticString<EDITSTRINGSIZE> buffer(value); PrefixDataField::AllowedCharactersFunction acf; if (df.GetType() == DataField::Type::PREFIX) acf = ((PrefixDataField &)df).GetAllowedCharactersFunction(); if (!TextEntryDialog(buffer, caption, acf)) return false; df.SetAsString(buffer); return true; } }