mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 15:30:04 +00:00 
			
		
		
		
	Add alert county to settings
This commit is contained in:
		
							parent
							
								
									769ce896e7
								
							
						
					
					
						commit
						c970e73db8
					
				
					 7 changed files with 191 additions and 61 deletions
				
			
		|  | @ -1,3 +1,4 @@ | |||
| #include <scwx/qt/config/county_database.hpp> | ||||
| #include <scwx/qt/settings/audio_settings.hpp> | ||||
| #include <scwx/qt/settings/settings_definitions.hpp> | ||||
| #include <scwx/qt/settings/settings_variable.hpp> | ||||
|  | @ -47,6 +48,14 @@ public: | |||
|                                       types::LocationMethodIterator(), | ||||
|                                       types::GetLocationMethodName)); | ||||
| 
 | ||||
|       alertCounty_.SetValidator( | ||||
|          [](const std::string& value) | ||||
|          { | ||||
|             // Empty, or county exists in the database
 | ||||
|             return value.empty() || | ||||
|                    config::CountyDatabase::GetCountyName(value) != value; | ||||
|          }); | ||||
| 
 | ||||
|       for (auto& phenomenon : types::GetAlertAudioPhenomena()) | ||||
|       { | ||||
|          std::string phenomenonCode = awips::GetPhenomenonCode(phenomenon); | ||||
|  | @ -73,6 +82,7 @@ public: | |||
|    SettingsVariable<std::string> alertLocationMethod_ {"alert_location_method"}; | ||||
|    SettingsVariable<double>      alertLatitude_ {"alert_latitude"}; | ||||
|    SettingsVariable<double>      alertLongitude_ {"alert_longitude"}; | ||||
|    SettingsVariable<std::string> alertCounty_ {"alert_county"}; | ||||
| 
 | ||||
|    std::unordered_map<awips::Phenomenon, SettingsVariable<bool>> | ||||
|                                       alertEnabled_ {}; | ||||
|  | @ -85,7 +95,8 @@ AudioSettings::AudioSettings() : | |||
|    RegisterVariables({&p->alertSoundFile_, | ||||
|                       &p->alertLocationMethod_, | ||||
|                       &p->alertLatitude_, | ||||
|                       &p->alertLongitude_}); | ||||
|                       &p->alertLongitude_, | ||||
|                       &p->alertCounty_}); | ||||
|    RegisterVariables(p->variables_); | ||||
|    SetDefaults(); | ||||
| 
 | ||||
|  | @ -116,6 +127,11 @@ SettingsVariable<double>& AudioSettings::alert_longitude() const | |||
|    return p->alertLongitude_; | ||||
| } | ||||
| 
 | ||||
| SettingsVariable<std::string>& AudioSettings::alert_county() const | ||||
| { | ||||
|    return p->alertCounty_; | ||||
| } | ||||
| 
 | ||||
| SettingsVariable<bool>& | ||||
| AudioSettings::alert_enabled(awips::Phenomenon phenomenon) const | ||||
| { | ||||
|  | @ -139,6 +155,7 @@ bool operator==(const AudioSettings& lhs, const AudioSettings& rhs) | |||
|            lhs.p->alertLocationMethod_ == rhs.p->alertLocationMethod_ && | ||||
|            lhs.p->alertLatitude_ == rhs.p->alertLatitude_ && | ||||
|            lhs.p->alertLongitude_ == rhs.p->alertLongitude_ && | ||||
|            lhs.p->alertCounty_ == rhs.p->alertCounty_ && | ||||
|            lhs.p->alertEnabled_ == rhs.p->alertEnabled_); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -30,6 +30,7 @@ public: | |||
|    SettingsVariable<std::string>& alert_location_method() const; | ||||
|    SettingsVariable<double>&      alert_latitude() const; | ||||
|    SettingsVariable<double>&      alert_longitude() const; | ||||
|    SettingsVariable<std::string>& alert_county() const; | ||||
|    SettingsVariable<bool>& alert_enabled(awips::Phenomenon phenomenon) const; | ||||
| 
 | ||||
|    static AudioSettings& Instance(); | ||||
|  |  | |||
|  | @ -15,6 +15,7 @@ namespace types | |||
| static const std::unordered_map<LocationMethod, std::string> | ||||
|    locationMethodName_ {{LocationMethod::Fixed, "Fixed"}, | ||||
|                         {LocationMethod::Track, "Track"}, | ||||
|                         {LocationMethod::County, "County"}, | ||||
|                         {LocationMethod::Unknown, "?"}}; | ||||
| 
 | ||||
| SCWX_GET_ENUM(LocationMethod, GetLocationMethod, locationMethodName_) | ||||
|  |  | |||
|  | @ -15,10 +15,11 @@ enum class LocationMethod | |||
| { | ||||
|    Fixed, | ||||
|    Track, | ||||
|    County, | ||||
|    Unknown | ||||
| }; | ||||
| typedef scwx::util:: | ||||
|    Iterator<LocationMethod, LocationMethod::Fixed, LocationMethod::Track> | ||||
|    Iterator<LocationMethod, LocationMethod::Fixed, LocationMethod::County> | ||||
|       LocationMethodIterator; | ||||
| 
 | ||||
| LocationMethod     GetLocationMethod(const std::string& name); | ||||
|  |  | |||
|  | @ -3,6 +3,7 @@ | |||
| 
 | ||||
| #include <scwx/awips/phenomenon.hpp> | ||||
| #include <scwx/common/color_table.hpp> | ||||
| #include <scwx/qt/config/county_database.hpp> | ||||
| #include <scwx/qt/config/radar_site.hpp> | ||||
| #include <scwx/qt/manager/media_manager.hpp> | ||||
| #include <scwx/qt/manager/position_manager.hpp> | ||||
|  | @ -18,6 +19,7 @@ | |||
| #include <scwx/qt/types/location_types.hpp> | ||||
| #include <scwx/qt/types/qt_types.hpp> | ||||
| #include <scwx/qt/types/text_types.hpp> | ||||
| #include <scwx/qt/ui/county_dialog.hpp> | ||||
| #include <scwx/qt/ui/radar_site_dialog.hpp> | ||||
| #include <scwx/qt/util/color.hpp> | ||||
| #include <scwx/qt/util/file.hpp> | ||||
|  | @ -113,6 +115,7 @@ public: | |||
|    explicit SettingsDialogImpl(SettingsDialog* self) : | ||||
|        self_ {self}, | ||||
|        radarSiteDialog_ {new RadarSiteDialog(self)}, | ||||
|        countyDialog_ {new CountyDialog(self)}, | ||||
|        fontDialog_ {new QFontDialog(self)}, | ||||
|        fontCategoryModel_ {new QStandardItemModel(self)}, | ||||
|        settings_ {std::initializer_list<settings::SettingsInterfaceBase*> { | ||||
|  | @ -131,6 +134,7 @@ public: | |||
|           &alertAudioLocationMethod_, | ||||
|           &alertAudioLatitude_, | ||||
|           &alertAudioLongitude_, | ||||
|           &alertAudioCounty_, | ||||
|           &hoverTextWrap_, | ||||
|           &tooltipMethod_, | ||||
|           &placefileTextDropShadowEnabled_}} | ||||
|  | @ -192,6 +196,7 @@ public: | |||
| 
 | ||||
|    SettingsDialog*  self_; | ||||
|    RadarSiteDialog* radarSiteDialog_; | ||||
|    CountyDialog*    countyDialog_; | ||||
|    QFontDialog*     fontDialog_; | ||||
| 
 | ||||
|    QStandardItemModel* fontCategoryModel_; | ||||
|  | @ -228,6 +233,7 @@ public: | |||
|    settings::SettingsInterface<std::string> alertAudioLocationMethod_ {}; | ||||
|    settings::SettingsInterface<double>      alertAudioLatitude_ {}; | ||||
|    settings::SettingsInterface<double>      alertAudioLongitude_ {}; | ||||
|    settings::SettingsInterface<std::string> alertAudioCounty_ {}; | ||||
| 
 | ||||
|    std::unordered_map<awips::Phenomenon, settings::SettingsInterface<bool>> | ||||
|       alertAudioEnabled_ {}; | ||||
|  | @ -826,26 +832,34 @@ void SettingsDialogImpl::SetupPalettesAlertsTab() | |||
| 
 | ||||
| void SettingsDialogImpl::SetupAudioTab() | ||||
| { | ||||
|    QObject::connect(self_->ui->alertAudioLocationMethodComboBox, | ||||
|                     &QComboBox::currentTextChanged, | ||||
|                     self_, | ||||
|                     [this](const QString& text) | ||||
|                     { | ||||
|                        types::LocationMethod locationMethod = | ||||
|                           types::GetLocationMethod(text.toStdString()); | ||||
|    QObject::connect( | ||||
|       self_->ui->alertAudioLocationMethodComboBox, | ||||
|       &QComboBox::currentTextChanged, | ||||
|       self_, | ||||
|       [this](const QString& text) | ||||
|       { | ||||
|          types::LocationMethod locationMethod = | ||||
|             types::GetLocationMethod(text.toStdString()); | ||||
| 
 | ||||
|                        bool coordinateEntryEnabled = | ||||
|                           locationMethod == types::LocationMethod::Fixed; | ||||
|          bool coordinateEntryEnabled = | ||||
|             locationMethod == types::LocationMethod::Fixed; | ||||
|          bool countyEntryEnabled = | ||||
|             locationMethod == types::LocationMethod::County; | ||||
| 
 | ||||
|                        self_->ui->alertAudioLatitudeSpinBox->setEnabled( | ||||
|                           coordinateEntryEnabled); | ||||
|                        self_->ui->alertAudioLongitudeSpinBox->setEnabled( | ||||
|                           coordinateEntryEnabled); | ||||
|                        self_->ui->resetAlertAudioLatitudeButton->setEnabled( | ||||
|                           coordinateEntryEnabled); | ||||
|                        self_->ui->resetAlertAudioLongitudeButton->setEnabled( | ||||
|                           coordinateEntryEnabled); | ||||
|                     }); | ||||
|          self_->ui->alertAudioLatitudeSpinBox->setEnabled( | ||||
|             coordinateEntryEnabled); | ||||
|          self_->ui->alertAudioLongitudeSpinBox->setEnabled( | ||||
|             coordinateEntryEnabled); | ||||
|          self_->ui->resetAlertAudioLatitudeButton->setEnabled( | ||||
|             coordinateEntryEnabled); | ||||
|          self_->ui->resetAlertAudioLongitudeButton->setEnabled( | ||||
|             coordinateEntryEnabled); | ||||
| 
 | ||||
|          self_->ui->alertAudioCountyLineEdit->setEnabled(countyEntryEnabled); | ||||
|          self_->ui->alertAudioCountySelectButton->setEnabled( | ||||
|             countyEntryEnabled); | ||||
|          self_->ui->resetAlertAudioCountyButton->setEnabled(countyEntryEnabled); | ||||
|       }); | ||||
| 
 | ||||
|    settings::AudioSettings& audioSettings = settings::AudioSettings::Instance(); | ||||
| 
 | ||||
|  | @ -927,6 +941,10 @@ void SettingsDialogImpl::SetupAudioTab() | |||
|    alertAudioLongitude_.SetResetButton( | ||||
|       self_->ui->resetAlertAudioLongitudeButton); | ||||
| 
 | ||||
|    alertAudioCounty_.SetSettingsVariable(audioSettings.alert_county()); | ||||
|    alertAudioCounty_.SetEditWidget(self_->ui->alertAudioCountyLineEdit); | ||||
|    alertAudioCounty_.SetResetButton(self_->ui->resetAlertAudioCountyButton); | ||||
| 
 | ||||
|    auto alertAudioLayout = | ||||
|       static_cast<QGridLayout*>(self_->ui->alertAudioGroupBox->layout()); | ||||
| 
 | ||||
|  | @ -974,6 +992,47 @@ void SettingsDialogImpl::SetupAudioTab() | |||
|                coordinate.longitude()); | ||||
|          } | ||||
|       }); | ||||
| 
 | ||||
|    QObject::connect( | ||||
|       self_->ui->alertAudioCountySelectButton, | ||||
|       &QAbstractButton::clicked, | ||||
|       self_, | ||||
|       [this]() | ||||
|       { | ||||
|          std::string countyId = | ||||
|             self_->ui->alertAudioCountyLineEdit->text().toStdString(); | ||||
| 
 | ||||
|          if (countyId.length() >= 2) | ||||
|          { | ||||
|             countyDialog_->SelectState(countyId.substr(0, 2)); | ||||
|          } | ||||
| 
 | ||||
|          countyDialog_->show(); | ||||
|       }); | ||||
|    QObject::connect(countyDialog_, | ||||
|                     &CountyDialog::accepted, | ||||
|                     self_, | ||||
|                     [this]() | ||||
|                     { | ||||
|                        std::string countyId  = countyDialog_->county_fips_id(); | ||||
|                        QString     qCountyId = QString::fromStdString(countyId); | ||||
|                        self_->ui->alertAudioCountyLineEdit->setText(qCountyId); | ||||
| 
 | ||||
|                        // setText does not emit the textEdited signal
 | ||||
|                        Q_EMIT self_->ui->alertAudioCountyLineEdit->textEdited( | ||||
|                           qCountyId); | ||||
|                     }); | ||||
|    QObject::connect(self_->ui->alertAudioCountyLineEdit, | ||||
|                     &QLineEdit::textChanged, | ||||
|                     self_, | ||||
|                     [this](const QString& text) | ||||
|                     { | ||||
|                        std::string countyName = | ||||
|                           config::CountyDatabase::GetCountyName( | ||||
|                              text.toStdString()); | ||||
|                        self_->ui->alertAudioCountyLabel->setText( | ||||
|                           QString::fromStdString(countyName)); | ||||
|                     }); | ||||
| } | ||||
| 
 | ||||
| void SettingsDialogImpl::SetupTextTab() | ||||
|  |  | |||
|  | @ -460,22 +460,6 @@ | |||
|                 </property> | ||||
|                </widget> | ||||
|               </item> | ||||
|               <item row="2" column="2"> | ||||
|                <widget class="QDoubleSpinBox" name="alertAudioLatitudeSpinBox"> | ||||
|                 <property name="decimals"> | ||||
|                  <number>4</number> | ||||
|                 </property> | ||||
|                 <property name="minimum"> | ||||
|                  <double>-90.000000000000000</double> | ||||
|                 </property> | ||||
|                 <property name="maximum"> | ||||
|                  <double>90.000000000000000</double> | ||||
|                 </property> | ||||
|                 <property name="singleStep"> | ||||
|                  <double>0.000100000000000</double> | ||||
|                 </property> | ||||
|                </widget> | ||||
|               </item> | ||||
|               <item row="1" column="6"> | ||||
|                <widget class="QToolButton" name="resetAlertAudioLocationMethodButton"> | ||||
|                 <property name="text"> | ||||
|  | @ -508,22 +492,6 @@ | |||
|                 </property> | ||||
|                </widget> | ||||
|               </item> | ||||
|               <item row="3" column="2"> | ||||
|                <widget class="QDoubleSpinBox" name="alertAudioLongitudeSpinBox"> | ||||
|                 <property name="decimals"> | ||||
|                  <number>4</number> | ||||
|                 </property> | ||||
|                 <property name="minimum"> | ||||
|                  <double>-180.000000000000000</double> | ||||
|                 </property> | ||||
|                 <property name="maximum"> | ||||
|                  <double>180.000000000000000</double> | ||||
|                 </property> | ||||
|                 <property name="singleStep"> | ||||
|                  <double>0.000100000000000</double> | ||||
|                 </property> | ||||
|                </widget> | ||||
|               </item> | ||||
|               <item row="3" column="6"> | ||||
|                <widget class="QToolButton" name="resetAlertAudioLongitudeButton"> | ||||
|                 <property name="text"> | ||||
|  | @ -535,6 +503,14 @@ | |||
|                 </property> | ||||
|                </widget> | ||||
|               </item> | ||||
|               <item row="0" column="5"> | ||||
|                <widget class="QToolButton" name="alertAudioSoundStopButton"> | ||||
|                 <property name="icon"> | ||||
|                  <iconset resource="../../../../scwx-qt.qrc"> | ||||
|                   <normaloff>:/res/icons/font-awesome-6/stop-solid.svg</normaloff>:/res/icons/font-awesome-6/stop-solid.svg</iconset> | ||||
|                 </property> | ||||
|                </widget> | ||||
|               </item> | ||||
|               <item row="2" column="6"> | ||||
|                <widget class="QToolButton" name="resetAlertAudioLatitudeButton"> | ||||
|                 <property name="text"> | ||||
|  | @ -546,9 +522,6 @@ | |||
|                 </property> | ||||
|                </widget> | ||||
|               </item> | ||||
|               <item row="0" column="2"> | ||||
|                <widget class="QLineEdit" name="alertAudioSoundLineEdit"/> | ||||
|               </item> | ||||
|               <item row="0" column="6"> | ||||
|                <widget class="QToolButton" name="resetAlertAudioSoundButton"> | ||||
|                 <property name="text"> | ||||
|  | @ -575,7 +548,46 @@ | |||
|                 </property> | ||||
|                </widget> | ||||
|               </item> | ||||
|               <item row="1" column="2"> | ||||
|               <item row="4" column="0"> | ||||
|                <widget class="QLabel" name="label_19"> | ||||
|                 <property name="text"> | ||||
|                  <string>County</string> | ||||
|                 </property> | ||||
|                </widget> | ||||
|               </item> | ||||
|               <item row="3" column="1" colspan="2"> | ||||
|                <widget class="QDoubleSpinBox" name="alertAudioLongitudeSpinBox"> | ||||
|                 <property name="decimals"> | ||||
|                  <number>4</number> | ||||
|                 </property> | ||||
|                 <property name="minimum"> | ||||
|                  <double>-180.000000000000000</double> | ||||
|                 </property> | ||||
|                 <property name="maximum"> | ||||
|                  <double>180.000000000000000</double> | ||||
|                 </property> | ||||
|                 <property name="singleStep"> | ||||
|                  <double>0.000100000000000</double> | ||||
|                 </property> | ||||
|                </widget> | ||||
|               </item> | ||||
|               <item row="2" column="1" colspan="2"> | ||||
|                <widget class="QDoubleSpinBox" name="alertAudioLatitudeSpinBox"> | ||||
|                 <property name="decimals"> | ||||
|                  <number>4</number> | ||||
|                 </property> | ||||
|                 <property name="minimum"> | ||||
|                  <double>-90.000000000000000</double> | ||||
|                 </property> | ||||
|                 <property name="maximum"> | ||||
|                  <double>90.000000000000000</double> | ||||
|                 </property> | ||||
|                 <property name="singleStep"> | ||||
|                  <double>0.000100000000000</double> | ||||
|                 </property> | ||||
|                </widget> | ||||
|               </item> | ||||
|               <item row="1" column="1" colspan="2"> | ||||
|                <widget class="QComboBox" name="alertAudioLocationMethodComboBox"> | ||||
|                 <property name="sizePolicy"> | ||||
|                  <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> | ||||
|  | @ -585,11 +597,50 @@ | |||
|                 </property> | ||||
|                </widget> | ||||
|               </item> | ||||
|               <item row="0" column="5"> | ||||
|                <widget class="QToolButton" name="alertAudioSoundStopButton"> | ||||
|               <item row="0" column="1" colspan="2"> | ||||
|                <widget class="QLineEdit" name="alertAudioSoundLineEdit"/> | ||||
|               </item> | ||||
|               <item row="4" column="6"> | ||||
|                <widget class="QToolButton" name="resetAlertAudioCountyButton"> | ||||
|                 <property name="text"> | ||||
|                  <string>...</string> | ||||
|                 </property> | ||||
|                 <property name="icon"> | ||||
|                  <iconset resource="../../../../scwx-qt.qrc"> | ||||
|                   <normaloff>:/res/icons/font-awesome-6/stop-solid.svg</normaloff>:/res/icons/font-awesome-6/stop-solid.svg</iconset> | ||||
|                   <normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</iconset> | ||||
|                 </property> | ||||
|                </widget> | ||||
|               </item> | ||||
|               <item row="4" column="3"> | ||||
|                <widget class="QToolButton" name="alertAudioCountySelectButton"> | ||||
|                 <property name="text"> | ||||
|                  <string>...</string> | ||||
|                 </property> | ||||
|                </widget> | ||||
|               </item> | ||||
|               <item row="4" column="2"> | ||||
|                <widget class="QLabel" name="alertAudioCountyLabel"> | ||||
|                 <property name="sizePolicy"> | ||||
|                  <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> | ||||
|                   <horstretch>0</horstretch> | ||||
|                   <verstretch>0</verstretch> | ||||
|                  </sizepolicy> | ||||
|                 </property> | ||||
|                 <property name="text"> | ||||
|                  <string/> | ||||
|                 </property> | ||||
|                </widget> | ||||
|               </item> | ||||
|               <item row="4" column="1"> | ||||
|                <widget class="QLineEdit" name="alertAudioCountyLineEdit"> | ||||
|                 <property name="sizePolicy"> | ||||
|                  <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> | ||||
|                   <horstretch>0</horstretch> | ||||
|                   <verstretch>0</verstretch> | ||||
|                  </sizepolicy> | ||||
|                 </property> | ||||
|                 <property name="readOnly"> | ||||
|                  <bool>true</bool> | ||||
|                 </property> | ||||
|                </widget> | ||||
|               </item> | ||||
|  | @ -604,7 +655,7 @@ | |||
|              <property name="sizeHint" stdset="0"> | ||||
|               <size> | ||||
|                <width>20</width> | ||||
|                <height>281</height> | ||||
|                <height>253</height> | ||||
|               </size> | ||||
|              </property> | ||||
|             </spacer> | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Dan Paulat
						Dan Paulat