#ifndef __C_GUI_ENVIRONMENT_H_INCLUDED__
#define __C_GUI_ENVIRONMENT_H_INCLUDED__
#include "IrrCompileConfig.h"
#ifdef _IRR_COMPILE_WITH_GUI_
#include "IGUIEnvironment.h"
#include "IGUIElement.h"
#include "irrArray.h"
#include "IFileSystem.h"
#include "IOSOperator.h"
namespace irr
{
namespace io
{
class IXMLWriter;
}
namespace gui
{
class CGUIEnvironment : public IGUIEnvironment, public IGUIElement
{
public:
CGUIEnvironment(io::IFileSystem* fs, video::IVideoDriver* driver, IOSOperator* op);
virtual ~CGUIEnvironment();
virtual void drawAll();
virtual video::IVideoDriver* getVideoDriver() const;
virtual io::IFileSystem* getFileSystem() const;
virtual IOSOperator* getOSOperator() const;
virtual bool postEventFromUser(const SEvent& event);
virtual void setUserEventReceiver(IEventReceiver* evr);
virtual void clear();
virtual bool OnEvent(const SEvent& event);
virtual IGUISkin* getSkin() const;
virtual void setSkin(IGUISkin* skin);
virtual IGUISkin* createSkin(EGUI_SKIN_TYPE type);
virtual IGUIImageList* createImageList( video::ITexture* texture,
core::dimension2d<s32> imageSize, bool useAlphaChannel );
virtual IGUIFont* getFont(const io::path& filename);
virtual IGUIFont* addFont(const io::path& name, IGUIFont* font);
virtual void removeFont(IGUIFont* font);
virtual IGUIFont* getBuiltInFont() const;
virtual IGUISpriteBank* getSpriteBank(const io::path& filename);
virtual IGUISpriteBank* addEmptySpriteBank(const io::path& name);
virtual IGUIButton* addButton(const core::rect<s32>& rectangle, IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0,const wchar_t* tooltiptext = 0);
virtual IGUIWindow* addWindow(const core::rect<s32>& rectangle, bool modal = false,
const wchar_t* text=0, IGUIElement* parent=0, s32 id=-1);
virtual IGUIElement* addModalScreen(IGUIElement* parent);
virtual IGUIWindow* addMessageBox(const wchar_t* caption, const wchar_t* text=0,
bool modal = true, s32 flag = EMBF_OK, IGUIElement* parent=0, s32 id=-1, video::ITexture* image=0);
virtual IGUIScrollBar* addScrollBar(bool horizontal, const core::rect<s32>& rectangle,
IGUIElement* parent=0, s32 id=-1);
virtual IGUIImage* addImage(video::ITexture* image, core::position2d<s32> pos,
bool useAlphaChannel=true, IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0);
virtual IGUIImage* addImage(const core::rect<s32>& rectangle,
IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0);
virtual IGUICheckBox* addCheckBox(bool checked, const core::rect<s32>& rectangle, IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0);
virtual IGUIListBox* addListBox(const core::rect<s32>& rectangle,
IGUIElement* parent=0, s32 id=-1, bool drawBackground=false);
virtual IGUITreeView* addTreeView(const core::rect<s32>& rectangle,
IGUIElement* parent=0, s32 id=-1, bool drawBackground=false,
bool scrollBarVertical = true, bool scrollBarHorizontal = false);
virtual IGUIMeshViewer* addMeshViewer(const core::rect<s32>& rectangle, IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0);
virtual IGUIFileOpenDialog* addFileOpenDialog(const wchar_t* title = 0, bool modal=true, IGUIElement* parent=0, s32 id=-1);
virtual IGUIColorSelectDialog* addColorSelectDialog(const wchar_t* title = 0, bool modal=true, IGUIElement* parent=0, s32 id=-1);
virtual IGUIStaticText* addStaticText(const wchar_t* text, const core::rect<s32>& rectangle,
bool border=false, bool wordWrap=true, IGUIElement* parent=0, s32 id=-1, bool drawBackground = false);
virtual IGUIEditBox* addEditBox(const wchar_t* text, const core::rect<s32>& rectangle,
bool border=false, IGUIElement* parent=0, s32 id=-1);
virtual IGUISpinBox* addSpinBox(const wchar_t* text, const core::rect<s32>& rectangle,
bool border=false,IGUIElement* parent=0, s32 id=-1);
virtual IGUITabControl* addTabControl(const core::rect<s32>& rectangle,
IGUIElement* parent=0, bool fillbackground=false, bool border=true, s32 id=-1);
virtual IGUITab* addTab(const core::rect<s32>& rectangle,
IGUIElement* parent=0, s32 id=-1);
virtual IGUIContextMenu* addContextMenu(const core::rect<s32>& rectangle,
IGUIElement* parent=0, s32 id=-1);
virtual IGUIContextMenu* addMenu(IGUIElement* parent=0, s32 id=-1);
virtual IGUIToolBar* addToolBar(IGUIElement* parent=0, s32 id=-1);
virtual IGUIComboBox* addComboBox(const core::rect<s32>& rectangle,
IGUIElement* parent=0, s32 id=-1);
virtual IGUITable* addTable(const core::rect<s32>& rectangle,
IGUIElement* parent=0, s32 id=-1, bool drawBackground=false);
virtual bool setFocus(IGUIElement* element);
virtual bool removeFocus(IGUIElement* element);
virtual bool hasFocus(IGUIElement* element) const;
virtual IGUIElement* getFocus() const;
virtual IGUIInOutFader* addInOutFader(const core::rect<s32>* rectangle=0, IGUIElement* parent=0, s32 id=-1);
virtual IGUIElement* getRootGUIElement();
virtual void OnPostRender( u32 time );
virtual IGUIElementFactory* getDefaultGUIElementFactory() const;
virtual void registerGUIElementFactory(IGUIElementFactory* factoryToAdd);
virtual u32 getRegisteredGUIElementFactoryCount() const;
virtual IGUIElementFactory* getGUIElementFactory(u32 index) const;
virtual IGUIElement* addGUIElement(const c8* elementName, IGUIElement* parent=0);
virtual bool saveGUI( const io::path& filename, IGUIElement* start=0);
virtual bool saveGUI(io::IWriteFile* file, IGUIElement* start=0);
virtual bool loadGUI(const io::path& filename, IGUIElement* parent=0);
virtual bool loadGUI(io::IReadFile* file, IGUIElement* parent=0);
virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const;
virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0);
virtual void writeGUIElement(io::IXMLWriter* writer, IGUIElement* node);
virtual void readGUIElement(io::IXMLReader* reader, IGUIElement* node);
private:
IGUIElement* getNextElement(bool reverse=false, bool group=false);
void updateHoveredElement(core::position2d<s32> mousePos);
void loadBuiltInFont();
struct SFont
{
io::SNamedPath NamedPath;
IGUIFont* Font;
bool operator < (const SFont& other) const
{
return (NamedPath < other.NamedPath);
}
};
struct SSpriteBank
{
io::SNamedPath NamedPath;
IGUISpriteBank* Bank;
bool operator < (const SSpriteBank& other) const
{
return (NamedPath < other.NamedPath);
}
};
struct SToolTip
{
IGUIStaticText* Element;
u32 LastTime;
u32 EnterTime;
u32 LaunchTime;
u32 RelaunchTime;
};
SToolTip ToolTip;
core::array<IGUIElementFactory*> GUIElementFactoryList;
core::array<SFont> Fonts;
core::array<SSpriteBank> Banks;
video::IVideoDriver* Driver;
IGUIElement* Hovered;
IGUIElement* HoveredNoSubelement;
IGUIElement* Focus;
core::position2d<s32> LastHoveredMousePos;
IGUISkin* CurrentSkin;
io::IFileSystem* FileSystem;
IEventReceiver* UserReceiver;
IOSOperator* Operator;
};
}
}
#endif
#endif