diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-11-24 20:45:19 +0100 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-11-24 20:45:19 +0100 |
commit | d03c4c9cc7624ff3e4d0407c7ed58c1c4bb9a337 (patch) | |
tree | 7b4dc31c4df4b960e7c27b78cfafaa9df1ecfe1e | |
parent | 71f84c2ca051fb3f4e0e98faaba05e9449598b81 (diff) | |
download | sciteco-d03c4c9cc7624ff3e4d0407c7ed58c1c4bb9a337.tar.gz |
NCURSES: ensure that info popup is not too large for screen
* print "..." at end of list if not all entries can be displayed because the entire screen is already covered
-rw-r--r-- | interface-ncurses.cpp | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/interface-ncurses.cpp b/interface-ncurses.cpp index 9b22826..869e911 100644 --- a/interface-ncurses.cpp +++ b/interface-ncurses.cpp @@ -260,7 +260,8 @@ InterfaceNCurses::popup_show(void) { int lines, cols; /* screen dimensions */ int popup_lines; - gint popup_cols, cur_file; + gint popup_cols; + gint cur_file, cur_line; if (isendwin()) /* batch mode */ goto cleanup; @@ -272,17 +273,29 @@ InterfaceNCurses::popup_show(void) popup_cols = MIN(popup.length, cols / popup.longest); popup_lines = (popup.length + popup.length % popup_cols)/popup_cols; - /* window covers message and scintilla windows */ + popup_lines = MIN(popup_lines, lines - 1); + /* window covers message, scintilla and info windows */ popup.window = newwin(popup_lines, 0, lines - 1 - popup_lines, 0); wbkgdset(popup.window, ' ' | SCI_COLOR_ATTR(COLOR_BLACK, COLOR_BLUE)); cur_file = 0; + cur_line = 1; for (GSList *cur = popup.list; cur; cur = g_slist_next(cur)) { gchar *entry = (gchar *)cur->data; if (cur_file && !(cur_file % popup_cols)) { wclrtoeol(popup.window); waddch(popup.window, '\n'); + cur_line++; + } + + cur_file++; + + if (cur_line == popup_lines && cur_file < popup.length && + !(cur_file % popup_cols)) { + (void)wattrset(popup.window, A_BOLD); + waddstr(popup.window, "..."); + break; } (void)wattrset(popup.window, *entry == '*' ? A_BOLD : A_NORMAL); @@ -291,7 +304,6 @@ InterfaceNCurses::popup_show(void) waddch(popup.window, ' '); g_free(cur->data); - cur_file++; } wclrtoeol(popup.window); |