aboutsummaryrefslogtreecommitdiff
path: root/src/theme_builder/components/conditions/ConditionEditor.cpp
blob: 8ffd33a5adf645eabf74bd86a662c1fbba03d841 (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
#include "ConditionEditor.h"
#include "CheckedConditionEditor.h"
#include "ClickStateConditionEditor.h"
#include "CompoundConditionEditor.h"
#include "FocusConditionEditor.h"
#include "NoConditionEditor.h"
#include "cru/common/Exception.h"
#include "cru/ui/controls/FlexLayout.h"

namespace cru::theme_builder::components::conditions {
ConditionEditor::ConditionEditor() {
  container_.SetFlexDirection(ui::controls::FlexDirection::Vertical);
  container_.AddChild(&label_);
}

ConditionEditor::~ConditionEditor() { container_.RemoveFromParent(); }

std::unique_ptr<ConditionEditor> CreateConditionEditor(
    ui::style::Condition* condition) {
  if (auto and_condition = dynamic_cast<ui::style::AndCondition*>(condition)) {
    auto result = std::make_unique<AndConditionEditor>();
    result->SetValue(and_condition);
    return result;
  } else if (auto or_condition =
                 dynamic_cast<ui::style::OrCondition*>(condition)) {
    auto result = std::make_unique<OrConditionEditor>();
    result->SetValue(or_condition);
    return result;
  } else if (auto no_condition =
                 dynamic_cast<ui::style::NoCondition*>(condition)) {
    auto result = std::make_unique<NoConditionEditor>();
    return result;
  } else if (auto click_state_condition =
                 dynamic_cast<ui::style::ClickStateCondition*>(condition)) {
    auto result = std::make_unique<ClickStateConditionEditor>();
    result->SetValue(click_state_condition);
    return result;
  } else if (auto focus_condition =
                 dynamic_cast<ui::style::FocusCondition*>(condition)) {
    auto result = std::make_unique<FocusConditionEditor>();
    result->SetValue(focus_condition);
    return result;
  } else if (auto checked_condition =
                 dynamic_cast<ui::style::CheckedCondition*>(condition)) {
    auto result = std::make_unique<CheckedConditionEditor>();
    result->SetValue(checked_condition);
    return result;
  } else {
    throw Exception(u"Unknown condition type");
  }
}
}  // namespace cru::theme_builder::components::conditions