diff options
author | George Joseph <gjoseph@digium.com> | 2016-07-24 17:27:26 -0600 |
---|---|---|
committer | George Joseph <gjoseph@digium.com> | 2016-08-01 11:46:36 -0500 |
commit | 56a07fbab9bdabc562d88706067ce53f7025a660 (patch) | |
tree | a86230f99f4d4feff2269d79ee45841eeb1f1a5d /menuselect/menuselect_curses.c | |
parent | 948a9b615ff9bb6c9233e3efdf94f9224c605c98 (diff) |
menuselect: Various menuselect enhancements
* Add 'external' as a support level.
* Add ability for module directories to add entries to the menu
by adding members to the <module_prefix>/<module_prefix>.xml file.
* Expand the description field to 3 lines in the ncurses implementation.
* Allow the description field to wrap in the newt implementation.
* Add description field to the gtk implementation.
Change-Id: I7f9600a1984a42ce0696db574c1051bc9ad7c808
(cherry picked from commit 90f445729d5d86050d9d379485ff0a99f4a006c1)
Diffstat (limited to 'menuselect/menuselect_curses.c')
-rw-r--r-- | menuselect/menuselect_curses.c | 61 |
1 files changed, 32 insertions, 29 deletions
diff --git a/menuselect/menuselect_curses.c b/menuselect/menuselect_curses.c index 00645927a..e79957485 100644 --- a/menuselect/menuselect_curses.c +++ b/menuselect/menuselect_curses.c @@ -194,46 +194,49 @@ static void display_mem_info(WINDOW *menu, struct member *mem, int start_y, int int start_x = (max_x / 2 - MEMBER_INFO_LEFT_ADJ); int maxlen = (max_x - start_x); - wmove(menu, end - start_y + 1, start_x); + wmove(menu, end - start_y + 1, 0); wclrtoeol(menu); - wmove(menu, end - start_y + 2, start_x); + wmove(menu, end - start_y + 2, 0); wclrtoeol(menu); - wmove(menu, end - start_y + 3, start_x); + wmove(menu, end - start_y + 3, 0); wclrtoeol(menu); - wmove(menu, end - start_y + 4, start_x); + wmove(menu, end - start_y + 4, 0); wclrtoeol(menu); - wmove(menu, end - start_y + 5, start_x); + wmove(menu, end - start_y + 5, 0); wclrtoeol(menu); - wmove(menu, end - start_y + 6, start_x); + wmove(menu, end - start_y + 6, 0); + wclrtoeol(menu); + wmove(menu, end - start_y + 7, 0); wclrtoeol(menu); if (mem->displayname) { - int name_len = strlen(mem->displayname); + char buf[maxlen + 1]; + char *displayname = strdupa(mem->displayname); + char *word; + int current_line = 1; + int new_line = 1; + buf[0] = '\0'; 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); + + while ((word = strsep(&displayname, " "))) { + if ((strlen(buf) + strlen(word) + 1) > maxlen) { + waddstr(menu, buf); + current_line++; + wmove(menu, end - start_y + current_line, start_x); + buf[0] = '\0'; + new_line = 1; } - } else { - waddstr(menu, (char *) mem->displayname); + sprintf(buf, "%s%*.*s%s", buf, new_line ? 0 : 1, new_line ? 0 : 1, " ", word); + new_line = 0; + } + if (strlen(buf)) { + waddstr(menu, buf); } } + if (!AST_LIST_EMPTY(&mem->deps)) { - wmove(menu, end - start_y + 3, start_x); + wmove(menu, end - start_y + 4, start_x); strcpy(buf, "Depends on: "); AST_LIST_TRAVERSE(&mem->deps, dep, list) { strncat(buf, dep->displayname, sizeof(buf) - strlen(buf) - 1); @@ -244,7 +247,7 @@ static void display_mem_info(WINDOW *menu, struct member *mem, int start_y, int waddstr(menu, buf); } if (!AST_LIST_EMPTY(&mem->uses)) { - wmove(menu, end - start_y + 4, start_x); + wmove(menu, end - start_y + 5, start_x); strcpy(buf, "Can use: "); AST_LIST_TRAVERSE(&mem->uses, use, list) { strncat(buf, use->displayname, sizeof(buf) - strlen(buf) - 1); @@ -255,7 +258,7 @@ static void display_mem_info(WINDOW *menu, struct member *mem, int start_y, int waddstr(menu, buf); } if (!AST_LIST_EMPTY(&mem->conflicts)) { - wmove(menu, end - start_y + 5, start_x); + wmove(menu, end - start_y + 6, start_x); strcpy(buf, "Conflicts with: "); AST_LIST_TRAVERSE(&mem->conflicts, con, list) { strncat(buf, con->displayname, sizeof(buf) - strlen(buf) - 1); @@ -268,7 +271,7 @@ static void display_mem_info(WINDOW *menu, struct member *mem, int start_y, int if (!mem->is_separator) { /* Separators lack support levels */ { /* support level */ - wmove(menu, end - start_y + 6, start_x); + wmove(menu, end - start_y + 7, start_x); snprintf(buf, sizeof(buf), "Support Level: %s", mem->support_level); if (mem->replacement && *mem->replacement) { char buf2[64]; |