From 9060a4179da07c82e73142b2b2afab5e6efaa8b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20G=C3=B6ttsche?= Date: Fri, 25 Dec 2020 16:42:35 +0100 Subject: Add option to change Header layout --- CategoriesPanel.c | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) (limited to 'CategoriesPanel.c') diff --git a/CategoriesPanel.c b/CategoriesPanel.c index d415760c..14f74c0e 100644 --- a/CategoriesPanel.c +++ b/CategoriesPanel.c @@ -17,6 +17,8 @@ in the source distribution for its full text. #include "ColumnsPanel.h" #include "DisplayOptionsPanel.h" #include "FunctionBar.h" +#include "Header.h" +#include "HeaderOptionsPanel.h" #include "ListItem.h" #include "MetersPanel.h" #include "Object.h" @@ -34,13 +36,23 @@ static void CategoriesPanel_delete(Object* object) { } void CategoriesPanel_makeMetersPage(CategoriesPanel* this) { - MetersPanel* leftMeters = MetersPanel_new(this->settings, "Left column", this->header->columns[0], this->scr); - MetersPanel* rightMeters = MetersPanel_new(this->settings, "Right column", this->header->columns[1], this->scr); - leftMeters->rightNeighbor = rightMeters; - rightMeters->leftNeighbor = leftMeters; - Panel* availableMeters = (Panel*) AvailableMetersPanel_new(this->settings, this->header, (Panel*) leftMeters, (Panel*) rightMeters, this->scr, this->pl); - ScreenManager_add(this->scr, (Panel*) leftMeters, 20); - ScreenManager_add(this->scr, (Panel*) rightMeters, 20); + size_t columns = HeaderLayout_getColumns(this->scr->header->headerLayout); + MetersPanel** meterPanels = xMallocArray(columns, sizeof(MetersPanel)); + + for (size_t i = 0; i < columns; i++) { + char titleBuffer[32]; + xSnprintf(titleBuffer, sizeof(titleBuffer), "Column %zu", i + 1); + meterPanels[i] = MetersPanel_new(this->settings, titleBuffer, this->header->columns[i], this->scr); + + if (i != 0) { + meterPanels[i]->leftNeighbor = meterPanels[i - 1]; + meterPanels[i - 1]->rightNeighbor = meterPanels[i]; + } + + ScreenManager_add(this->scr, (Panel*) meterPanels[i], 20); + } + + Panel* availableMeters = (Panel*) AvailableMetersPanel_new(this->settings, this->header, columns, meterPanels, this->scr, this->pl); ScreenManager_add(this->scr, availableMeters, -1); } @@ -61,6 +73,11 @@ static void CategoriesPanel_makeColumnsPage(CategoriesPanel* this) { ScreenManager_add(this->scr, availableColumns, -1); } +static void CategoriesPanel_makeHeaderOptionsPage(CategoriesPanel* this) { + Panel* colors = (Panel*) HeaderOptionsPanel_new(this->settings, this->scr); + ScreenManager_add(this->scr, colors, -1); +} + static HandlerResult CategoriesPanel_eventHandler(Panel* super, int ch) { CategoriesPanel* this = (CategoriesPanel*) super; @@ -111,6 +128,9 @@ static HandlerResult CategoriesPanel_eventHandler(Panel* super, int ch) { case 3: CategoriesPanel_makeColumnsPage(this); break; + case 4: + CategoriesPanel_makeHeaderOptionsPage(this); + break; } } return result; @@ -139,5 +159,6 @@ CategoriesPanel* CategoriesPanel_new(ScreenManager* scr, Settings* settings, Hea 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)); return this; } -- cgit v1.2.3