summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSven Eden <yamakuzure@gmx.net>2013-09-10 22:43:35 +0200
committerSven Eden <yamakuzure@gmx.net>2013-09-10 22:43:35 +0200
commit3e73393774bc02d67915fbb77854ac9489084ee1 (patch)
treea2184ec77b69b6a07d6252cb034d0f20e0ef39c4
parentChanged the help page to support the new sKey layout (diff)
downloadufed-3e73393774bc02d67915fbb77854ac9489084ee1.tar.gz
ufed-3e73393774bc02d67915fbb77854ac9489084ee1.tar.bz2
ufed-3e73393774bc02d67915fbb77854ac9489084ee1.zip
Changed key help display to show the next state instead of a fixed text.
-rw-r--r--ufed-curses-checklist.c63
-rw-r--r--ufed-curses.c69
2 files changed, 83 insertions, 49 deletions
diff --git a/ufed-curses-checklist.c b/ufed-curses-checklist.c
index 8a39fac..39f4a8d 100644
--- a/ufed-curses-checklist.c
+++ b/ufed-curses-checklist.c
@@ -480,9 +480,10 @@ static int callback(sFlag** curr, int key)
break;
case KEY_F(5):
- if (eScope_local == e_scope) e_scope = eScope_all;
- else if (eScope_global == e_scope) e_scope = eScope_local;
- else e_scope = eScope_global;
+ if (eScope_local == e_scope)
+ e_scope = eScope_all;
+ else
+ ++e_scope;
if ( !isFlagLegal(*curr)
&& !setNextItem(0, true)
@@ -493,9 +494,11 @@ static int callback(sFlag** curr, int key)
break;
case KEY_F(6):
- if (eState_installed == e_state) e_state = eState_notinstalled;
- else if (eState_notinstalled == e_state) e_state = eState_all;
- else e_state = eState_installed;
+ if (eState_notinstalled == e_state)
+ e_state = eState_all;
+ else
+ ++e_state;
+
if ( !isFlagLegal(*curr)
&& !setNextItem(0, true)
@@ -506,9 +509,10 @@ static int callback(sFlag** curr, int key)
break;
case KEY_F(7):
- if (eMask_masked == e_mask) e_mask = eMask_unmasked;
- else if (eMask_unmasked == e_mask) e_mask = eMask_both;
- else e_mask = eMask_masked;
+ if (eMask_both == e_mask)
+ e_mask = eMask_unmasked;
+ else
+ ++e_mask;
if ( !isFlagLegal(*curr)
&& !setNextItem(0, true)
@@ -520,8 +524,10 @@ static int callback(sFlag** curr, int key)
break;
case KEY_F(9):
- if (eOrder_left == e_order) e_order = eOrder_right;
- else e_order = eOrder_left;
+ if (eOrder_left == e_order)
+ e_order = eOrder_right;
+ else
+ e_order = eOrder_left;
drawFlags();
drawBottom(true);
@@ -529,8 +535,10 @@ static int callback(sFlag** curr, int key)
break;
case KEY_F(10):
- if (eDesc_ori == e_desc) e_desc = eDesc_alt;
- else e_desc = eDesc_ori;
+ if (eDesc_ori == e_desc)
+ e_desc = eDesc_alt;
+ else
+ e_desc = eDesc_ori;
drawFlags();
drawBottom(true);
@@ -639,25 +647,20 @@ int main(void)
initcurses();
/* The keys to use differ whether ro_mode is true or false */
-#define mkKey(x) x, sizeof(x)-1
sKey keys[] = {
- { '?', mkKey("?: Help"), 0 },
- { '\n', mkKey(ro_mode ?
- "Enter: Exit"
- : "Enter: Save"), 0 },
- { '\033', mkKey(ro_mode ?
- "Esc: Exit"
- : "Esc: Cancel"), 0 },
- { -1, mkKey("Toggle"), 1 },
- { KEY_F( 5), mkKey("F5: Local/Global"), 1 },
- { KEY_F( 6), mkKey("F6: Installed"), 1 },
- { KEY_F( 7), mkKey("F7: Masked/Forced"), 1 },
- { -1, mkKey(" "), 2 },
- { KEY_F( 9), mkKey("F9: Swap Pkg/Desc"), 2 },
- { KEY_F(10), mkKey("F10: Strip Desc"), 2 },
- { '\0', mkKey(""), 0 }
+ /* Row 0 - General keys */
+ MAKE_KEY('?', "?:", "Help", "", "", NULL, 0),
+ MAKE_KEY('\n', "Enter:", "Save", "Exit", "", (int*)&ro_mode, 0),
+ MAKE_KEY('\033', "Esc:", "Cancel", "Exit", "", (int*)&ro_mode, 0),
+
+ /* Row 1 - F-KEy toggles */
+ MAKE_KEY(KEY_F( 5), "F5:", "global", "local", "all", (int*)&e_scope, 1),
+ MAKE_KEY(KEY_F( 6), "F6:", "installed", "not installed", "all", (int*)&e_state, 1),
+ MAKE_KEY(KEY_F( 7), "F7:", "masked", "all", "unmasked", (int*)&e_mask, 1),
+ MAKE_KEY(KEY_F( 9), "F9:", "desc left", "desc right", "", (int*)&e_order, 1),
+ MAKE_KEY(KEY_F(10), "F10:", "stripped", "full", "", (int*)&e_desc, 1),
+ MAKE_KEY('\0', "", "", "", "", NULL, 0)
};
-#undef mkKey
result = maineventloop(ro_mode ? subtitle_ro : subtitle_rw,
&callback, &drawflag, flags, keys, true);
diff --git a/ufed-curses.c b/ufed-curses.c
index 1c1970b..8441c56 100644
--- a/ufed-curses.c
+++ b/ufed-curses.c
@@ -142,9 +142,12 @@ void drawBottom(bool withSep)
if (keys) {
const sKey* key = keys;
- int pos = 2;
- int row = 0;
- int len = 0;
+ char buf[COLS + 1];
+ int pos = 2;
+ int row = 0;
+ int len_full = 0;
+ int len_name = 0;
+ int len_desc = 0;
while (key->key != '\0') {
if (row != key->row) {
@@ -152,19 +155,35 @@ void drawBottom(bool withSep)
pos = 2;
}
- len = strlen(key->descr);
+ len_name = key->name_len;
+ len_desc = key->desc_len;
+ len_full = len_name + len_desc;
if (pos < (bWidth - 2)) {
- if (len > (bWidth - 2 - pos))
- len = bWidth - 2 - pos;
- if (key->key > 0)
+ if (len_full > (bWidth - 2 - pos))
+ len_full = bWidth - 2 - pos;
+
+ /* Write name of the key */
+ if (len_name > len_full)
+ len_name = len_full;
+ len_full -= len_name;
+ wattrset(w, COLOR_PAIR(3));
+ mvwaddnstr(w, row + 1, pos, key->name, len_name);
+ pos += len_name;
+
+ /* Add description (button) if possible */
+ if (len_full) {
+ if (len_desc > len_full)
+ len_desc = len_full;
+ len_full -= len_desc;
+
+ sprintf(buf, "%-*.*s", len_desc - 1, len_desc - 1, key->desc[*key->idx]);
wattrset(w, COLOR_PAIR(6));
- else
- wattrset(w, COLOR_PAIR(3));
+ mvwaddstr(w, row + 1, pos, buf);
- mvwaddnstr(w, row + 1, pos, key->descr, len);
+ pos += len_desc;
+ }
}
- pos += len + 1;
++key;
}
}
@@ -645,8 +664,11 @@ int maineventloop(
if( (event.bstate & (BUTTON1_CLICKED | BUTTON1_DOUBLE_CLICKED))
&& (event.y >= 1) && (event.y <= 2)) {
const sKey* key = keys;
- int x = event.x;
- int y = event.y;
+ char buf[COLS + 1];
+ int x = event.x;
+ int y = event.y;
+ int len_name = 0;
+ int len_desc = 0;
if((x < 2) || (y < 1) || (y > 2))
continue;
x -= 2;
@@ -657,20 +679,29 @@ int maineventloop(
// Check key
for ( ; (key->row == y) && (x >= 0) && (key->key != '\0'); key++) {
- if ((key->key > 0) && ((size_t)x < key->length) ) {
- event.x -= x;
- wattrset(win(Bottom), COLOR_PAIR(6) | A_BOLD | A_REVERSE);
- mvwaddstr(win(Bottom), event.y, event.x, key->descr);
+ len_name = key->name_len;
+ len_desc = key->desc_len;
+ if ( (key->key > 0)
+ && (x > len_name)
+ && (x < (len_name + len_desc) ) ) {
+ event.x -= x - len_name;
+
+ sprintf(buf, "%-*.*s", len_desc - 1, len_desc - 1, key->desc[*key->idx]);
+ wattrset(win(Bottom), COLOR_PAIR(7) | A_BOLD);
+ mvwaddstr(win(Bottom), event.y, event.x, buf);
+
wmove(win(Bottom), event.y, event.x);
wrefresh(win(Bottom));
usleep(100000);
+
wattrset(win(Bottom), COLOR_PAIR(6));
- waddstr(win(Bottom), key->descr);
+ waddstr(win(Bottom), buf);
+
wnoutrefresh(win(Bottom));
c = key->key;
goto check_key;
}
- x -= key->length + 1;
+ x -= len_name + len_desc;
}
}
}