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_MenuItem.h" 00009 00010 namespace MyGUI 00011 { 00012 00013 MenuItem::MenuItem() : 00014 mOwner(nullptr), 00015 mMinSize(10, 10), 00016 mCheck(nullptr), 00017 mCheckValue(false) 00018 { 00019 } 00020 00021 void MenuItem::initialiseOverride() 00022 { 00023 Base::initialiseOverride(); 00024 00025 // FIXME проверить смену скина ибо должно один раз вызываться 00026 Widget* parent = getParent(); 00027 MYGUI_ASSERT(parent, "MenuItem must have parent MenuControl"); 00028 if (!parent->isType<MenuControl>()) 00029 { 00030 Widget* client = parent; 00031 parent = client->getParent(); 00032 MYGUI_ASSERT(parent, "MenuItem must have parent MenuControl"); 00033 MYGUI_ASSERT(parent->getClientWidget() == client, "MenuItem must have parent MenuControl"); 00034 MYGUI_ASSERT(parent->isType<MenuControl>(), "MenuItem must have parent MenuControl"); 00035 } 00036 mOwner = parent->castType<MenuControl>(); 00037 00039 assignWidget(mCheck, "Check"); 00040 00041 //if (isUserString("MinSize")) 00042 // mMinSize = IntSize::parse(getUserString("MinSize")); 00043 00044 //FIXME нам нужен фокус клавы 00045 setNeedKeyFocus(true); 00046 00047 updateCheck(); 00048 } 00049 00050 void MenuItem::shutdownOverride() 00051 { 00052 // FIXME проверить смену скина ибо должно один раз вызываться 00053 mOwner->_notifyDeleteItem(this); 00054 00055 Base::shutdownOverride(); 00056 } 00057 00058 void MenuItem::onWidgetCreated(Widget* _widget) 00059 { 00060 Base::onWidgetCreated(_widget); 00061 00062 MenuControl* child = _widget->castType<MenuControl>(false); 00063 if (child != nullptr) 00064 { 00065 mOwner->_wrapItemChild(this, child); 00066 } 00067 } 00068 00069 void MenuItem::setCaption(const UString& _value) 00070 { 00071 Button::setCaption(_value); 00072 mOwner->_notifyUpdateName(this); 00073 } 00074 00075 void MenuItem::setFontName(const std::string& _value) 00076 { 00077 Button::setFontName(_value); 00078 if (!getCaption().empty()) 00079 mOwner->_notifyUpdateName(this); 00080 } 00081 00082 void MenuItem::setFontHeight(int _value) 00083 { 00084 Button::setFontHeight(_value); 00085 if (!getCaption().empty()) 00086 mOwner->_notifyUpdateName(this); 00087 } 00088 00089 const UString& MenuItem::getItemName() 00090 { 00091 return mOwner->getItemName(this); 00092 } 00093 00094 void MenuItem::setItemName(const UString& _value) 00095 { 00096 mOwner->setItemName(this, _value); 00097 } 00098 00099 void MenuItem::setItemData(Any _data) 00100 { 00101 mOwner->setItemData(this, _data); 00102 } 00103 00104 void MenuItem::removeItem() 00105 { 00106 mOwner->removeItem(this); 00107 } 00108 00109 void MenuItem::setItemId(const std::string& _id) 00110 { 00111 mOwner->setItemId(this, _id); 00112 } 00113 00114 const std::string& MenuItem::getItemId() 00115 { 00116 return mOwner->getItemId(this); 00117 } 00118 00119 size_t MenuItem::getItemIndex() 00120 { 00121 return mOwner->getItemIndex(this); 00122 } 00123 00124 MenuControl* MenuItem::createItemChild() 00125 { 00126 return mOwner->createItemChild(this); 00127 } 00128 00129 void MenuItem::setItemType(MenuItemType _type) 00130 { 00131 mOwner->setItemType(this, _type); 00132 } 00133 00134 MenuItemType MenuItem::getItemType() 00135 { 00136 return mOwner->getItemType(this); 00137 } 00138 00139 void MenuItem::setItemChildVisible(bool _visible) 00140 { 00141 mOwner->setItemChildVisible(this, _visible); 00142 } 00143 00144 MenuControl* MenuItem::getItemChild() 00145 { 00146 return mOwner->getItemChild(this); 00147 } 00148 00149 void MenuItem::setPropertyOverride(const std::string& _key, const std::string& _value) 00150 { 00152 if (_key == "MenuItemId") 00153 setItemId(_value); 00154 00156 else if (_key == "MenuItemType") 00157 setItemType(utility::parseValue<MenuItemType>(_value)); 00158 00160 else if (_key == "MenuItemChecked") 00161 setItemChecked(utility::parseValue<bool>(_value)); 00162 00163 else 00164 { 00165 Base::setPropertyOverride(_key, _value); 00166 return; 00167 } 00168 00169 eventChangeProperty(this, _key, _value); 00170 } 00171 00172 MenuControl* MenuItem::getMenuCtrlParent() 00173 { 00174 return mOwner; 00175 } 00176 00177 IItemContainer* MenuItem::_getItemContainer() 00178 { 00179 return mOwner; 00180 } 00181 00182 IntSize MenuItem::_getContentSize() 00183 { 00184 ISubWidgetText* text = getSubWidgetText(); 00185 if (text == nullptr) 00186 return mMinSize; 00187 00188 return text->getTextSize() + (getSize() - text->getSize()); 00189 } 00190 00191 void MenuItem::updateCheck() 00192 { 00193 if (mCheck != nullptr) 00194 mCheck->setVisible(mCheckValue); 00195 } 00196 00197 bool MenuItem::getItemChecked() const 00198 { 00199 return mCheckValue; 00200 } 00201 00202 void MenuItem::setItemChecked(bool _value) 00203 { 00204 mCheckValue = _value; 00205 updateCheck(); 00206 } 00207 00208 } // namespace MyGUI