summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSven Eden <sven.eden@gmx.de>2013-03-05 07:58:13 +0100
committerSven Eden <sven.eden@gmx.de>2013-03-05 07:58:13 +0100
commit85458024ce090ca1c7a8c0093156f1f4abb3bc7a (patch)
tree89e41e8f36313b573ba19768c0d2c24eab999b55
parentChanged main keys to fit in 80 characters (diff)
downloadufed-85458024ce090ca1c7a8c0093156f1f4abb3bc7a.tar.gz
ufed-85458024ce090ca1c7a8c0093156f1f4abb3bc7a.tar.bz2
ufed-85458024ce090ca1c7a8c0093156f1f4abb3bc7a.zip
Added rendering and mouse event handling for two lines of keys
-rw-r--r--ufed-curses.c50
1 files changed, 32 insertions, 18 deletions
diff --git a/ufed-curses.c b/ufed-curses.c
index cf97d0c..1948f99 100644
--- a/ufed-curses.c
+++ b/ufed-curses.c
@@ -143,17 +143,27 @@ void drawBottom(bool withSep)
if (keys) {
const sKey* key = keys;
int pos = 2;
+ int row = 0;
int len = 0;
- while ((pos < (bWidth - 2)) && (key->key != '\0')) {
+ while (key->key != '\0') {
+ if (row != key->row) {
+ row = key->row;
+ pos = 2;
+ }
+
len = strlen(key->descr);
- if (len > (bWidth - 2 - pos))
- len = bWidth - 2 - pos;
- if (key->key > 0)
- wattrset(w, COLOR_PAIR(6));
- else
- wattrset(w, COLOR_PAIR(3));
- mvwaddnstr(w, 1, pos, key->descr, len);
+
+ if (pos < (bWidth - 2)) {
+ if (len > (bWidth - 2 - pos))
+ len = bWidth - 2 - pos;
+ if (key->key > 0)
+ wattrset(w, COLOR_PAIR(6));
+ else
+ wattrset(w, COLOR_PAIR(3));
+
+ mvwaddnstr(w, row + 1, pos, key->descr, len);
+ }
pos += len + 1;
++key;
}
@@ -622,14 +632,21 @@ int maineventloop(
} // End of having a scrollbar
} else if(wmouse_trafo(win(Bottom), &event.y, &event.x, FALSE)) {
if( (event.bstate & (BUTTON1_CLICKED | BUTTON1_DOUBLE_CLICKED))
- && (event.y == 1) ) {
- const sKey* key;
- int x = event.x;
- if(x < 2)
+ && (event.y >= 1) && (event.y <= 2)) {
+ const sKey* key = keys;
+ int x = event.x;
+ int y = event.y;
+ if((x < 2) || (y < 1) || (y > 2))
continue;
x -= 2;
- for(key = keys; key->key!='\0'; key++) {
- if( (key->key > 0) && ((size_t)x < key->length)) {
+ --y;
+
+ // Forward to second row if y is 1
+ for ( ; y > key->row; key++) ;
+
+ // 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);
@@ -642,10 +659,7 @@ int maineventloop(
c = key->key;
goto check_key;
}
- x -= key->length;
- if(x == 0)
- break;
- x--;
+ x -= key->length + 1;
}
}
}