MezzanineEngine 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
charactertraits.h
1 //© Copyright 2010 - 2012 BlackTopp Studios Inc.
2 /* This file is part of The Mezzanine Engine.
3 
4  The Mezzanine Engine is free software: you can redistribute it and/or modify
5  it under the terms of the GNU General Public License as published by
6  the Free Software Foundation, either version 3 of the License, or
7  (at your option) any later version.
8 
9  The Mezzanine Engine is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  GNU General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with The Mezzanine Engine. If not, see <http://www.gnu.org/licenses/>.
16 */
17 /* The original authors have included a copy of the license specified above in the
18  'Docs' folder. See 'gpl.txt'
19 */
20 /* We welcome the use of the Mezzanine engine to anyone, including companies who wish to
21  Build professional software and charge for their product.
22 
23  However there are some practical restrictions, so if your project involves
24  any of the following you should contact us and we will try to work something
25  out:
26  - DRM or Copy Protection of any kind(except Copyrights)
27  - Software Patents You Do Not Wish to Freely License
28  - Any Kind of Linking to Non-GPL licensed Works
29  - Are Currently In Violation of Another Copyright Holder's GPL License
30  - If You want to change our code and not add a few hundred MB of stuff to
31  your distribution
32 
33  These and other limitations could cause serious legal problems if you ignore
34  them, so it is best to simply contact us or the Free Software Foundation, if
35  you have any questions.
36 
37  Joseph Toppi - toppij@gmail.com
38  John Blackwood - makoenergy02@gmail.com
39 */
40 
41 #ifndef _uicharactertraits_h
42 #define _uicharactertraits_h
43 
44 #include "colourvalue.h"
45 #include "countedptr.h"
46 
47 namespace Mezzanine
48 {
49  namespace UI
50  {
51  class FontData;
52 
53  /// @typedef CharacterStatus
54  /// @brief An enum describing the status and boolean traits a Character can have.
56  {
57  /// @todo When additional fonts are no longer needed for bold, italics, etc. style font and such, add those basic properties here.
59  };//CharacterStatus
60 
61  ///////////////////////////////////////////////////////////////////////////////
62  /// @brief This class stores common data for determining the look of a Character.
63  /// @details
64  ///////////////////////////////////////
66  {
67  public:
68  /// @brief Blank Constructor.
70  /// @brief Descriptive Constructor.
71  /// @param Font A pointer to the font to be used.
72  /// @param Character The colour to be given to the characters altered by this class.
74  /// @brief Class Destructor.
75  virtual ~CharacterTraits();
76 
77  ///////////////////////////////////////////////////////////////////////////////
78  // Public Data Members
79 
80  /// @brief The font this Character belongs to.
82  /// @brief The colour to render this Character as.
84 
85  ///////////////////////////////////////////////////////////////////////////////
86  // Operator Methods
87 
88  /// @brief Assignment operator.
89  /// @param Other The other CharacterTraits to copy from.
90  /// @return Returns a reference to this.
91  CharacterTraits& operator=(const CharacterTraits& Other);
92 
93  /// @brief Equality comparison operator.
94  /// @param Other The other CharacterTraits to compare with.
95  /// @return Returns true if the two CharacterTraits are equal, false otherwise.
96  bool operator==(const CharacterTraits& Other) const;
97  /// @brief Inequality comparison operator.
98  /// @param Other The other CharacterTraits to compare with.
99  /// @return Returns true if the two CharacterTraits are not equal, false otherwise.
100  bool operator!=(const CharacterTraits& Other) const;
101 
102  ///////////////////////////////////////////////////////////////////////////////
103  // Serialization
104 
105  /// @brief Convert this class to an XML::Node ready for serialization.
106  /// @param ParentNode The point in the XML hierarchy that this renderable should be appended to.
107  void ProtoSerialize(XML::Node& ParentNode) const;
108  /// @brief Take the data stored in an XML Node and overwrite this object with it.
109  /// @param SelfRoot An XML::Node containing the data to populate this class with.
110  void ProtoDeSerialize(const XML::Node& SelfRoot);
111  /// @brief Get the name of the the XML tag this class will leave behind as its instances are serialized.
112  /// @return A string containing the name of this class.
113  static String GetSerializableName();
114  };//CharacterTraits
115 
116  /// @typedef CharacterTraitsPtr
117  /// @brief Convenience typedef for counted pointers to CharacterTraits.
119  }//UI
120 }//Mezzanine
121 
122 #endif