36 GUIElementController::GUIElementController(
GUINode* node)
40 this->
disabled = required_dynamic_cast<GUIElementNode*>(
node)->isDisabled();
54 auto& nodeConditions = required_dynamic_cast<GUIElementNode*>(
node)->getActiveConditions();
78 auto elementNode = required_dynamic_cast<GUIElementNode*>(this->node);
80 if (event->
getType() == GUIMouseEvent::MOUSEEVENT_PRESSED) {
83 if (elementNode->isFocusable() ==
true) {
88 event->setProcessed(
true);
90 if (event->
getType() == GUIMouseEvent::MOUSEEVENT_DRAGGED) {
98 if (event->
getType() == GUIMouseEvent::MOUSEEVENT_RELEASED) {
101 auto now = Time::getCurrentMillis();
104 auto onMouseDoubleClickExpression = elementNode->getOnMouseDoubleClickExpression();
105 if (onMouseDoubleClickExpression.size() > 0) {
108 auto onMouseClickExpression = elementNode->getOnMouseClickExpression();
114 auto onMouseClickExpression = elementNode->getOnMouseClickExpression();
120 auto onMouseDoubleClickExpression = elementNode->getOnMouseDoubleClickExpression();
121 if (onMouseDoubleClickExpression.size() > 0) {
124 auto onMouseClickExpression = elementNode->getOnMouseClickExpression();
132 event->setProcessed(
true);
136 if (event->
getType() == GUIMouseEvent::MOUSEEVENT_PRESSED) {
139 event->setProcessed(
true);
143 event->setProcessed(
true);
145 if (event->
getType() == GUIMouseEvent::MOUSEEVENT_MOVED) {
146 if (elementNode->isEventBelongingToNode(event) ==
true) {
147 if (elementNode->getOptionValue(
"mouse-cursor") ==
"hand") Application::setMouseCursor(
MOUSE_CURSOR_HAND);
151 auto onMouseOverExpression = elementNode->getOnMouseOverExpression();
154 if (elementNode->getOptionValue(
"mouse-cursor") ==
"hand") Application::setMouseCursor(
MOUSE_CURSOR_NORMAL);
156 auto onMouseOutExpression = elementNode->getOnMouseOutExpression();
168 case GUIKeyboardEvent::KEYCODE_SPACE: {
169 event->setProcessed(
true);
170 if (event->
getType() == GUIKeyboardEvent::KEYBOARDEVENT_KEY_PRESSED) {
171 auto onMouseClickExpression = required_dynamic_cast<GUIElementNode*>(
node)->getOnMouseClickExpression();
187 auto onInitializeExpression = required_dynamic_cast<GUIElementNode*>(
node)->getOnInitializeExpression();
195 auto now = Time::getCurrentMillis();
198 auto onMouseClickExpression = required_dynamic_cast<GUIElementNode*>(
node)->getOnMouseClickExpression();
#define MOUSE_CURSOR_NORMAL
#define MOUSE_CURSOR_HAND
Application base class, please make sure to allocate application on heap to have correct application ...
void addMouseOutCandidateNode(GUINode *node)
Add node that is a possible mouse out candidate as it received a mouse over.
void setFoccussedNode(GUIElementNode *newFoccussedNode)
Set focussed node.
int32_t getKeyCode() const
GUIKeyboardEventType getType() const
GUIMouseEventType getType() const
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.
static STATIC_DLL_IMPEXT string CONDITION_DISABLED
static STATIC_DLL_IMPEXT string CONDITION_ENABLED
void setDisabled(bool disabled) override
Set disabled.
const MutableString & getValue() override
bool isDisabled() override
void onSubTreeChange() override
On sub tree change.
static constexpr int64_t TIME_DOUBLECLICK
static STATIC_DLL_IMPEXT string CONDITION_ONMOUSEOVER
static STATIC_DLL_IMPEXT string CONDITION_CLICK
static void executeExpression(GUIScreenNode *screenNode, const string &expression)
Execute expression.
GUI element node conditions.
GUI node controller base class.
bool isEventBelongingToNode(GUIMouseEvent *event, Vector2 &nodeCoordinate)
Is event belonging to node.
GUIScreenNode * getScreenNode()
GUI screen node that represents a screen that can be rendered via GUI system.
void forwardContextMenuRequest(GUIElementNode *node, int mouseX, int mouseY)
Forward context menu request event.
void forwardAction(GUIActionListenerType type, GUIElementNode *node)
Forward action event.
void forwardMouseOver(GUIElementNode *node)
Forward mouse over event.
void addTickNode(GUINode *node)
Add tick node, registered node controllers will have a tick once per frame.
void forwardDragRequest(GUIElementNode *node, int mouseX, int mouseY)
Forward drag request event.
Mutable utf8 aware string class.