MyGUI  3.4.0
MyGUI_Button.cpp
Go to the documentation of this file.
1 /*
2  * This source file is part of MyGUI. For the latest info, see http://mygui.info/
3  * Distributed under the MIT License
4  * (See accompanying file COPYING.MIT or copy at http://opensource.org/licenses/MIT)
5  */
6 
7 #include "MyGUI_Precompiled.h"
8 #include "MyGUI_Button.h"
9 #include "MyGUI_ResourceSkin.h"
10 #include "MyGUI_ImageBox.h"
11 #include "MyGUI_InputManager.h"
12 
13 namespace MyGUI
14 {
15 
17  mIsMousePressed(false),
18  mIsKeyFocus(false),
19  mIsMouseFocus(false),
20  mStateSelected(false),
21  mImage(nullptr),
22  mModeImage(false)
23  {
24  }
25 
27  {
29 
31  assignWidget(mImage, "Image");
32  }
33 
35  {
36  mImage = nullptr;
37 
39  }
40 
42  {
43  _setKeyFocus(true);
44 
45  Base::onKeySetFocus(_old);
46  }
47 
49  {
50  _setKeyFocus(false);
51 
53  }
54 
56  {
57  _setMouseFocus(true);
58 
60  }
61 
63  {
64  _setMouseFocus(false);
65 
67  }
68 
69  void Button::onMouseButtonPressed(int _left, int _top, MouseButton _id)
70  {
71  if (_id == MouseButton::Left)
72  {
73  mIsMousePressed = true;
74  updateButtonState();
75  }
76 
77  Base::onMouseButtonPressed(_left, _top, _id);
78  }
79 
80  void Button::onMouseButtonReleased(int _left, int _top, MouseButton _id)
81  {
82  if (_id == MouseButton::Left)
83  {
84  mIsMousePressed = false;
85  updateButtonState();
86  }
87 
88  Base::onMouseButtonReleased(_left, _top, _id);
89  }
90 
91  void Button::updateButtonState()
92  {
93  if (mStateSelected)
94  {
95  if (!getInheritedEnabled())
96  {
97  if (!_setState("disabled_checked"))
98  _setState("disabled");
99  }
100  else if (mIsMousePressed)
101  {
102  if (!_setState("pushed_checked"))
103  _setState("pushed");
104  }
105  else if (mIsMouseFocus || mIsKeyFocus)
106  {
107  if (!_setState("highlighted_checked"))
108  _setState("pushed");
109  }
110  else
111  _setState("normal_checked");
112  }
113  else
114  {
115  if (!getInheritedEnabled())
116  _setState("disabled");
117  else if (mIsMousePressed)
118  _setState("pushed");
119  else if (mIsMouseFocus || mIsKeyFocus)
120  _setState("highlighted");
121  else
122  _setState("normal");
123  }
124  }
125 
126  void Button::setStateSelected(bool _check)
127  {
128  if (mStateSelected == _check)
129  return;
130 
131  mStateSelected = _check;
132  updateButtonState();
133  }
134 
135  void Button::_setKeyFocus(bool _focus)
136  {
137  mIsKeyFocus = _focus;
138  updateButtonState();
139  }
140 
141  void Button::_setMouseFocus(bool _focus)
142  {
143  mIsMouseFocus = _focus;
144  updateButtonState();
145  }
146 
148  {
149  updateButtonState();
150  if (!getInheritedEnabled())
151  {
152  mIsKeyFocus = false;
153  mIsMouseFocus = false;
154  }
155  }
156 
157  void Button::setModeImage(bool _value)
158  {
159  mModeImage = _value;
160  updateButtonState();
161  }
162 
163  bool Button::_setState(const std::string& _value)
164  {
165  if (mModeImage)
166  {
167  if (mImage)
168  mImage->setItemName(_value);
169 
170  _setWidgetState(_value);
171  return true;
172  }
173 
174  return _setWidgetState(_value);
175  }
176 
177  void Button::setImageResource(const std::string& _name)
178  {
179  if (mImage)
180  mImage->setItemResource(_name);
181  updateButtonState();
182  }
183 
184  void Button::setImageGroup(const std::string& _name)
185  {
186  if (mImage)
187  mImage->setItemGroup(_name);
188  updateButtonState();
189  }
190 
191  void Button::setImageName(const std::string& _name)
192  {
193  if (mImage)
194  mImage->setItemName(_name);
195  }
196 
197  void Button::setPropertyOverride(const std::string& _key, const std::string& _value)
198  {
200  if (_key == "StateSelected")
201  setStateSelected(utility::parseValue<bool>(_value));
202 
204  else if (_key == "ModeImage")
205  setModeImage(utility::parseValue<bool>(_value));
206 
208  else if (_key == "ImageResource")
209  setImageResource(_value);
210 
212  else if (_key == "ImageGroup")
213  setImageGroup(_value);
214 
216  else if (_key == "ImageName")
217  setImageName(_value);
218 
219  else
220  {
221  Base::setPropertyOverride(_key, _value);
222  return;
223  }
224 
225  eventChangeProperty(this, _key, _value);
226  }
227 
229  {
230  return mStateSelected;
231  }
232 
233  bool Button::getModeImage() const
234  {
235  return mModeImage;
236  }
237 
239  {
240  return mImage;
241  }
242 
243 } // namespace MyGUI
MyGUI::Button::onMouseButtonReleased
void onMouseButtonReleased(int _left, int _top, MouseButton _id) override
Definition: MyGUI_Button.cpp:80
MyGUI::Button::onKeyLostFocus
void onKeyLostFocus(Widget *_new) override
Definition: MyGUI_Button.cpp:48
MyGUI::Button::shutdownOverride
void shutdownOverride() override
Definition: MyGUI_Button.cpp:34
MyGUI::Widget::getInheritedEnabled
bool getInheritedEnabled() const
Definition: MyGUI_Widget.cpp:1334
MyGUI::Button::setModeImage
void setModeImage(bool _value)
Definition: MyGUI_Button.cpp:157
MyGUI::Button::initialiseOverride
void initialiseOverride() override
Definition: MyGUI_Button.cpp:26
MyGUI::Button::_setMouseFocus
void _setMouseFocus(bool _focus)
Definition: MyGUI_Button.cpp:141
MyGUI::ImageBox
ImageBox properties. Skin childs. ImageBox widget description should be here.
Definition: MyGUI_ImageBox.h:24
MyGUI::Button::onMouseSetFocus
void onMouseSetFocus(Widget *_old) override
Definition: MyGUI_Button.cpp:55
MyGUI::Button::Button
Button()
Definition: MyGUI_Button.cpp:16
MyGUI::Button::baseUpdateEnable
void baseUpdateEnable() override
Definition: MyGUI_Button.cpp:147
MyGUI::Button::_getImageBox
ImageBox * _getImageBox()
Definition: MyGUI_Button.cpp:238
MyGUI::Widget::eventChangeProperty
EventHandle_WidgetStringString eventChangeProperty
Definition: MyGUI_Widget.h:267
MyGUI::Widget
Widget properties. Skin childs. Widget widget description should be here.
Definition: MyGUI_Widget.h:37
MyGUI::Button::setImageResource
void setImageResource(const std::string &_name)
Definition: MyGUI_Button.cpp:177
MyGUI::Button::setStateSelected
void setStateSelected(bool _value)
Set button selected state.
Definition: MyGUI_Button.cpp:126
MyGUI::Button::_setState
bool _setState(const std::string &_value)
Definition: MyGUI_Button.cpp:163
MyGUI_Precompiled.h
MyGUI::Button::onKeySetFocus
void onKeySetFocus(Widget *_old) override
Definition: MyGUI_Button.cpp:41
MyGUI::MouseButton
Definition: MyGUI_MouseButton.h:16
MyGUI::ImageBox::setItemResource
bool setItemResource(const std::string &_name)
Definition: MyGUI_ImageBox.cpp:345
MyGUI_ImageBox.h
MyGUI_InputManager.h
MyGUI::ImageBox::setItemName
void setItemName(const std::string &_value)
Definition: MyGUI_ImageBox.cpp:405
MyGUI::Button::setPropertyOverride
void setPropertyOverride(const std::string &_key, const std::string &_value) override
Definition: MyGUI_Button.cpp:197
MyGUI_Button.h
MyGUI::Button::setImageName
void setImageName(const std::string &_name)
Definition: MyGUI_Button.cpp:191
MyGUI::Button::setImageGroup
void setImageGroup(const std::string &_name)
Definition: MyGUI_Button.cpp:184
MyGUI::Widget::assignWidget
void assignWidget(T *&_widget, const std::string &_name)
Definition: MyGUI_Widget.h:329
MyGUI::Button::getModeImage
bool getModeImage() const
Definition: MyGUI_Button.cpp:233
MyGUI::Button::_setKeyFocus
void _setKeyFocus(bool _focus)
Definition: MyGUI_Button.cpp:135
MyGUI::MouseButton::Left
@ Left
Definition: MyGUI_MouseButton.h:21
MyGUI::ImageBox::setItemGroup
void setItemGroup(const std::string &_value)
Definition: MyGUI_ImageBox.cpp:395
MyGUI::Widget::_setWidgetState
bool _setWidgetState(const std::string &_value)
Definition: MyGUI_Widget.cpp:372
MyGUI
Definition: MyGUI_ActionController.h:15
MyGUI::Button::onMouseLostFocus
void onMouseLostFocus(Widget *_new) override
Definition: MyGUI_Button.cpp:62
MyGUI::Button::getStateSelected
bool getStateSelected() const
Get buton selected.
Definition: MyGUI_Button.cpp:228
MyGUI_ResourceSkin.h
MyGUI::Button::onMouseButtonPressed
void onMouseButtonPressed(int _left, int _top, MouseButton _id) override
Definition: MyGUI_Button.cpp:69