123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- /*
- 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"
- 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<s32>(0, 0, 100, 100) ),
- AttribName(0), Attribs(0), Index(0), MyParentID(myParentID)
- {
- #ifdef _DEBUG
- setDebugName("CGUIAttribute");
- #endif
- AttribName = environment->addStaticText(0,
- core::rect<s32>(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<s32> r = Parent->getAbsolutePosition();
- core::rect<s32> r2(0, 5,
- r.getWidth(), Environment->getSkin()->getFont()->getDimension(L"A").Height + 10 );
- AttribName->setRelativePosition(r2);
- // get minimum height
- s32 y=0;
- core::list<IGUIElement*>::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
|