13#ifndef _GFX_MENU_CONFIG_H_
14#define _GFX_MENU_CONFIG_H_
25#define SPECIAL_ID_EDIT_ICON 0xfffe
26#define SPECIAL_ID_ACTIVE_ICON 0xfffd
48 const uint8_t* activeIcon;
49 const uint8_t* editIcon;
50 uint8_t editIconWidth;
51 uint8_t editIconHeight;
53 uint8_t titleBottomMargin;
54 uint8_t titleFontMagnification;
55 uint8_t itemFontMagnification;
129 uint32_t gridSize: 3;
131 uint32_t gridPosition: 3;
133 uint32_t gridRowSpan: 2;
135 uint32_t gridHeight: 9;
137 uint32_t rowPosition: 7;
139 uint32_t drawingMode: 4;
141 uint32_t justification: 4;
143 GridPosition() : gridSize(0), gridPosition(0), gridHeight(0), rowPosition(0), drawingMode(0),
146 GridPosition(
const GridPosition &other) =
default;
147 GridPosition& operator=(
const GridPosition &other) =
default;
157 : gridSize(1), gridPosition(1), gridHeight(height),rowPosition(row), drawingMode(mode), justification(justification) { }
170 : gridSize(size), gridPosition(pos), gridHeight(hei), rowPosition(row), drawingMode(mode), justification(just) { }
176 int getGridSize()
const {
return gridSize; }
178 int getGridHeight()
const {
return gridHeight; }
180 int getGridPosition()
const {
return gridPosition; }
182 int getRow()
const {
return rowPosition; }
218 class GridPositionWithId {
226 GridPositionWithId(
const GridPositionWithId &other) =
default;
227 GridPositionWithId& operator=(
const GridPositionWithId &other) =
default;
229 GridPositionWithId(uint16_t itemId,
const GridPosition &pos) : menuId(itemId), thePosition(pos) {}
231 const GridPosition &getPosition() {
return thePosition; }
233 uint16_t getKey()
const {
return menuId; }
236 thePosition = newPosition;
245 class ItemDisplayProperties {
267 color_t colors[SIZEOF_COLOR_ARRAY];
268 const void* fontData;
273 uint8_t requiredHeight;
274 uint8_t fontMagnification;
277 spaceAfter(0), requiredHeight(0), fontMagnification(1) {}
278 ItemDisplayProperties(uint32_t key,
const color_t* palette,
const MenuPadding& pad,
const void* font, uint8_t mag, uint8_t spacing,
280 : propsKey(key), fontData(font), padding{pad}, borderWidths(borderWidths), defaultJustification(defaultJustification), spaceAfter(spacing),
281 requiredHeight(height), fontMagnification(mag) {
282 memcpy(colors, palette,
sizeof colors);
284 ItemDisplayProperties(
const ItemDisplayProperties& other) =
default;
285 ItemDisplayProperties& operator=(
const ItemDisplayProperties& other) =
default;
287 [[nodiscard]] uint32_t getKey()
const {
return propsKey; }
290 return defaultJustification;
295 [[nodiscard]] uint8_t getSpaceAfter()
const {
return spaceAfter; }
297 void setSpaceAfter(uint8_t space) { spaceAfter = space; }
299 [[nodiscard]] uint8_t getRequiredHeight()
const {
return requiredHeight; }
301 void setRequiredHeight(uint8_t newHeight) { requiredHeight = newHeight; }
304 return (color < SIZEOF_COLOR_ARRAY) ? colors[color] : RGB(0,0,0);
307 void setColor(
ColorType color, color_t value) {
308 if(color >= SIZEOF_COLOR_ARRAY)
return;
309 colors[color] = value;
312 void setColors(
const color_t* palette) {
313 memcpy(colors, palette,
sizeof colors);
316 [[nodiscard]]
const MenuPadding& getPadding()
const {
320 void setPadding(
const MenuPadding& pad) {
324 [[nodiscard]] MenuBorder getBorder()
const {
328 void setBorder(MenuBorder border) {
329 borderWidths = border;
332 [[nodiscard]] uint8_t getFontMagnification()
const {
333 return fontMagnification;
336 void setFontInfo(
const void* font, uint8_t mag) {
337 fontMagnification = mag;
341 const void* getFont() {
416 color_t anEmptyPalette[4] = {0};
418 BtreeList<uint16_t, GridPositionWithId> gridByItem;
420 NullItemDisplayPropertiesFactory() : gridByItem(4) {}
439 if(!pItem)
return nullptr;
440 return gridByItem.getByKey(pItem->
getId());
445 auto* grid = gridByItem.getByKey(pItem->
getId());
447 grid->setNewPosition(position);
450 serlogF2(SER_TCMENU_DEBUG,
"Adding grid ", pItem->
getId());
456#define MENUID_NOTSET 0xffff
459 return ((uint32_t)menuId) | (parentKey ? 0x10000UL : 0UL) | ((uint32_t)ty << 18UL);
482 BtreeList<uint32_t, ItemDisplayProperties> displayProperties;
483 BtreeList<uint16_t, DrawableIcon> iconsByItem;
484 BtreeList<uint16_t, GridPositionWithId> gridByItem;
485 color_t selectedTextColor = RGB(0,0,0);
486 color_t selectedBackgroundColor = RGB(0, 100, 255);
487 color_t editCursorColor = RGB(255, 255, 255);
488 color_t editCursorTextColor = RGB(0, 0, 0);
491 ConfigurableItemDisplayPropertiesFactory()
492 : displayProperties(5, GROW_BY_5),
493 iconsByItem(6, GROW_BY_5) { }
501 return iconsByItem.getByKey(
id);
510 if(!pItem)
return nullptr;
511 return gridByItem.getByKey(pItem->
getId());
540 return colorType == ItemDisplayProperties::BACKGROUND ? editCursorColor : editCursorTextColor;
542 return colorType == ItemDisplayProperties::BACKGROUND ? selectedBackgroundColor : selectedTextColor;
553 auto* grid = gridByItem.getByKey(pItem->
getId());
555 grid->setNewPosition(position);
568 auto* current = iconsByItem.getByKey(toAdd.getKey());
573 iconsByItem.add(toAdd);
592 auto key = MakePropsKey(MENUID_NOTSET,
false, drawing);
593 serlogF2(SER_TCMENU_DEBUG,
"Add def prop: ", key);
594 setDrawingProperties(key, palette, pad, font, mag, spacing, requiredHeight, defaultJustification, border);
612 auto key = MakePropsKey(
id,
false, drawing);
613 serlogF3(SER_TCMENU_DEBUG,
"Add item prop: ", key,
id);
614 setDrawingProperties(key, palette, pad, font, mag, spacing, requiredHeight, defaultJustification, border);
632 auto key = MakePropsKey(
id,
true, drawing);
633 serlogF3(SER_TCMENU_DEBUG,
"Add sub prop: ", key,
id);
634 setDrawingProperties(key, palette, pad, font, mag, spacing, requiredHeight, defaultJustification, border);
643 selectedBackgroundColor = background;
644 selectedTextColor = text;
654 editCursorMode = mode;
655 editCursorColor = cursorCol;
656 editCursorTextColor = textCol;
666 void setDrawingProperties(uint32_t key,
const color_t* palette,
MenuPadding pad,
const void* font, uint8_t mag, uint8_t spacing,
contains a series of core components needed by all graphical renderers
uint32_t color_t
Definition DrawingPrimitives.h:29
void setDrawingPropertiesAllInSub(ItemDisplayProperties::ComponentType drawing, uint16_t id, const color_t *palette, MenuPadding pad, const void *font, uint8_t mag, uint8_t spacing, uint8_t requiredHeight, GridPosition::GridJustification defaultJustification, MenuBorder border)
Definition GfxMenuConfig.h:630
static void refreshCache()
Definition GfxMenuConfig.cpp:126
ItemDisplayProperties * configFor(MenuItem *pItem, ItemDisplayProperties::ComponentType compType) override
Definition GfxMenuConfig.cpp:66
void setEditCursorMode(EditCursorMode mode, color_t cursorCol, color_t textCol)
Definition GfxMenuConfig.h:653
color_t getSelectedColor(ItemDisplayProperties::ColorType colorType, bool isUnderCursor=false) override
Definition GfxMenuConfig.h:538
GridPositionWithId * gridPositionForItem(MenuItem *pItem) override
Definition GfxMenuConfig.h:509
void addImageToCache(const DrawableIcon &toAdd)
Definition GfxMenuConfig.h:567
void addGridPosition(MenuItem *pItem, const GridPosition &position) override
Definition GfxMenuConfig.h:551
DrawableIcon * iconForMenuItem(uint16_t id) override
Definition GfxMenuConfig.h:500
void setDrawingPropertiesForItem(ItemDisplayProperties::ComponentType drawing, uint16_t id, const color_t *palette, MenuPadding pad, const void *font, uint8_t mag, uint8_t spacing, uint8_t requiredHeight, GridPosition::GridJustification defaultJustification, MenuBorder border)
Definition GfxMenuConfig.h:610
void setSelectedColors(color_t background, color_t text)
Definition GfxMenuConfig.h:642
void setDrawingPropertiesDefault(ItemDisplayProperties::ComponentType drawing, const color_t *palette, MenuPadding pad, const void *font, uint8_t mag, uint8_t spacing, uint8_t requiredHeight, GridPosition::GridJustification defaultJustification, MenuBorder border)
Definition GfxMenuConfig.h:589
ItemDisplayProperties * configForCurrentSub(ItemDisplayProperties::ComponentType compType) override
Definition GfxMenuConfig.cpp:85
Definition DrawingPrimitives.h:178
Coord getDimensions() const
Definition DrawingPrimitives.h:269
const uint8_t * getIcon(bool selected) const
Definition DrawingPrimitives.h:254
IconType getIconType() const
Definition DrawingPrimitives.h:276
Definition GfxMenuConfig.h:69
GridJustification
Definition GfxMenuConfig.h:93
@ JUSTIFY_TITLE_LEFT_VALUE_RIGHT
Definition GfxMenuConfig.h:107
@ CORE_JUSTIFY_VALUE_REQUIRED
Definition GfxMenuConfig.h:102
@ JUSTIFY_LEFT_NO_VALUE
Definition GfxMenuConfig.h:115
@ JUSTIFY_CENTER_WITH_VALUE
Definition GfxMenuConfig.h:111
@ CORE_JUSTIFY_RIGHT
Definition GfxMenuConfig.h:97
@ JUSTIFY_RIGHT_WITH_VALUE
Definition GfxMenuConfig.h:113
@ JUSTIFY_RIGHT_NO_VALUE
Definition GfxMenuConfig.h:119
@ CORE_JUSTIFY_CENTER
Definition GfxMenuConfig.h:99
@ JUSTIFY_LEFT_VALUE_ONLY
Definition GfxMenuConfig.h:121
@ JUSTIFY_CENTER_VALUE_ONLY
Definition GfxMenuConfig.h:123
@ JUSTIFY_CENTER_NO_VALUE
Definition GfxMenuConfig.h:117
@ CORE_JUSTIFY_NAME_REQUIRED
Definition GfxMenuConfig.h:104
@ CORE_JUSTIFY_LEFT
Definition GfxMenuConfig.h:95
@ JUSTIFY_TITLE_LEFT_WITH_VALUE
Definition GfxMenuConfig.h:109
@ JUSTIFY_RIGHT_VALUE_ONLY
Definition GfxMenuConfig.h:125
GridPosition(GridDrawingMode mode, GridJustification justification, int row, int height=0)
Definition GfxMenuConfig.h:156
GridDrawingMode
Definition GfxMenuConfig.h:74
@ DRAW_TEXTUAL_ITEM
Definition GfxMenuConfig.h:76
@ DRAW_AS_ICON_TEXT
Definition GfxMenuConfig.h:84
@ DRAW_TITLE_ITEM
Definition GfxMenuConfig.h:86
@ DRAW_INTEGER_AS_UP_DOWN
Definition GfxMenuConfig.h:78
@ DRAW_AS_ICON_ONLY
Definition GfxMenuConfig.h:82
@ DRAW_INTEGER_AS_SCROLL
Definition GfxMenuConfig.h:80
GridPosition(GridDrawingMode mode, GridJustification just, int size, int pos, int row, int hei)
Definition GfxMenuConfig.h:169
Definition GfxMenuConfig.h:218
Definition GfxMenuConfig.h:358
virtual DrawableIcon * iconForMenuItem(uint16_t id)=0
virtual color_t getSelectedColor(ItemDisplayProperties::ColorType colorType, bool isUnderCursor=false)=0
virtual GridPositionWithId * gridPositionForItem(MenuItem *pItem)=0
virtual ItemDisplayProperties * configFor(MenuItem *pItem, ItemDisplayProperties::ComponentType compType)=0
virtual ItemDisplayProperties * configForCurrentSub(ItemDisplayProperties::ComponentType compType)=0
virtual void addGridPosition(MenuItem *item, const GridPosition &position)=0
Definition GfxMenuConfig.h:245
ComponentType
Definition GfxMenuConfig.h:260
ColorType
Definition GfxMenuConfig.h:250
void addGridPosition(MenuItem *pItem, const GridPosition &position) override
Definition GfxMenuConfig.h:443
DrawableIcon * iconForMenuItem(uint16_t) override
Definition GfxMenuConfig.h:430
ItemDisplayProperties * configForCurrentSub(ItemDisplayProperties::ComponentType) override
Definition GfxMenuConfig.h:426
ItemDisplayProperties * configFor(MenuItem *pItem, ItemDisplayProperties::ComponentType) override
Definition GfxMenuConfig.h:422
color_t getSelectedColor(ItemDisplayProperties::ColorType colorType, bool=false) override
Definition GfxMenuConfig.h:434
GridPositionWithId * gridPositionForItem(MenuItem *pItem) override
Definition GfxMenuConfig.h:438
A series of utilities that used throughout tcMenu.