1 #ifndef __C_GUI_STRING_ATTRIBUTE_H_INCLUDED__
2 #define __C_GUI_STRING_ATTRIBUTE_H_INCLUDED__
3 
4 #include "CGUIAttribute.h"
5 #include "IGUIEditBox.h"
6 #include "EGUIEditTypes.h"
7 
8 namespace irr
9 {
10 namespace gui
11 {
12 
13 	class CGUIStringAttribute : public CGUIAttribute
14 	{
15 	public:
16 		//
CGUIStringAttribute(IGUIEnvironment * environment,IGUIElement * parent,s32 myParentID)17 		CGUIStringAttribute(IGUIEnvironment* environment, IGUIElement *parent, s32 myParentID) :
18 			CGUIAttribute(environment, parent, myParentID),
19 			AttribEditBox(0)
20 		{
21 			core::rect<s32> r = getAbsolutePosition();
22 			core::rect<s32> r2(0, Environment->getSkin()->getFont()->getDimension(L"A").Height + 10,
23 				r.getWidth() - 5,
24 				Environment->getSkin()->getFont()->getDimension(L"A").Height*2 + 15 );
25 
26 			AttribEditBox = environment->addEditBox(0, r2, true, this, -1);
27 			AttribEditBox->grab();
28 			AttribEditBox->setSubElement(true);
29 			AttribEditBox->setAlignment(EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_UPPERLEFT);
30 
31 		}
32 
~CGUIStringAttribute()33 		virtual ~CGUIStringAttribute()
34 		{
35 			if (AttribEditBox)
36 				AttribEditBox->drop();
37 		}
38 
setAttrib(io::IAttributes * attribs,u32 attribIndex)39 		virtual void setAttrib(io::IAttributes *attribs, u32 attribIndex)
40 		{
41 			AttribEditBox->setText(attribs->getAttributeAsStringW(attribIndex).c_str());
42 			CGUIAttribute::setAttrib(attribs, attribIndex);
43 		}
44 
45 		//! save the attribute and possibly post the event to its parent
46 		virtual bool updateAttrib(bool sendEvent=true)
47 		{
48 			if (!Attribs)
49 				return true;
50 
51 			Attribs->setAttribute(Index, AttribEditBox->getText());
52 			AttribEditBox->setText(Attribs->getAttributeAsStringW(Index).c_str());
53 
54 			return CGUIAttribute::updateAttrib(sendEvent);
55 		}
56 
57 		//! Returns the type name of the gui element.
getTypeName()58 		virtual const c8* getTypeName() const
59 		{
60 			return GUIEditElementTypeNames[EGUIEDIT_STRINGATTRIBUTE];
61 		}
62 
63 	private:
64 		IGUIEditBox*		AttribEditBox;
65 	};
66 
67 } // namespace gui
68 } // namespace irr
69 
70 #endif
71