跳转到主要内容

DrawableList

touchgfx/containers/scrollers/DrawableList.hpp

A container able to display many items using only a few drawables. This is done by only having drawables for visible items, and populating these drawables with new content when each of these become visible.

This means that all drawables must have an identical structure in some way, for example an Image or a Container with a button and a text.

Inherits from: Container, Drawable

Public Functions

DrawableList()
virtual boolgetCircular() const
Gets the circular setting, previously set using setCircular().
int16_tgetDrawableIndex(int16_t itemIndex, int16_t prevDrawableIndex =-1) const
Gets the drawable index of an item.
int16_tgetDrawableIndices(int16_t itemIndex, int16_t * drawableIndexArray, int16_t arraySize) const
Gets drawable indices.
virtual int16_tgetDrawableMargin() const
Gets drawable margin.
virtual int16_tgetDrawableSize() const
Gets drawable size as set by setDrawables.
virtual boolgetHorizontal() const
Gets the orientation of the drawables, previously set using setHorizontal().
int16_tgetItemIndex(int16_t drawableIndex) const
Gets item stored in a given Drawable.
virtual int16_tgetItemSize() const
Gets size of each item.
int16_tgetNumberOfDrawables() const
Gets number of drawables based on the size of each item and the size of the widget.
int16_tgetNumberOfItems() const
Gets number of items in the DrawableList, as previously set using setNumberOfItems().
int32_tgetOffset() const
Gets offset, as previously set using setOffset().
int16_tgetRequiredNumberOfDrawables() const
Gets required number of drawables.
voiditemChanged(int16_t itemIndex)
Item changed.
voidrefreshDrawables()
Refresh drawables.
virtual voidsetCircular(bool circular)
Sets whether the list is circular (infinite) or not.
virtual voidsetDrawables(DrawableListItemsInterface & drawableListItems, int16_t drawableItemIndexOffset, GenericCallback< DrawableListItemsInterface *, int16_t, int16_t > & updateDrawableCallback)
Sets the drawables parameters.
voidsetDrawableSize(int16_t drawableSize, int16_t drawableMargin)
Sets drawables size.
virtual voidsetHeight(int16_t height)
Sets the height of this drawable.
virtual voidsetHorizontal(bool horizontal)
Sets a horizontal or vertical layout.
voidsetNumberOfItems(int16_t numberOfItems)
Sets number of items in the list.
voidsetOffset(int32_t ofs)
Sets virtual coordinate.
virtual voidsetWidth(int16_t width)
Sets the width of this drawable.

Additional inherited members

Public Functions inherited from Container

virtual voidadd(Drawable & d)
Adds a Drawable instance as child to this Container.
Container()
virtual boolcontains(const Drawable & d)
Query if a given Drawable has been added directly to this Container.
virtual voiddraw(const Rect & invalidatedArea) const
Draw this drawable.
virtual voidforEachChild(GenericCallback< Drawable & > * function)
Executes the specified callback function for each child in the Container.
virtual Drawable *getFirstChild()
Obtain a pointer to the first child of this container.
virtual voidgetLastChild(int16_t x, int16_t y, Drawable ** last)
Gets the last child in the list of children in this Container.
virtual voidgetLastChildNear(int16_t x, int16_t y, Drawable * last, int16_t fingerAdjustmentX, int16_t * fingerAdjustmentY)
Works similar to getLastChild() but also considers the current set finger size in HAL.
virtual RectgetSolidRect() const
Get (the largest possible) rectangle that is guaranteed to be solid (opaque).
virtual voidinsert(Drawable * previous, Drawable & d)
Inserts a Drawable after a specific child node.
virtual voidremove(Drawable & d)
Removes a Drawable from the container by removing it from the linked list of children.
virtual voidremoveAll()
Removes all children in the Container by resetting their parent and sibling pointers.
virtual voidunlink()
Removes all children by unlinking the first child.

Protected Functions inherited from Container

virtual RectgetContainedArea() const
Gets a rectangle describing the total area covered by the children of this container.
virtual voidmoveChildrenRelative(int16_t deltaX, int16_t deltaY)
Calls moveRelative on all children.

Protected Attributes inherited from Container

Drawable *firstChild
Pointer to the first child of this container. Subsequent children can be found through firstChild's nextSibling.

Public Functions inherited from Drawable

voidcenter()
Centers the Drawable inside its parent.
voidcenterX()
Center the Drawable horizontally inside its parent.
voidcenterY()
Center the Drawable vertically inside its parent.
virtual voidchildGeometryChanged()
This function can be called on parent nodes to signal that the size or position of one or more of its children has changed.
virtual voiddraw(const Rect & invalidatedArea) const =0
Draw this drawable.
Drawable()
Initializes a new instance of the Drawable class.
voiddrawToDynamicBitmap(BitmapId id)
Render the Drawable object into a dynamic bitmap.
voidexpand(int margin =0)
Expands the Drawable to have the same size as its parent with a given margin around the edge.
RectgetAbsoluteRect() const
Helper function for obtaining the rectangle this Drawable covers, expressed in absolute coordinates.
virtual Drawable *getFirstChild()
Function for obtaining the first child of this drawable if any.
int16_tgetHeight() const
Gets the height of this Drawable.
virtual voidgetLastChild(int16_t x, int16_t y, Drawable ** last) =0
Function for obtaining the the last child of this drawable that intersects with the specified point.
Drawable *getNextSibling()
Gets the next sibling node.
Drawable *getParent() const
Returns the parent node.
const Rect &getRect() const
Gets the rectangle this Drawable covers, in coordinates relative to its parent.
virtual RectgetSolidRect() const =0
Get (the largest possible) rectangle that is guaranteed to be solid (opaque).
virtual RectgetSolidRectAbsolute()
Helper function for obtaining the largest solid rect (as implemented by getSolidRect()) expressed in absolute coordinates.
virtual voidgetVisibleRect(Rect & rect) const
Function for finding the visible part of this drawable.
int16_tgetWidth() const
Gets the width of this Drawable.
int16_tgetX() const
Gets the x coordinate of this Drawable, relative to its parent.
int16_tgetY() const
Gets the y coordinate of this Drawable, relative to its parent.
virtual voidhandleClickEvent(const ClickEvent & event)
Defines the event handler interface for ClickEvents.
virtual voidhandleDragEvent(const DragEvent & event)
Defines the event handler interface for DragEvents.
virtual voidhandleGestureEvent(const GestureEvent & event)
Defines the event handler interface for GestureEvents.
virtual voidhandleTickEvent()
Called periodically by the framework if the Drawable instance has subscribed to timer ticks.
virtual voidinvalidate() const
Tell the framework that this entire Drawable needs to be redrawn.
virtual voidinvalidateContent() const
Tell the framework that the contents of the Drawable needs to be redrawn.
virtual voidinvalidateRect(Rect & invalidatedArea) const
Request that a region of this drawable is redrawn.
boolisTouchable() const
Gets whether this Drawable receives touch events or not.
boolisVisible() const
Gets whether this Drawable is visible.
virtual voidmoveRelative(int16_t x, int16_t y)
Moves the drawable.
virtual voidmoveTo(int16_t x, int16_t y)
Moves the drawable.
voidsetPosition(const Drawable & drawable)
Sets the position of the Drawable to the same as the given Drawable.
voidsetPosition(int16_t x, int16_t y, int16_t width, int16_t height)
Sets the size and position of this Drawable, relative to its parent.
voidsetTouchable(bool touch)
Controls whether this Drawable receives touch events or not.
voidsetVisible(bool vis)
Controls whether this Drawable should be visible.
voidsetWidthHeight(const Bitmap & bitmap)
Sets the dimensions (width and height) of the Drawable without changing the x and y coordinates).
voidsetWidthHeight(const Drawable & drawable)
Sets the dimensions (width and height) of the Drawable without changing the x and y coordinates).
voidsetWidthHeight(const Rect & other)
Sets the dimensions (width and height) of the Drawable without changing the x and y coordinates).
voidsetWidthHeight(int16_t width, int16_t height)
Sets the dimensions (width and height) of the Drawable without changing the x and y coordinates).
virtual voidsetX(int16_t x)
Sets the x coordinate of this Drawable, relative to its parent.
voidsetXY(const Drawable & drawable)
Sets the x and y coordinates of this Drawable.
voidsetXY(int16_t x, int16_t y)
Sets the x and y coordinates of this Drawable, relative to its parent.
virtual voidsetY(int16_t y)
Sets the y coordinate of this Drawable, relative to its parent.
virtual voidtranslateRectToAbsolute(Rect & r) const
Helper function for converting a region of this Drawable to absolute coordinates.
virtual ~Drawable()
Finalizes an instance of the Drawable class.

Protected Attributes inherited from Drawable

Drawable *nextSibling
Pointer to the next Drawable.
Drawable *parent
Pointer to this drawable's parent.
Rectrect
The coordinates of this Drawable, relative to its parent.
booltouchable
True if this drawable should receive touch events.
boolvisible
True if this drawable should be drawn.

Public Functions Documentation

DrawableList

getCircular

virtual bool getCircular()const

Gets the circular setting, previously set using setCircular().

Returns:

True if the list is circular (infinite), false if the list is not circular (finite).

See also:

getDrawableIndex

int16_t getDrawableIndex(int16_titemIndex ,const
int16_tprevDrawableIndex =-1const
)const

Gets the drawable index of an item.

If the number of items is smaller than the number of drawables and the DrawableList is circular, the same item can be in more than one drawable. In that case, calling this function again with the previously returned index as second parameter, the index of the next drawable containing the item will be returned.

Parameters:
itemIndexIndex of the item.
prevDrawableIndex(Optional) Index of the previous drawable. If given, search starts after this index.
Returns:

The first drawable index with the given item. Returns -1 if the item is not in a drawable.

See also:

getDrawableIndices

int16_t getDrawableIndices(int16_titemIndex ,const
int16_t *drawableIndexArray ,const
int16_tarraySizeconst
)const

Gets drawable indices.

Useful when the number of items is smaller than the number of drawables as the same item might be in more than one drawable on the screen (if the DrawableList is circular). The passed array will be filled with the drawable indices and the number of indices found is returned.

Parameters:
itemIndexZero-based index of the item.
drawableIndexArrayArray where the drawable indices are stored.
arraySizeSize of drawable array.
Returns:

The number of drawable indices found.

See also:

getDrawableMargin

virtual int16_t getDrawableMargin()const

Gets drawable margin.

Gets drawable margin as set by setDrawables.

Returns:

The drawable margin.

getDrawableSize

virtual int16_t getDrawableSize()const

Gets drawable size as set by setDrawables.

Returns:

The drawable size.

See also:

getHorizontal

virtual bool getHorizontal()const

Gets the orientation of the drawables, previously set using setHorizontal().

Returns:

True if it horizontal, false if it is vertical.

See also:

getItemIndex

int16_t getItemIndex(int16_tdrawableIndex)

Gets item stored in a given Drawable.

Parameters:
drawableIndexZero-based index of the drawable.
Returns:

The item index.

getItemSize

virtual int16_t getItemSize()const

Gets size of each item.

This equals the drawable size plus the drawable margin as set in setDrawables(). Equals getDrawableSize() + 2 * getDrawableMargin().

Returns:

The item size.

Note

Not the same as getDrawableSize().

See also:

getNumberOfDrawables

int16_t getNumberOfDrawables()const

Gets number of drawables based on the size of each item and the size of the widget.

Returns:

The number of drawables.

See also:

getNumberOfItems

int16_t getNumberOfItems()const

Gets number of items in the DrawableList, as previously set using setNumberOfItems().

Returns:

The number of items.

See also:

getOffset

int32_t getOffset()const

Gets offset, as previously set using setOffset().

Returns:

The virtual offset.

See also:

getRequiredNumberOfDrawables

Gets required number of drawables.

After setting up the DrawableList it is possible to request how many drawables are needed to ensure that the list can always be drawn properly. If the DrawableList has been setup with fewer Drawables than the required number of drawables, part of the lower part of the DrawableList will look wrong.

The number of required drawables depend on the size of the widget and the size of the drawables and the margin around drawables. If there are fewer drawables than required, the widget will not display correctly. If there are more drawables than required, some will be left unused.

Returns:

The required number of drawables.

See also:

itemChanged

void itemChanged(int16_titemIndex)

Item changed.

Item changed and drawables containing this item must be updated. This function can be called when an item has changed and needs to be updated on screen. If the given item is displayed on screen, possible more than once for cyclic lists, each drawable is request to refresh its content to reflect the new value.

Parameters:
itemIndexZero-based index of the item.

refreshDrawables

Refresh drawables.

Useful to call if the number or items, their size or other properties have changed.

setCircular

virtual void setCircular(boolcircular)

Sets whether the list is circular (infinite) or not.

A circular list is a list where the first drawable re-appears after the last item in the list - and the last item in the list appears before the first item in the list.

Parameters:
circularTrue if the list should be circular, false if the list should not be circular.
See also:

setDrawables

virtual void setDrawables(DrawableListItemsInterface &drawableListItems ,
int16_tdrawableItemIndexOffset ,
GenericCallback< DrawableListItemsInterface *, int16_t, int16_t > &updateDrawableCallback
)

Sets the drawables parameters.

These parameters are

  • The access class to the array of drawables
  • The offset in the drawableListItems array to start using drawable and
  • Callback to update the contents of a drawable.
Parameters:
drawableListItemsNumber of drawables allocated.
drawableItemIndexOffsetThe offset of the drawable item.
updateDrawableCallbackA callback to update the contents of a drawable.
See also:

setDrawableSize

void setDrawableSize(int16_tdrawableSize ,
int16_tdrawableMargin
)

Sets drawables size.

The drawable is is the size of each drawable in the list in the set direction of the list (this is enforced by the DrawableList class). The specified margin is added above and below each item for spacing. The entire size of an item is thus size + 2 * spacing.

For a horizontal list each element will be drawableSize high and have the same width as set using setWidth(). For a vertical list each element will be drawableSize wide and have the same height as set using setHeight().

Parameters:
drawableSizeThe size of the drawable.
drawableMarginThe margin around drawables (margin before and margin after).
See also:

setHeight

virtual void setHeight(int16_theight)

Sets the height of this drawable.

Parameters:
heightThe new height.
Note

For most Drawable widgets, changing this does normally not automatically yield a redraw.If the list is horizontal, the height is also propagated to all drawables in the list.

Reimplements: touchgfx::Drawable::setHeight

setHorizontal

virtual void setHorizontal(boolhorizontal)

Sets a horizontal or vertical layout.

If parameter horizontal is set true, all drawables are arranged side by side. If horizontal is set false, the drawables are arranged above and below each other (vertically).

Parameters:
horizontalTrue to align drawables horizontal, false to align drawables vertically.
Note

Default value is false, i.e. vertical layout.

See also:

setNumberOfItems

void setNumberOfItems(int16_tnumberOfItems)

Sets number of items in the list.

This forces all drawables to be updated to ensure that the content is correct.

Parameters:
numberOfItemsNumber of items.
Note

The DrawableList is refreshed to reflect the change.

setOffset

void setOffset(int32_tofs)

Sets virtual coordinate.

Does not move to the given coordinate, but places the drawables and fill correct content into the drawables to give the impression that everything has been scrolled to the given coordinate.

Setting a value of 0 means that item 0 is at the start of the DrawableList. Setting a value of "-getItemSize()" places item 0 outside the start of the DrawableList and item 1 at the start of it.

Items that are completely outside of view, will be updated with new content using the provided callback from setDrawables(). Care is taken to not fill drawables more than strictly required.

Parameters:
ofsThe virtual coordinate.
See also:

setWidth

virtual void setWidth(int16_twidth)

Sets the width of this drawable.

Parameters:
widthThe new width.
Note

For most Drawable widgets, changing this does normally not automatically yield a redraw.If the list is vertical, the width is also propagated to all drawables in the list.

Reimplements: touchgfx::Drawable::setWidth