mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 16:20:05 +00:00 
			
		
		
		
	Handle level 2 elevation tilt hotkeys
This commit is contained in:
		
							parent
							
								
									77dd7dde3e
								
							
						
					
					
						commit
						baafda0b23
					
				
					 1 changed files with 88 additions and 0 deletions
				
			
		|  | @ -1,6 +1,8 @@ | ||||||
| #include <scwx/qt/ui/level2_settings_widget.hpp> | #include <scwx/qt/ui/level2_settings_widget.hpp> | ||||||
| #include <scwx/qt/ui/flow_layout.hpp> | #include <scwx/qt/ui/flow_layout.hpp> | ||||||
|  | #include <scwx/qt/manager/hotkey_manager.hpp> | ||||||
| #include <scwx/common/characters.hpp> | #include <scwx/common/characters.hpp> | ||||||
|  | #include <scwx/util/logger.hpp> | ||||||
| 
 | 
 | ||||||
| #include <execution> | #include <execution> | ||||||
| 
 | 
 | ||||||
|  | @ -16,6 +18,9 @@ namespace qt | ||||||
| namespace ui | namespace ui | ||||||
| { | { | ||||||
| 
 | 
 | ||||||
|  | static const std::string logPrefix_ = "scwx::qt::ui::level2_settings_widget"; | ||||||
|  | static const auto        logger_    = util::Logger::Create(logPrefix_); | ||||||
|  | 
 | ||||||
| class Level2SettingsWidgetImpl : public QObject | class Level2SettingsWidgetImpl : public QObject | ||||||
| { | { | ||||||
|    Q_OBJECT |    Q_OBJECT | ||||||
|  | @ -46,9 +51,15 @@ public: | ||||||
|       settingsLayout->addWidget(declutterCheckBox_); |       settingsLayout->addWidget(declutterCheckBox_); | ||||||
| 
 | 
 | ||||||
|       settingsGroupBox_->setVisible(false); |       settingsGroupBox_->setVisible(false); | ||||||
|  | 
 | ||||||
|  |       QObject::connect(hotkeyManager_.get(), | ||||||
|  |                        &manager::HotkeyManager::HotkeyPressed, | ||||||
|  |                        this, | ||||||
|  |                        &Level2SettingsWidgetImpl::HandleHotkeyPressed); | ||||||
|    } |    } | ||||||
|    ~Level2SettingsWidgetImpl() = default; |    ~Level2SettingsWidgetImpl() = default; | ||||||
| 
 | 
 | ||||||
|  |    void HandleHotkeyPressed(types::Hotkey hotkey, bool isAutoRepeat); | ||||||
|    void NormalizeElevationButtons(); |    void NormalizeElevationButtons(); | ||||||
|    void SelectElevation(float elevation); |    void SelectElevation(float elevation); | ||||||
| 
 | 
 | ||||||
|  | @ -63,6 +74,12 @@ public: | ||||||
| 
 | 
 | ||||||
|    QGroupBox* settingsGroupBox_; |    QGroupBox* settingsGroupBox_; | ||||||
|    QCheckBox* declutterCheckBox_; |    QCheckBox* declutterCheckBox_; | ||||||
|  | 
 | ||||||
|  |    float        currentElevation_ {}; | ||||||
|  |    QToolButton* currentElevationButton_ {nullptr}; | ||||||
|  | 
 | ||||||
|  |    std::shared_ptr<manager::HotkeyManager> hotkeyManager_ { | ||||||
|  |       manager::HotkeyManager::Instance()}; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| Level2SettingsWidget::Level2SettingsWidget(QWidget* parent) : | Level2SettingsWidget::Level2SettingsWidget(QWidget* parent) : | ||||||
|  | @ -96,6 +113,71 @@ void Level2SettingsWidget::showEvent(QShowEvent* event) | ||||||
|    p->NormalizeElevationButtons(); |    p->NormalizeElevationButtons(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void Level2SettingsWidgetImpl::HandleHotkeyPressed(types::Hotkey hotkey, | ||||||
|  |                                                    bool          isAutoRepeat) | ||||||
|  | { | ||||||
|  |    if (hotkey != types::Hotkey::ProductTiltDecrease && | ||||||
|  |        hotkey != types::Hotkey::ProductTiltIncrease) | ||||||
|  |    { | ||||||
|  |       // Not handling this hotkey
 | ||||||
|  |       return; | ||||||
|  |    } | ||||||
|  | 
 | ||||||
|  |    logger_->trace("Handling hotkey: {}, repeat: {}", | ||||||
|  |                   types::GetHotkeyShortName(hotkey), | ||||||
|  |                   isAutoRepeat); | ||||||
|  | 
 | ||||||
|  |    if (!self_->isVisible() || currentElevationButton_ == nullptr) | ||||||
|  |    { | ||||||
|  |       // Level 2 product is not selected
 | ||||||
|  |       return; | ||||||
|  |    } | ||||||
|  | 
 | ||||||
|  |    // Find the current elevation tilt
 | ||||||
|  |    auto tiltIt = std::find(elevationButtons_.cbegin(), | ||||||
|  |                            elevationButtons_.cend(), | ||||||
|  |                            currentElevationButton_); | ||||||
|  | 
 | ||||||
|  |    if (tiltIt == elevationButtons_.cend()) | ||||||
|  |    { | ||||||
|  |       logger_->error("Could not locate level 2 tilt: {}", currentElevation_); | ||||||
|  |       return; | ||||||
|  |    } | ||||||
|  | 
 | ||||||
|  |    if (hotkey == types::Hotkey::ProductTiltDecrease) | ||||||
|  |    { | ||||||
|  |       // Validate the current elevation tilt
 | ||||||
|  |       if (tiltIt != elevationButtons_.cbegin()) | ||||||
|  |       { | ||||||
|  |          // Get the previous elevation tilt
 | ||||||
|  |          --tiltIt; | ||||||
|  | 
 | ||||||
|  |          // Select the new elevation tilt
 | ||||||
|  |          (*tiltIt)->click(); | ||||||
|  |       } | ||||||
|  |       else | ||||||
|  |       { | ||||||
|  |          logger_->info("Level 2 tilt at lower limit"); | ||||||
|  |       } | ||||||
|  |    } | ||||||
|  |    else if (hotkey == types::Hotkey::ProductTiltIncrease) | ||||||
|  |    { | ||||||
|  |       // Get the next elevation tilt
 | ||||||
|  |       ++tiltIt; | ||||||
|  | 
 | ||||||
|  |       // Validate the next elevation tilt
 | ||||||
|  |       if (tiltIt != elevationButtons_.cend()) | ||||||
|  |       { | ||||||
|  |          // Select the new elevation tilt
 | ||||||
|  |          (*tiltIt)->click(); | ||||||
|  |       } | ||||||
|  |       else | ||||||
|  |       { | ||||||
|  |          logger_->info("Level 2 tilt at upper limit"); | ||||||
|  |       } | ||||||
|  |    } | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void Level2SettingsWidgetImpl::NormalizeElevationButtons() | void Level2SettingsWidgetImpl::NormalizeElevationButtons() | ||||||
| { | { | ||||||
|    // Set each elevation cut's tool button to the same size
 |    // Set each elevation cut's tool button to the same size
 | ||||||
|  | @ -135,12 +217,15 @@ void Level2SettingsWidget::UpdateElevationSelection(float elevation) | ||||||
|    QString buttonText {QString::number(elevation, 'f', 1) + |    QString buttonText {QString::number(elevation, 'f', 1) + | ||||||
|                        common::Characters::DEGREE}; |                        common::Characters::DEGREE}; | ||||||
| 
 | 
 | ||||||
|  |    QToolButton* newElevationButton = nullptr; | ||||||
|  | 
 | ||||||
|    std::for_each(p->elevationButtons_.cbegin(), |    std::for_each(p->elevationButtons_.cbegin(), | ||||||
|                  p->elevationButtons_.cend(), |                  p->elevationButtons_.cend(), | ||||||
|                  [&](auto& toolButton) |                  [&](auto& toolButton) | ||||||
|                  { |                  { | ||||||
|                     if (toolButton->text() == buttonText) |                     if (toolButton->text() == buttonText) | ||||||
|                     { |                     { | ||||||
|  |                        newElevationButton = toolButton; | ||||||
|                        toolButton->setCheckable(true); |                        toolButton->setCheckable(true); | ||||||
|                        toolButton->setChecked(true); |                        toolButton->setChecked(true); | ||||||
|                     } |                     } | ||||||
|  | @ -150,6 +235,9 @@ void Level2SettingsWidget::UpdateElevationSelection(float elevation) | ||||||
|                        toolButton->setCheckable(false); |                        toolButton->setCheckable(false); | ||||||
|                     } |                     } | ||||||
|                  }); |                  }); | ||||||
|  | 
 | ||||||
|  |    p->currentElevation_       = elevation; | ||||||
|  |    p->currentElevationButton_ = newElevationButton; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Level2SettingsWidget::UpdateSettings(map::MapWidget* activeMap) | void Level2SettingsWidget::UpdateSettings(map::MapWidget* activeMap) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Dan Paulat
						Dan Paulat