aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/others/irrlicht-1.8.1/tools/GUIEditor/CGUIEnumAttribute.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/others/irrlicht-1.8.1/tools/GUIEditor/CGUIEnumAttribute.h')
-rw-r--r--src/others/irrlicht-1.8.1/tools/GUIEditor/CGUIEnumAttribute.h114
1 files changed, 114 insertions, 0 deletions
diff --git a/src/others/irrlicht-1.8.1/tools/GUIEditor/CGUIEnumAttribute.h b/src/others/irrlicht-1.8.1/tools/GUIEditor/CGUIEnumAttribute.h
new file mode 100644
index 0000000..9e3958d
--- /dev/null
+++ b/src/others/irrlicht-1.8.1/tools/GUIEditor/CGUIEnumAttribute.h
@@ -0,0 +1,114 @@
1#ifndef __C_GUI_ENUM_ATTRIBUTE_H_INCLUDED__
2#define __C_GUI_ENUM_ATTRIBUTE_H_INCLUDED__
3
4#include "CGUIAttribute.h"
5#include "IGUIComboBox.h"
6#include "IGUIEditBox.h"
7#include "EGUIEditTypes.h"
8
9namespace irr
10{
11namespace gui
12{
13
14 class CGUIEnumAttribute : public CGUIAttribute
15 {
16 public:
17 //
18 CGUIEnumAttribute(IGUIEnvironment* environment, IGUIElement *parent, s32 myParentID) :
19 CGUIAttribute(environment, parent, myParentID),
20 AttribComboBox(0), AttribEditBox(0)
21 {
22
23 }
24
25 virtual ~CGUIEnumAttribute()
26 {
27 if (AttribComboBox)
28 AttribComboBox->drop();
29 if (AttribEditBox)
30 AttribEditBox->drop();
31 }
32
33 // save the attribute and possibly post the event to its parent
34 virtual void setAttrib(io::IAttributes *attribs, u32 attribIndex)
35 {
36
37 if (AttribComboBox)
38 {
39 AttribComboBox->remove();
40 AttribComboBox->drop();
41 AttribComboBox = 0;
42 }
43
44 if (AttribEditBox)
45 {
46 AttribEditBox->remove();
47 AttribEditBox->drop();
48 AttribEditBox = 0;
49 }
50
51 core::array<core::stringc> outLiterals;
52 attribs->getAttributeEnumerationLiteralsOfEnumeration(attribIndex, outLiterals);
53
54 core::rect<s32> r = getAbsolutePosition();
55 core::rect<s32> r2(0, Environment->getSkin()->getFont()->getDimension(L"A").Height + 10,
56 r.getWidth() - 5,
57 Environment->getSkin()->getFont()->getDimension(L"A").Height*2 + 20 );
58
59 if (outLiterals.size() > 0)
60 {
61 AttribComboBox = Environment->addComboBox(r2, this, -1);
62 for (u32 i=0; i<outLiterals.size(); ++i)
63 AttribComboBox->addItem( core::stringw(outLiterals[i].c_str()).c_str());
64
65 AttribComboBox->setSelected( attribs->getAttributeAsInt(attribIndex) );
66
67 AttribComboBox->grab();
68 AttribComboBox->setSubElement(true);
69 AttribComboBox->setAlignment(EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_UPPERLEFT);
70 }
71 else
72 {
73
74 AttribEditBox = Environment->addEditBox(
75 attribs->getAttributeAsStringW(attribIndex).c_str(),
76 r2, true, this, -1);
77 AttribEditBox->grab();
78 AttribEditBox->setSubElement(true);
79 AttribEditBox->setAlignment(EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_UPPERLEFT);
80 }
81
82 CGUIAttribute::setAttrib(attribs, attribIndex);
83 }
84
85 //! save the attribute and possibly post the event to its parent
86 virtual bool updateAttrib(bool sendEvent=true)
87 {
88 if (!Attribs)
89 return true;
90
91 if (AttribComboBox)
92 Attribs->setAttribute(Index, AttribComboBox->getText());
93 else if (AttribEditBox)
94 Attribs->setAttribute(Index, AttribEditBox->getText());
95
96 return CGUIAttribute::updateAttrib(sendEvent);
97 }
98
99 //! Returns the type name of the gui element.
100 virtual const c8* getTypeName() const
101 {
102 return GUIEditElementTypeNames[EGUIEDIT_ENUMATTRIBUTE];
103 }
104
105 private:
106 IGUIComboBox* AttribComboBox;
107 IGUIEditBox* AttribEditBox;
108 };
109
110} // namespace gui
111} // namespace irr
112
113#endif
114