2019-12-12 17:32:41 +01:00
|
|
|
// 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 __C_GUI_LIST_BOX_H_INCLUDED__
|
|
|
|
#define __C_GUI_LIST_BOX_H_INCLUDED__
|
|
|
|
|
|
|
|
#include "IrrCompileConfig.h"
|
|
|
|
#ifdef _IRR_COMPILE_WITH_GUI_
|
|
|
|
|
|
|
|
#include "IGUIListBox.h"
|
|
|
|
#include "irrArray.h"
|
|
|
|
|
|
|
|
namespace irr
|
|
|
|
{
|
|
|
|
namespace gui
|
|
|
|
{
|
|
|
|
|
|
|
|
class IGUIFont;
|
|
|
|
class IGUIScrollBar;
|
|
|
|
|
|
|
|
class CGUIListBox : public IGUIListBox
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
//! constructor
|
|
|
|
CGUIListBox(IGUIEnvironment* environment, IGUIElement* parent,
|
|
|
|
s32 id, core::rect<s32> rectangle, bool clip=true,
|
|
|
|
bool drawBack=false, bool moveOverSelect=false);
|
|
|
|
|
|
|
|
//! destructor
|
|
|
|
virtual ~CGUIListBox();
|
|
|
|
|
|
|
|
//! returns amount of list items
|
2021-08-27 14:55:10 +02:00
|
|
|
virtual u32 getItemCount() const IRR_OVERRIDE;
|
2019-12-12 17:32:41 +01:00
|
|
|
|
|
|
|
//! returns string of a list item. the id may be a value from 0 to itemCount-1
|
2021-08-27 14:55:10 +02:00
|
|
|
virtual const wchar_t* getListItem(u32 id) const IRR_OVERRIDE;
|
2019-12-12 17:32:41 +01:00
|
|
|
|
|
|
|
//! adds an list item, returns id of item
|
2021-08-27 14:55:10 +02:00
|
|
|
virtual u32 addItem(const wchar_t* text) IRR_OVERRIDE;
|
2019-12-12 17:32:41 +01:00
|
|
|
|
|
|
|
//! clears the list
|
2021-08-27 14:55:10 +02:00
|
|
|
virtual void clear() IRR_OVERRIDE;
|
2019-12-12 17:32:41 +01:00
|
|
|
|
|
|
|
//! returns id of selected item. returns -1 if no item is selected.
|
2021-08-27 14:55:10 +02:00
|
|
|
virtual s32 getSelected() const IRR_OVERRIDE;
|
2019-12-12 17:32:41 +01:00
|
|
|
|
|
|
|
//! sets the selected item. Set this to -1 if no item should be selected
|
2021-08-27 14:55:10 +02:00
|
|
|
virtual void setSelected(s32 id) IRR_OVERRIDE;
|
2019-12-12 17:32:41 +01:00
|
|
|
|
|
|
|
//! sets the selected item. Set this to -1 if no item should be selected
|
2021-08-27 14:55:10 +02:00
|
|
|
virtual void setSelected(const wchar_t *item) IRR_OVERRIDE;
|
2019-12-12 17:32:41 +01:00
|
|
|
|
|
|
|
//! called if an event happened.
|
2021-08-27 14:55:10 +02:00
|
|
|
virtual bool OnEvent(const SEvent& event) IRR_OVERRIDE;
|
2019-12-12 17:32:41 +01:00
|
|
|
|
|
|
|
//! draws the element and its children
|
2021-08-27 14:55:10 +02:00
|
|
|
virtual void draw() IRR_OVERRIDE;
|
2019-12-12 17:32:41 +01:00
|
|
|
|
|
|
|
//! adds an list item with an icon
|
|
|
|
//! \param text Text of list entry
|
|
|
|
//! \param icon Sprite index of the Icon within the current sprite bank. Set it to -1 if you want no icon
|
|
|
|
//! \return
|
|
|
|
//! returns the id of the new created item
|
2021-08-27 14:55:10 +02:00
|
|
|
virtual u32 addItem(const wchar_t* text, s32 icon) IRR_OVERRIDE;
|
2019-12-12 17:32:41 +01:00
|
|
|
|
|
|
|
//! Returns the icon of an item
|
2021-08-27 14:55:10 +02:00
|
|
|
virtual s32 getIcon(u32 id) const IRR_OVERRIDE;
|
2019-12-12 17:32:41 +01:00
|
|
|
|
|
|
|
//! removes an item from the list
|
2021-08-27 14:55:10 +02:00
|
|
|
virtual void removeItem(u32 id) IRR_OVERRIDE;
|
2019-12-12 17:32:41 +01:00
|
|
|
|
|
|
|
//! get the the id of the item at the given absolute coordinates
|
2021-08-27 14:55:10 +02:00
|
|
|
virtual s32 getItemAt(s32 xpos, s32 ypos) const IRR_OVERRIDE;
|
2019-12-12 17:32:41 +01:00
|
|
|
|
|
|
|
//! Sets the sprite bank which should be used to draw list icons. This font is set to the sprite bank of
|
|
|
|
//! the built-in-font by default. A sprite can be displayed in front of every list item.
|
|
|
|
//! An icon is an index within the icon sprite bank. Several default icons are available in the
|
|
|
|
//! skin through getIcon
|
2021-08-27 14:55:10 +02:00
|
|
|
virtual void setSpriteBank(IGUISpriteBank* bank) IRR_OVERRIDE;
|
2019-12-12 17:32:41 +01:00
|
|
|
|
|
|
|
//! set whether the listbox should scroll to newly selected items
|
2021-08-27 14:55:10 +02:00
|
|
|
virtual void setAutoScrollEnabled(bool scroll) IRR_OVERRIDE;
|
2019-12-12 17:32:41 +01:00
|
|
|
|
|
|
|
//! returns true if automatic scrolling is enabled, false if not.
|
2021-08-27 14:55:10 +02:00
|
|
|
virtual bool isAutoScrollEnabled() const IRR_OVERRIDE;
|
2019-12-12 17:32:41 +01:00
|
|
|
|
|
|
|
//! Update the position and size of the listbox, and update the scrollbar
|
2021-08-27 14:55:10 +02:00
|
|
|
virtual void updateAbsolutePosition() IRR_OVERRIDE;
|
2019-12-12 17:32:41 +01:00
|
|
|
|
|
|
|
//! Writes attributes of the element.
|
2021-08-27 14:55:10 +02:00
|
|
|
virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options) const IRR_OVERRIDE;
|
2019-12-12 17:32:41 +01:00
|
|
|
|
|
|
|
//! Reads attributes of the element
|
2021-08-27 14:55:10 +02:00
|
|
|
virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options) IRR_OVERRIDE;
|
2019-12-12 17:32:41 +01:00
|
|
|
|
|
|
|
//! set all item colors at given index to color
|
2021-08-27 14:55:10 +02:00
|
|
|
virtual void setItemOverrideColor(u32 index, video::SColor color) IRR_OVERRIDE;
|
2019-12-12 17:32:41 +01:00
|
|
|
|
|
|
|
//! set all item colors of specified type at given index to color
|
2021-08-27 14:55:10 +02:00
|
|
|
virtual void setItemOverrideColor(u32 index, EGUI_LISTBOX_COLOR colorType, video::SColor color) IRR_OVERRIDE;
|
2019-12-12 17:32:41 +01:00
|
|
|
|
|
|
|
//! clear all item colors at index
|
2021-08-27 14:55:10 +02:00
|
|
|
virtual void clearItemOverrideColor(u32 index) IRR_OVERRIDE;
|
2019-12-12 17:32:41 +01:00
|
|
|
|
|
|
|
//! clear item color at index for given colortype
|
2021-08-27 14:55:10 +02:00
|
|
|
virtual void clearItemOverrideColor(u32 index, EGUI_LISTBOX_COLOR colorType) IRR_OVERRIDE;
|
2019-12-12 17:32:41 +01:00
|
|
|
|
|
|
|
//! has the item at index its color overwritten?
|
2021-08-27 14:55:10 +02:00
|
|
|
virtual bool hasItemOverrideColor(u32 index, EGUI_LISTBOX_COLOR colorType) const IRR_OVERRIDE;
|
2019-12-12 17:32:41 +01:00
|
|
|
|
|
|
|
//! return the overwrite color at given item index.
|
2021-08-27 14:55:10 +02:00
|
|
|
virtual video::SColor getItemOverrideColor(u32 index, EGUI_LISTBOX_COLOR colorType) const IRR_OVERRIDE;
|
2019-12-12 17:32:41 +01:00
|
|
|
|
|
|
|
//! return the default color which is used for the given colorType
|
2021-08-27 14:55:10 +02:00
|
|
|
virtual video::SColor getItemDefaultColor(EGUI_LISTBOX_COLOR colorType) const IRR_OVERRIDE;
|
2019-12-12 17:32:41 +01:00
|
|
|
|
|
|
|
//! set the item at the given index
|
2021-08-27 14:55:10 +02:00
|
|
|
virtual void setItem(u32 index, const wchar_t* text, s32 icon) IRR_OVERRIDE;
|
2019-12-12 17:32:41 +01:00
|
|
|
|
|
|
|
//! Insert the item at the given index
|
|
|
|
//! Return the index on success or -1 on failure.
|
2021-08-27 14:55:10 +02:00
|
|
|
virtual s32 insertItem(u32 index, const wchar_t* text, s32 icon) IRR_OVERRIDE;
|
2019-12-12 17:32:41 +01:00
|
|
|
|
|
|
|
//! Swap the items at the given indices
|
2021-08-27 14:55:10 +02:00
|
|
|
virtual void swapItems(u32 index1, u32 index2) IRR_OVERRIDE;
|
2019-12-12 17:32:41 +01:00
|
|
|
|
|
|
|
//! set global itemHeight
|
2021-08-27 14:55:10 +02:00
|
|
|
virtual void setItemHeight( s32 height ) IRR_OVERRIDE;
|
2019-12-12 17:32:41 +01:00
|
|
|
|
|
|
|
//! Sets whether to draw the background
|
2021-08-27 14:55:10 +02:00
|
|
|
virtual void setDrawBackground(bool draw) IRR_OVERRIDE;
|
2019-12-12 17:32:41 +01:00
|
|
|
|
|
|
|
//! Access the vertical scrollbar
|
2021-08-27 14:55:10 +02:00
|
|
|
virtual IGUIScrollBar* getVerticalScrollBar() const IRR_OVERRIDE;
|
2019-12-12 17:32:41 +01:00
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
struct ListItem
|
|
|
|
{
|
|
|
|
ListItem() : Icon(-1)
|
|
|
|
{}
|
|
|
|
|
|
|
|
core::stringw Text;
|
|
|
|
s32 Icon;
|
|
|
|
|
|
|
|
// A multicolor extension
|
|
|
|
struct ListItemOverrideColor
|
|
|
|
{
|
|
|
|
ListItemOverrideColor() : Use(false) {}
|
|
|
|
bool Use;
|
|
|
|
video::SColor Color;
|
|
|
|
};
|
|
|
|
ListItemOverrideColor OverrideColors[EGUI_LBC_COUNT];
|
|
|
|
};
|
|
|
|
|
|
|
|
void recalculateItemHeight();
|
|
|
|
void selectNew(s32 ypos, bool onlyHover=false);
|
|
|
|
void recalculateScrollPos();
|
|
|
|
void updateScrollBarSize(s32 size);
|
|
|
|
|
|
|
|
// extracted that function to avoid copy&paste code
|
|
|
|
void recalculateItemWidth(s32 icon);
|
|
|
|
|
|
|
|
// get labels used for serialization
|
|
|
|
bool getSerializationLabels(EGUI_LISTBOX_COLOR colorType, core::stringc & useColorLabel, core::stringc & colorLabel) const;
|
|
|
|
|
|
|
|
core::array< ListItem > Items;
|
|
|
|
s32 Selected;
|
|
|
|
s32 ItemHeight;
|
|
|
|
s32 ItemHeightOverride;
|
|
|
|
s32 TotalItemHeight;
|
|
|
|
s32 ItemsIconWidth;
|
|
|
|
gui::IGUIFont* Font;
|
|
|
|
gui::IGUISpriteBank* IconBank;
|
|
|
|
gui::IGUIScrollBar* ScrollBar;
|
|
|
|
u32 selectTime;
|
|
|
|
u32 LastKeyTime;
|
|
|
|
core::stringw KeyBuffer;
|
|
|
|
bool Selecting;
|
|
|
|
bool DrawBack;
|
|
|
|
bool MoveOverSelect;
|
|
|
|
bool AutoScroll;
|
|
|
|
bool HighlightWhenNotFocused;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
} // end namespace gui
|
|
|
|
} // end namespace irr
|
|
|
|
|
|
|
|
#endif // _IRR_COMPILE_WITH_GUI_
|
|
|
|
|
|
|
|
#endif
|