MyGUI  3.0.1
MyGUI_MenuItemType.h
Go to the documentation of this file.
1 
7 /*
8  This file is part of MyGUI.
9 
10  MyGUI is free software: you can redistribute it and/or modify
11  it under the terms of the GNU Lesser General Public License as published by
12  the Free Software Foundation, either version 3 of the License, or
13  (at your option) any later version.
14 
15  MyGUI is distributed in the hope that it will be useful,
16  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  GNU Lesser General Public License for more details.
19 
20  You should have received a copy of the GNU Lesser General Public License
21  along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
22 */
23 #ifndef __MYGUI_MENU_ITEM_TYPE_H__
24 #define __MYGUI_MENU_ITEM_TYPE_H__
25 
26 #include "MyGUI_Prerequest.h"
27 
28 namespace MyGUI
29 {
30 
32  {
33  enum Enum
34  {
38  MAX
39  };
40 
41  static MenuItemType parse(const std::string& _value)
42  {
43  MenuItemType type;
44  int value = 0;
45  while (true)
46  {
47  const char * name = type.getValueName(value);
48  if (strcmp(name, "") == 0 || name == _value) break;
49  value++;
50  }
51  type.value = MenuItemType::Enum(value);
52  return type;
53  }
54 
55  MenuItemType(Enum _value = MAX) : value(_value) { }
56 
57  friend bool operator == (MenuItemType const& a, MenuItemType const& b) { return a.value == b.value; }
58  friend bool operator != (MenuItemType const& a, MenuItemType const& b) { return a.value != b.value; }
59 
60  friend std::ostream& operator << ( std::ostream& _stream, const MenuItemType& _value )
61  {
62  _stream << _value.getValueName(_value.value);
63  return _stream;
64  }
65 
66  friend std::istream& operator >> ( std::istream& _stream, MenuItemType& _value )
67  {
68  std::string value;
69  _stream >> value;
70  _value = MenuItemType::parse(value);
71  return _stream;
72  }
73 
74  std::string print() const { return getValueName(value); }
75 
76  private:
77  const char * getValueName(int _index) const
78  {
79  static const char * values[MAX + 1] = { "Normal", "Popup", "Separator", "" };
80  return values[(_index < MAX && _index >= 0) ? _index : MAX];
81  }
82 
83  private:
84  Enum value;
85  };
86 
87 } // namespace MyGUI
88 
89 #endif // __MYGUI_MENU_ITEM_TYPE_H__