123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668 |
- // Copyright (C) 2002-2012 Nikolaus Gebhardt
- // This file is part of the "Irrlicht Engine".
- // For conditions of distribution and use, see copyright notice in irrlicht.h
- #ifndef __I_GUI_ENVIRONMENT_H_INCLUDED__
- #define __I_GUI_ENVIRONMENT_H_INCLUDED__
- #include "IReferenceCounted.h"
- #include "IGUISkin.h"
- #include "rect.h"
- #include "EMessageBoxFlags.h"
- #include "EFocusFlags.h"
- #include "IEventReceiver.h"
- #include "IXMLReader.h"
- #include "IXMLWriter.h"
- #include "path.h"
- namespace irr
- {
- class IOSOperator;
- class IEventReceiver;
- namespace io
- {
- class IReadFile;
- class IWriteFile;
- class IFileSystem;
- } // end namespace io
- namespace video
- {
- class IVideoDriver;
- class ITexture;
- } // end namespace video
- namespace gui
- {
- class IGUIElement;
- class IGUIFont;
- class IGUISpriteBank;
- class IGUIScrollBar;
- class IGUIImage;
- class IGUIMeshViewer;
- class IGUICheckBox;
- class IGUIListBox;
- class IGUITreeView;
- class IGUIImageList;
- class IGUIFileOpenDialog;
- class IGUIColorSelectDialog;
- class IGUIInOutFader;
- class IGUIStaticText;
- class IGUIEditBox;
- class IGUISpinBox;
- class IGUITabControl;
- class IGUITab;
- class IGUITable;
- class IGUIContextMenu;
- class IGUIComboBox;
- class IGUIToolBar;
- class IGUIButton;
- class IGUIWindow;
- class IGUIProfiler;
- class IGUIElementFactory;
- //! GUI Environment. Used as factory and manager of all other GUI elements.
- /** \par This element can create the following events of type EGUI_EVENT_TYPE (which are passed on to focused sub-elements):
- \li EGET_ELEMENT_FOCUS_LOST
- \li EGET_ELEMENT_FOCUSED
- \li EGET_ELEMENT_LEFT
- \li EGET_ELEMENT_HOVERED
- */
- class IGUIEnvironment : public virtual IReferenceCounted
- {
- public:
- //! Draws all gui elements by traversing the GUI environment starting at the root node.
- /** \param When true ensure the GuiEnvironment (aka the RootGUIElement) has the same size as the current driver screensize.
- Can be set to false to control that size yourself, p.E when not the full size should be used for UI. */
- virtual void drawAll(bool useScreenSize=true) = 0;
- //! Sets the focus to an element.
- /** Causes a EGET_ELEMENT_FOCUS_LOST event followed by a
- EGET_ELEMENT_FOCUSED event. If someone absorbed either of the events,
- then the focus will not be changed.
- \param element Pointer to the element which shall get the focus.
- \return True on success, false on failure */
- virtual bool setFocus(IGUIElement* element) = 0;
- //! Returns the element which holds the focus.
- /** \return Pointer to the element with focus. */
- virtual IGUIElement* getFocus() const = 0;
- //! Returns the element which was last under the mouse cursor
- /** NOTE: This information is updated _after_ the user-eventreceiver
- received it's mouse-events. To find the hovered element while catching
- mouse events you have to use instead:
- IGUIEnvironment::getRootGUIElement()->getElementFromPoint(mousePos);
- \return Pointer to the element under the mouse. */
- virtual IGUIElement* getHovered() const = 0;
- //! Removes the focus from an element.
- /** Causes a EGET_ELEMENT_FOCUS_LOST event. If the event is absorbed
- then the focus will not be changed.
- \param element Pointer to the element which shall lose the focus.
- \return True on success, false on failure */
- virtual bool removeFocus(IGUIElement* element) = 0;
- //! Returns whether the element has focus
- /** \param element Pointer to the element which is tested.
- \param checkSubElements When true and focus is on a sub-element of element then it will still count as focused and return true
- \return True if the element has focus, else false. */
- virtual bool hasFocus(const IGUIElement* element, bool checkSubElements=false) const = 0;
- //! Returns the current video driver.
- /** \return Pointer to the video driver. */
- virtual video::IVideoDriver* getVideoDriver() const = 0;
- //! Returns the file system.
- /** \return Pointer to the file system. */
- virtual io::IFileSystem* getFileSystem() const = 0;
- //! returns a pointer to the OS operator
- /** \return Pointer to the OS operator. */
- virtual IOSOperator* getOSOperator() const = 0;
- //! Removes all elements from the environment.
- virtual void clear() = 0;
- //! Posts an input event to the environment.
- /** Usually you do not have to
- use this method, it is used by the engine internally.
- \param event The event to post.
- \return True if succeeded, else false. */
- virtual bool postEventFromUser(const SEvent& event) = 0;
- //! This sets a new event receiver for gui events.
- /** Usually you do not have to
- use this method, it is used by the engine internally.
- \param evr Pointer to the new receiver. */
- virtual void setUserEventReceiver(IEventReceiver* evr) = 0;
- //! Returns pointer to the current gui skin.
- /** \return Pointer to the GUI skin. */
- virtual IGUISkin* getSkin() const = 0;
- //! Sets a new GUI Skin
- /** You can use this to change the appearance of the whole GUI
- Environment. You can set one of the built-in skins or implement your
- own class derived from IGUISkin and enable it using this method.
- To set for example the built-in Windows classic skin, use the following
- code:
- \code
- gui::IGUISkin* newskin = environment->createSkin(gui::EGST_WINDOWS_CLASSIC);
- environment->setSkin(newskin);
- newskin->drop();
- \endcode
- \param skin New skin to use.
- */
- virtual void setSkin(IGUISkin* skin) = 0;
- //! Creates a new GUI Skin based on a template.
- /** Use setSkin() to set the created skin.
- \param type The type of the new skin.
- \return Pointer to the created skin.
- If you no longer need it, you should call IGUISkin::drop().
- See IReferenceCounted::drop() for more information. */
- virtual IGUISkin* createSkin(EGUI_SKIN_TYPE type) = 0;
- //! Creates the image list from the given texture.
- /** \param texture Texture to split into images
- \param imageSize Dimension of each image
- \param useAlphaChannel Flag whether alpha channel of the texture should be honored.
- \return Pointer to the font. Returns 0 if the font could not be loaded.
- This pointer should not be dropped. See IReferenceCounted::drop() for
- more information. */
- virtual IGUIImageList* createImageList( video::ITexture* texture,
- core::dimension2d<s32> imageSize,
- bool useAlphaChannel ) = 0;
- //! Returns pointer to the font with the specified filename.
- /** Loads the font if it was not loaded before.
- \param filename Filename of the Font.
- \return Pointer to the font. Returns 0 if the font could not be loaded.
- This pointer should not be dropped. See IReferenceCounted::drop() for
- more information. */
- virtual IGUIFont* getFont(const io::path& filename) = 0;
- //! Adds an externally loaded font to the font list.
- /** This method allows to attach an already loaded font to the list of
- existing fonts. The font is grabbed if non-null and adding was successful.
- \param name Name the font should be stored as.
- \param font Pointer to font to add.
- \return Pointer to the font stored. This can differ from given parameter if the name previously existed. */
- virtual IGUIFont* addFont(const io::path& name, IGUIFont* font) = 0;
- //! remove loaded font
- virtual void removeFont(IGUIFont* font) = 0;
- //! Returns the default built-in font.
- /** \return Pointer to the default built-in font.
- This pointer should not be dropped. See IReferenceCounted::drop() for
- more information. */
- virtual IGUIFont* getBuiltInFont() const = 0;
- //! Returns pointer to the sprite bank which was added with addEmptySpriteBank
- /** TODO: This should load files in the future, but not implemented so far.
- \param filename Name of a spritebank added with addEmptySpriteBank
- \return Pointer to the sprite bank. Returns 0 if it could not be loaded.
- This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
- virtual IGUISpriteBank* getSpriteBank(const io::path& filename) = 0;
- //! Adds an empty sprite bank to the manager
- /** \param name Name of the new sprite bank.
- \return Pointer to the sprite bank.
- This pointer should not be dropped. See IReferenceCounted::drop() for more information. */
- virtual IGUISpriteBank* addEmptySpriteBank(const io::path& name) = 0;
- //! Returns the root gui element.
- /** This is the first gui element, the (direct or indirect) parent of all
- other gui elements. It is a valid IGUIElement, with dimensions the same
- size as the screen.
- \return Pointer to the root element of the GUI. The returned pointer
- should not be dropped. See IReferenceCounted::drop() for more
- information. */
- virtual IGUIElement* getRootGUIElement() = 0;
- //! Adds a button element.
- /** \param rectangle Rectangle specifying the borders of the button.
- \param parent Parent gui element of the button.
- \param id Id with which the gui element can be identified.
- \param text Text displayed on the button.
- \param tooltiptext Text displayed in the tooltip.
- \return Pointer to the created button. Returns 0 if an error occurred.
- This pointer should not be dropped. See IReferenceCounted::drop() for
- more information. */
- virtual IGUIButton* addButton(const core::rect<s32>& rectangle,
- IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0, const wchar_t* tooltiptext = 0) = 0;
- //! Adds an empty window element.
- /** \param rectangle Rectangle specifying the borders of the window.
- \param modal Defines if the dialog is modal. This means, that all other
- gui elements which were created before the window cannot be used until
- it is removed.
- \param text Text displayed as the window title.
- \param parent Parent gui element of the window.
- \param id Id with which the gui element can be identified.
- \return Pointer to the created window. Returns 0 if an error occurred.
- This pointer should not be dropped. See IReferenceCounted::drop() for
- more information. */
- virtual IGUIWindow* addWindow(const core::rect<s32>& rectangle, bool modal = false,
- const wchar_t* text=0, IGUIElement* parent=0, s32 id=-1) = 0;
- //! Adds a modal screen.
- /** Input focus stays with children of the modal screen.
- If you have some window x which should keep the input focus you
- do something like: addModalScreen()->addChild(x). And x will then get the focus
- and not lose it anymore.
- The modal screen removes itself when it no longer has any children.
- Note that it usually works badly to pass the modal screen already as parent when creating
- a new element. It's better to add that new element later to the modal screen with addChild.
- \param parent Parent gui element of the modal.
- \return Pointer to the created modal. Returns 0 if an error occurred.
- This pointer should not be dropped. See IReferenceCounted::drop() for
- more information. */
- virtual IGUIElement* addModalScreen(IGUIElement* parent) = 0;
- //! Adds a message box.
- /** \param caption Text to be displayed the title of the message box.
- \param text Text to be displayed in the body of the message box.
- \param modal Defines if the dialog is modal. This means, that all other
- gui elements which were created before the message box cannot be used
- until this messagebox is removed.
- \param flags Flags specifying the layout of the message box using ::EMESSAGE_BOX_FLAG.
- Create a message box with an OK and CANCEL button for example with (EMBF_OK | EMBF_CANCEL).
- \param parent Parent gui element of the message box.
- \param id Id with which the gui element can be identified.
- \param image Optional texture which will be displayed beside the text as an image
- \return Pointer to the created message box. Returns 0 if an error
- occurred. This pointer should not be dropped. See
- IReferenceCounted::drop() for more information. */
- virtual IGUIWindow* addMessageBox(const wchar_t* caption, const wchar_t* text=0,
- bool modal = true, s32 flags = EMBF_OK, IGUIElement* parent=0, s32 id=-1, video::ITexture* image=0) = 0;
- //! Adds a scrollbar.
- /** \param horizontal Specifies if the scroll bar is drawn horizontal
- or vertical.
- \param rectangle Rectangle specifying the borders of the scrollbar.
- \param parent Parent gui element of the scroll bar.
- \param id Id to identify the gui element.
- \return Pointer to the created scrollbar. Returns 0 if an error
- occurred. This pointer should not be dropped. See
- IReferenceCounted::drop() for more information. */
- virtual IGUIScrollBar* addScrollBar(bool horizontal, const core::rect<s32>& rectangle,
- IGUIElement* parent=0, s32 id=-1) = 0;
- //! Adds an image element.
- /** \param image Image to be displayed.
- \param pos Position of the image. The width and height of the image is
- taken from the image.
- \param useAlphaChannel Sets if the image should use the alpha channel
- of the texture to draw itself.
- \param parent Parent gui element of the image.
- \param id Id to identify the gui element.
- \param text Title text of the image (not displayed).
- \return Pointer to the created image element. Returns 0 if an error
- occurred. This pointer should not be dropped. See
- IReferenceCounted::drop() for more information. */
- virtual IGUIImage* addImage(video::ITexture* image, core::position2d<s32> pos,
- bool useAlphaChannel=true, IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0) = 0;
- //! Adds an image element.
- /** Use IGUIImage::setImage later to set the image to be displayed.
- \param rectangle Rectangle specifying the borders of the image.
- \param parent Parent gui element of the image.
- \param id Id to identify the gui element.
- \param text Title text of the image (not displayed).
- \param useAlphaChannel Sets if the image should use the alpha channel
- of the texture to draw itself.
- \return Pointer to the created image element. Returns 0 if an error
- occurred. This pointer should not be dropped. See
- IReferenceCounted::drop() for more information. */
- virtual IGUIImage* addImage(const core::rect<s32>& rectangle,
- IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0, bool useAlphaChannel=true) = 0;
- //! Adds a checkbox element.
- /** \param checked Define the initial state of the check box.
- \param rectangle Rectangle specifying the borders of the check box.
- \param parent Parent gui element of the check box.
- \param id Id to identify the gui element.
- \param text Title text of the check box.
- \return Pointer to the created check box. Returns 0 if an error
- occurred. This pointer should not be dropped. See
- IReferenceCounted::drop() for more information. */
- virtual IGUICheckBox* addCheckBox(bool checked, const core::rect<s32>& rectangle,
- IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0) = 0;
- //! Adds a list box element.
- /** \param rectangle Rectangle specifying the borders of the list box.
- \param parent Parent gui element of the list box.
- \param id Id to identify the gui element.
- \param drawBackground Flag whether the background should be drawn.
- \return Pointer to the created list box. Returns 0 if an error occurred.
- This pointer should not be dropped. See IReferenceCounted::drop() for
- more information. */
- virtual IGUIListBox* addListBox(const core::rect<s32>& rectangle,
- IGUIElement* parent=0, s32 id=-1, bool drawBackground=false) = 0;
- //! Adds a tree view element.
- /** \param rectangle Position and dimension of list box.
- \param parent Parent gui element of the list box.
- \param id Id to identify the gui element.
- \param drawBackground Flag whether the background should be drawn.
- \param scrollBarVertical Flag whether a vertical scrollbar should be used
- \param scrollBarHorizontal Flag whether a horizontal scrollbar should be used
- \return Pointer to the created list box. Returns 0 if an error occurred.
- This pointer should not be dropped. See IReferenceCounted::drop() for
- more information. */
- virtual IGUITreeView* addTreeView(const core::rect<s32>& rectangle,
- IGUIElement* parent=0, s32 id=-1, bool drawBackground=false,
- bool scrollBarVertical = true, bool scrollBarHorizontal = false) = 0;
- //! Adds a mesh viewer. Not 100% implemented yet.
- /** \param rectangle Rectangle specifying the borders of the mesh viewer.
- \param parent Parent gui element of the mesh viewer.
- \param id Id to identify the gui element.
- \param text Title text of the mesh viewer.
- \return Pointer to the created mesh viewer. Returns 0 if an error
- occurred. This pointer should not be dropped. See
- IReferenceCounted::drop() for more information. */
- virtual IGUIMeshViewer* addMeshViewer(const core::rect<s32>& rectangle,
- IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0) = 0;
- //! Adds a file open dialog.
- /** \param title Text to be displayed as the title of the dialog.
- \param modal Defines if the dialog is modal. This means, that all other
- gui elements which were created before the message box cannot be used
- until this messagebox is removed.
- \param parent Parent gui element of the dialog.
- \param id Id to identify the gui element.
- \param restoreCWD If set to true, the current working directory will be
- restored after the dialog is closed in some way. Otherwise the working
- directory will be the one that the file dialog was last showing.
- \param startDir Optional path for which the file dialog will be opened.
- \return Pointer to the created file open dialog. Returns 0 if an error
- occurred. This pointer should not be dropped. See
- IReferenceCounted::drop() for more information. */
- virtual IGUIFileOpenDialog* addFileOpenDialog(const wchar_t* title=0,
- bool modal=true, IGUIElement* parent=0, s32 id=-1,
- bool restoreCWD=false, io::path::char_type* startDir=0) = 0;
- //! Adds a color select dialog.
- /** \param title The title of the dialog.
- \param modal Defines if the dialog is modal. This means, that all other
- gui elements which were created before the dialog cannot be used
- until it is removed.
- \param parent The parent of the dialog.
- \param id The ID of the dialog.
- \return Pointer to the created file open dialog. Returns 0 if an error
- occurred. This pointer should not be dropped. See
- IReferenceCounted::drop() for more information. */
- virtual IGUIColorSelectDialog* addColorSelectDialog(const wchar_t* title = 0,
- bool modal=true, IGUIElement* parent=0, s32 id=-1) = 0;
- //! Adds a static text.
- /** \param text Text to be displayed. Can be altered after creation by SetText().
- \param rectangle Rectangle specifying the borders of the static text
- \param border Set to true if the static text should have a 3d border.
- \param wordWrap Enable if the text should wrap into multiple lines.
- \param parent Parent item of the element, e.g. a window.
- \param id The ID of the element.
- \param fillBackground Enable if the background shall be filled.
- Defaults to false.
- \return Pointer to the created static text. Returns 0 if an error
- occurred. This pointer should not be dropped. See
- IReferenceCounted::drop() for more information. */
- 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 fillBackground = false) = 0;
- //! Adds an edit box.
- /** Supports Unicode input from every keyboard around the world,
- scrolling, copying and pasting (exchanging data with the clipboard
- directly), maximum character amount, marking, and all shortcuts like
- ctrl+X, ctrl+V, ctrl+C, shift+Left, shift+Right, Home, End, and so on.
- \param text Text to be displayed. Can be altered after creation
- by setText().
- \param rectangle Rectangle specifying the borders of the edit box.
- \param border Set to true if the edit box should have a 3d border.
- \param parent Parent item of the element, e.g. a window.
- Set it to 0 to place the edit box directly in the environment.
- \param id The ID of the element.
- \return Pointer to the created edit box. Returns 0 if an error occurred.
- This pointer should not be dropped. See IReferenceCounted::drop() for
- more information. */
- virtual IGUIEditBox* addEditBox(const wchar_t* text, const core::rect<s32>& rectangle,
- bool border=true, IGUIElement* parent=0, s32 id=-1) = 0;
- //! Adds a spin box.
- /** An edit box with up and down buttons
- \param text Text to be displayed. Can be altered after creation by setText().
- \param rectangle Rectangle specifying the borders of the spin box.
- \param border Set to true if the spin box should have a 3d border.
- \param parent Parent item of the element, e.g. a window.
- Set it to 0 to place the spin box directly in the environment.
- \param id The ID of the element.
- \return Pointer to the created spin box. Returns 0 if an error occurred.
- This pointer should not be dropped. See IReferenceCounted::drop() for
- more information. */
- virtual IGUISpinBox* addSpinBox(const wchar_t* text, const core::rect<s32>& rectangle,
- bool border=true,IGUIElement* parent=0, s32 id=-1) = 0;
- //! Adds an element for fading in or out.
- /** \param rectangle Rectangle specifying the borders of the fader.
- If the pointer is NULL, the whole screen is used.
- \param parent Parent item of the element, e.g. a window.
- \param id An identifier for the fader.
- \return Pointer to the created in-out-fader. Returns 0 if an error
- occurred. This pointer should not be dropped. See
- IReferenceCounted::drop() for more information. */
- virtual IGUIInOutFader* addInOutFader(const core::rect<s32>* rectangle=0, IGUIElement* parent=0, s32 id=-1) = 0;
- //! Adds a tab control to the environment.
- /** \param rectangle Rectangle specifying the borders of the tab control.
- \param parent Parent item of the element, e.g. a window.
- Set it to 0 to place the tab control directly in the environment.
- \param fillbackground Specifies if the background of the tab control
- should be drawn.
- \param border Specifies if a flat 3d border should be drawn. This is
- usually not necessary unless you place the control directly into
- the environment without a window as parent.
- \param id An identifier for the tab control.
- \return Pointer to the created tab control element. Returns 0 if an
- error occurred. This pointer should not be dropped. See
- IReferenceCounted::drop() for more information. */
- virtual IGUITabControl* addTabControl(const core::rect<s32>& rectangle,
- IGUIElement* parent=0, bool fillbackground=false,
- bool border=true, s32 id=-1) = 0;
- //! Adds tab to the environment.
- /** You can use this element to group other elements. This is not used
- for creating tabs on tab controls, please use IGUITabControl::addTab()
- for this instead.
- \param rectangle Rectangle specifying the borders of the tab.
- \param parent Parent item of the element, e.g. a window.
- Set it to 0 to place the tab directly in the environment.
- \param id An identifier for the tab.
- \return Pointer to the created tab. Returns 0 if an
- error occurred. This pointer should not be dropped. See
- IReferenceCounted::drop() for more information. */
- virtual IGUITab* addTab(const core::rect<s32>& rectangle,
- IGUIElement* parent=0, s32 id=-1) = 0;
- //! Adds a context menu to the environment.
- /** \param rectangle Rectangle specifying the borders of the menu.
- Note that the menu is resizing itself based on what items you add.
- \param parent Parent item of the element, e.g. a window.
- Set it to 0 to place the menu directly in the environment.
- \param id An identifier for the menu.
- \return Pointer to the created context menu. Returns 0 if an
- error occurred. This pointer should not be dropped. See
- IReferenceCounted::drop() for more information. */
- virtual IGUIContextMenu* addContextMenu(const core::rect<s32>& rectangle,
- IGUIElement* parent=0, s32 id=-1) = 0;
- //! Adds a menu to the environment.
- /** This is like the menu you can find on top of most windows in modern
- graphical user interfaces.
- \param parent Parent item of the element, e.g. a window.
- Set it to 0 to place the menu directly in the environment.
- \param id An identifier for the menu.
- \return Pointer to the created menu. Returns 0 if an
- error occurred. This pointer should not be dropped. See
- IReferenceCounted::drop() for more information. */
- virtual IGUIContextMenu* addMenu(IGUIElement* parent=0, s32 id=-1) = 0;
- //! Adds a toolbar to the environment.
- /** It is like a menu that is always placed on top of its parent, and
- contains buttons.
- \param parent Parent item of the element, e.g. a window.
- Set it to 0 to place the tool bar directly in the environment.
- \param id An identifier for the tool bar.
- \return Pointer to the created tool bar. Returns 0 if an
- error occurred. This pointer should not be dropped. See
- IReferenceCounted::drop() for more information. */
- virtual IGUIToolBar* addToolBar(IGUIElement* parent=0, s32 id=-1) = 0;
- //! Adds a combo box to the environment.
- /** \param rectangle Rectangle specifying the borders of the combo box.
- \param parent Parent item of the element, e.g. a window.
- Set it to 0 to place the combo box directly in the environment.
- \param id An identifier for the combo box.
- \return Pointer to the created combo box. Returns 0 if an
- error occurred. This pointer should not be dropped. See
- IReferenceCounted::drop() for more information. */
- virtual IGUIComboBox* addComboBox(const core::rect<s32>& rectangle,
- IGUIElement* parent=0, s32 id=-1) = 0;
- //! Adds a table to the environment
- /** \param rectangle Rectangle specifying the borders of the table.
- \param parent Parent item of the element, e.g. a window. Set it to 0
- to place the element directly in the environment.
- \param id An identifier for the table.
- \param drawBackground Flag whether the background should be drawn.
- \return Pointer to the created table. Returns 0 if an error occurred.
- This pointer should not be dropped. See IReferenceCounted::drop() for
- more information. */
- virtual IGUITable* addTable(const core::rect<s32>& rectangle,
- IGUIElement* parent=0, s32 id=-1, bool drawBackground=false) =0;
- //! Adds an element to display the information from the Irrlicht profiler
- /** \param rectangle Rectangle specifying the borders of the element.
- \param parent Parent of the element. When 0 the environment itself will
- be the parent.
- \param id An identifier for the element. */
- virtual IGUIProfiler* addProfilerDisplay(const core::rect<s32>& rectangle,
- IGUIElement* parent=0, s32 id=-1) = 0;
- //! Get the default element factory which can create all built-in elements
- /** \return Pointer to the factory.
- This pointer should not be dropped. See IReferenceCounted::drop() for
- more information. */
- virtual IGUIElementFactory* getDefaultGUIElementFactory() const = 0;
- //! Adds an element factory to the gui environment.
- /** Use this to extend the gui environment with new element types which
- it should be able to create automatically, for example when loading
- data from xml files.
- \param factoryToAdd Pointer to new factory. */
- virtual void registerGUIElementFactory(IGUIElementFactory* factoryToAdd) = 0;
- //! Get amount of registered gui element factories.
- /** \return Amount of registered gui element factories. */
- virtual u32 getRegisteredGUIElementFactoryCount() const = 0;
- //! Get a gui element factory by index
- /** \param index Index of the factory.
- \return Factory at given index, or 0 if no such factory exists. */
- virtual IGUIElementFactory* getGUIElementFactory(u32 index) const = 0;
- //! Adds a GUI element by its name
- /** Each factory is checked if it can create an element of the given
- name. The first match will be created.
- \param elementName Name of the element to be created.
- \param parent Parent of the new element, if not 0.
- \return New GUI element, or 0 if no such element exists. */
- virtual IGUIElement* addGUIElement(const c8* elementName, IGUIElement* parent=0) = 0;
- //! Saves the current gui into a file.
- /** \param filename Name of the file.
- \param start The GUIElement to start with. Root if 0.
- \return True if saving succeeded, else false. */
- virtual bool saveGUI(const io::path& filename, IGUIElement* start=0) = 0;
- //! Saves the current gui into a file.
- /** \param file The file to write to.
- \param start The GUIElement to start with. Root if 0.
- \return True if saving succeeded, else false. */
- virtual bool saveGUI(io::IWriteFile* file, IGUIElement* start=0) = 0;
- //! Loads the gui. Note that the current gui is not cleared before.
- /** When a parent is set the elements will be added below the parent, the parent itself does not deserialize.
- When the file contains skin-settings from the gui-environment those are always serialized into the
- guienvironment independent of the parent setting.
- \param filename Name of the file.
- \param parent Parent for the loaded GUI, root if 0.
- \return True if loading succeeded, else false. */
- virtual bool loadGUI(const io::path& filename, IGUIElement* parent=0) = 0;
- //! Loads the gui. Note that the current gui is not cleared before.
- /** When a parent is set the elements will be added below the parent, the parent itself does not deserialize.
- When the file contains skin-settings from the gui-environment those are always serialized into the
- guienvironment independent of the parent setting.
- \param file The file to load from.
- \param parent Parent for the loaded GUI, root if 0.
- \return True if loading succeeded, else false. */
- virtual bool loadGUI(io::IReadFile* file, IGUIElement* parent=0) = 0;
- //! Writes attributes of the gui environment
- virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const =0;
- //! Reads attributes of the gui environment
- virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0)=0;
- //! writes an element
- virtual void writeGUIElement(io::IXMLWriter* writer, IGUIElement* element) =0;
- //! reads an element
- virtual void readGUIElement(io::IXMLReader* reader, IGUIElement* element) =0;
- //! Find the next element which would be selected when pressing the tab-key
- /** If you set the focus for the result you can manually force focus-changes like they
- would happen otherwise by the tab-keys.
- \param reverse When true it will search backward (toward lower TabOrder numbers, like shift+tab)
- \param group When true it will search for the next tab-group (like ctrl+tab)
- */
- virtual IGUIElement* getNextElement(bool reverse=false, bool group=false) = 0;
- //! Set the way the gui will handle automatic focus changes
- /** The default is (EFF_SET_ON_LMOUSE_DOWN | EFF_SET_ON_TAB).
- with the left mouse button.
- This does not affect the setFocus function itself - users can still call that whenever they want on any element.
- \param flags A bitmask which is a combination of ::EFOCUS_FLAG flags.*/
- virtual void setFocusBehavior(u32 flags) = 0;
- //! Get the way the gui does handle focus changes
- /** \returns A bitmask which is a combination of ::EFOCUS_FLAG flags.*/
- virtual u32 getFocusBehavior() const = 0;
- //! Adds a IGUIElement to deletion queue.
- /** Queued elements will be removed at the end of each drawAll call.
- Or latest in the destructor of the GUIEnvironment.
- This can be used to allow an element removing itself safely in a function
- iterating over gui elements, like an overloaded IGUIElement::draw or
- IGUIElement::OnPostRender function.
- Note that in general just calling IGUIElement::remove() is enough.
- Unless you create your own GUI elements removing themselves you won't need it.
- \param element: Element to remove */
- virtual void addToDeletionQueue(IGUIElement* element) = 0;
- };
- } // end namespace gui
- } // end namespace irr
- #endif
|