diff --git a/scwx-qt/source/scwx/qt/settings/settings_interface.cpp b/scwx-qt/source/scwx/qt/settings/settings_interface.cpp index a20e7dfa..2bf38e80 100644 --- a/scwx-qt/source/scwx/qt/settings/settings_interface.cpp +++ b/scwx-qt/source/scwx/qt/settings/settings_interface.cpp @@ -2,6 +2,7 @@ #include #include +#include #include #include @@ -155,7 +156,27 @@ void SettingsInterface::SetEditWidget(QWidget* widget) return; } - if (QLineEdit* lineEdit = dynamic_cast(widget)) + if (ui::HotkeyEdit* hotkeyEdit = dynamic_cast(widget)) + { + if constexpr (std::is_same_v) + { + QObject::connect(hotkeyEdit, + &ui::HotkeyEdit::KeySequenceChanged, + p->context_.get(), + [this](const QKeySequence& sequence) + { + std::string value { + sequence.toString().toStdString()}; + + // Attempt to stage the value + p->stagedValid_ = p->variable_->StageValue(value); + p->UpdateResetButton(); + + // TODO: Display invalid status + }); + } + } + else if (QLineEdit* lineEdit = dynamic_cast(widget)) { if constexpr (std::is_same_v) { @@ -487,7 +508,16 @@ void SettingsInterface::Impl::UpdateEditWidget() const T value = variable_->GetValue(); const T& currentValue = staged.has_value() ? *staged : value; - if (QLineEdit* lineEdit = dynamic_cast(editWidget_)) + if (ui::HotkeyEdit* hotkeyEdit = dynamic_cast(editWidget_)) + { + if constexpr (std::is_same_v) + { + QKeySequence keySequence = + QKeySequence::fromString(QString::fromStdString(currentValue)); + hotkeyEdit->set_key_sequence(keySequence); + } + } + else if (QLineEdit* lineEdit = dynamic_cast(editWidget_)) { SetWidgetText(lineEdit, currentValue); }