Lysa UI  0.0
Lysa UI —UI components for the Lysa Engine
Widget Class Reference

Detailed Description

Base class for all UI widgets.

+ Inheritance diagram for Widget:

Public Types

enum  Type {
  WIDGET, PANEL, BOX, LINE,
  FRAME, BUTTON, TOGGLEBUTTON, RADIOBUTTON,
  CHECKBOX, CHECKMARK, CROSSMARK, ARROW,
  TEXT, TEXTEDIT, RICHTEXTAREA, SCROLLBAR,
  SLIDER, COLORSLIDER, COLORWHEEL, KNOB,
  TREEVIEW, IMAGE, POPUP, LIST,
  LISTBOX, SELECTION, PROGRESSBAR, SCROLLCONTAINER,
  MENU, MENUPANEL, MENUBOX, TABBAR,
  TABCONTAINER, DIALOG, FOLDABLECONTAINER, COLORPICKER,
  COLORPICKERBUTTON, SPINBOX, SPINBUTTONS, ICONIMAGE,
  ICONSVG, DROPDOWNLIST, TOOLTIP, GRIDCELL,
  GRID, TABLE
}
 

Public Member Functions

 Widget (Type type=WIDGET)
 
 ~Widget () override
 
Type getType () const
 
bool isVisible () const
 
void setVisible (bool show=true)
 
bool isEnabled () const
 
void setEnabled (bool isEnabled=true)
 
virtual void setPos (float x, float y)
 
float getWidth () const
 
float getHeight () const
 
float getRequestedWidth () const
 
float getRequestedHeight () const
 
virtual void setSize (float width, float height)
 
void setWidth (const float width)
 
void setHeight (const float height)
 
const Rect & getRect () const
 
void setRect (float x, float y, float width, float height)
 
void setRect (const Rect &rect)
 
float getAspectRatio () const
 
Alignment getAlignment () const
 
void setAlignment (Alignment alignment)
 
std::shared_ptr< Font > getFont () const
 
void setFont (const std::shared_ptr< Font > &font)
 
float getFontScale () const
 
virtual void setFontScale (float fontScale)
 
bool isFocused () const
 
Widget * getParent () const
 
void setOverlap (const bool overlap)
 
template<typename T , typename... Args>
std::shared_ptr< T > create (const std::string &resource, const Alignment alignment, Args &&...args)
 
template<typename T , typename... Args>
std::shared_ptr< T > create (const Alignment alignment, Args &&...args)
 
template<typename T >
std::shared_ptr< T > add (std::shared_ptr< T > child, const Alignment alignment=Alignment::NONE, const std::string &resource="", const bool overlap=false)
 
template<typename T >
std::shared_ptr< T > addPopup (std::shared_ptr< T > child, const std::string &resource="")
 
template<typename T >
std::shared_ptr< T > addAfter (std::shared_ptr< T > child, const std::shared_ptr< Widget > &after, const Alignment alignment, const std::string &resource="", const bool overlap=false)
 
virtual void remove (const std::shared_ptr< Widget > &child)
 
virtual void removeAll ()
 
void setPadding (float padding)
 
float getPadding () const
 
float getVBorder () const
 
float getHBorder () const
 
void setVBorder (float size)
 
void setHBorder (float size)
 
bool isDrawBackground () const
 
void setDrawBackground (bool drawBackground)
 
bool isPushed () const
 
bool isPointed () const
 
bool isFreezed () const
 
bool isRedrawOnMouseEvent () const
 
bool isOverlapping () const
 
Rect getChildrenRect () const
 
void setFreezed (const bool f)
 
void setPushed (const bool p)
 
void refresh ()
 
void setResource (std::shared_ptr< UIResource > res)
 
uint32 getGroupIndex () const
 
void setGroupIndex (int32 index)
 
template<typename T >
getUserData () const
 
template<typename T >
std::shared_ptr< T > getPointerUserData () const
 
const std::any & getUserData () const
 
void setUserData (const std::any &data)
 
float getTransparency () const
 
void setTransparency (float alpha)
 
void resizeChildren ()
 
float getChildrenOffsetX () const
 
float getChildrenOffsetY () const
 
void setChildrenOffset (float x, float y)
 
std::shared_ptr< Widget > setFocus (bool focus=true)
 
virtual void onAttach ()
 
virtual void onDetach ()
 
virtual void onShow ()
 
virtual void onHide ()
 
virtual void onResize ()
 
virtual void onMove ()
 
virtual bool onKeyDown (Key key)
 
virtual bool onTextInput (const std::string &text)
 
virtual bool onKeyUp (Key key)
 
virtual bool onMouseDown (MouseButton button, float x, float y)
 
virtual bool onMouseUp (MouseButton button, float x, float y)
 
virtual bool onMouseMove (uint32 buttonsState, float x, float y)
 
virtual void onMouseLeave ()
 
virtual void onDisable ()
 
virtual void onEnable ()
 
virtual void onGotFocus ()
 
virtual void onLostFocus ()
 
bool getConsumeMouseEvent () const
 
void setConsumeMouseEvent (const bool consumeMouseEvent)
 
const std::list< std::shared_ptr< Widget > > & getChildren () const
 
bool hasChildren () const
 
void subscribe (const event_type &type, unique_id id, EventHandlerCallback callback)
 
void subscribe (const event_type &type, EventHandlerCallback callback)
 
void unsubscribe (unique_id id)
 
bool isAttached () const
 
WindowgetWindow () const
 
StylegetStyle () const
 
Vector2DRenderer & getRenderer () const
 
RenderingWindow & getRenderingWindow () const
 
WindowManagergetWindowManager () const
 

Protected Attributes

const Type type
 
Rect rect
 
float requestedWidth {0}
 
float requestedHeight {0}
 
float hborder {0}
 
float vborder {0}
 
float padding {0}
 
bool consumeMouseEvent {false}
 
bool overlap {false}
 
bool focused {false}
 
bool allowFocus {false}
 
bool allowChildren {true}
 
bool drawBackground {true}
 
bool moveChildrenOnPush {false}
 
bool scrollChildren {false}
 
bool skipInvisibleChildren {false}
 
bool redrawOnMouseEvent {false}
 
bool redrawOnMouseMove {false}
 
float transparency {1.0f}
 
Widget * parent {nullptr}
 
Alignment alignment {Alignment::NONE}
 
std::shared_ptr< UIResourceresource
 
std::list< std::shared_ptr< Widget > > children
 
bool mouseMoveOnFocus {false}
 
float childrenOffsetX {0}
 
float childrenOffsetY {0}
 

Member Enumeration Documentation

enum Type

Widget type enumeration.

Enum ValuesDocumentation
WIDGET 

transparent widget

PANEL 

rectangular widget with only a background

BOX 

rectangular widget with a border and a background

LINE 

A horizontal or vertical line

FRAME 

A box with a title

BUTTON 

A push button

TOGGLEBUTTON 

A two states button

RADIOBUTTON 

A two states button drawn with two circles

CHECKBOX 

A two states box drawn with a check mark

CHECKMARK 

A check mark

CROSSMARK 

A cross mark

ARROW 

An arrow head

TEXT 

A single line of text

TEXTEDIT 

An editable single line of text.

RICHTEXTAREA 

A word-wrapped read-only text with BBCode markup

SCROLLBAR 

A scroll bar. with min, max & pos

SLIDER 

A value selected by dragging a grip along a track

COLORSLIDER 

A value selected along a gradient of colors

COLORWHEEL 

A disc selecting the hue & the saturation of a color

KNOB 

A value selected by rotating a disc

TREEVIEW 

Tree of Widget.

IMAGE 

2D Image

POPUP 

popup panel at fixed (x, y) coordinates, drawn on top of siblings

LIST 

A list of widgets (abstract container)

LISTBOX 

A scrollable list with a selection highlight

SELECTION 

Selection highlight rectangle (internal to LISTBOX)

PROGRESSBAR 

A progress bar with min, max & value

SCROLLCONTAINER 

A scrollable container (horizontal & vertical)

MENU 

A vertical list of text items separated in groups

MENUPANEL 

A menu with a background panel

MENUBOX 

A menu with a background box

TABBAR 

A horizontal bar of tabs

TABCONTAINER 

A container displaying one widget at a time, selected with a bar of tabs

DIALOG 

A modal dialog box centered above its parent

FOLDABLECONTAINER 

A container folding & unfolding its content with a clickable title bar

COLORPICKER 

A color selector with one slider per component

COLORPICKERBUTTON 

A button displaying a color, opening a dialog to change it

SPINBOX 

A numeric value with two buttons incrementing & decrementing it

SPINBUTTONS 

A column of two buttons incrementing & decrementing a value

ICONIMAGE 

A 2D image fitted into the widget rectangle

ICONSVG 

An SVG shape fitted into the widget rectangle

DROPDOWNLIST 

A button displaying the selected item of a list, opening a popup list

TOOLTIP 

A popup displaying a short help text near a position

GRIDCELL 

A cell of a Grid

GRID 

A grid of GridCell with resizable rows and columns and spanning cells

TABLE 

A Grid with sortable and resizable column headers

Constructor & Destructor Documentation

Widget ( Type  type = WIDGET)

Creates a widget of a particular type.

Parameters
typeThe type of the widget.
~Widget ( )
override

Member Function Documentation

std::shared_ptr<T> add ( std::shared_ptr< T >  child,
const Alignment  alignment = Alignment::NONE,
const std::string &  resource = "",
const bool  overlap = false 
)
inline

Adds a child widget.

Children widgets will be destroyed on parent destruction.

Template Parameters
TThe type of the widget to add.
Parameters
childChild widget to add.
alignmentPlacement alignment.
resourceResource string.
overlapOverlap widget on top of or under other widgets.
Returns
A shared pointer to the added widget.
std::shared_ptr<T> addAfter ( std::shared_ptr< T >  child,
const std::shared_ptr< Widget > &  after,
const Alignment  alignment,
const std::string &  resource = "",
const bool  overlap = false 
)
inline

Adds a child widget just after another child, instead of at the end.

Template Parameters
TThe type of the widget to add.
Parameters
childChild widget to add.
afterChild widget to add it after, nullptr to add it first.
alignmentPlacement alignment.
resourceResource string.
overlapOverlap widget on top of other widgets.
Returns
A shared pointer to the added widget.
std::shared_ptr<T> addPopup ( std::shared_ptr< T >  child,
const std::string &  resource = "" 
)
inline

Adds a child popup widget.

Children widgets will be destroyed on parent destruction.

Template Parameters
TThe type of the widget to add.
Parameters
childChild widget to add.
resourceResource string.
Returns
A shared pointer to the added widget.
std::shared_ptr<T> create ( const Alignment  alignment,
Args &&...  args 
)
inline

Creates & adds a child widget.

Template Parameters
TThe type of the widget to create.
ArgsThe types of the arguments to pass to the widget constructor.
Parameters
alignmentThe alignment of the child widget.
argsThe arguments to pass to the widget constructor.
Returns
A shared pointer to the created widget.
std::shared_ptr<T> create ( const std::string &  resource,
const Alignment  alignment,
Args &&...  args 
)
inline

Creates & adds a child widget using a resource string.

Template Parameters
TThe type of the widget to create.
ArgsThe types of the arguments to pass to the widget constructor.
Parameters
resourceThe resource string defining the widget style or properties.
alignmentThe alignment of the child widget.
argsThe arguments to pass to the widget constructor.
Returns
A shared pointer to the created widget.
Alignment getAlignment ( ) const

Returns the current widget placement.

float getAspectRatio ( ) const
const std::list<std::shared_ptr<Widget> >& getChildren ( ) const
inline

Returns the list of direct children

float getChildrenOffsetX ( ) const
inline

Returns the horizontal children scroll offset (subtracted from child positions).

float getChildrenOffsetY ( ) const
inline

Returns the vertical children scroll offset (subtracted from child positions).

Rect getChildrenRect ( ) const

Returns the rectangle enclosing all children.

bool getConsumeMouseEvent ( ) const
inline

Returns true if the widget consumes mouse events (prevents propagation to parent).

std::shared_ptr<Font> getFont ( ) const

Returns the current font of the widget.

float getFontScale ( ) const

Returns the font scale.

uint32 getGroupIndex ( ) const

Returns the user defined group index.

float getHBorder ( ) const

Returns horizontal border size.

float getHeight ( ) const
inline

Returns the height of the widget, in pixels.

float getPadding ( ) const

Returns current children padding.

Widget* getParent ( ) const
inline

Returns the parent widget, or nullptr.

std::shared_ptr<T> getPointerUserData ( ) const
inline

Returns the user data.

const Rect& getRect ( ) const

Returns the size & the position of the widget.

Vector2DRenderer& getRenderer ( ) const
RenderingWindow& getRenderingWindow ( ) const
float getRequestedHeight ( ) const
inline

Returns the height requested with setSize(), in pixels, before any layout adjustment, or the current height if no height was requested.

float getRequestedWidth ( ) const
inline

Returns the width requested with setSize(), in pixels, before any layout adjustment, or the current width if no width was requested.

Style& getStyle ( ) const
float getTransparency ( ) const
inline

Returns the transparency alpha value.

Type getType ( ) const

Returns the type of the widget.

T getUserData ( ) const
inline

Returns the user data.

const std::any& getUserData ( ) const
inline

Returns the user data, without casting.

float getVBorder ( ) const

Returns vertical border size.

float getWidth ( ) const
inline

Returns the width of the widget, in pixels.

Window& getWindow ( ) const
WindowManager& getWindowManager ( ) const
bool hasChildren ( ) const
inline
bool isAttached ( ) const
inline
bool isDrawBackground ( ) const

Returns false if the background is transparent.

bool isEnabled ( ) const

Returns true if the widget is reactive to user action (mouse & keyboard).

bool isFocused ( ) const

Returns true if the widget has keyboard focus.

bool isFreezed ( ) const

Returns true if the widget is freezed (not responding to events).

bool isOverlapping ( ) const
inline

Returns true if the widget is overlapping other widgets.

bool isPointed ( ) const

Returns true if the widget is currently pointed by the mouse.

bool isPushed ( ) const

Returns true if the widget is currently pushed (e.g. mouse button down).

bool isRedrawOnMouseEvent ( ) const

Returns true if the widget should redraw on mouse events.

bool isVisible ( ) const

Returns true if the widget is visible.

virtual void onAttach ( )
inlinevirtual

Event called after Widget have been added to another widget or a window

Reimplemented in lysa::ui::Tooltip::onAttach()

virtual void onDetach ( )
inlinevirtual

Event called before Widget is detached from its parent.

Reimplemented in lysa::ui::Table::onDetach(), lysa::ui::DropDownList::onDetach()

virtual void onDisable ( )
inlinevirtual
virtual void onEnable ( )
inlinevirtual
virtual void onGotFocus ( )
inlinevirtual

Event called when the Window got the keyboard focus.

virtual void onHide ( )
inlinevirtual

Event called when (after) the Window manager need to hide the Window.

Reimplemented in lysa::ui::Table::onHide(), lysa::ui::DropDownList::onHide()

virtual bool onKeyDown ( Key  key)
inlinevirtual

Event called when a key was pressed.

Parameters
keyThe key pressed.
Returns
True if event was handled.
virtual bool onKeyUp ( Key  key)
inlinevirtual

Event called when a key was released.

Parameters
keyThe key released.
Returns
True if event was handled.
virtual void onLostFocus ( )
inlinevirtual

Event called when the Window lost the keyboard focus.

virtual bool onMouseDown ( MouseButton  button,
float  x,
float  y 
)
inlinevirtual

Event called when a mouse button was pressed inside the Window.

Parameters
buttonThe mouse button.
xMouse X coordinate.
yMouse Y coordinate.
Returns
True if event was handled.

Reimplemented in lysa::ui::RichTextArea::onMouseDown()

virtual void onMouseLeave ( )
inlinevirtual
virtual bool onMouseMove ( uint32  buttonsState,
float  x,
float  y 
)
inlinevirtual

Event called when the mouse is moved above the Window client area.

Parameters
buttonsStateState of mouse buttons.
xMouse X coordinate.
yMouse Y coordinate.
Returns
True if event was handled.
virtual bool onMouseUp ( MouseButton  button,
float  x,
float  y 
)
inlinevirtual

Event called when a mouse button was released inside the Window.

Parameters
buttonThe mouse button.
xMouse X coordinate.
yMouse Y coordinate.
Returns
True if event was handled.

Reimplemented in lysa::ui::RichTextArea::onMouseUp()

virtual void onMove ( )
inlinevirtual

Event called after a position change.

virtual void onResize ( )
inlinevirtual
virtual void onShow ( )
inlinevirtual

Event called when (before) the Window manager need to show the Window.

virtual bool onTextInput ( const std::string &  text)
inlinevirtual

Event called on user input

void refresh ( )

Force a refresh of the entire widget.

virtual void remove ( const std::shared_ptr< Widget > &  child)
virtual

Removes a child widget.

virtual void removeAll ( )
virtual

Removes all children widgets recursively.

void resizeChildren ( )

Resizes children widgets.

void setAlignment ( Alignment  alignment)

Sets the widget placement.

Calling this method involves redrawing the parent widget & resizing all the children widgets.

void setChildrenOffset ( float  x,
float  y 
)

Sets the children scroll offset. Children are laid out by resizeChildren() starting from the client rect minus this offset, enabling scrollable content. Default is (0, 0): no effect.

void setConsumeMouseEvent ( const bool  consumeMouseEvent)
inline

Sets whether mouse events are consumed by this widget (preventing propagation to parent).

void setDrawBackground ( bool  drawBackground)

Sets whether to draw the widget background.

void setEnabled ( bool  isEnabled = true)

Enables or disables widget reactions to input events.

std::shared_ptr<Widget> setFocus ( bool  focus = true)

Requests keyboard focus for this widget.

Parameters
focusTrue to request focus, false to release it.
Returns
Shared pointer to this widget.
void setFont ( const std::shared_ptr< Font > &  font)

Sets the current font of the widget.

virtual void setFontScale ( float  fontScale)
virtual
void setFreezed ( const bool  f)
inline

Sets whether the widget is freezed.

void setGroupIndex ( int32  index)

Sets the user defined group index.

void setHBorder ( float  size)

Sets horizontal border size.

void setHeight ( const float  height)
inline

Resizes the widget height, in pixels.

void setOverlap ( const bool  overlap)
inline
void setPadding ( float  padding)

Changes children padding (space between children).

virtual void setPos ( float  x,
float  y 
)
virtual

Moves the widget to a particular position.

void setPushed ( const bool  p)
inline

Sets whether the widget is pushed.

void setRect ( const Rect &  rect)

Changes the size & position of the widget.

void setRect ( float  x,
float  y,
float  width,
float  height 
)

Changes the size & position of the widget.

void setResource ( std::shared_ptr< UIResource res)

Changes widget resources.

virtual void setSize ( float  width,
float  height 
)
virtual
void setTransparency ( float  alpha)

Changes the transparency alpha value.

void setUserData ( const std::any &  data)

Sets user data.

void setVBorder ( float  size)

Sets vertical border size.

void setVisible ( bool  show = true)

Shows or hides the widget.

void setWidth ( const float  width)
inline

Resizes the widget width, in pixels.

void subscribe ( const event_type &  type,
EventHandlerCallback  callback 
)

Subscribe to an event and register the subscriber for the auto-unsubscribe mechanism

void subscribe ( const event_type &  type,
unique_id  id,
EventHandlerCallback  callback 
)

Subscribe to an event and register the subscriber for the auto-unsubscribe mechanism

void unsubscribe ( unique_id  id)

Unsubscribe a registered event subscriber

Friends And Related Function Documentation

friend class Window
friend

Member Data Documentation

Alignment alignment {Alignment::NONE}
protected
bool allowChildren {true}
protected
bool allowFocus {false}
protected
std::list<std::shared_ptr<Widget> > children
protected
float childrenOffsetX {0}
protected
float childrenOffsetY {0}
protected
bool consumeMouseEvent {false}
protected
bool drawBackground {true}
protected
bool focused {false}
protected
float hborder {0}
protected
bool mouseMoveOnFocus {false}
protected
bool moveChildrenOnPush {false}
protected
bool overlap {false}
protected
float padding {0}
protected
Widget* parent {nullptr}
protected
Rect rect
protected
bool redrawOnMouseEvent {false}
protected
bool redrawOnMouseMove {false}
protected
float requestedHeight {0}
protected
float requestedWidth {0}
protected
std::shared_ptr<UIResource> resource
protected
bool scrollChildren {false}
protected
bool skipInvisibleChildren {false}
protected
float transparency {1.0f}
protected
const Type type
protected
float vborder {0}
protected