mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 03:50:05 +00:00 
			
		
		
		
	Add unit settings to settings dialog
This commit is contained in:
		
							parent
							
								
									3bfcaede96
								
							
						
					
					
						commit
						a29256d77e
					
				
					 7 changed files with 224 additions and 5 deletions
				
			
		|  | @ -0,0 +1 @@ | ||||||
|  | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M.2 468.9C2.7 493.1 23.1 512 48 512l96 0 320 0c26.5 0 48-21.5 48-48l0-96c0-26.5-21.5-48-48-48l-48 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0 0-64-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0 0-64-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0 0-48c0-26.5-21.5-48-48-48L48 0C21.5 0 0 21.5 0 48L0 368l0 96c0 1.7 .1 3.3 .2 4.9z"/></svg> | ||||||
| After Width: | Height: | Size: 690 B | 
|  | @ -289,9 +289,11 @@ set(UI_UI  source/scwx/qt/ui/about_dialog.ui | ||||||
|            source/scwx/qt/ui/settings_dialog.ui |            source/scwx/qt/ui/settings_dialog.ui | ||||||
|            source/scwx/qt/ui/update_dialog.ui) |            source/scwx/qt/ui/update_dialog.ui) | ||||||
| set(HDR_UI_SETTINGS source/scwx/qt/ui/settings/hotkey_settings_widget.hpp | set(HDR_UI_SETTINGS source/scwx/qt/ui/settings/hotkey_settings_widget.hpp | ||||||
|                     source/scwx/qt/ui/settings/settings_page_widget.hpp) |                     source/scwx/qt/ui/settings/settings_page_widget.hpp | ||||||
|  |                     source/scwx/qt/ui/settings/unit_settings_widget.hpp) | ||||||
| set(SRC_UI_SETTINGS source/scwx/qt/ui/settings/hotkey_settings_widget.cpp | set(SRC_UI_SETTINGS source/scwx/qt/ui/settings/hotkey_settings_widget.cpp | ||||||
|                     source/scwx/qt/ui/settings/settings_page_widget.cpp) |                     source/scwx/qt/ui/settings/settings_page_widget.cpp | ||||||
|  |                     source/scwx/qt/ui/settings/unit_settings_widget.cpp) | ||||||
| set(HDR_UI_SETUP source/scwx/qt/ui/setup/audio_codec_page.hpp | set(HDR_UI_SETUP source/scwx/qt/ui/setup/audio_codec_page.hpp | ||||||
|                  source/scwx/qt/ui/setup/finish_page.hpp |                  source/scwx/qt/ui/setup/finish_page.hpp | ||||||
|                  source/scwx/qt/ui/setup/map_layout_page.hpp |                  source/scwx/qt/ui/setup/map_layout_page.hpp | ||||||
|  |  | ||||||
|  | @ -45,6 +45,7 @@ | ||||||
|         <file>res/icons/font-awesome-6/pause-solid.svg</file> |         <file>res/icons/font-awesome-6/pause-solid.svg</file> | ||||||
|         <file>res/icons/font-awesome-6/play-solid.svg</file> |         <file>res/icons/font-awesome-6/play-solid.svg</file> | ||||||
|         <file>res/icons/font-awesome-6/rotate-left-solid.svg</file> |         <file>res/icons/font-awesome-6/rotate-left-solid.svg</file> | ||||||
|  |         <file>res/icons/font-awesome-6/ruler-combined-solid.svg</file> | ||||||
|         <file>res/icons/font-awesome-6/sliders-solid.svg</file> |         <file>res/icons/font-awesome-6/sliders-solid.svg</file> | ||||||
|         <file>res/icons/font-awesome-6/square-caret-down-regular.svg</file> |         <file>res/icons/font-awesome-6/square-caret-down-regular.svg</file> | ||||||
|         <file>res/icons/font-awesome-6/square-caret-right-regular.svg</file> |         <file>res/icons/font-awesome-6/square-caret-right-regular.svg</file> | ||||||
|  |  | ||||||
							
								
								
									
										160
									
								
								scwx-qt/source/scwx/qt/ui/settings/unit_settings_widget.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										160
									
								
								scwx-qt/source/scwx/qt/ui/settings/unit_settings_widget.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,160 @@ | ||||||
|  | #include <scwx/qt/ui/settings/unit_settings_widget.hpp> | ||||||
|  | #include <scwx/qt/settings/settings_interface.hpp> | ||||||
|  | #include <scwx/qt/settings/unit_settings.hpp> | ||||||
|  | #include <scwx/qt/types/unit_types.hpp> | ||||||
|  | 
 | ||||||
|  | #include <boost/algorithm/string.hpp> | ||||||
|  | #include <boost/unordered/unordered_flat_map.hpp> | ||||||
|  | #include <QGridLayout> | ||||||
|  | #include <QLabel> | ||||||
|  | #include <QComboBox> | ||||||
|  | #include <QScrollArea> | ||||||
|  | #include <QToolButton> | ||||||
|  | #include <QVBoxLayout> | ||||||
|  | 
 | ||||||
|  | #define SCWX_SETTINGS_COMBO_BOX(settingsInterface, comboBox, Iterator, ToName) \ | ||||||
|  |    for (const auto& enumValue : Iterator)                                      \ | ||||||
|  |    {                                                                           \ | ||||||
|  |       comboBox->addItem(QString::fromStdString(ToName(enumValue)));            \ | ||||||
|  |    }                                                                           \ | ||||||
|  |                                                                                \ | ||||||
|  |    settingsInterface.SetMapFromValueFunction(                                  \ | ||||||
|  |       [](const std::string& text) -> std::string                               \ | ||||||
|  |       {                                                                        \ | ||||||
|  |          for (const auto& enumValue : Iterator)                                \ | ||||||
|  |          {                                                                     \ | ||||||
|  |             const std::string valueName = ToName(enumValue);                   \ | ||||||
|  |                                                                                \ | ||||||
|  |             if (boost::iequals(text, valueName))                               \ | ||||||
|  |             {                                                                  \ | ||||||
|  |                return valueName;                                               \ | ||||||
|  |             }                                                                  \ | ||||||
|  |          }                                                                     \ | ||||||
|  |                                                                                \ | ||||||
|  |          return "?";                                                           \ | ||||||
|  |       });                                                                      \ | ||||||
|  |    settingsInterface.SetMapToValueFunction(                                    \ | ||||||
|  |       [](std::string text) -> std::string                                      \ | ||||||
|  |       {                                                                        \ | ||||||
|  |          boost::to_lower(text);                                                \ | ||||||
|  |          return text;                                                          \ | ||||||
|  |       });                                                                      \ | ||||||
|  |                                                                                \ | ||||||
|  |    settingsInterface.SetEditWidget(comboBox); | ||||||
|  | 
 | ||||||
|  | namespace scwx | ||||||
|  | { | ||||||
|  | namespace qt | ||||||
|  | { | ||||||
|  | namespace ui | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  | static const std::string logPrefix_ = | ||||||
|  |    "scwx::qt::ui::settings::unit_settings_widget"; | ||||||
|  | 
 | ||||||
|  | class UnitSettingsWidget::Impl | ||||||
|  | { | ||||||
|  | public: | ||||||
|  |    explicit Impl(UnitSettingsWidget* self) | ||||||
|  |    { | ||||||
|  |       auto& unitSettings = settings::UnitSettings::Instance(); | ||||||
|  | 
 | ||||||
|  |       gridLayout_ = new QGridLayout(self); | ||||||
|  |       contents_   = new QWidget(self); | ||||||
|  |       contents_->setLayout(gridLayout_); | ||||||
|  | 
 | ||||||
|  |       scrollArea_ = new QScrollArea(self); | ||||||
|  |       scrollArea_->setHorizontalScrollBarPolicy( | ||||||
|  |          Qt::ScrollBarPolicy::ScrollBarAlwaysOff); | ||||||
|  |       scrollArea_->setWidgetResizable(true); | ||||||
|  |       scrollArea_->setWidget(contents_); | ||||||
|  | 
 | ||||||
|  |       layout_ = new QVBoxLayout(self); | ||||||
|  |       layout_->setContentsMargins(0, 0, 0, 0); | ||||||
|  |       layout_->addWidget(scrollArea_); | ||||||
|  | 
 | ||||||
|  |       self->setLayout(layout_); | ||||||
|  | 
 | ||||||
|  |       int row = 0; | ||||||
|  | 
 | ||||||
|  |       auto AddRow = | ||||||
|  |          [&row, &self, this]( | ||||||
|  |             settings::SettingsInterface<std::string>& settingsInterface, | ||||||
|  |             const std::string&                        labelName, | ||||||
|  |             QComboBox*                                comboBox) | ||||||
|  |       { | ||||||
|  |          QLabel*      label = new QLabel(QObject::tr(labelName.c_str()), self); | ||||||
|  |          QToolButton* resetButton = new QToolButton(self); | ||||||
|  | 
 | ||||||
|  |          resetButton->setIcon( | ||||||
|  |             QIcon {":/res/icons/font-awesome-6/rotate-left-solid.svg"}); | ||||||
|  |          resetButton->setVisible(false); | ||||||
|  | 
 | ||||||
|  |          settingsInterface.SetResetButton(resetButton); | ||||||
|  | 
 | ||||||
|  |          gridLayout_->addWidget(label, row, 0); | ||||||
|  |          gridLayout_->addWidget(comboBox, row, 1); | ||||||
|  |          gridLayout_->addWidget(resetButton, row, 2); | ||||||
|  | 
 | ||||||
|  |          // Add to settings list
 | ||||||
|  |          self->AddSettingsInterface(&settingsInterface); | ||||||
|  | 
 | ||||||
|  |          ++row; | ||||||
|  |       }; | ||||||
|  | 
 | ||||||
|  |       QComboBox* accumulationComboBox = new QComboBox(self); | ||||||
|  |       accumulationComboBox->setSizePolicy(QSizePolicy::Expanding, | ||||||
|  |                                           QSizePolicy::Preferred); | ||||||
|  |       accumulationUnits_.SetSettingsVariable(unitSettings.accumulation_units()); | ||||||
|  |       SCWX_SETTINGS_COMBO_BOX(accumulationUnits_, | ||||||
|  |                               accumulationComboBox, | ||||||
|  |                               types::AccumulationUnitsIterator(), | ||||||
|  |                               types::GetAccumulationUnitsName); | ||||||
|  |       AddRow(accumulationUnits_, "Accumulation", accumulationComboBox); | ||||||
|  | 
 | ||||||
|  |       QComboBox* echoTopsComboBox = new QComboBox(self); | ||||||
|  |       echoTopsComboBox->setSizePolicy(QSizePolicy::Expanding, | ||||||
|  |                                       QSizePolicy::Preferred); | ||||||
|  |       echoTopsUnits_.SetSettingsVariable(unitSettings.echo_tops_units()); | ||||||
|  |       SCWX_SETTINGS_COMBO_BOX(echoTopsUnits_, | ||||||
|  |                               echoTopsComboBox, | ||||||
|  |                               types::EchoTopsUnitsIterator(), | ||||||
|  |                               types::GetEchoTopsUnitsName); | ||||||
|  |       AddRow(echoTopsUnits_, "Echo Tops", echoTopsComboBox); | ||||||
|  | 
 | ||||||
|  |       QComboBox* speedComboBox = new QComboBox(self); | ||||||
|  |       speedComboBox->setSizePolicy(QSizePolicy::Expanding, | ||||||
|  |                                    QSizePolicy::Preferred); | ||||||
|  |       speedUnits_.SetSettingsVariable(unitSettings.speed_units()); | ||||||
|  |       SCWX_SETTINGS_COMBO_BOX(speedUnits_, | ||||||
|  |                               speedComboBox, | ||||||
|  |                               types::SpeedUnitsIterator(), | ||||||
|  |                               types::GetSpeedUnitsName); | ||||||
|  |       AddRow(speedUnits_, "Speed", speedComboBox); | ||||||
|  | 
 | ||||||
|  |       QSpacerItem* spacer = | ||||||
|  |          new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding); | ||||||
|  |       gridLayout_->addItem(spacer, row, 0); | ||||||
|  |    } | ||||||
|  |    ~Impl() = default; | ||||||
|  | 
 | ||||||
|  |    QWidget*     contents_; | ||||||
|  |    QLayout*     layout_; | ||||||
|  |    QScrollArea* scrollArea_ {}; | ||||||
|  |    QGridLayout* gridLayout_ {}; | ||||||
|  | 
 | ||||||
|  |    settings::SettingsInterface<std::string> accumulationUnits_ {}; | ||||||
|  |    settings::SettingsInterface<std::string> echoTopsUnits_ {}; | ||||||
|  |    settings::SettingsInterface<std::string> speedUnits_ {}; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | UnitSettingsWidget::UnitSettingsWidget(QWidget* parent) : | ||||||
|  |     SettingsPageWidget(parent), p {std::make_shared<Impl>(this)} | ||||||
|  | { | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | UnitSettingsWidget::~UnitSettingsWidget() = default; | ||||||
|  | 
 | ||||||
|  | } // namespace ui
 | ||||||
|  | } // namespace qt
 | ||||||
|  | } // namespace scwx
 | ||||||
							
								
								
									
										29
									
								
								scwx-qt/source/scwx/qt/ui/settings/unit_settings_widget.hpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								scwx-qt/source/scwx/qt/ui/settings/unit_settings_widget.hpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,29 @@ | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | #include <scwx/qt/ui/settings/settings_page_widget.hpp> | ||||||
|  | 
 | ||||||
|  | #include <QWidget> | ||||||
|  | 
 | ||||||
|  | namespace scwx | ||||||
|  | { | ||||||
|  | namespace qt | ||||||
|  | { | ||||||
|  | namespace ui | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  | class UnitSettingsWidget : public SettingsPageWidget | ||||||
|  | { | ||||||
|  |    Q_OBJECT | ||||||
|  | 
 | ||||||
|  | public: | ||||||
|  |    explicit UnitSettingsWidget(QWidget* parent = nullptr); | ||||||
|  |    ~UnitSettingsWidget(); | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  |    class Impl; | ||||||
|  |    std::shared_ptr<Impl> p; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | } // namespace ui
 | ||||||
|  | } // namespace qt
 | ||||||
|  | } // namespace scwx
 | ||||||
|  | @ -23,6 +23,7 @@ | ||||||
| #include <scwx/qt/ui/county_dialog.hpp> | #include <scwx/qt/ui/county_dialog.hpp> | ||||||
| #include <scwx/qt/ui/radar_site_dialog.hpp> | #include <scwx/qt/ui/radar_site_dialog.hpp> | ||||||
| #include <scwx/qt/ui/settings/hotkey_settings_widget.hpp> | #include <scwx/qt/ui/settings/hotkey_settings_widget.hpp> | ||||||
|  | #include <scwx/qt/ui/settings/unit_settings_widget.hpp> | ||||||
| #include <scwx/qt/util/color.hpp> | #include <scwx/qt/util/color.hpp> | ||||||
| #include <scwx/qt/util/file.hpp> | #include <scwx/qt/util/file.hpp> | ||||||
| #include <scwx/util/logger.hpp> | #include <scwx/util/logger.hpp> | ||||||
|  | @ -178,6 +179,7 @@ public: | ||||||
|    void SetupGeneralTab(); |    void SetupGeneralTab(); | ||||||
|    void SetupPalettesColorTablesTab(); |    void SetupPalettesColorTablesTab(); | ||||||
|    void SetupPalettesAlertsTab(); |    void SetupPalettesAlertsTab(); | ||||||
|  |    void SetupUnitsTab(); | ||||||
|    void SetupAudioTab(); |    void SetupAudioTab(); | ||||||
|    void SetupTextTab(); |    void SetupTextTab(); | ||||||
|    void SetupHotkeysTab(); |    void SetupHotkeysTab(); | ||||||
|  | @ -222,6 +224,7 @@ public: | ||||||
| 
 | 
 | ||||||
|    std::vector<SettingsPageWidget*> settingsPages_ {}; |    std::vector<SettingsPageWidget*> settingsPages_ {}; | ||||||
|    HotkeySettingsWidget*            hotkeySettingsWidget_ {}; |    HotkeySettingsWidget*            hotkeySettingsWidget_ {}; | ||||||
|  |    UnitSettingsWidget*              unitSettingsWidget_ {}; | ||||||
| 
 | 
 | ||||||
|    settings::SettingsInterface<std::string>  defaultRadarSite_ {}; |    settings::SettingsInterface<std::string>  defaultRadarSite_ {}; | ||||||
|    settings::SettingsInterface<std::int64_t> gridWidth_ {}; |    settings::SettingsInterface<std::int64_t> gridWidth_ {}; | ||||||
|  | @ -292,6 +295,9 @@ SettingsDialog::SettingsDialog(QWidget* parent) : | ||||||
|    // Palettes > Alerts
 |    // Palettes > Alerts
 | ||||||
|    p->SetupPalettesAlertsTab(); |    p->SetupPalettesAlertsTab(); | ||||||
| 
 | 
 | ||||||
|  |    // Units
 | ||||||
|  |    p->SetupUnitsTab(); | ||||||
|  | 
 | ||||||
|    // Audio
 |    // Audio
 | ||||||
|    p->SetupAudioTab(); |    p->SetupAudioTab(); | ||||||
| 
 | 
 | ||||||
|  | @ -897,6 +903,16 @@ void SettingsDialogImpl::SetupPalettesAlertsTab() | ||||||
|    } |    } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void SettingsDialogImpl::SetupUnitsTab() | ||||||
|  | { | ||||||
|  |    QVBoxLayout* layout = new QVBoxLayout(self_->ui->units); | ||||||
|  | 
 | ||||||
|  |    unitSettingsWidget_ = new UnitSettingsWidget(self_->ui->units); | ||||||
|  |    layout->addWidget(unitSettingsWidget_); | ||||||
|  | 
 | ||||||
|  |    settingsPages_.push_back(unitSettingsWidget_); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void SettingsDialogImpl::SetupAudioTab() | void SettingsDialogImpl::SetupAudioTab() | ||||||
| { | { | ||||||
|    QObject::connect( |    QObject::connect( | ||||||
|  |  | ||||||
|  | @ -77,6 +77,15 @@ | ||||||
|             <normaloff>:/res/icons/font-awesome-6/palette-solid.svg</normaloff>:/res/icons/font-awesome-6/palette-solid.svg</iconset> |             <normaloff>:/res/icons/font-awesome-6/palette-solid.svg</normaloff>:/res/icons/font-awesome-6/palette-solid.svg</iconset> | ||||||
|           </property> |           </property> | ||||||
|          </item> |          </item> | ||||||
|  |          <item> | ||||||
|  |           <property name="text"> | ||||||
|  |            <string>Units</string> | ||||||
|  |           </property> | ||||||
|  |           <property name="icon"> | ||||||
|  |            <iconset resource="../../../../scwx-qt.qrc"> | ||||||
|  |             <normaloff>:/res/icons/font-awesome-6/ruler-combined-solid.svg</normaloff>:/res/icons/font-awesome-6/ruler-combined-solid.svg</iconset> | ||||||
|  |           </property> | ||||||
|  |          </item> | ||||||
|          <item> |          <item> | ||||||
|           <property name="text"> |           <property name="text"> | ||||||
|            <string>Audio</string> |            <string>Audio</string> | ||||||
|  | @ -482,8 +491,8 @@ | ||||||
|                    <rect> |                    <rect> | ||||||
|                     <x>0</x> |                     <x>0</x> | ||||||
|                     <y>0</y> |                     <y>0</y> | ||||||
|                     <width>63</width> |                     <width>506</width> | ||||||
|                     <height>18</height> |                     <height>383</height> | ||||||
|                    </rect> |                    </rect> | ||||||
|                   </property> |                   </property> | ||||||
|                   <layout class="QGridLayout" name="gridLayout_3"> |                   <layout class="QGridLayout" name="gridLayout_3"> | ||||||
|  | @ -554,7 +563,8 @@ | ||||||
|            </item> |            </item> | ||||||
|           </layout> |           </layout> | ||||||
|          </widget> |          </widget> | ||||||
|          <widget class="QWidget" name="page"> |          <widget class="QWidget" name="units"/> | ||||||
|  |          <widget class="QWidget" name="audio"> | ||||||
|           <layout class="QVBoxLayout" name="verticalLayout_4"> |           <layout class="QVBoxLayout" name="verticalLayout_4"> | ||||||
|            <item> |            <item> | ||||||
|             <widget class="QGroupBox" name="alertAudioGroupBox"> |             <widget class="QGroupBox" name="alertAudioGroupBox"> | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Dan Paulat
						Dan Paulat