summaryrefslogtreecommitdiffstats
path: root/HeaderOptionsPanel.c
diff options
context:
space:
mode:
Diffstat (limited to 'HeaderOptionsPanel.c')
-rw-r--r--HeaderOptionsPanel.c90
1 files changed, 90 insertions, 0 deletions
diff --git a/HeaderOptionsPanel.c b/HeaderOptionsPanel.c
new file mode 100644
index 0000000..7b5c81b
--- /dev/null
+++ b/HeaderOptionsPanel.c
@@ -0,0 +1,90 @@
+/*
+htop - HeaderOptionsPanel.c
+(C) 2021 htop dev team
+Released under the GNU GPLv2+, see the COPYING file
+in the source distribution for its full text.
+*/
+
+#include "config.h" // IWYU pragma: keep
+
+#include "HeaderOptionsPanel.h"
+
+#include <assert.h>
+#include <stdbool.h>
+#include <stdlib.h>
+
+#include "CRT.h"
+#include "FunctionBar.h"
+#include "Header.h"
+#include "HeaderLayout.h"
+#include "Object.h"
+#include "OptionItem.h"
+#include "ProvideCurses.h"
+
+
+static const char* const HeaderOptionsFunctions[] = {" ", " ", " ", " ", " ", " ", " ", " ", " ", "Done ", NULL};
+
+static void HeaderOptionsPanel_delete(Object* object) {
+ Panel* super = (Panel*) object;
+ HeaderOptionsPanel* this = (HeaderOptionsPanel*) object;
+ Panel_done(super);
+ free(this);
+}
+
+static HandlerResult HeaderOptionsPanel_eventHandler(Panel* super, int ch) {
+ HeaderOptionsPanel* this = (HeaderOptionsPanel*) super;
+
+ HandlerResult result = IGNORED;
+
+ switch (ch) {
+ case 0x0a:
+ case 0x0d:
+ case KEY_ENTER:
+ case KEY_MOUSE:
+ case KEY_RECLICK:
+ case ' ': {
+ int mark = Panel_getSelectedIndex(super);
+ assert(mark >= 0);
+ assert(mark < LAST_HEADER_LAYOUT);
+
+ for (int i = 0; i < LAST_HEADER_LAYOUT; i++)
+ CheckItem_set((CheckItem*)Panel_get(super, i), false);
+ CheckItem_set((CheckItem*)Panel_get(super, mark), true);
+
+ Header_setLayout(this->scr->header, mark);
+ this->settings->changed = true;
+ this->settings->lastUpdate++;
+
+ ScreenManager_resize(this->scr);
+
+ result = HANDLED;
+ }
+ }
+
+ return result;
+}
+
+const PanelClass HeaderOptionsPanel_class = {
+ .super = {
+ .extends = Class(Panel),
+ .delete = HeaderOptionsPanel_delete
+ },
+ .eventHandler = HeaderOptionsPanel_eventHandler
+};
+
+HeaderOptionsPanel* HeaderOptionsPanel_new(Settings* settings, ScreenManager* scr) {
+ HeaderOptionsPanel* this = AllocThis(HeaderOptionsPanel);
+ Panel* super = (Panel*) this;
+ FunctionBar* fuBar = FunctionBar_new(HeaderOptionsFunctions, NULL, NULL);
+ Panel_init(super, 1, 1, 1, 1, Class(CheckItem), true, fuBar);
+
+ this->scr = scr;
+ this->settings = settings;
+
+ Panel_setHeader(super, "Header Layout");
+ for (int i = 0; i < LAST_HEADER_LAYOUT; i++) {
+ Panel_add(super, (Object*) CheckItem_newByVal(HeaderLayout_layouts[i].description, false));
+ }
+ CheckItem_set((CheckItem*)Panel_get(super, scr->header->headerLayout), true);
+ return this;
+}