MyGUI 3.0.1

MyGUI_CommonStateInfo.h

Go to the documentation of this file.
00001 
00007 /*
00008     This file is part of MyGUI.
00009 
00010     MyGUI is free software: you can redistribute it and/or modify
00011     it under the terms of the GNU Lesser General Public License as published by
00012     the Free Software Foundation, either version 3 of the License, or
00013     (at your option) any later version.
00014 
00015     MyGUI is distributed in the hope that it will be useful,
00016     but WITHOUT ANY WARRANTY; without even the implied warranty of
00017     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00018     GNU Lesser General Public License for more details.
00019 
00020     You should have received a copy of the GNU Lesser General Public License
00021     along with MyGUI.  If not, see <http://www.gnu.org/licenses/>.
00022 */
00023 #ifndef __MYGUI_COMMON_STATE_INFO_H__
00024 #define __MYGUI_COMMON_STATE_INFO_H__
00025 
00026 #include "MyGUI_Prerequest.h"
00027 #include "MyGUI_IStateInfo.h"
00028 #include "MyGUI_CoordConverter.h"
00029 #include "MyGUI_LanguageManager.h"
00030 #include "MyGUI_TextureUtility.h"
00031 
00032 namespace MyGUI
00033 {
00034 
00035     class MYGUI_EXPORT SubSkinStateInfo :
00036         public IStateInfo
00037     {
00038         MYGUI_RTTI_DERIVED( SubSkinStateInfo )
00039 
00040     public:
00041         virtual ~SubSkinStateInfo() { }
00042 
00043         const FloatRect& getRect() { return mRect; }
00044 
00045     private:
00046         virtual void deserialization(xml::ElementPtr _node, Version _version)
00047         {
00048             std::string texture = _node->getParent()->getParent()->findAttribute("texture");
00049 
00050             // поддержка замены тегов в скинах
00051             if (_version >= Version(1, 1))
00052             {
00053                 texture = LanguageManager::getInstance().replaceTags(texture);
00054             }
00055 
00056             const IntSize& size = texture_utility::getTextureSize(texture);
00057             const IntCoord& coord = IntCoord::parse(_node->findAttribute("offset"));
00058             mRect = CoordConverter::convertTextureCoord(coord, size);
00059         }
00060 
00061     private:
00062         FloatRect mRect;
00063     };
00064 
00065     class MYGUI_EXPORT TileRectStateInfo :
00066         public IStateInfo
00067     {
00068         MYGUI_RTTI_DERIVED( TileRectStateInfo )
00069 
00070     public:
00071         TileRectStateInfo() : mTileH(true), mTileV(true) { }
00072         virtual ~TileRectStateInfo() { }
00073 
00074         const FloatRect& getRect() { return mRect; }
00075         const IntSize& getTileSize() { return mTileSize; }
00076         bool getTileH() { return mTileH; }
00077         bool getTileV() { return mTileV; }
00078 
00079     private:
00080         virtual void deserialization(xml::ElementPtr _node, Version _version)
00081         {
00082             std::string texture = _node->getParent()->getParent()->findAttribute("texture");
00083 
00084             // поддержка замены тегов в скинах
00085             if (_version >= Version(1, 1))
00086             {
00087                 texture = LanguageManager::getInstance().replaceTags(texture);
00088             }
00089 
00090             const IntSize& size = texture_utility::getTextureSize(texture);
00091             const IntCoord& coord = IntCoord::parse(_node->findAttribute("offset"));
00092             mRect = CoordConverter::convertTextureCoord(coord, size);
00093 
00094             xml::ElementEnumerator prop = _node->getElementEnumerator();
00095             while (prop.next("Property"))
00096             {
00097                 const std::string& key = prop->findAttribute("key");
00098                 const std::string& value = prop->findAttribute("value");
00099                 if (key == "TileH") mTileH = utility::parseBool(value);
00100                 else if (key == "TileV") mTileV = utility::parseBool(value);
00101                 else if (key == "TileSize") mTileSize = IntSize::parse(value);
00102             }
00103         }
00104 
00105     private:
00106         FloatRect mRect;
00107         IntSize mTileSize;
00108         bool mTileH;
00109         bool mTileV;
00110     };
00111 
00112     class MYGUI_EXPORT EditTextStateInfo :
00113         public IStateInfo
00114     {
00115         MYGUI_RTTI_DERIVED( EditTextStateInfo )
00116 
00117     public:
00118         EditTextStateInfo() : mColour(Colour::White), mShift(false) { }
00119         virtual ~EditTextStateInfo() { }
00120 
00121         const Colour& getColour() { return mColour; }
00122         bool getShift() { return mShift; }
00123 
00124     private:
00125         virtual void deserialization(xml::ElementPtr _node, Version _version)
00126         {
00127             mShift = utility::parseBool(_node->findAttribute("shift"));
00128 
00129             std::string colour = _node->findAttribute("colour");
00130             if (_version >= Version(1, 1))
00131             {
00132                 colour = LanguageManager::getInstance().replaceTags(colour);
00133             }
00134 
00135             mColour = Colour::parse(colour);
00136         }
00137 
00138     private:
00139         Colour mColour;
00140         bool mShift;
00141     };
00142 
00143 } // namespace MyGUI
00144 
00145 #endif // __MYGUI_COMMON_STATE_INFO_H__
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines