Add level 2 and level 3 product selections to hotkeys

Closes #215
This commit is contained in:
Dan Paulat 2024-05-24 02:02:46 -05:00
parent 8f4325f61a
commit f33d8c0aba
6 changed files with 151 additions and 2 deletions

View file

@ -32,6 +32,24 @@ static const std::unordered_map<types::Hotkey, QKeySequence> kDefaultHotkeys_ {
QKeySequence {Qt::Key::Key_BracketLeft}}, QKeySequence {Qt::Key::Key_BracketLeft}},
{types::Hotkey::ProductTiltIncrease, {types::Hotkey::ProductTiltIncrease,
QKeySequence {Qt::Key::Key_BracketRight}}, QKeySequence {Qt::Key::Key_BracketRight}},
{types::Hotkey::SelectLevel2Ref, QKeySequence {Qt::Key::Key_F1}},
{types::Hotkey::SelectLevel2Vel, QKeySequence {Qt::Key::Key_F2}},
{types::Hotkey::SelectLevel2SW, QKeySequence {Qt::Key::Key_F3}},
{types::Hotkey::SelectLevel2ZDR, QKeySequence {Qt::Key::Key_F4}},
{types::Hotkey::SelectLevel2Phi, QKeySequence {Qt::Key::Key_F5}},
{types::Hotkey::SelectLevel2Rho, QKeySequence {Qt::Key::Key_F6}},
{types::Hotkey::SelectLevel2CFP, QKeySequence {Qt::Key::Key_F7}},
{types::Hotkey::SelectLevel3Ref, QKeySequence {Qt::Key::Key_QuoteLeft}},
{types::Hotkey::SelectLevel3Vel, QKeySequence {Qt::Key::Key_1}},
{types::Hotkey::SelectLevel3SRM, QKeySequence {Qt::Key::Key_2}},
{types::Hotkey::SelectLevel3SW, QKeySequence {Qt::Key::Key_3}},
{types::Hotkey::SelectLevel3ZDR, QKeySequence {Qt::Key::Key_4}},
{types::Hotkey::SelectLevel3KDP, QKeySequence {Qt::Key::Key_5}},
{types::Hotkey::SelectLevel3CC, QKeySequence {Qt::Key::Key_6}},
{types::Hotkey::SelectLevel3VIL, QKeySequence {Qt::Key::Key_7}},
{types::Hotkey::SelectLevel3ET, QKeySequence {Qt::Key::Key_8}},
{types::Hotkey::SelectLevel3HC, QKeySequence {Qt::Key::Key_9}},
{types::Hotkey::SelectLevel3Acc, QKeySequence {Qt::Key::Key_0}},
{types::Hotkey::TimelineStepBegin, {types::Hotkey::TimelineStepBegin,
QKeySequence {QKeyCombination {Qt::KeyboardModifier::ControlModifier, QKeySequence {QKeyCombination {Qt::KeyboardModifier::ControlModifier,
Qt::Key::Key_Left}}}, Qt::Key::Key_Left}}},

View file

@ -26,6 +26,24 @@ static const std::unordered_map<Hotkey, std::string> hotkeyShortName_ {
{Hotkey::MapZoomOut, "map_zoom_out"}, {Hotkey::MapZoomOut, "map_zoom_out"},
{Hotkey::ProductTiltDecrease, "product_tilt_decrease"}, {Hotkey::ProductTiltDecrease, "product_tilt_decrease"},
{Hotkey::ProductTiltIncrease, "product_tilt_increase"}, {Hotkey::ProductTiltIncrease, "product_tilt_increase"},
{Hotkey::SelectLevel2Ref, "select_l2_ref"},
{Hotkey::SelectLevel2Vel, "select_l2_vel"},
{Hotkey::SelectLevel2SW, "select_l2_sw"},
{Hotkey::SelectLevel2ZDR, "select_l2_zdr"},
{Hotkey::SelectLevel2Phi, "select_l2_phi"},
{Hotkey::SelectLevel2Rho, "select_l2_rho"},
{Hotkey::SelectLevel2CFP, "select_l2_cfp"},
{Hotkey::SelectLevel3Ref, "select_l3_ref"},
{Hotkey::SelectLevel3Vel, "select_l3_vel"},
{Hotkey::SelectLevel3SRM, "select_l3_srm"},
{Hotkey::SelectLevel3SW, "select_l3_sw"},
{Hotkey::SelectLevel3ZDR, "select_l3_zdr"},
{Hotkey::SelectLevel3KDP, "select_l3_kdp"},
{Hotkey::SelectLevel3CC, "select_l3_cc"},
{Hotkey::SelectLevel3VIL, "select_l3_vil"},
{Hotkey::SelectLevel3ET, "select_l3_et"},
{Hotkey::SelectLevel3HC, "select_l3_hc"},
{Hotkey::SelectLevel3Acc, "select_l3_acc"},
{Hotkey::TimelineStepBegin, "timeline_step_begin"}, {Hotkey::TimelineStepBegin, "timeline_step_begin"},
{Hotkey::TimelineStepBack, "timeline_step_back"}, {Hotkey::TimelineStepBack, "timeline_step_back"},
{Hotkey::TimelinePlay, "timeline_play"}, {Hotkey::TimelinePlay, "timeline_play"},
@ -47,6 +65,24 @@ static const std::unordered_map<Hotkey, std::string> hotkeyLongName_ {
{Hotkey::MapZoomOut, "Map Zoom Out"}, {Hotkey::MapZoomOut, "Map Zoom Out"},
{Hotkey::ProductTiltDecrease, "Product Tilt Decrease"}, {Hotkey::ProductTiltDecrease, "Product Tilt Decrease"},
{Hotkey::ProductTiltIncrease, "Product Tilt Increase"}, {Hotkey::ProductTiltIncrease, "Product Tilt Increase"},
{Hotkey::SelectLevel2Ref, "Select L2 REF"},
{Hotkey::SelectLevel2Vel, "Select L2 VEL"},
{Hotkey::SelectLevel2SW, "Select L2 SW"},
{Hotkey::SelectLevel2ZDR, "Select L2 ZDR"},
{Hotkey::SelectLevel2Phi, "Select L2 PHI"},
{Hotkey::SelectLevel2Rho, "Select L2 RHO"},
{Hotkey::SelectLevel2CFP, "Select L2 CFP"},
{Hotkey::SelectLevel3Ref, "Select L3 REF"},
{Hotkey::SelectLevel3Vel, "Select L3 VEL"},
{Hotkey::SelectLevel3SRM, "Select L3 SRM"},
{Hotkey::SelectLevel3SW, "Select L3 SW"},
{Hotkey::SelectLevel3ZDR, "Select L3 ZDR"},
{Hotkey::SelectLevel3KDP, "Select L3 KDP"},
{Hotkey::SelectLevel3CC, "Select L3 CC"},
{Hotkey::SelectLevel3VIL, "Select L3 VIL"},
{Hotkey::SelectLevel3ET, "Select L3 ET"},
{Hotkey::SelectLevel3HC, "Select L3 HC"},
{Hotkey::SelectLevel3Acc, "Select L3 ACC"},
{Hotkey::TimelineStepBegin, "Timeline Step Begin"}, {Hotkey::TimelineStepBegin, "Timeline Step Begin"},
{Hotkey::TimelineStepBack, "Timeline Step Back"}, {Hotkey::TimelineStepBack, "Timeline Step Back"},
{Hotkey::TimelinePlay, "Timeline Play/Pause"}, {Hotkey::TimelinePlay, "Timeline Play/Pause"},

View file

@ -26,6 +26,24 @@ enum class Hotkey
MapZoomOut, MapZoomOut,
ProductTiltDecrease, ProductTiltDecrease,
ProductTiltIncrease, ProductTiltIncrease,
SelectLevel2Ref,
SelectLevel2Vel,
SelectLevel2SW,
SelectLevel2ZDR,
SelectLevel2Phi,
SelectLevel2Rho,
SelectLevel2CFP,
SelectLevel3Ref,
SelectLevel3Vel,
SelectLevel3SRM,
SelectLevel3SW,
SelectLevel3ZDR,
SelectLevel3KDP,
SelectLevel3CC,
SelectLevel3VIL,
SelectLevel3ET,
SelectLevel3HC,
SelectLevel3Acc,
TimelineStepBegin, TimelineStepBegin,
TimelineStepBack, TimelineStepBack,
TimelinePlay, TimelinePlay,

View file

@ -1,5 +1,6 @@
#include <scwx/qt/ui/level2_products_widget.hpp> #include <scwx/qt/ui/level2_products_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/util/logger.hpp> #include <scwx/util/logger.hpp>
#include <execution> #include <execution>
@ -16,6 +17,20 @@ namespace ui
static const std::string logPrefix_ = "scwx::qt::ui::level2_products_widget"; static const std::string logPrefix_ = "scwx::qt::ui::level2_products_widget";
static const auto logger_ = util::Logger::Create(logPrefix_); static const auto logger_ = util::Logger::Create(logPrefix_);
static const std::unordered_map<types::Hotkey, common::Level2Product>
kHotkeyProductMap_ {
{types::Hotkey::SelectLevel2Ref, common::Level2Product::Reflectivity},
{types::Hotkey::SelectLevel2Vel, common::Level2Product::Velocity},
{types::Hotkey::SelectLevel2SW, common::Level2Product::SpectrumWidth},
{types::Hotkey::SelectLevel2ZDR,
common::Level2Product::DifferentialReflectivity},
{types::Hotkey::SelectLevel2Phi,
common::Level2Product::DifferentialPhase},
{types::Hotkey::SelectLevel2Rho,
common::Level2Product::CorrelationCoefficient},
{types::Hotkey::SelectLevel2CFP,
common::Level2Product::ClutterFilterPowerRemoved}};
class Level2ProductsWidgetImpl : public QObject class Level2ProductsWidgetImpl : public QObject
{ {
Q_OBJECT Q_OBJECT
@ -40,10 +55,16 @@ public:
&QToolButton::clicked, &QToolButton::clicked,
this, this,
[=, this]() { SelectProduct(product); }); [=, this]() { SelectProduct(product); });
QObject::connect(hotkeyManager_.get(),
&manager::HotkeyManager::HotkeyPressed,
this,
&Level2ProductsWidgetImpl::HandleHotkeyPressed);
} }
} }
~Level2ProductsWidgetImpl() = default; ~Level2ProductsWidgetImpl() = default;
void HandleHotkeyPressed(types::Hotkey hotkey, bool isAutoRepeat);
void NormalizeProductButtons(); void NormalizeProductButtons();
void SelectProduct(common::Level2Product product); void SelectProduct(common::Level2Product product);
void UpdateProductSelection(common::Level2Product product); void UpdateProductSelection(common::Level2Product product);
@ -51,6 +72,9 @@ public:
Level2ProductsWidget* self_; Level2ProductsWidget* self_;
QLayout* layout_; QLayout* layout_;
std::list<QToolButton*> productButtons_; std::list<QToolButton*> productButtons_;
std::shared_ptr<manager::HotkeyManager> hotkeyManager_ {
manager::HotkeyManager::Instance()};
}; };
Level2ProductsWidget::Level2ProductsWidget(QWidget* parent) : Level2ProductsWidget::Level2ProductsWidget(QWidget* parent) :
@ -67,6 +91,25 @@ void Level2ProductsWidget::showEvent(QShowEvent* event)
p->NormalizeProductButtons(); p->NormalizeProductButtons();
} }
void Level2ProductsWidgetImpl::HandleHotkeyPressed(types::Hotkey hotkey,
bool isAutoRepeat)
{
auto productIt = kHotkeyProductMap_.find(hotkey);
if (productIt == kHotkeyProductMap_.cend())
{
// Not handling this hotkey
return;
}
logger_->trace("Handling hotkey: {}, repeat: {}",
types::GetHotkeyShortName(hotkey),
isAutoRepeat);
// Select product category hotkey
SelectProduct(productIt->second);
}
void Level2ProductsWidgetImpl::NormalizeProductButtons() void Level2ProductsWidgetImpl::NormalizeProductButtons()
{ {
int level2MaxWidth = 0; int level2MaxWidth = 0;

View file

@ -7,6 +7,7 @@
#include <execution> #include <execution>
#include <shared_mutex> #include <shared_mutex>
#include <unordered_map>
#include <QCheckBox> #include <QCheckBox>
#include <QMenu> #include <QMenu>
@ -23,6 +24,29 @@ namespace ui
static const std::string logPrefix_ = "scwx::qt::ui::level3_products_widget"; static const std::string logPrefix_ = "scwx::qt::ui::level3_products_widget";
static const auto logger_ = util::Logger::Create(logPrefix_); static const auto logger_ = util::Logger::Create(logPrefix_);
static const std::unordered_map<types::Hotkey, common::Level3ProductCategory>
kHotkeyProductCategoryMap_ {
{types::Hotkey::SelectLevel3Ref,
common::Level3ProductCategory::Reflectivity},
{types::Hotkey::SelectLevel3Vel, common::Level3ProductCategory::Velocity},
{types::Hotkey::SelectLevel3SRM,
common::Level3ProductCategory::StormRelativeVelocity},
{types::Hotkey::SelectLevel3SW,
common::Level3ProductCategory::SpectrumWidth},
{types::Hotkey::SelectLevel3ZDR,
common::Level3ProductCategory::DifferentialReflectivity},
{types::Hotkey::SelectLevel3KDP,
common::Level3ProductCategory::SpecificDifferentialPhase},
{types::Hotkey::SelectLevel3CC,
common::Level3ProductCategory::CorrelationCoefficient},
{types::Hotkey::SelectLevel3VIL,
common::Level3ProductCategory::VerticallyIntegratedLiquid},
{types::Hotkey::SelectLevel3ET, common::Level3ProductCategory::EchoTops},
{types::Hotkey::SelectLevel3HC,
common::Level3ProductCategory::HydrometeorClassification},
{types::Hotkey::SelectLevel3Acc,
common::Level3ProductCategory::PrecipitationAccumulation}};
class Level3ProductsWidgetImpl : public QObject class Level3ProductsWidgetImpl : public QObject
{ {
Q_OBJECT Q_OBJECT
@ -183,7 +207,10 @@ void Level3ProductsWidget::showEvent(QShowEvent* event)
void Level3ProductsWidgetImpl::HandleHotkeyPressed(types::Hotkey hotkey, void Level3ProductsWidgetImpl::HandleHotkeyPressed(types::Hotkey hotkey,
bool isAutoRepeat) bool isAutoRepeat)
{ {
if (hotkey != types::Hotkey::ProductTiltDecrease && auto productCategoryIt = kHotkeyProductCategoryMap_.find(hotkey);
if (productCategoryIt == kHotkeyProductCategoryMap_.cend() &&
hotkey != types::Hotkey::ProductTiltDecrease &&
hotkey != types::Hotkey::ProductTiltIncrease) hotkey != types::Hotkey::ProductTiltIncrease)
{ {
// Not handling this hotkey // Not handling this hotkey
@ -194,6 +221,13 @@ void Level3ProductsWidgetImpl::HandleHotkeyPressed(types::Hotkey hotkey,
types::GetHotkeyShortName(hotkey), types::GetHotkeyShortName(hotkey),
isAutoRepeat); isAutoRepeat);
if (productCategoryIt != kHotkeyProductCategoryMap_.cend())
{
// Select product category hotkey
SelectProductCategory(productCategoryIt->second);
return;
}
std::string currentAwipsId = currentAwipsId_; std::string currentAwipsId = currentAwipsId_;
QAction* currentProductTiltAction = currentProductTiltAction_; QAction* currentProductTiltAction = currentProductTiltAction_;

@ -1 +1 @@
Subproject commit 35e3e40d63bc020dfdc50c438c700c368fdf32fc Subproject commit 6fe42c4f776ced46f0f808109d0d773ffc2255e3