MyGUI
3.2.1
|
00001 /* 00002 * This source file is part of MyGUI. For the latest info, see http://mygui.info/ 00003 * Distributed under the MIT License 00004 * (See accompanying file COPYING.MIT or copy at http://opensource.org/licenses/MIT) 00005 */ 00006 00007 #include "MyGUI_Precompiled.h" 00008 #include "MyGUI_Button.h" 00009 #include "MyGUI_ResourceSkin.h" 00010 #include "MyGUI_ImageBox.h" 00011 #include "MyGUI_InputManager.h" 00012 00013 namespace MyGUI 00014 { 00015 00016 Button::Button() : 00017 mIsMousePressed(false), 00018 mIsMouseFocus(false), 00019 mStateSelected(false), 00020 mImage(nullptr), 00021 mModeImage(false) 00022 { 00023 } 00024 00025 void Button::initialiseOverride() 00026 { 00027 Base::initialiseOverride(); 00028 00030 assignWidget(mImage, "Image"); 00031 } 00032 00033 void Button::shutdownOverride() 00034 { 00035 mImage = nullptr; 00036 00037 Base::shutdownOverride(); 00038 } 00039 00040 void Button::onMouseSetFocus(Widget* _old) 00041 { 00042 _setMouseFocus(true); 00043 00044 Base::onMouseSetFocus(_old); 00045 } 00046 00047 void Button::onMouseLostFocus(Widget* _new) 00048 { 00049 _setMouseFocus(false); 00050 00051 Base::onMouseLostFocus(_new); 00052 } 00053 00054 void Button::onMouseButtonPressed(int _left, int _top, MouseButton _id) 00055 { 00056 if (_id == MouseButton::Left) 00057 { 00058 mIsMousePressed = true; 00059 updateButtonState(); 00060 } 00061 00062 Base::onMouseButtonPressed(_left, _top, _id); 00063 } 00064 00065 void Button::onMouseButtonReleased(int _left, int _top, MouseButton _id) 00066 { 00067 if (_id == MouseButton::Left) 00068 { 00069 mIsMousePressed = false; 00070 updateButtonState(); 00071 } 00072 00073 Base::onMouseButtonReleased(_left, _top, _id); 00074 } 00075 00076 void Button::updateButtonState() 00077 { 00078 if (mStateSelected) 00079 { 00080 if (!getInheritedEnabled()) 00081 { 00082 if (!_setState("disabled_checked")) 00083 _setState("disabled"); 00084 } 00085 else if (mIsMousePressed) 00086 { 00087 if (!_setState("pushed_checked")) 00088 _setState("pushed"); 00089 } 00090 else if (mIsMouseFocus) 00091 { 00092 if (!_setState("highlighted_checked")) 00093 _setState("pushed"); 00094 } 00095 else 00096 _setState("normal_checked"); 00097 } 00098 else 00099 { 00100 if (!getInheritedEnabled()) 00101 _setState("disabled"); 00102 else if (mIsMousePressed) 00103 _setState("pushed"); 00104 else if (mIsMouseFocus) 00105 _setState("highlighted"); 00106 else 00107 _setState("normal"); 00108 } 00109 } 00110 00111 void Button::setStateSelected(bool _check) 00112 { 00113 if (mStateSelected == _check) 00114 return; 00115 00116 mStateSelected = _check; 00117 updateButtonState(); 00118 } 00119 00120 void Button::_setMouseFocus(bool _focus) 00121 { 00122 mIsMouseFocus = _focus; 00123 updateButtonState(); 00124 } 00125 00126 void Button::baseUpdateEnable() 00127 { 00128 updateButtonState(); 00129 if (!getInheritedEnabled()) 00130 { 00131 mIsMouseFocus = false; 00132 } 00133 } 00134 00135 void Button::setModeImage(bool _value) 00136 { 00137 mModeImage = _value; 00138 updateButtonState(); 00139 } 00140 00141 bool Button::_setState(const std::string& _value) 00142 { 00143 if (mModeImage) 00144 { 00145 if (mImage) 00146 mImage->setItemName(_value); 00147 00148 _setWidgetState(_value); 00149 return true; 00150 } 00151 00152 return _setWidgetState(_value); 00153 } 00154 00155 void Button::setImageResource(const std::string& _name) 00156 { 00157 if (mImage) 00158 mImage->setItemResource(_name); 00159 updateButtonState(); 00160 } 00161 00162 void Button::setImageGroup(const std::string& _name) 00163 { 00164 if (mImage) 00165 mImage->setItemGroup(_name); 00166 updateButtonState(); 00167 } 00168 00169 void Button::setImageName(const std::string& _name) 00170 { 00171 if (mImage) 00172 mImage->setItemName(_name); 00173 } 00174 00175 void Button::setPropertyOverride(const std::string& _key, const std::string& _value) 00176 { 00178 if (_key == "StateSelected") 00179 setStateSelected(utility::parseValue<bool>(_value)); 00180 00182 else if (_key == "ModeImage") 00183 setModeImage(utility::parseValue<bool>(_value)); 00184 00186 else if (_key == "ImageResource") 00187 setImageResource(_value); 00188 00190 else if (_key == "ImageGroup") 00191 setImageGroup(_value); 00192 00194 else if (_key == "ImageName") 00195 setImageName(_value); 00196 00197 else 00198 { 00199 Base::setPropertyOverride(_key, _value); 00200 return; 00201 } 00202 00203 eventChangeProperty(this, _key, _value); 00204 } 00205 00206 bool Button::getStateSelected() const 00207 { 00208 return mStateSelected; 00209 } 00210 00211 bool Button::getModeImage() const 00212 { 00213 return mModeImage; 00214 } 00215 00216 ImageBox* Button::_getImageBox() 00217 { 00218 return mImage; 00219 } 00220 00221 } // namespace MyGUI