summaryrefslogtreecommitdiffstats
path: root/CategoriesPanel.c
diff options
context:
space:
mode:
authorBenny Baumann <BenBE@geshi.org>2021-08-21 17:42:48 +0200
committerBenny Baumann <BenBE@geshi.org>2021-08-22 16:15:59 +0200
commit6e6334e603564e1b961c010bce2688839f64cca2 (patch)
tree61af365310d1b4730a585ff8554447095dba7a4a /CategoriesPanel.c
parent9060a4179da07c82e73142b2b2afab5e6efaa8b0 (diff)
Simplify adding pages in one place
Diffstat (limited to 'CategoriesPanel.c')
-rw-r--r--CategoriesPanel.c44
1 files changed, 22 insertions, 22 deletions
diff --git a/CategoriesPanel.c b/CategoriesPanel.c
index 14f74c0e..1fefe47f 100644
--- a/CategoriesPanel.c
+++ b/CategoriesPanel.c
@@ -35,7 +35,7 @@ static void CategoriesPanel_delete(Object* object) {
free(this);
}
-void CategoriesPanel_makeMetersPage(CategoriesPanel* this) {
+static void CategoriesPanel_makeMetersPage(CategoriesPanel* this) {
size_t columns = HeaderLayout_getColumns(this->scr->header->headerLayout);
MetersPanel** meterPanels = xMallocArray(columns, sizeof(MetersPanel));
@@ -78,6 +78,20 @@ static void CategoriesPanel_makeHeaderOptionsPage(CategoriesPanel* this) {
ScreenManager_add(this->scr, colors, -1);
}
+typedef void (* CategoriesPanel_makePageFunc)(CategoriesPanel* ref);
+typedef struct CategoriesPanelPage_ {
+ const char* name;
+ CategoriesPanel_makePageFunc ctor;
+} CategoriesPanelPage;
+
+static const CategoriesPanelPage categoriesPanelPages[] = {
+ { .name = "Display options", .ctor = CategoriesPanel_makeDisplayOptionsPage },
+ { .name = "Header layout", .ctor = CategoriesPanel_makeHeaderOptionsPage },
+ { .name = "Meters", .ctor = CategoriesPanel_makeMetersPage },
+ { .name = "Columns", .ctor = CategoriesPanel_makeColumnsPage },
+ { .name = "Colors", .ctor = CategoriesPanel_makeColorsPage },
+};
+
static HandlerResult CategoriesPanel_eventHandler(Panel* super, int ch) {
CategoriesPanel* this = (CategoriesPanel*) super;
@@ -115,22 +129,8 @@ static HandlerResult CategoriesPanel_eventHandler(Panel* super, int ch) {
for (int i = 1; i < size; i++)
ScreenManager_remove(this->scr, 1);
- switch (selected) {
- case 0:
- CategoriesPanel_makeMetersPage(this);
- break;
- case 1:
- CategoriesPanel_makeDisplayOptionsPage(this);
- break;
- case 2:
- CategoriesPanel_makeColorsPage(this);
- break;
- case 3:
- CategoriesPanel_makeColumnsPage(this);
- break;
- case 4:
- CategoriesPanel_makeHeaderOptionsPage(this);
- break;
+ if (selected >= 0 && (size_t)selected < ARRAYSIZE(categoriesPanelPages)) {
+ categoriesPanelPages[selected].ctor(this);
}
}
return result;
@@ -155,10 +155,10 @@ CategoriesPanel* CategoriesPanel_new(ScreenManager* scr, Settings* settings, Hea
this->header = header;
this->pl = pl;
Panel_setHeader(super, "Setup");
- Panel_add(super, (Object*) ListItem_new("Meters", 0));
- Panel_add(super, (Object*) ListItem_new("Display options", 0));
- Panel_add(super, (Object*) ListItem_new("Colors", 0));
- Panel_add(super, (Object*) ListItem_new("Columns", 0));
- Panel_add(super, (Object*) ListItem_new("Header layout", 0));
+ for (size_t i = 0; i < ARRAYSIZE(categoriesPanelPages); i++)
+ Panel_add(super, (Object*) ListItem_new(categoriesPanelPages[i].name, 0));
+
+ ScreenManager_add(scr, super, 16);
+ categoriesPanelPages[0].ctor(this);
return this;
}

© 2014-2024 Faster IT GmbH | imprint | privacy policy