mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 02:00:05 +00:00 
			
		
		
		
	Merge pull request #465 from AdenKoperczak/intra-product-category-hotkeys
Add hotkeys for switching between products in a category
This commit is contained in:
		
						commit
						7b6e0478d4
					
				
					 6 changed files with 80 additions and 3 deletions
				
			
		|  | @ -8,6 +8,7 @@ Checks: | |||
|   - 'performance-*' | ||||
|   - '-bugprone-easily-swappable-parameters' | ||||
|   - '-cppcoreguidelines-pro-type-reinterpret-cast' | ||||
|   - '-cppcoreguidelines-avoid-do-while' | ||||
|   - '-misc-include-cleaner' | ||||
|   - '-misc-non-private-member-variables-in-classes' | ||||
|   - '-misc-use-anonymous-namespace' | ||||
|  |  | |||
|  | @ -25,6 +25,12 @@ static const std::unordered_map<types::Hotkey, QKeySequence> kDefaultHotkeys_ { | |||
|    {types::Hotkey::MapRotateCounterclockwise, QKeySequence {Qt::Key::Key_Q}}, | ||||
|    {types::Hotkey::MapZoomIn, QKeySequence {Qt::Key::Key_Equal}}, | ||||
|    {types::Hotkey::MapZoomOut, QKeySequence {Qt::Key::Key_Minus}}, | ||||
|    {types::Hotkey::ProductCategoryNext, | ||||
|     QKeySequence {QKeyCombination {Qt::KeyboardModifier::ControlModifier, | ||||
|                                    Qt::Key::Key_BracketRight}}}, | ||||
|    {types::Hotkey::ProductCategoryPrevious, | ||||
|     QKeySequence {QKeyCombination {Qt::KeyboardModifier::ControlModifier, | ||||
|                                    Qt::Key::Key_BracketLeft}}}, | ||||
|    {types::Hotkey::ProductTiltDecrease, | ||||
|     QKeySequence {Qt::Key::Key_BracketLeft}}, | ||||
|    {types::Hotkey::ProductTiltIncrease, | ||||
|  |  | |||
|  | @ -25,6 +25,8 @@ static const std::unordered_map<Hotkey, std::string> hotkeyShortName_ { | |||
|    {Hotkey::MapRotateCounterclockwise, "map_rotate_counterclockwise"}, | ||||
|    {Hotkey::MapZoomIn, "map_zoom_in"}, | ||||
|    {Hotkey::MapZoomOut, "map_zoom_out"}, | ||||
|    {Hotkey::ProductCategoryNext, "product_category_next"}, | ||||
|    {Hotkey::ProductCategoryPrevious, "product_category_last"}, | ||||
|    {Hotkey::ProductTiltDecrease, "product_tilt_decrease"}, | ||||
|    {Hotkey::ProductTiltIncrease, "product_tilt_increase"}, | ||||
|    {Hotkey::SelectLevel2Ref, "select_l2_ref"}, | ||||
|  | @ -65,6 +67,8 @@ static const std::unordered_map<Hotkey, std::string> hotkeyLongName_ { | |||
|    {Hotkey::MapRotateCounterclockwise, "Map Rotate Counterclockwise"}, | ||||
|    {Hotkey::MapZoomIn, "Map Zoom In"}, | ||||
|    {Hotkey::MapZoomOut, "Map Zoom Out"}, | ||||
|    {Hotkey::ProductCategoryNext, "Next Product in Category"}, | ||||
|    {Hotkey::ProductCategoryPrevious, "Previous Product in Category"}, | ||||
|    {Hotkey::ProductTiltDecrease, "Product Tilt Decrease"}, | ||||
|    {Hotkey::ProductTiltIncrease, "Product Tilt Increase"}, | ||||
|    {Hotkey::SelectLevel2Ref, "Select L2 REF"}, | ||||
|  |  | |||
|  | @ -25,6 +25,8 @@ enum class Hotkey | |||
|    MapRotateCounterclockwise, | ||||
|    MapZoomIn, | ||||
|    MapZoomOut, | ||||
|    ProductCategoryPrevious, | ||||
|    ProductCategoryNext, | ||||
|    ProductTiltDecrease, | ||||
|    ProductTiltIncrease, | ||||
|    SelectLevel2Ref, | ||||
|  |  | |||
|  | @ -216,7 +216,9 @@ void Level3ProductsWidgetImpl::HandleHotkeyPressed(types::Hotkey hotkey, | |||
| 
 | ||||
|    if (productCategoryIt == kHotkeyProductCategoryMap_.cend() && | ||||
|        hotkey != types::Hotkey::ProductTiltDecrease && | ||||
|        hotkey != types::Hotkey::ProductTiltIncrease) | ||||
|        hotkey != types::Hotkey::ProductTiltIncrease && | ||||
|        hotkey != types::Hotkey::ProductCategoryNext && | ||||
|        hotkey != types::Hotkey::ProductCategoryPrevious) | ||||
|    { | ||||
|       // Not handling this hotkey
 | ||||
|       return; | ||||
|  | @ -251,7 +253,69 @@ void Level3ProductsWidgetImpl::HandleHotkeyPressed(types::Hotkey hotkey, | |||
|       return; | ||||
|    } | ||||
| 
 | ||||
|    std::shared_lock lock {awipsProductMutex_}; | ||||
|    if (hotkey == types::Hotkey::ProductCategoryNext || | ||||
|        hotkey == types::Hotkey::ProductCategoryPrevious) | ||||
|    { | ||||
|       const std::shared_lock lock1 {categoryMapMutex_}; | ||||
|       const std::shared_lock lock2 {awipsProductMutex_}; | ||||
| 
 | ||||
|       const common::Level3ProductCategory category = | ||||
|          common::GetLevel3CategoryByProduct(product); | ||||
|       auto productsIt = categoryMap_.find(category); | ||||
|       if (productsIt == categoryMap_.cend()) | ||||
|       { | ||||
|          logger_->error("Could not find the current category in category map"); | ||||
|          return; | ||||
|       } | ||||
|       auto        availableProducts = productsIt->second; | ||||
|       const auto& products = common::GetLevel3ProductsByCategory(category); | ||||
| 
 | ||||
|       auto productIt = std::find(products.begin(), products.end(), product); | ||||
|       if (productIt == products.end()) | ||||
|       { | ||||
|          logger_->error("Could not find product in category"); | ||||
|          return; | ||||
|       } | ||||
| 
 | ||||
|       if (hotkey == types::Hotkey::ProductCategoryNext) | ||||
|       { | ||||
|          do | ||||
|          { | ||||
|             productIt = std::next(productIt); | ||||
|             if (productIt == products.cend()) | ||||
|             { | ||||
|                logger_->info("Cannot go past the last product"); | ||||
|                return; | ||||
|             } | ||||
|          } while (!availableProducts.contains(*productIt)); | ||||
|       } | ||||
|       else | ||||
|       { | ||||
|          do | ||||
|          { | ||||
|             if (productIt == products.begin()) | ||||
|             { | ||||
|                logger_->info("Cannot go past the first product"); | ||||
|                return; | ||||
|             } | ||||
|             productIt = std::prev(productIt); | ||||
|          } while (!availableProducts.contains(*productIt)); | ||||
|       } | ||||
| 
 | ||||
|       auto productTiltsIt = productTiltMap_.find(*productIt); | ||||
|       if (productTiltsIt == productTiltMap_.cend()) | ||||
|       { | ||||
|          logger_->error("Could not find product tilt map: {}", | ||||
|                         common::GetLevel3ProductDescription(product)); | ||||
|          return; | ||||
|       } | ||||
| 
 | ||||
|       // Select the new tilt
 | ||||
|       productTiltsIt->second.at(0)->trigger(); | ||||
|       return; | ||||
|    } | ||||
| 
 | ||||
|    const std::shared_lock lock {awipsProductMutex_}; | ||||
| 
 | ||||
|    // Find the current product tilt
 | ||||
|    auto productTiltsIt = productTiltMap_.find(product); | ||||
|  |  | |||
|  | @ -1 +1 @@ | |||
| Subproject commit 6115c15987fd75dd019db995e6bdc07a05b83dcc | ||||
| Subproject commit c68bee74549963e9a02e0fa998efad0f10f8256b | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Dan Paulat
						Dan Paulat