aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2012-11-24 20:45:19 +0100
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2012-11-24 20:45:19 +0100
commitd03c4c9cc7624ff3e4d0407c7ed58c1c4bb9a337 (patch)
tree7b4dc31c4df4b960e7c27b78cfafaa9df1ecfe1e
parent71f84c2ca051fb3f4e0e98faaba05e9449598b81 (diff)
downloadsciteco-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.cpp18
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);