Skip to content

Commit a84edd4

Browse files
committed
feat(config): gate save/reset on body adjustment target selection
Disable the save and reset buttons until an adjustment target is selected, since they have nothing to act on otherwise. Allow un-toggling the target buttons so the selection can be cleared back to none, which now also resets the active config target.
1 parent e354c66 commit a84edd4

2 files changed

Lines changed: 28 additions & 10 deletions

File tree

src/config-mode/BodyAdjustmentSubConfigMode.cpp

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ namespace frik
3939
_armsLengthMsg->setVisibility(_configTarget == BodyAdjustmentConfigTarget::BodyArmsLength);
4040
_vrScaleMsg->setVisibility(_configTarget == BodyAdjustmentConfigTarget::VRScale);
4141

42+
// save/reset only make sense once an adjustment target is selected
43+
const bool noTarget = _configTarget == BodyAdjustmentConfigTarget::None;
44+
_saveBtn->setDisabled(noTarget);
45+
_resetBtn->setDisabled(noTarget);
46+
4247
handleAdjustment();
4348
}
4449

@@ -60,35 +65,45 @@ namespace frik
6065
row1Container->addElement(hideHeadBtn);
6166

6267
const auto heightToggleBtn = std::make_shared<UIToggleButton>("ui-config-main\\btn-body-vertical.nif");
63-
heightToggleBtn->setOnToggleHandler([this](UIWidget*, bool) { _configTarget = BodyAdjustmentConfigTarget::BodyHeight; });
68+
heightToggleBtn->setOnToggleHandler(
69+
[this](UIWidget*, const bool enabled) { _configTarget = enabled ? BodyAdjustmentConfigTarget::BodyHeight : BodyAdjustmentConfigTarget::None; });
6470

6571
const auto forwardToggleBtn = std::make_shared<UIToggleButton>("ui-config-main\\btn-body-forward.nif");
66-
forwardToggleBtn->setOnToggleHandler([this](UIWidget*, bool) { _configTarget = BodyAdjustmentConfigTarget::BodyForwardOffset; });
72+
forwardToggleBtn->setOnToggleHandler(
73+
[this](UIWidget*, const bool enabled) { _configTarget = enabled ? BodyAdjustmentConfigTarget::BodyForwardOffset : BodyAdjustmentConfigTarget::None; });
6774

6875
const auto armsLengthToggleBtn = std::make_shared<UIToggleButton>("ui-config-main\\btn-arms-length.nif");
69-
armsLengthToggleBtn->setOnToggleHandler([this](UIWidget*, bool) { _configTarget = BodyAdjustmentConfigTarget::BodyArmsLength; });
76+
armsLengthToggleBtn->setOnToggleHandler(
77+
[this](UIWidget*, const bool enabled) { _configTarget = enabled ? BodyAdjustmentConfigTarget::BodyArmsLength : BodyAdjustmentConfigTarget::None; });
7078

7179
const auto vrScaleToggleBtn = std::make_shared<UIToggleButton>("ui-config-main\\btn-vr-scale.nif");
72-
vrScaleToggleBtn->setOnToggleHandler([this](UIWidget*, bool) { _configTarget = BodyAdjustmentConfigTarget::VRScale; });
80+
vrScaleToggleBtn->setOnToggleHandler(
81+
[this](UIWidget*, const bool enabled) { _configTarget = enabled ? BodyAdjustmentConfigTarget::VRScale : BodyAdjustmentConfigTarget::None; });
7382

7483
_row2Container = std::make_shared<UIToggleGroupContainer>("Row2", UIContainerLayout::HorizontalCenter, 0.3f);
7584
_row2Container->addElement(heightToggleBtn);
7685
_row2Container->addElement(forwardToggleBtn);
7786
_row2Container->addElement(armsLengthToggleBtn);
7887
_row2Container->addElement(vrScaleToggleBtn);
7988

80-
const auto saveBtn = std::make_shared<UIButton>("ui-common\\btn-save.nif");
81-
saveBtn->setOnPressHandler([this](UIWidget*) { saveConfig(); });
89+
// the toggle group disables un-toggling by default; re-enable it so the user can clear the selection back to no target
90+
heightToggleBtn->setUnToggleAllowed(true);
91+
forwardToggleBtn->setUnToggleAllowed(true);
92+
armsLengthToggleBtn->setUnToggleAllowed(true);
93+
vrScaleToggleBtn->setUnToggleAllowed(true);
94+
95+
_saveBtn = std::make_shared<UIButton>("ui-common\\btn-save.nif");
96+
_saveBtn->setOnPressHandler([this](UIWidget*) { saveConfig(); });
8297

83-
const auto resetBtn = std::make_shared<UIButton>("ui-common\\btn-reset.nif");
84-
resetBtn->setOnPressHandler([this](UIWidget*) { resetConfig(); });
98+
_resetBtn = std::make_shared<UIButton>("ui-common\\btn-reset.nif");
99+
_resetBtn->setOnPressHandler([this](UIWidget*) { resetConfig(); });
85100

86101
const auto exitBtn = std::make_shared<UIButton>("ui-common\\btn-back.nif");
87102
exitBtn->setOnPressHandler([this](UIWidget*) { closeConfig(); });
88103

89104
const auto row3Container = std::make_shared<UIContainer>("Row3", UIContainerLayout::HorizontalCenter, 0.3f);
90-
row3Container->addElement(saveBtn);
91-
row3Container->addElement(resetBtn);
105+
row3Container->addElement(_saveBtn);
106+
row3Container->addElement(_resetBtn);
92107
row3Container->addElement(exitBtn);
93108

94109
_noneMsg = std::make_shared<UIWidget>("ui-config-main\\msg-node-selected.nif");

src/config-mode/BodyAdjustmentSubConfigMode.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#pragma once
22

3+
#include "vrui/UIButton.h"
34
#include "vrui/UIContainer.h"
45
#include "vrui/UIToggleGroupContainer.h"
56

@@ -53,6 +54,8 @@ namespace frik
5354
std::shared_ptr<vrui::UIContainer> _configUI;
5455

5556
std::shared_ptr<vrui::UIToggleGroupContainer> _row2Container;
57+
std::shared_ptr<vrui::UIButton> _saveBtn;
58+
std::shared_ptr<vrui::UIButton> _resetBtn;
5659
std::shared_ptr<vrui::UIWidget> _noneMsg;
5760
std::shared_ptr<vrui::UIWidget> _heightMsg;
5861
std::shared_ptr<vrui::UIWidget> _forwardMsg;

0 commit comments

Comments
 (0)