aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/others/irrlicht-1.8.1/tools/GUIEditor/CGUIAttributeEditor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/others/irrlicht-1.8.1/tools/GUIEditor/CGUIAttributeEditor.cpp')
-rw-r--r--src/others/irrlicht-1.8.1/tools/GUIEditor/CGUIAttributeEditor.cpp120
1 files changed, 120 insertions, 0 deletions
diff --git a/src/others/irrlicht-1.8.1/tools/GUIEditor/CGUIAttributeEditor.cpp b/src/others/irrlicht-1.8.1/tools/GUIEditor/CGUIAttributeEditor.cpp
new file mode 100644
index 0000000..45913b6
--- /dev/null
+++ b/src/others/irrlicht-1.8.1/tools/GUIEditor/CGUIAttributeEditor.cpp
@@ -0,0 +1,120 @@
1
2#include "CGUIAttributeEditor.h"
3#include "IGUIEnvironment.h"
4#include "IFileSystem.h"
5#include "IVideoDriver.h"
6#include "IAttributes.h"
7#include "IGUIFont.h"
8#include "IGUIScrollBar.h"
9#include "CGUIEditWorkspace.h"
10#include "CGUIAttribute.h"
11#include "CGUIStringAttribute.h"
12
13namespace irr
14{
15namespace gui
16{
17
18using namespace core;
19using namespace io;
20
21CGUIAttributeEditor::CGUIAttributeEditor(IGUIEnvironment* environment, s32 id, IGUIElement *parent) :
22 CGUIPanel(environment, parent, id, rect<s32>(0, 0, 100, 100)),
23 Attribs(0), Panel(0)
24{
25 #ifdef _DEBUG
26 setDebugName("CGUIAttributeEditor");
27 #endif
28
29 // create attributes
30 Attribs = environment->getFileSystem()->createEmptyAttributes(Environment->getVideoDriver());
31
32 calculateClientArea();
33 resizeInnerPane();
34
35 // refresh attrib list
36 refreshAttribs();
37
38 IGUIScrollBar* sb = getVScrollBar();
39 core::rect<s32> r = sb->getRelativePosition();
40 r.LowerRightCorner.Y -= 16;
41 sb->setRelativePosition(r);
42}
43
44CGUIAttributeEditor::~CGUIAttributeEditor()
45{
46 for (u32 i=0; i<AttribList.size(); ++i)
47 {
48 AttribList[i]->remove();
49 AttribList[i]->drop();
50 }
51 AttribList.clear();
52
53 Attribs->drop();
54}
55
56
57IAttributes* CGUIAttributeEditor::getAttribs()
58{
59 return Attribs;
60}
61
62void CGUIAttributeEditor::refreshAttribs()
63{
64 // clear the attribute list
65 u32 i;
66 for (i=0; i<AttribList.size(); ++i)
67 {
68 AttribList[i]->remove();
69 AttribList[i]->drop();
70 }
71 AttribList.clear();
72
73 position2di top(10, 5);
74 rect<s32> r(top.X, top.Y,
75 getClientArea().getWidth() - 10,
76 5 + Environment->getSkin()->getFont()->getDimension(L"A").Height);
77
78 // add attribute elements
79 u32 c = Attribs->getAttributeCount();
80 for (i=0; i<c; ++i)
81 {
82
83 // try to create attribute
84 stringc str = Attribs->getAttributeTypeString(i);
85 str += "_attribute";
86 CGUIAttribute* n = (CGUIAttribute*)Environment->addGUIElement(str.c_str(), 0);
87
88 // if this doesn't exist, use a string editor
89 if (!n)
90 n = (CGUIAttribute*)Environment->addGUIElement("string_attribute", 0);
91
92 if (n)
93 {
94 AttribList.push_back(n);
95 n->setParentID(getID());
96 n->grab();
97 }
98
99 // We can't set "this" as parent above as we need functionality
100 // of the overloaded addChild which isn't called in the constructor.
101 // (that's a general Irrlicht messup with too fat constructors)
102 addChild(n);
103
104 AttribList[i]->setSubElement(true);
105 AttribList[i]->setRelativePosition(r);
106 AttribList[i]->setAlignment(EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_UPPERLEFT);
107 AttribList[i]->setAttrib(Attribs, i);
108 r += position2di(0, AttribList[i]->getRelativePosition().getHeight() + 5);
109 }
110}
111
112void CGUIAttributeEditor::updateAttribs()
113{
114 for (u32 i=0; i<AttribList.size(); ++i)
115 AttribList[i]->updateAttrib(false);
116}
117
118} // namespace gui
119} // namespace irr
120