aboutsummaryrefslogtreecommitdiff
path: root/src/theme_builder/components/conditions/ClickStateConditionEditor.cpp
blob: a9170cc5079413de0a78b5fd86aecc9334b30239 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include "ClickStateConditionEditor.h"
#include "cru/common/ClonablePtr.h"
#include "cru/ui/helper/ClickDetector.h"
#include "cru/ui/style/Condition.h"

namespace cru::theme_builder::components::conditions {
using ui::helper::ClickState;
namespace {
const std::vector<String> kClickStates{
    u"None",
    u"Hover",
    u"Press",
    u"PressInactive",
};

Index ConvertClickStateToIndex(ClickState click_state) {
  switch (click_state) {
    case ClickState::None:
      return 0;
    case ClickState::Hover:
      return 1;
    case ClickState::Press:
      return 2;
    case ClickState::PressInactive:
      return 3;
  }
  return -1;
}

ClickState ConvertIndexToClickState(Index index) {
  switch (index) {
    case 0:
      return ClickState::None;
    case 1:
      return ClickState::Hover;
    case 2:
      return ClickState::Press;
    case 3:
      return ClickState::PressInactive;
  }
  return ClickState::None;
}
}  // namespace

ClickStateConditionEditor::ClickStateConditionEditor() {
  GetContainer()->AddChild(click_state_select_.GetRootControl());

  click_state_select_.SetItems(kClickStates);
  click_state_select_.SetSelectedIndex(0, false);

  click_state_select_.ChangeEvent()->AddSpyOnlyHandler(
      [this] { change_event_.Raise(nullptr); });
}

ClickStateConditionEditor::~ClickStateConditionEditor() {}

ClonablePtr<ui::style::ClickStateCondition>
ClickStateConditionEditor::GetValue() const {
  return ui::style::ClickStateCondition::Create(
      ConvertIndexToClickState(click_state_select_.GetSelectedIndex()));
}

void ClickStateConditionEditor::SetValue(
    ClonablePtr<ui::style::ClickStateCondition> value, bool trigger_change) {
  click_state_select_.SetSelectedIndex(
      ConvertClickStateToIndex(value->GetClickState()), trigger_change);
}
}  // namespace cru::theme_builder::components::conditions