summaryrefslogtreecommitdiff
path: root/menuselect/menuselect_curses.c
diff options
context:
space:
mode:
Diffstat (limited to 'menuselect/menuselect_curses.c')
-rw-r--r--menuselect/menuselect_curses.c73
1 files changed, 52 insertions, 21 deletions
diff --git a/menuselect/menuselect_curses.c b/menuselect/menuselect_curses.c
index 5afa99661..00645927a 100644
--- a/menuselect/menuselect_curses.c
+++ b/menuselect/menuselect_curses.c
@@ -158,6 +158,12 @@ static int really_quit(WINDOW *win)
return c;
}
+#define MENU_HELP_LEFT_ADJ 16
+#define MAIN_MENU_LEFT_ADJ 20
+#define CAT_MENU_LEFT_ADJ 20
+#define SCROLL_DOWN_LEFT_ADJ 15
+#define MEMBER_INFO_LEFT_ADJ 25
+
static void draw_main_menu(WINDOW *menu, int curopt)
{
struct category *cat;
@@ -167,42 +173,67 @@ static void draw_main_menu(WINDOW *menu, int curopt)
wclear(menu);
AST_LIST_TRAVERSE(&categories, cat, list) {
- wmove(menu, i++, max_x / 2 - 10);
- snprintf(buf, sizeof(buf), " %s", strlen_zero(cat->displayname) ? cat->name : cat->displayname);
+ wmove(menu, i++, max_x / 2 - MAIN_MENU_LEFT_ADJ);
+ snprintf(buf, sizeof(buf), "%s", strlen_zero(cat->displayname) ? cat->name : cat->displayname);
waddstr(menu, buf);
}
- wmove(menu, curopt, (max_x / 2) - 15);
+ wmove(menu, curopt, (max_x / 2) - MAIN_MENU_LEFT_ADJ - 5);
waddstr(menu, "--->");
- wmove(menu, 0, 0);
+ wmove(menu, curopt, (max_x / 2) - MAIN_MENU_LEFT_ADJ);
wrefresh(menu);
}
-static void display_mem_info(WINDOW *menu, struct member *mem, int start, int end)
+static void display_mem_info(WINDOW *menu, struct member *mem, int start_y, int end)
{
char buf[64];
struct reference *dep;
struct reference *con;
struct reference *use;
+ int start_x = (max_x / 2 - MEMBER_INFO_LEFT_ADJ);
+ int maxlen = (max_x - start_x);
- wmove(menu, end - start + 2, max_x / 2 - 16);
+ wmove(menu, end - start_y + 1, start_x);
+ wclrtoeol(menu);
+ wmove(menu, end - start_y + 2, start_x);
wclrtoeol(menu);
- wmove(menu, end - start + 3, max_x / 2 - 16);
+ wmove(menu, end - start_y + 3, start_x);
wclrtoeol(menu);
- wmove(menu, end - start + 4, max_x / 2 - 16);
+ wmove(menu, end - start_y + 4, start_x);
wclrtoeol(menu);
- wmove(menu, end - start + 5, max_x / 2 - 16);
+ wmove(menu, end - start_y + 5, start_x);
wclrtoeol(menu);
- wmove(menu, end - start + 6, max_x / 2 - 16);
+ wmove(menu, end - start_y + 6, start_x);
wclrtoeol(menu);
if (mem->displayname) {
- wmove(menu, end - start + 2, max_x / 2 - 16);
- waddstr(menu, (char *) mem->displayname);
+ int name_len = strlen(mem->displayname);
+
+ wmove(menu, end - start_y + 1, start_x);
+ if (name_len > maxlen) {
+ char *last_space;
+ char *line_1 = strdup(mem->displayname);
+
+ if (line_1) {
+ line_1[maxlen] = '\0';
+ last_space = strrchr(line_1, ' ');
+ if (last_space) {
+ *last_space = '\0';
+ }
+ waddstr(menu, line_1);
+ wmove(menu, end - start_y + 2, start_x);
+ waddstr(menu, &mem->displayname[last_space - line_1]);
+ free(line_1);
+ } else {
+ waddstr(menu, (char *) mem->displayname);
+ }
+ } else {
+ waddstr(menu, (char *) mem->displayname);
+ }
}
if (!AST_LIST_EMPTY(&mem->deps)) {
- wmove(menu, end - start + 3, max_x / 2 - 16);
+ wmove(menu, end - start_y + 3, start_x);
strcpy(buf, "Depends on: ");
AST_LIST_TRAVERSE(&mem->deps, dep, list) {
strncat(buf, dep->displayname, sizeof(buf) - strlen(buf) - 1);
@@ -213,7 +244,7 @@ static void display_mem_info(WINDOW *menu, struct member *mem, int start, int en
waddstr(menu, buf);
}
if (!AST_LIST_EMPTY(&mem->uses)) {
- wmove(menu, end - start + 4, max_x / 2 - 16);
+ wmove(menu, end - start_y + 4, start_x);
strcpy(buf, "Can use: ");
AST_LIST_TRAVERSE(&mem->uses, use, list) {
strncat(buf, use->displayname, sizeof(buf) - strlen(buf) - 1);
@@ -224,7 +255,7 @@ static void display_mem_info(WINDOW *menu, struct member *mem, int start, int en
waddstr(menu, buf);
}
if (!AST_LIST_EMPTY(&mem->conflicts)) {
- wmove(menu, end - start + 5, max_x / 2 - 16);
+ wmove(menu, end - start_y + 5, start_x);
strcpy(buf, "Conflicts with: ");
AST_LIST_TRAVERSE(&mem->conflicts, con, list) {
strncat(buf, con->displayname, sizeof(buf) - strlen(buf) - 1);
@@ -237,7 +268,7 @@ static void display_mem_info(WINDOW *menu, struct member *mem, int start, int en
if (!mem->is_separator) { /* Separators lack support levels */
{ /* support level */
- wmove(menu, end - start + 6, max_x / 2 - 16);
+ wmove(menu, end - start_y + 6, start_x);
snprintf(buf, sizeof(buf), "Support Level: %s", mem->support_level);
if (mem->replacement && *mem->replacement) {
char buf2[64];
@@ -266,7 +297,7 @@ static void draw_category_menu(WINDOW *menu, struct category *cat, int start, in
break;
}
}
- wmove(menu, curopt - start, max_x / 2 - 9);
+ wmove(menu, curopt - start, (max_x / 2) - (CAT_MENU_LEFT_ADJ - 1));
wrefresh(menu);
return;
}
@@ -279,7 +310,7 @@ static void draw_category_menu(WINDOW *menu, struct category *cat, int start, in
i++;
continue;
}
- wmove(menu, j++, max_x / 2 - 10);
+ wmove(menu, j++, max_x / 2 - CAT_MENU_LEFT_ADJ);
i++;
if ((mem->depsfailed == HARD_FAILURE) || (mem->conflictsfailed == HARD_FAILURE)) {
snprintf(buf, sizeof(buf), "XXX %s", mem->name);
@@ -302,11 +333,11 @@ static void draw_category_menu(WINDOW *menu, struct category *cat, int start, in
}
if (flags & SCROLL_DOWN) {
- wmove(menu, j, max_x / 2 - sizeof(SCROLL_DOWN_INDICATOR) / 2);
+ wmove(menu, j, max_x / 2 - SCROLL_DOWN_LEFT_ADJ);
waddstr(menu, SCROLL_DOWN_INDICATOR);
}
- wmove(menu, curopt - start, max_x / 2 - 9);
+ wmove(menu, curopt - start, (max_x / 2) - (CAT_MENU_LEFT_ADJ - 1));
wrefresh(menu);
}
@@ -465,7 +496,7 @@ static void draw_title_window(WINDOW *title)
waddstr(title, (char *) menu_name);
wmove(title, 3, (max_x / 2) - (strlen(titlebar) / 2));
waddstr(title, titlebar);
- wmove(title, 5, (max_x / 2) - (strlen(MENU_HELP) / 2));
+ wmove(title, 5, (max_x / 2) - MENU_HELP_LEFT_ADJ);
waddstr(title, MENU_HELP);
wrefresh(title);
}