Skip to content

Commit

Permalink
Add increment and decrement controls for numeric display options
Browse files Browse the repository at this point in the history
Signed-off-by: Ahmed Abouzied <[email protected]>
  • Loading branch information
ahmedaabouzied committed Aug 24, 2021
1 parent e83c20a commit 8153d84
Showing 1 changed file with 34 additions and 4 deletions.
38 changes: 34 additions & 4 deletions DisplayOptionsPanel.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,12 @@ in the source distribution for its full text.
#include "ProvideCurses.h"


static const char* const DisplayOptionsFunctions[] = {"(De)Select ","Increment ", "Decrement ", "Done ", NULL};
static const char* const DisplayOptionsKeys[] = {"Enter","+", "-", "F10", "Esc"};
static const int DisplayOptionsEvents[] = {KEY_ENTER, '+', '-', KEY_F(10), 27};
static const char* const BooleanDisplayOptionsFunctions[] = {"Select ", "Done ", NULL};
static const char* const BooleanDisplayOptionsKeys[] = {"Enter", "F10", "Esc"};
static const int BooleanDisplayOptionsEvents[] = {KEY_ENTER, KEY_F(10), 27};
static const char* const NumericDisplayOptionsFunctions[] = {"Decrement ", "Increment ", "Done ", NULL};
static const char* const NumericDisplayOptionsKeys[] = {"-", "+", "F10", "Esc"};
static const int NumericDisplayOptionsEvents[] = {'-', '+', KEY_F(10), 27};

static void DisplayOptionsPanel_delete(Object* object) {
Panel* super = (Panel*) object;
Expand All @@ -31,13 +34,40 @@ static void DisplayOptionsPanel_delete(Object* object) {
free(this);
}

static void DisplayOptionsPanel_setFunctionBar(Panel *super, OptionItem* item){
if (OptionItem_kind(item) == OPTION_ITEM_NUMBER) {
FunctionBar* fuBar = FunctionBar_new(NumericDisplayOptionsFunctions, NumericDisplayOptionsKeys, NumericDisplayOptionsEvents);
super->currentBar = fuBar;
} else {
FunctionBar* fuBar = FunctionBar_new(BooleanDisplayOptionsFunctions, BooleanDisplayOptionsKeys, BooleanDisplayOptionsEvents);
super->currentBar = fuBar;
}
}

static HandlerResult DisplayOptionsPanel_eventHandler(Panel* super, int ch) {
DisplayOptionsPanel* this = (DisplayOptionsPanel*) super;

HandlerResult result = IGNORED;
OptionItem* selected = (OptionItem*) Panel_getSelected(super);

switch (ch) {

case KEY_UP: {
int selected_index = Panel_getSelectedIndex(super);
if (selected_index > 1) {
OptionItem* next_to_select = (OptionItem*) Panel_get(super, selected_index -1);
DisplayOptionsPanel_setFunctionBar(super, next_to_select);
}
break;
}
case KEY_DOWN: {
int selected_index = Panel_getSelectedIndex(super);
if (selected_index < Panel_size(super) - 1) {
OptionItem* next_to_select = (OptionItem*) Panel_get(super, selected_index +1);
DisplayOptionsPanel_setFunctionBar(super, next_to_select);
}
break;
}
case '\n':
case '\r':
case KEY_ENTER:
Expand Down Expand Up @@ -92,7 +122,7 @@ const PanelClass DisplayOptionsPanel_class = {
DisplayOptionsPanel* DisplayOptionsPanel_new(Settings* settings, ScreenManager* scr) {
DisplayOptionsPanel* this = AllocThis(DisplayOptionsPanel);
Panel* super = (Panel*) this;
FunctionBar* fuBar = FunctionBar_new(DisplayOptionsFunctions, DisplayOptionsKeys, DisplayOptionsEvents);
FunctionBar* fuBar = FunctionBar_new(BooleanDisplayOptionsFunctions, BooleanDisplayOptionsKeys, BooleanDisplayOptionsEvents);
Panel_init(super, 1, 1, 1, 1, Class(OptionItem), true, fuBar);

this->settings = settings;
Expand Down

0 comments on commit 8153d84

Please sign in to comment.