TDME2  1.9.200
GUIRadioButtonController.cpp
Go to the documentation of this file.
2 
3 #include <string>
4 #include <unordered_map>
5 #include <vector>
6 
7 #include <tdme/tdme.h>
12 #include <tdme/gui/nodes/GUINode.h>
15 #include <tdme/gui/GUI.h>
17 
18 using std::string;
19 using std::unordered_map;
20 using std::vector;
21 
30 using tdme::gui::GUI;
32 
33 string GUIRadioButtonController::CONDITION_SELECTED = "selected";
34 string GUIRadioButtonController::CONDITION_UNSELECTED = "unselected";
35 string GUIRadioButtonController::CONDITION_DISABLED = "disabled";
36 string GUIRadioButtonController::CONDITION_ENABLED = "enabled";
37 
38 unordered_map<string, vector<string>> GUIRadioButtonController::radioButtonGroupNodesByName;
39 
40 GUIRadioButtonController::GUIRadioButtonController(GUINode* node)
41  : GUIElementController(node)
42 {
43  this->selected = required_dynamic_cast<GUIElementNode*>(node)->isSelected();
44  this->disabled = required_dynamic_cast<GUIElementNode*>(node)->isDisabled();
46  node->getScreenNode()->getId() +
47  "_radiobuttongroup_" +
48  required_dynamic_cast<GUIElementNode*>(node)->getName()
49  ].push_back(node->getId());
50 }
51 
53 {
54  return selected;
55 }
56 
58 {
59  auto radioButtonGroupNodesIt = radioButtonGroupNodesByName.find(
60  this->node->getScreenNode()->getId() +
61  "_radiobuttongroup_" +
62  required_dynamic_cast<GUIElementNode*>(this->node)->getName()
63  );
64  if (radioButtonGroupNodesIt != radioButtonGroupNodesByName.end()) {
65  for (auto i = 0; i < radioButtonGroupNodesIt->second.size(); i++) {
66  auto radioButtonNode = required_dynamic_cast<GUIElementNode*>(node->getScreenNode()->getNodeById(radioButtonGroupNodesIt->second[i]));
67  auto& nodeConditions = radioButtonNode->getActiveConditions();
68  auto nodeController = required_dynamic_cast<GUIRadioButtonController*>(radioButtonNode->getController());
69  nodeConditions.remove(nodeController->selected == true?CONDITION_SELECTED:CONDITION_UNSELECTED);
70  nodeController->selected = false;
71  nodeConditions.add(nodeController->selected == true?CONDITION_SELECTED:CONDITION_UNSELECTED);
72  }
73  }
74  auto& nodeConditions = required_dynamic_cast<GUIElementNode*>(node)->getActiveConditions();
75  nodeConditions.remove(this->selected == true?CONDITION_SELECTED:CONDITION_UNSELECTED);
76  this->selected = true;
77  nodeConditions.add(this->selected == true?CONDITION_SELECTED:CONDITION_UNSELECTED);
78 }
79 
81 {
82  return disabled;
83 }
84 
86 {
87  auto& nodeConditions = required_dynamic_cast<GUIElementNode*>(node)->getActiveConditions();
88  nodeConditions.remove(this->disabled == true?CONDITION_DISABLED:CONDITION_ENABLED);
89  this->disabled = disabled;
90  nodeConditions.add(this->disabled == true?CONDITION_DISABLED:CONDITION_ENABLED);
91 }
92 
94 {
95  auto& nodeConditions = required_dynamic_cast<GUIElementNode*>(node)->getActiveConditions();
96  nodeConditions.add(this->selected == true?CONDITION_SELECTED:CONDITION_UNSELECTED);
97 
98  //
99  GUIElementController::initialize();
100 }
101 
103 {
104  GUIElementController::dispose();
106  this->node->getScreenNode()->getId() +
107  "_radiobuttongroup_" +
108  this->node->getId()
109  );
110 }
111 
113 {
114 }
115 
117 {
118  GUIElementController::handleMouseEvent(node, event);
119  if (disabled == false && node == this->node && node->isEventBelongingToNode(event) && event->getButton() == MOUSE_BUTTON_LEFT) {
120  event->setProcessed(true);
121  if (event->getType() == GUIMouseEvent::MOUSEEVENT_RELEASED) {
122  select();
123  node->getScreenNode()->getGUI()->setFoccussedNode(required_dynamic_cast<GUIElementNode*>(node));
124  node->getScreenNode()->forwardChange(required_dynamic_cast<GUIElementNode*>(node));
125  }
126  }
127 }
128 
130 {
131  GUIElementController::handleKeyboardEvent(event);
132  if (disabled == false) {
133  switch (event->getKeyCode()) {
134  case GUIKeyboardEvent::KEYCODE_SPACE: {
135  event->setProcessed(true);
136  if (event->getType() == GUIKeyboardEvent::KEYBOARDEVENT_KEY_PRESSED) {
137  select();
138  node->getScreenNode()->forwardChange(required_dynamic_cast<GUIElementNode*>(node));
139  }
140  }
141  break;
142  default: {
143  break;
144  }
145  }
146 
147  }
148 }
149 
151 {
152  GUIElementController::tick();
153 }
154 
156 {
157 }
158 
160 {
161 }
162 
164 {
165  return true;
166 }
167 
169 {
170  value.reset();
171  if (selected == true) {
172  value.append(required_dynamic_cast<GUIElementNode*>(node)->getValue());
173  }
174  return value;
175 }
176 
178 {
179  if (value.equals(required_dynamic_cast<GUIElementNode*>(node)->getValue()) == true) {
180  select();
181  }
182 }
183 
#define MOUSE_BUTTON_LEFT
GUI module class.
Definition: GUI.h:64
void setFoccussedNode(GUIElementNode *newFoccussedNode)
Set focussed node.
Definition: GUI.cpp:267
void initialize() override
Initialize controller after element has been created.
void handleKeyboardEvent(GUIKeyboardEvent *event) override
Handle keyboard event.
void setValue(const MutableString &value) override
Set value.
void handleMouseEvent(GUINode *node, GUIMouseEvent *event) override
Handle mouse event.
void tick() override
Tick method will be executed once per frame.
static STATIC_DLL_IMPEXT string CONDITION_UNSELECTED
void setDisabled(bool disabled) override
Set disabled.
static STATIC_DLL_IMPEXT unordered_map< string, vector< string > > radioButtonGroupNodesByName
GUIKeyboardEventType getType() const
GUIMouseEventType getType() const
Definition: GUIMouseEvent.h:78
GUI element node conditions.
GUI node base class.
Definition: GUINode.h:64
bool isEventBelongingToNode(GUIMouseEvent *event, Vector2 &nodeCoordinate)
Is event belonging to node.
Definition: GUINode.h:604
GUIScreenNode * getScreenNode()
Definition: GUINode.h:325
const string & getId()
Definition: GUINode.h:339
GUI screen node that represents a screen that can be rendered via GUI system.
Definition: GUIScreenNode.h:72
void forwardChange(GUIElementNode *node)
Forward change event.
GUINode * getNodeById(const string &nodeId)
Get GUI node by id.
Mutable utf8 aware string class.
Definition: MutableString.h:23
MutableString & append(char c)
Append character.
bool equals(const string &s2) const
Equals.
MutableString & reset()
Reset.
Definition: MutableString.h:95