mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 06:30: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/flow_layout.hpp> | ||||
| #include <scwx/qt/manager/hotkey_manager.hpp> | ||||
| #include <scwx/common/characters.hpp> | ||||
| #include <scwx/util/logger.hpp> | ||||
| 
 | ||||
| #include <execution> | ||||
| 
 | ||||
|  | @ -16,6 +18,9 @@ namespace qt | |||
| 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 | ||||
| { | ||||
|    Q_OBJECT | ||||
|  | @ -46,9 +51,15 @@ public: | |||
|       settingsLayout->addWidget(declutterCheckBox_); | ||||
| 
 | ||||
|       settingsGroupBox_->setVisible(false); | ||||
| 
 | ||||
|       QObject::connect(hotkeyManager_.get(), | ||||
|                        &manager::HotkeyManager::HotkeyPressed, | ||||
|                        this, | ||||
|                        &Level2SettingsWidgetImpl::HandleHotkeyPressed); | ||||
|    } | ||||
|    ~Level2SettingsWidgetImpl() = default; | ||||
| 
 | ||||
|    void HandleHotkeyPressed(types::Hotkey hotkey, bool isAutoRepeat); | ||||
|    void NormalizeElevationButtons(); | ||||
|    void SelectElevation(float elevation); | ||||
| 
 | ||||
|  | @ -63,6 +74,12 @@ public: | |||
| 
 | ||||
|    QGroupBox* settingsGroupBox_; | ||||
|    QCheckBox* declutterCheckBox_; | ||||
| 
 | ||||
|    float        currentElevation_ {}; | ||||
|    QToolButton* currentElevationButton_ {nullptr}; | ||||
| 
 | ||||
|    std::shared_ptr<manager::HotkeyManager> hotkeyManager_ { | ||||
|       manager::HotkeyManager::Instance()}; | ||||
| }; | ||||
| 
 | ||||
| Level2SettingsWidget::Level2SettingsWidget(QWidget* parent) : | ||||
|  | @ -96,6 +113,71 @@ void Level2SettingsWidget::showEvent(QShowEvent* event) | |||
|    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() | ||||
| { | ||||
|    // 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) + | ||||
|                        common::Characters::DEGREE}; | ||||
| 
 | ||||
|    QToolButton* newElevationButton = nullptr; | ||||
| 
 | ||||
|    std::for_each(p->elevationButtons_.cbegin(), | ||||
|                  p->elevationButtons_.cend(), | ||||
|                  [&](auto& toolButton) | ||||
|                  { | ||||
|                     if (toolButton->text() == buttonText) | ||||
|                     { | ||||
|                        newElevationButton = toolButton; | ||||
|                        toolButton->setCheckable(true); | ||||
|                        toolButton->setChecked(true); | ||||
|                     } | ||||
|  | @ -150,6 +235,9 @@ void Level2SettingsWidget::UpdateElevationSelection(float elevation) | |||
|                        toolButton->setCheckable(false); | ||||
|                     } | ||||
|                  }); | ||||
| 
 | ||||
|    p->currentElevation_       = elevation; | ||||
|    p->currentElevationButton_ = newElevationButton; | ||||
| } | ||||
| 
 | ||||
| void Level2SettingsWidget::UpdateSettings(map::MapWidget* activeMap) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Dan Paulat
						Dan Paulat