11#ifndef TCCLIBSDK_TCTHEMEBUILDER_H
12#define TCCLIBSDK_TCTHEMEBUILDER_H
17#define COL_COUNT_FLAG_BULK_MODE 0x80
28 class ThemePropertiesBuilder {
30 enum ThemeLevel : uint8_t {
31 THEME_GLOBAL, THEME_SUB, THEME_ITEM, THEME_ITEM_NEEDS_PROPS, THEME_ITEM_NEEDS_GRID, THEME_ITEM_NEEDS_BOTH
35 TcThemeBuilder *themeBuilder;
37 const void* fontData{};
41 uint16_t gridHeight {};
43 ThemeLevel currentLevel = THEME_GLOBAL;
52 explicit ThemePropertiesBuilder(TcThemeBuilder *themeBuilder): themeBuilder(themeBuilder) {}
71 ThemePropertiesBuilder&
withAdaFont(
const GFXfont* font,
int mag = 1) {
73 fontMag = internal_min(1, mag);
143 memcpy(palette, p,
sizeof(palette));
163 const uint8_t* selIcon,
const color_t* palette =
nullptr);
173 ThemePropertiesBuilder&
withImageXbmp(
Coord size,
const uint8_t* regIcon,
const uint8_t* selIcon =
nullptr) {
187 ThemePropertiesBuilder&
withImage2bpp(
Coord size,
const color_t* imgPalette,
const uint8_t* regIcon,
const uint8_t* selIcon =
nullptr) {
201 ThemePropertiesBuilder&
withImage4bpp(
Coord size,
const color_t* imgPalette,
const uint8_t* regIcon,
const uint8_t* selIcon =
nullptr) {
214 ThemePropertiesBuilder&
withMonoBitmap(
Coord size,
const uint8_t* regIcon,
const uint8_t* selIcon =
nullptr) {
239 ThemePropertiesBuilder&
onRowCol(uint8_t actRow, uint8_t column, uint8_t numberOfCols) {
242 colCount = numberOfCols;
252 ThemePropertiesBuilder&
onRow(uint8_t actualRow) {
269 if(currentLevel == THEME_SUB || currentLevel == THEME_GLOBAL)
return;
270 if(currentLevel == THEME_ITEM) currentLevel = THEME_ITEM_NEEDS_PROPS;
271 else currentLevel = THEME_ITEM_NEEDS_BOTH;
274 void needsGrid(
bool propsOk) {
275 if(currentLevel == THEME_SUB || currentLevel == THEME_GLOBAL)
return;
276 if(currentLevel == THEME_ITEM_NEEDS_PROPS && propsOk)
return;
277 if(currentLevel == THEME_ITEM) currentLevel = THEME_ITEM_NEEDS_GRID;
278 else currentLevel = THEME_ITEM_NEEDS_BOTH;
281 friend TcThemeBuilder;
295 color_t defaultPalette[4] = {};
298 const void *fontData;
300 uint8_t defaultSpacing;
307 propertiesBuilder(this) {
308 auto titleDef = factory.configFor(
nullptr, ItemDisplayProperties::COMPTYPE_TITLE);
309 globalTitlePadding = titleDef->getPadding();
310 auto itemDef = factory.configFor(
nullptr, ItemDisplayProperties::COMPTYPE_ITEM);
311 memcpy(defaultPalette, itemDef->getPalette(),
sizeof defaultPalette);
312 globalItemPadding = itemDef->getPadding();
313 fontData = itemDef->getFont();
314 fontMag = itemDef->getFontMagnification();
315 defaultSpacing = itemDef->getSpaceAfter();
325 factory.setSelectedColors(bg, fg);
338 fontMag = internal_min(1, mag);
411 defaultSpacing = spacing;
421 globalItemPadding = padding;
431 globalTitlePadding = padding;
440 propertiesBuilder.initForLevel(
this, ItemDisplayProperties::COMPTYPE_ITEM, ThemePropertiesBuilder::THEME_GLOBAL);
441 return propertiesBuilder;
449 propertiesBuilder.initForLevel(
this, ItemDisplayProperties::COMPTYPE_TITLE, ThemePropertiesBuilder::THEME_GLOBAL);
450 return propertiesBuilder;
458 propertiesBuilder.initForLevel(
this, ItemDisplayProperties::COMPTYPE_ACTION, ThemePropertiesBuilder::THEME_GLOBAL);
459 return propertiesBuilder;
488 propertiesBuilder.initForLevel(
this, ItemDisplayProperties::COMPTYPE_ITEM, ThemePropertiesBuilder::THEME_SUB, &item);
489 return propertiesBuilder;
499 propertiesBuilder.initForLevel(
this, ItemDisplayProperties::COMPTYPE_ACTION, ThemePropertiesBuilder::THEME_SUB, &item);
500 return propertiesBuilder;
510 propertiesBuilder.initForLevel(
this, ItemDisplayProperties::COMPTYPE_TITLE, ThemePropertiesBuilder::THEME_SUB, &item);
511 return propertiesBuilder;
529 renderer.setTitleMode(mode);
530 renderer.setUseSliderForAnalog(useAnalogSliders);
577 return type == ItemDisplayProperties::COMPTYPE_TITLE ? globalTitlePadding : globalItemPadding;
580 uint8_t getDefaultSpacing()
const {
581 return defaultSpacing;
584 GraphicsDeviceRenderer& getRenderer() {
588 const color_t* getDefaultPalette() {
589 return defaultPalette;
592 const void* getDefaultFontData() {
596 uint8_t getDefaultFontMag()
const {
uint32_t color_t
Definition DrawingPrimitives.h:29
the interface that all graphics devices should implement to do the actual graphics rendering.
TitleMode
Definition BaseGraphicalRenderer.h:136
Definition GfxMenuConfig.h:479
IconType
Definition DrawingPrimitives.h:154
@ ICON_XBITMAP
Definition DrawingPrimitives.h:156
@ ICON_MONO
Definition DrawingPrimitives.h:158
@ ICON_PALLETE_2BPP
Definition DrawingPrimitives.h:161
@ ICON_PALLETE_4BPP
Definition DrawingPrimitives.h:164
Definition GraphicsDeviceRenderer.h:59
GridJustification
Definition GfxMenuConfig.h:93
@ JUSTIFY_TITLE_LEFT_VALUE_RIGHT
Definition GfxMenuConfig.h:107
GridDrawingMode
Definition GfxMenuConfig.h:74
ComponentType
Definition GfxMenuConfig.h:260
Definition TcThemeBuilder.h:290
TcThemeBuilder & withRenderingSettings(BaseGraphicalRenderer::TitleMode mode, bool useAnalogSliders)
Definition TcThemeBuilder.h:528
ThemePropertiesBuilder & submenuPropertiesItemOverride(SubMenuItem &item)
Definition TcThemeBuilder.h:487
ThemePropertiesBuilder & defaultItemProperties()
Definition TcThemeBuilder.h:439
TcThemeBuilder & withStandardLowResCursorIcons()
Definition TcThemeBuilder.cpp:131
TcThemeBuilder & enablingTcUnicode()
Definition TcThemeBuilder.h:378
TcThemeBuilder & withPalette(const color_t *cols)
Definition TcThemeBuilder.cpp:97
ThemePropertiesBuilder & menuItemOverride(MenuItem &item)
Definition TcThemeBuilder.cpp:102
TcThemeBuilder & withAdaFont(const GFXfont *font, int mag=1)
Definition TcThemeBuilder.h:336
TcThemeBuilder & enableTcUnicode()
Definition TcThemeBuilder.cpp:139
TcThemeBuilder & dimensionsFromRenderer()
Definition TcThemeBuilder.cpp:144
TcThemeBuilder(GraphicsDeviceRenderer &renderer)
Definition TcThemeBuilder.h:306
TcThemeBuilder & withItemPadding(MenuPadding padding)
Definition TcThemeBuilder.h:420
ThemePropertiesBuilder & submenuPropertiesActionOverride(SubMenuItem &item)
Definition TcThemeBuilder.h:498
TcThemeBuilder & enableCardLayoutWithXbmImages(Coord iconSize, const uint8_t *leftIcon, const uint8_t *rightIcon, bool isMono)
Definition TcThemeBuilder.cpp:119
TcThemeBuilder & manualDimensions(int x, int y)
Definition TcThemeBuilder.cpp:150
ThemePropertiesBuilder & defaultTitleProperties()
Definition TcThemeBuilder.h:448
TcThemeBuilder & withSpacing(uint8_t spacing)
Definition TcThemeBuilder.h:410
ThemePropertiesBuilder & defaultActionProperties()
Definition TcThemeBuilder.h:457
TcThemeBuilder & withStandardMedResCursorIcons()
Definition TcThemeBuilder.cpp:135
TcThemeBuilder & withCursorIconsXbmp(Coord size, const uint8_t *editIcon, const uint8_t *activeIcon)
Definition TcThemeBuilder.cpp:87
void apply()
Definition TcThemeBuilder.cpp:93
TcThemeBuilder & withTitlePadding(MenuPadding padding)
Definition TcThemeBuilder.h:430
ThemePropertiesBuilder & submenuPropertiesTitleOverride(SubMenuItem &item)
Definition TcThemeBuilder.h:509
TcThemeBuilder & setMenuAsCard(SubMenuItem &item, bool on)
Definition TcThemeBuilder.cpp:126
TcThemeBuilder & withSelectedColors(color_t bg, color_t fg)
Definition TcThemeBuilder.h:324
TcThemeBuilder & withNativeFont(const void *data, uint8_t mag)
Definition TcThemeBuilder.h:360
TcThemeBuilder & withTcUnicodeFont(const UnicodeFont *font)
Definition TcThemeBuilder.h:347
Definition TcThemeBuilder.h:28
ThemePropertiesBuilder & withImage2bpp(Coord size, const color_t *imgPalette, const uint8_t *regIcon, const uint8_t *selIcon=nullptr)
Definition TcThemeBuilder.h:187
ThemePropertiesBuilder & withDrawingMode(GridPosition::GridDrawingMode dm)
Definition TcThemeBuilder.h:225
ThemePropertiesBuilder & withSpacing(uint8_t s)
Definition TcThemeBuilder.h:119
ThemePropertiesBuilder & withPalette(const color_t *p)
Definition TcThemeBuilder.h:141
ThemePropertiesBuilder & withTcUnicodeFont(const UnicodeFont *font)
Definition TcThemeBuilder.h:83
ThemePropertiesBuilder & withImageOfType(Coord size, DrawableIcon::IconType iconType, const uint8_t *regIcon, const uint8_t *selIcon, const color_t *palette=nullptr)
Definition TcThemeBuilder.cpp:80
ThemePropertiesBuilder & withNativeFont(const void *data, uint8_t mag)
Definition TcThemeBuilder.h:96
ThemePropertiesBuilder & withJustification(GridPosition::GridJustification j)
Definition TcThemeBuilder.h:130
ThemePropertiesBuilder & onRow(uint8_t actualRow)
Definition TcThemeBuilder.h:252
ThemePropertiesBuilder & withMonoBitmap(Coord size, const uint8_t *regIcon, const uint8_t *selIcon=nullptr)
Definition TcThemeBuilder.h:214
ThemePropertiesBuilder & withImageXbmp(Coord size, const uint8_t *regIcon, const uint8_t *selIcon=nullptr)
Definition TcThemeBuilder.h:173
ThemePropertiesBuilder & withRowHeight(uint16_t height)
Definition TcThemeBuilder.h:153
ThemePropertiesBuilder & withBorder(const MenuBorder &b)
Definition TcThemeBuilder.h:59
ThemePropertiesBuilder & withImage4bpp(Coord size, const color_t *imgPalette, const uint8_t *regIcon, const uint8_t *selIcon=nullptr)
Definition TcThemeBuilder.h:201
ThemePropertiesBuilder & onRowCol(uint8_t actRow, uint8_t column, uint8_t numberOfCols)
Definition TcThemeBuilder.h:239
ThemePropertiesBuilder & withAdaFont(const GFXfont *font, int mag=1)
Definition TcThemeBuilder.h:71
ThemePropertiesBuilder & withPadding(MenuPadding p)
Definition TcThemeBuilder.h:108
void apply()
Definition TcThemeBuilder.cpp:8
Definition DrawingPrimitives.h:123