From 7028cbe09c688437910a25623098762bf0fa592d Mon Sep 17 00:00:00 2001 From: David Walter Seikel Date: Mon, 28 Mar 2016 22:28:34 +1000 Subject: Move Irrlicht to src/others. --- .../irrlicht-1.8.1/tools/GUIEditor/CGUIAttribute.h | 169 +++++++++++++++++++++ 1 file changed, 169 insertions(+) create mode 100644 src/others/irrlicht-1.8.1/tools/GUIEditor/CGUIAttribute.h (limited to 'src/others/irrlicht-1.8.1/tools/GUIEditor/CGUIAttribute.h') diff --git a/src/others/irrlicht-1.8.1/tools/GUIEditor/CGUIAttribute.h b/src/others/irrlicht-1.8.1/tools/GUIEditor/CGUIAttribute.h new file mode 100644 index 0000000..0585498 --- /dev/null +++ b/src/others/irrlicht-1.8.1/tools/GUIEditor/CGUIAttribute.h @@ -0,0 +1,169 @@ +/* + This base class is used by the Attribute editor for making your own attribute types. + + The attribute editor will try and create an attribute called "AttribType_attribute", + and if it fails, it will create a "string_attribute". + +*/ + +#ifndef __C_GUI_ATTRIBUTE_H_INCLUDED__ +#define __C_GUI_ATTRIBUTE_H_INCLUDED__ + +#include "IGUIElement.h" +#include "IGUIEnvironment.h" +#include "IGUIFont.h" +#include "IGUIStaticText.h" +#include "IAttributes.h" +#include "CGUIEditWorkspace.h" + +namespace irr +{ + +namespace gui +{ + + const u32 ATTRIBEDIT_ATTRIB_CHANGED=MAKE_IRR_ID('A','T','T','R'); + + class CGUIAttribute : public IGUIElement + { + public: + //! constructor + CGUIAttribute(IGUIEnvironment* environment, IGUIElement *parent, s32 myParentID) : + IGUIElement(EGUIET_ELEMENT, environment, parent, -1, core::rect(0, 0, 100, 100) ), + AttribName(0), Attribs(0), Index(0), MyParentID(myParentID) + { + + #ifdef _DEBUG + setDebugName("CGUIAttribute"); + #endif + + AttribName = environment->addStaticText(0, + core::rect(0, 0, + 100, Environment->getSkin()->getFont()->getDimension(L"A").Height), + false, false, this, -1, false); + AttribName->grab(); + AttribName->setSubElement(true); + AttribName->setAlignment(EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_UPPERLEFT); + } + + virtual ~CGUIAttribute() + { + if (Attribs) + Attribs->drop(); + if (AttribName) + AttribName->drop(); + } + + virtual bool OnEvent(const SEvent &e) + { + if (IsEnabled) + { + switch (e.EventType) + { + case EET_GUI_EVENT: + switch (e.GUIEvent.EventType) + { + case EGET_ELEMENT_FOCUSED: + if (Parent && isMyChild(e.GUIEvent.Caller)) + Parent->bringToFront(this); + break; + case EGET_ELEMENT_HOVERED: + case EGET_ELEMENT_LEFT: + return IGUIElement::OnEvent(e); + case EGET_ELEMENT_FOCUS_LOST: + updateAttrib(); + return IGUIElement::OnEvent(e); + default: + return updateAttrib(); + } + break; + case EET_KEY_INPUT_EVENT: + return true; + default: + break; + } + } + + return IGUIElement::OnEvent(e); + } + + //! sets the attribute to use + virtual void setAttrib(io::IAttributes *attribs, u32 attribIndex) + { + if (Attribs) + Attribs->drop(); + Attribs = attribs; + if (Attribs) + Attribs->grab(); + Index = attribIndex; + + core::stringw name(attribs->getAttributeName(attribIndex)); + name += L" ("; + name += attribs->getAttributeTypeString(attribIndex); + name += L")"; + AttribName->setText(name.c_str()); + + core::rect r = Parent->getAbsolutePosition(); + core::rect r2(0, 5, + r.getWidth(), Environment->getSkin()->getFont()->getDimension(L"A").Height + 10 ); + + AttribName->setRelativePosition(r2); + + // get minimum height + s32 y=0; + core::list::Iterator it = Children.begin(); + for (; it != Children.end(); ++it) + { + if (y < (*it)->getRelativePosition().LowerRightCorner.Y) + y = (*it)->getRelativePosition().LowerRightCorner.Y; + } + setMinSize( core::dimension2du(0, y+5)); + + updateAttrib(false); + } + + //! sets the parent ID, for identifying where events came from + void setParentID(s32 parentID) + { + MyParentID = parentID; + } + + //! save the attribute and possibly post the event to its parent + virtual bool updateAttrib(bool sendEvent=true) + { + if (Attribs && IsEnabled && sendEvent) + { + // build event and pass to parent + SEvent event; + event.EventType = (EEVENT_TYPE)ATTRIBEDIT_ATTRIB_CHANGED; + event.UserEvent.UserData1 = MyParentID; + event.UserEvent.UserData2 = Index; + return Parent->OnEvent(event); + } + + return true; + } + + virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) + { + IGUIElement::serializeAttributes(out, options); + } + + virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0) + { + IGUIElement::deserializeAttributes(in, options); + if (AttribName) + AttribName->setText(Text.c_str()); + } + + protected: + IGUIStaticText* AttribName; + io::IAttributes* Attribs; + u32 Index; + s32 MyParentID; + }; + +} // namespace gui +} // namespace irr + +#endif -- cgit v1.1