Home2L - C/C++ API  v1.2-2-ga4fe (2023-04-15)
Smart Tools for a Private Home
List of all members
CListbox Class Reference

Description

Listbox widget.

Definition at line 427 of file ui_widgets.H.

#include "ui_widgets.H"

Inheritance diagram for CListbox:
Inheritance graph
[legend]

Public Member Functions

Setup ...
void SetMode (EListboxMode _mode, int _itemHeight, int _itemGap=1)
 'itemHeight' == 0 indicates variable-height items (Note: presently much worse performance than fixed-height); implicitly deletes all items.
 
void SetFormat (TTF_Font *_font, int _hAlign=-1, TColor colGrid=BLACK, TColor _colLabel=WHITE, TColor _colBack=DARK_DARK_GREY, TColor _colLabelSelected=WHITE, TColor _colBackSelected=GREY, TColor _colLabelSpecial=WHITE, TColor _colBackSpecial=DARK_GREY)
 Except 'colGrid', all parameters set here are only read in 'RenderItem' & can be ommited (or re-interpreted) if a custom render function is defined. 'colGrid' is the general background color which can also be set via 'CCanvas::SetColors'.
 
void SetArea (SDL_Rect _area)
 
Content management ...
void Clear ()
 
void SetItems (int _items)
 
int GetItems ()
 
void SetItem (int idx, const char *_text, const char *_iconName=NULL, bool _isSpecial=false, void *data=NULL)
 
void SetItem (int idx, const char *_text, SDL_Surface *_iconSurf, bool _isSpecial=false, void *data=NULL)
 
CListboxItemGetItem (int idx)
 
int GetItemHeight ()
 
int GetItemLabelWidth (int idx)
 Retrieve the label (net) width of an item (e.g. to optimize geometry).
 
SDL_Rect GetItemRect (int idx)
 Get the area of an item.
 
void ScrollTo (int idx, int vAlign=-1)
 
void ScrollIn (int idx)
 
Content selection ...
void SelectItem (int idx, bool _isSelected=true)
 (De-)Select item (for 'lmSelectSingle', 'lmSelectAny')
 
void SelectAll (bool _isSelected=true)
 Select all items (for 'lmSelectAny')
 
void SelectNone ()
 Deselect all items (for 'lmSelectSingle', 'lmSelectAny')
 
bool MouseDown ()
 Determine whether the listbox is currently dragged by the mouse. In this case, calling a Select...() method may interfere with the user interaction and should be avoided.
 
Returning results ...
bool ItemIsSelected (int idx)
 
int GetSelectedItem ()
 
virtual void OnPushed (int idx, bool longPush)
 
void SetCbPushed (FCbListboxPushed *_cbPushed, void *_data=NULL)
 
Callbacks...
virtual void Render (SDL_Renderer *ren)
 Render this widget. More...
 
virtual bool HandleEvent (SDL_Event *ev)
 Handle wiping/scrolling events, if virtual area is wider (higher) than physical area.
 
- Public Member Functions inherited from CCanvas
void SetDefaults ()
 Set default colors and scrollbar appearance.
 
void SetColors (TColor _backColor=BLACK, TColor _scrollbarColor=ToColor(255, 255, 255, 32))
 
void SetScrollbarWidth (int width=8)
 
void SetArea (SDL_Rect _area)
 
void SetVirtArea (SDL_Rect r)
 Set the virtual area in screen coordinates; ('virtArea' == 'area' represents no displacement); The areas of all subwidgets are relative to the virtual area.
 
SDL_Rect * GetVirtArea ()
 
void MoveVirtArea (int toX0, int toY0)
 
void LimitVirtArea (SDL_Rect *r=NULL)
 Move virtual area (or 'r') so that the visible area is completely filled.
 
void ScrollTo (SDL_Rect r, int hAlign=0, int vAlign=-1)
 Scroll such that 'r' is aligned according to '[vh]Align' (-1 = left/up, 0 = center, 1 = right/down).
 
void ScrollIn (SDL_Rect r)
 Scroll just enough to get 'r' fully visible.
 
void WidgetToScreenCoords (int *x, int *y)
 
void ScreenToWidgetCoords (int *x, int *y)
 
void AddWidget (CWidget *widget)
 
void DelWidget (CWidget *widget)
 
void DelAllWidgets ()
 
bool IsVisible (SDL_Rect *r)
 
bool IsVisible (CWidget *w)
 
- Public Member Functions inherited from CWidget
void Set (SDL_Surface *_surf, int x0, int y0)
 
void SetArea (SDL_Rect _area)
 
SDL_Rect * GetArea ()
 
class CScreenGetScreen ()
 
bool IsOnScreen (class CScreen *_screen)
 
class CCanvasGetCanvas ()
 
void LocalToScreenCoords (int *x, int *y)
 
void ScreenToLocalCoords (int *x, int *y)
 
void GetMouseEventPos (SDL_Event *ev, int *x, int *y)
 
void SetSurface (SDL_Surface *_surface)
 Set the static surface to display. The caller stays owner of surface, must not delete it as long as it is set here. The surface dimensions must match 'area'.
 
virtual SDL_Surface * GetSurface ()
 Get an up-to-date surface or 'NULL' if none is available.
 
void GetRenderArea (SDL_Rect *ra)
 Transpose 'area' to the current screen coordinates to be passed to all SDL rendering functions.
 
virtual SDL_Texture * GetTexture ()
 Return an up-to-date texture. More...
 
void SetTextureBlendMode (SDL_BlendMode _sdlBlendMode)
 Set the blend mode for the texture created by the default implementation of GetTexture(). The default is SDL_BLENDMODE_NONE.
 
void ClearTexture ()
 Clear the internally cached texture object to save memory.
 

Protected Member Functions

Rendering ...
virtual SDL_Surface * RenderItem (CListboxItem *item, int idx, SDL_Surface *surf)
 Render a list box item to an SDL surface and return it. More...
 
- Protected Member Functions inherited from CWidget
void ChangedSurface ()
 Mark (only) the surface as changed to trigger a redrawing at next occasion.
 
void Changed ()
 Anything may have changed: Trigger a redrawing at next occasion.
 

Change management ...

void ChangedItems (int idx, int num=1)
 Must be called if items changed and SetItem() was not called.
 
void ChangedSetup ()
 
void Changed ()
 

Member Function Documentation

◆ Render()

virtual void CListbox::Render ( SDL_Renderer *  ren)
virtual

Render this widget.

The default implementation uses the 'GetTexture()' method above. By overriding this method it is possible to define widgets with a custom SDL rendering procedure, which may be more efficient than preparing a single texture containing the complete widget.

It is allowed to pass 'ren == NULL', in which case all textures and internal data structures are (re-)calculated, but nothing is actually rendered.

Reimplemented from CCanvas.

Reimplemented in CMenu.

◆ RenderItem()

virtual SDL_Surface* CListbox::RenderItem ( CListboxItem item,
int  idx,
SDL_Surface *  surf 
)
protectedvirtual

Render a list box item to an SDL surface and return it.

This method may be overriden to implement a custom look of the items. The default implementation renders an icon and text (or one of both) as defined by CListboxItem::SetLabe() according the settings given by SetFormat() and interprets CListboxItem::isSpecial(). The dimensions of the returned surface must match 'area.w' and 'itemHeight' (if >= 0). If 'itemHeight' == 0, the height is arbitrary and the layout will be adapted accordingly. The caller becomes owner of the returned surface. 'surf' is the previous surface which can be reused. If it is not NULL, it must be free'd or reused.


The documentation for this class was generated from the following file: