TDME2  1.9.200
GUIKnobController.cpp
Go to the documentation of this file.
2 
3 #include <array>
4 #include <string>
5 
6 #include <tdme/tdme.h>
12 #include <tdme/gui/nodes/GUINode.h>
14 #include <tdme/gui/GUI.h>
15 #include <tdme/math/Math.h>
16 #include <tdme/math/Matrix3x3.h>
17 #include <tdme/utilities/Console.h>
18 #include <tdme/utilities/Float.h>
20 #include <tdme/utilities/Time.h>
21 
22 using std::array;
23 using std::to_string;
24 
32 using tdme::gui::GUI;
33 using tdme::math::Math;
39 
41 
42 GUIKnobController::GUIKnobController(GUINode* node): GUIElementController(node)
43 {
44 }
45 
47  return false;
48 }
49 
50 void GUIKnobController::setDisabled(bool disabled) {
51 
52 }
53 
55  knobNode = this->node->getScreenNode()->getNodeById(this->node->getId() + "_knob");
56  setValue(MutableString(required_dynamic_cast<GUIElementNode*>(node)->getValue()));
57 
58  //
59  GUIElementController::initialize();
60 }
61 
63  GUIElementController::dispose();
64 }
65 
67  updateKnob();
68 }
69 
71  GUIElementController::handleMouseEvent(node, event);
72  if (node == this->node &&
73  event->getType() == GUIMouseEvent::MOUSEEVENT_RELEASED == true) {
74  this->node->getScreenNode()->getGUI()->setFoccussedNode(required_dynamic_cast<GUIElementNode*>(this->node));
75  event->setProcessed(true);
76  } else
77  if (node == this->node && node->isEventBelongingToNode(event) == true &&
78  event->getType() == GUIMouseEvent::MOUSEEVENT_PRESSED == true &&
79  event->getButton() == MOUSE_BUTTON_LEFT) {
80  mouseLastX = event->getX();
81  event->setProcessed(true);
82  } else
83  if (event->getType() == GUIMouseEvent::MOUSEEVENT_DRAGGED == true &&
84  event->getButton() == MOUSE_BUTTON_LEFT) {
85  valueFloat = Math::clamp(
86  static_cast<float>(valueFloat + ((event->getX() - mouseLastX) / 75.0f)) ,
87  0.0f,
88  1.0f
89  );
90  updateKnob();
91  node->getScreenNode()->forwardChange(required_dynamic_cast<GUIElementNode*>(this->node));
92  mouseLastX = event->getX();
93  event->setProcessed(true);
94  }
95 }
96 
98  GUIElementController::handleKeyboardEvent(event);
99  switch (event->getKeyCode()) {
100  case GUIKeyboardEvent::KEYCODE_LEFT: {
101  event->setProcessed(true);
102  if (event->getType() == GUIKeyboardEvent::KEYBOARDEVENT_KEY_PRESSED) {
103  this->valueFloat = Math::clamp(valueFloat - 0.1f, 0.0f, 1.0f);
104  updateKnob();
105  node->getScreenNode()->forwardChange(required_dynamic_cast< GUIElementNode* >(this->node));
106  }
107  }
108  break;
109  case GUIKeyboardEvent::KEYCODE_RIGHT: {
110  event->setProcessed(true);
111  if (event->getType() == GUIKeyboardEvent::KEYBOARDEVENT_KEY_PRESSED) {
112  this->valueFloat = Math::clamp(valueFloat + 0.1f, 0.0f, 1.0f);
113  updateKnob();
114  node->getScreenNode()->forwardChange(required_dynamic_cast< GUIElementNode* >(this->node));
115  }
116  }
117  break;
118  }
119 }
120 
122  GUIElementController::tick();
123 }
124 
126 }
127 
129 }
130 
132  return true;
133 }
134 
136  return value.set(valueFloat, 4);
137 }
138 
140  this->value.set(value);
141  this->valueFloat = Math::clamp(Float::parse(this->value.getString()), 0.0f, 1.0f);
142  updateKnob();
143 }
144 
146  required_dynamic_cast<GUIImageNode*>(knobNode)->setTextureMatrix(Matrix3x3::rotateAroundTextureCenter((-valueFloat * (360.0f - 60.0f)) - 210.f));
147 }
#define MOUSE_BUTTON_LEFT
GUI module class.
Definition: GUI.h:64
void setFoccussedNode(GUIElementNode *newFoccussedNode)
Set focussed node.
Definition: GUI.cpp:267
void onFocusGained() override
On focus gained.
void dispose() override
Dispose controller.
void postLayout() override
Post layout event.
void initialize() override
Initialize controller after element has been created.
void handleKeyboardEvent(GUIKeyboardEvent *event) override
Handle keyboard event.
void onFocusLost() override
On focus lost.
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.
void setDisabled(bool disabled) override
Set disabled.
const MutableString & getValue() override
GUIKeyboardEventType getType() const
GUIMouseEventType getType() const
Definition: GUIMouseEvent.h:78
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.
Standard math functions.
Definition: Math.h:19
Matrix3x3 class representing matrix3x3 mathematical structure and operations for 2d space.
Definition: Matrix3x3.h:20
Console class.
Definition: Console.h:29
Float class.
Definition: Float.h:27
Mutable utf8 aware string class.
Definition: MutableString.h:23
const string & getString() const
MutableString & set(char c)
Set character.
Time utility class.
Definition: Time.h:20