MyGUI  3.2.1
MyGUI_MenuItem.cpp
Go to the documentation of this file.
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