MyGUI
3.2.0
|
00001 00006 /* 00007 This file is part of MyGUI. 00008 00009 MyGUI is free software: you can redistribute it and/or modify 00010 it under the terms of the GNU Lesser General Public License as published by 00011 the Free Software Foundation, either version 3 of the License, or 00012 (at your option) any later version. 00013 00014 MyGUI is distributed in the hope that it will be useful, 00015 but WITHOUT ANY WARRANTY; without even the implied warranty of 00016 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00017 GNU Lesser General Public License for more details. 00018 00019 You should have received a copy of the GNU Lesser General Public License 00020 along with MyGUI. If not, see <http://www.gnu.org/licenses/>. 00021 */ 00022 #include "MyGUI_Precompiled.h" 00023 #include "MyGUI_Button.h" 00024 #include "MyGUI_ResourceSkin.h" 00025 #include "MyGUI_ImageBox.h" 00026 #include "MyGUI_InputManager.h" 00027 00028 namespace MyGUI 00029 { 00030 00031 Button::Button() : 00032 mIsMousePressed(false), 00033 mIsMouseFocus(false), 00034 mStateSelected(false), 00035 mImage(nullptr), 00036 mModeImage(false) 00037 { 00038 } 00039 00040 void Button::initialiseOverride() 00041 { 00042 Base::initialiseOverride(); 00043 00044 assignWidget(mImage, "Image"); 00045 } 00046 00047 void Button::shutdownOverride() 00048 { 00049 mImage = nullptr; 00050 00051 Base::shutdownOverride(); 00052 } 00053 00054 void Button::onMouseSetFocus(Widget* _old) 00055 { 00056 _setMouseFocus(true); 00057 00058 Base::onMouseSetFocus(_old); 00059 } 00060 00061 void Button::onMouseLostFocus(Widget* _new) 00062 { 00063 _setMouseFocus(false); 00064 00065 Base::onMouseLostFocus(_new); 00066 } 00067 00068 void Button::onMouseButtonPressed(int _left, int _top, MouseButton _id) 00069 { 00070 if (_id == MouseButton::Left) 00071 { 00072 mIsMousePressed = true; 00073 updateButtonState(); 00074 } 00075 00076 Base::onMouseButtonPressed(_left, _top, _id); 00077 } 00078 00079 void Button::onMouseButtonReleased(int _left, int _top, MouseButton _id) 00080 { 00081 if (_id == MouseButton::Left) 00082 { 00083 mIsMousePressed = false; 00084 updateButtonState(); 00085 } 00086 00087 Base::onMouseButtonReleased(_left, _top, _id); 00088 } 00089 00090 void Button::updateButtonState() 00091 { 00092 if (mStateSelected) 00093 { 00094 if (!getEnabled()) 00095 { 00096 if (!_setState("disabled_checked")) 00097 _setState("disabled"); 00098 } 00099 else if (mIsMousePressed) 00100 { 00101 if (!_setState("pushed_checked")) 00102 _setState("pushed"); 00103 } 00104 else if (mIsMouseFocus) 00105 { 00106 if (!_setState("highlighted_checked")) 00107 _setState("pushed"); 00108 } 00109 else 00110 _setState("normal_checked"); 00111 } 00112 else 00113 { 00114 if (!getEnabled()) 00115 _setState("disabled"); 00116 else if (mIsMousePressed) 00117 _setState("pushed"); 00118 else if (mIsMouseFocus) 00119 _setState("highlighted"); 00120 else 00121 _setState("normal"); 00122 } 00123 } 00124 00125 void Button::setStateSelected(bool _check) 00126 { 00127 if (mStateSelected == _check) 00128 return; 00129 00130 mStateSelected = _check; 00131 updateButtonState(); 00132 } 00133 00134 void Button::_setMouseFocus(bool _focus) 00135 { 00136 mIsMouseFocus = _focus; 00137 updateButtonState(); 00138 } 00139 00140 void Button::baseUpdateEnable() 00141 { 00142 updateButtonState(); 00143 if (!getEnabled()) 00144 { 00145 mIsMouseFocus = false; 00146 } 00147 } 00148 00149 void Button::setModeImage(bool _value) 00150 { 00151 mModeImage = _value; 00152 updateButtonState(); 00153 } 00154 00155 bool Button::_setState(const std::string& _value) 00156 { 00157 if (mModeImage) 00158 { 00159 if (mImage) 00160 mImage->setItemName(_value); 00161 00162 _setWidgetState(_value); 00163 return true; 00164 } 00165 00166 return _setWidgetState(_value); 00167 } 00168 00169 void Button::setImageResource(const std::string& _name) 00170 { 00171 if (mImage) 00172 mImage->setItemResource(_name); 00173 updateButtonState(); 00174 } 00175 00176 void Button::setImageGroup(const std::string& _name) 00177 { 00178 if (mImage) 00179 mImage->setItemGroup(_name); 00180 updateButtonState(); 00181 } 00182 00183 void Button::setImageName(const std::string& _name) 00184 { 00185 if (mImage) 00186 mImage->setItemName(_name); 00187 } 00188 00189 void Button::setPropertyOverride(const std::string& _key, const std::string& _value) 00190 { 00192 if (_key == "StateSelected") 00193 setStateSelected(utility::parseValue<bool>(_value)); 00194 else if (_key == "ModeImage") 00195 setModeImage(utility::parseValue<bool>(_value)); 00196 else if (_key == "ImageResource") 00197 setImageResource(_value); 00198 else if (_key == "ImageGroup") 00199 setImageGroup(_value); 00200 else if (_key == "ImageName") 00201 setImageName(_value); 00202 else 00203 { 00204 Base::setPropertyOverride(_key, _value); 00205 return; 00206 } 00207 eventChangeProperty(this, _key, _value); 00208 } 00209 00210 bool Button::getStateSelected() const 00211 { 00212 return mStateSelected; 00213 } 00214 00215 bool Button::getModeImage() const 00216 { 00217 return mModeImage; 00218 } 00219 00220 ImageBox* Button::_getImageBox() 00221 { 00222 return mImage; 00223 } 00224 00225 } // namespace MyGUI