summaryrefslogtreecommitdiff
path: root/tools/GUIEditor/CGUIAttributeEditor.cpp
diff options
context:
space:
mode:
authorMirrorbot <mirrorbot@cogarr.net>2025-12-27 17:53:06 -0600
committerMirrorbot <mirrorbot@cogarr.net>2025-12-27 17:53:06 -0600
commit71e94ee161447b84c0eaabf6567f8fa62262cd3e (patch)
tree391064cc6173a6fe75069af2fdc1978af12f623e /tools/GUIEditor/CGUIAttributeEditor.cpp
downloadirrlicht-71e94ee161447b84c0eaabf6567f8fa62262cd3e.tar.gz
irrlicht-71e94ee161447b84c0eaabf6567f8fa62262cd3e.tar.bz2
irrlicht-71e94ee161447b84c0eaabf6567f8fa62262cd3e.zip
Inital commitHEADmaster
Diffstat (limited to 'tools/GUIEditor/CGUIAttributeEditor.cpp')
-rw-r--r--tools/GUIEditor/CGUIAttributeEditor.cpp120
1 files changed, 120 insertions, 0 deletions
diff --git a/tools/GUIEditor/CGUIAttributeEditor.cpp b/tools/GUIEditor/CGUIAttributeEditor.cpp
new file mode 100644
index 0000000..45913b6
--- /dev/null
+++ b/tools/GUIEditor/CGUIAttributeEditor.cpp
@@ -0,0 +1,120 @@
+
+#include "CGUIAttributeEditor.h"
+#include "IGUIEnvironment.h"
+#include "IFileSystem.h"
+#include "IVideoDriver.h"
+#include "IAttributes.h"
+#include "IGUIFont.h"
+#include "IGUIScrollBar.h"
+#include "CGUIEditWorkspace.h"
+#include "CGUIAttribute.h"
+#include "CGUIStringAttribute.h"
+
+namespace irr
+{
+namespace gui
+{
+
+using namespace core;
+using namespace io;
+
+CGUIAttributeEditor::CGUIAttributeEditor(IGUIEnvironment* environment, s32 id, IGUIElement *parent) :
+ CGUIPanel(environment, parent, id, rect<s32>(0, 0, 100, 100)),
+ Attribs(0), Panel(0)
+{
+ #ifdef _DEBUG
+ setDebugName("CGUIAttributeEditor");
+ #endif
+
+ // create attributes
+ Attribs = environment->getFileSystem()->createEmptyAttributes(Environment->getVideoDriver());
+
+ calculateClientArea();
+ resizeInnerPane();
+
+ // refresh attrib list
+ refreshAttribs();
+
+ IGUIScrollBar* sb = getVScrollBar();
+ core::rect<s32> r = sb->getRelativePosition();
+ r.LowerRightCorner.Y -= 16;
+ sb->setRelativePosition(r);
+}
+
+CGUIAttributeEditor::~CGUIAttributeEditor()
+{
+ for (u32 i=0; i<AttribList.size(); ++i)
+ {
+ AttribList[i]->remove();
+ AttribList[i]->drop();
+ }
+ AttribList.clear();
+
+ Attribs->drop();
+}
+
+
+IAttributes* CGUIAttributeEditor::getAttribs()
+{
+ return Attribs;
+}
+
+void CGUIAttributeEditor::refreshAttribs()
+{
+ // clear the attribute list
+ u32 i;
+ for (i=0; i<AttribList.size(); ++i)
+ {
+ AttribList[i]->remove();
+ AttribList[i]->drop();
+ }
+ AttribList.clear();
+
+ position2di top(10, 5);
+ rect<s32> r(top.X, top.Y,
+ getClientArea().getWidth() - 10,
+ 5 + Environment->getSkin()->getFont()->getDimension(L"A").Height);
+
+ // add attribute elements
+ u32 c = Attribs->getAttributeCount();
+ for (i=0; i<c; ++i)
+ {
+
+ // try to create attribute
+ stringc str = Attribs->getAttributeTypeString(i);
+ str += "_attribute";
+ CGUIAttribute* n = (CGUIAttribute*)Environment->addGUIElement(str.c_str(), 0);
+
+ // if this doesn't exist, use a string editor
+ if (!n)
+ n = (CGUIAttribute*)Environment->addGUIElement("string_attribute", 0);
+
+ if (n)
+ {
+ AttribList.push_back(n);
+ n->setParentID(getID());
+ n->grab();
+ }
+
+ // We can't set "this" as parent above as we need functionality
+ // of the overloaded addChild which isn't called in the constructor.
+ // (that's a general Irrlicht messup with too fat constructors)
+ addChild(n);
+
+ AttribList[i]->setSubElement(true);
+ AttribList[i]->setRelativePosition(r);
+ AttribList[i]->setAlignment(EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_UPPERLEFT);
+ AttribList[i]->setAttrib(Attribs, i);
+ r += position2di(0, AttribList[i]->getRelativePosition().getHeight() + 5);
+ }
+}
+
+void CGUIAttributeEditor::updateAttribs()
+{
+ for (u32 i=0; i<AttribList.size(); ++i)
+ AttribList[i]->updateAttrib(false);
+}
+
+} // namespace gui
+} // namespace irr
+