* please see the file GPL in the top level source directory.
*/
-#if HAVE_CONFIG_H
-# include "config.h"
-#endif
+#include <lib-ui/lib-ui.h>
-#include <string.h>
-#include <stdlib.h>
-#include <wchar.h>
-
-#include <lib-lib/lib-lib.h>
-
-#include "curses.h"
#include "enter.h"
#include "menu.h"
#include "charset.h"
#include <imap/imap.h>
-#include <lib-ui/sidebar.h>
-
-#define SW (option(OPTMBOXPANE)?SidebarWidth:0)
extern size_t UngetCount;
while (*s) {
if (*s < M_TREE_MAX) {
if (do_color)
- SETCOLOR (MT_COLOR_TREE);
+ SETCOLOR(main_w, MT_COLOR_TREE);
while (*s && *s < M_TREE_MAX) {
switch (*s) {
case M_TREE_LLCORNER:
- if (option (OPTASCIICHARS))
- addch ('`');
- else if (Charset_is_utf8)
- addstr ("\342\224\224"); /* WACS_LLCORNER */
- else
- addch (ACS_LLCORNER);
+ waddch (main_w, ACS_LLCORNER);
break;
case M_TREE_ULCORNER:
- if (option (OPTASCIICHARS))
- addch (',');
- else if (Charset_is_utf8)
- addstr ("\342\224\214"); /* WACS_ULCORNER */
- else
- addch (ACS_ULCORNER);
+ waddch (main_w, ACS_ULCORNER);
break;
case M_TREE_LTEE:
- if (option (OPTASCIICHARS))
- addch ('|');
- else if (Charset_is_utf8)
- addstr ("\342\224\234"); /* WACS_LTEE */
- else
- addch (ACS_LTEE);
+ waddch (main_w, ACS_LTEE);
break;
case M_TREE_HLINE:
- if (option (OPTASCIICHARS))
- addch ('-');
- else if (Charset_is_utf8)
- addstr ("\342\224\200"); /* WACS_HLINE */
- else
- addch (ACS_HLINE);
+ waddch (main_w, ACS_HLINE);
break;
case M_TREE_VLINE:
- if (option (OPTASCIICHARS))
- addch ('|');
- else if (Charset_is_utf8)
- addstr ("\342\224\202"); /* WACS_VLINE */
- else
- addch (ACS_VLINE);
+ waddch (main_w, ACS_VLINE);
break;
case M_TREE_TTEE:
- if (option (OPTASCIICHARS))
- addch ('-');
- else if (Charset_is_utf8)
- addstr ("\342\224\254"); /* WACS_TTEE */
- else
- addch (ACS_TTEE);
+ waddch (main_w, ACS_TTEE);
break;
case M_TREE_BTEE:
- if (option (OPTASCIICHARS))
- addch ('-');
- else if (Charset_is_utf8)
- addstr ("\342\224\264"); /* WACS_BTEE */
- else
- addch (ACS_BTEE);
+ waddch (main_w, ACS_BTEE);
break;
case M_TREE_SPACE:
- addch (' ');
+ waddch (main_w, ' ');
break;
case M_TREE_RARROW:
- addch ('>');
+ waddch (main_w, '>');
break;
case M_TREE_STAR:
- addch ('*'); /* fake thread indicator */
+ waddch (main_w, '*'); /* fake thread indicator */
break;
case M_TREE_HIDDEN:
- addch ('&');
+ waddch (main_w, '&');
break;
case M_TREE_EQUALS:
- addch ('=');
+ waddch (main_w, '=');
break;
case M_TREE_MISSING:
- addch ('?');
+ waddch (main_w, '?');
break;
}
s++, n--;
}
if (do_color)
- attrset (attr);
+ wattrset (main_w, attr);
}
- else if ((k = mbrtowc (&wc, (char *) s, n, &mbstate)) > 0) {
- addnstr ((char *) s, k);
+ else if ((k = mbrtowc (&wc, (char *) s, n, &mbstate)) != (size_t)-1) {
+ waddnstr (main_w, (char *) s, k);
s += k, n -= k;
}
else
menu->make_entry (s, l, menu, i);
}
-void menu_pad_string (char *s, size_t n)
+static void menu_pad_string (char *s, size_t n)
{
- int shift = option (OPTARROWCURSOR) ? 3 : 0;
- int cols;
+ int cols = getmaxx(main_w);
char *tmpbuf = p_new(char, n);
- if (option (OPTMBOXPANE))
- cols = COLS - shift - SidebarWidth;
- else
- cols = COLS - shift;
mutt_format_string (tmpbuf, n, cols, cols, 0, ' ', s, m_strlen(s), 1);
tmpbuf[n - 1] = 0;
snprintf (s, n, "%s", tmpbuf); /* overkill */
void menu_redraw_full (MUTTMENU * menu)
{
- SETCOLOR (MT_COLOR_NORMAL);
- /* clear() doesn't optimize screen redraws */
- move (0, 0);
- clrtobot ();
-
- if (option (OPTHELP)) {
- SETCOLOR (MT_COLOR_STATUS);
- move (option (OPTSTATUSONTOP) ? LINES - 2 : 0, SW);
- mutt_paddstr (COLS-SW, menu->help);
- SETCOLOR (MT_COLOR_NORMAL);
- menu->offset = 1;
- menu->pagelen = LINES - 3;
- }
- else {
- menu->offset = option (OPTSTATUSONTOP) ? 1 : 0;
- menu->pagelen = LINES - 2;
- }
-
- sidebar_draw_frames();
-
+ SETCOLOR(main_w, MT_COLOR_NORMAL);
+ werase(main_w);
+ SETCOLOR(main_w, MT_COLOR_SIDEBAR);
+ mvwhline(main_w, LINES - 2, 0, ACS_HLINE, getmaxx(main_w));
+ SETCOLOR(main_w, MT_COLOR_NORMAL);
+ menu->offset = 1;
+ menu->pagelen = LINES - 3;
mutt_show_error ();
menu->redraw = REDRAW_INDEX | REDRAW_STATUS;
char buf[STRING];
snprintf (buf, sizeof (buf), M_MODEFMT, menu->title);
- SETCOLOR (MT_COLOR_STATUS);
- move (option (OPTSTATUSONTOP) ? 0 : LINES - 2, SW);
- mutt_paddstr (COLS-SW, buf);
- SETCOLOR (MT_COLOR_NORMAL);
+ SETCOLOR(main_w, MT_COLOR_STATUS);
+ wmove (main_w, 0, 0);
+ mutt_paddstr (main_w, getmaxx(main_w), buf);
+ SETCOLOR(main_w, MT_COLOR_NORMAL);
menu->redraw &= ~REDRAW_STATUS;
- sidebar_draw_frames();
}
void menu_redraw_index (MUTTMENU * menu)
menu_make_entry (buf, sizeof (buf), menu, i);
menu_pad_string (buf, sizeof (buf));
- if (option (OPTARROWCURSOR)) {
- attrset (menu->color (i));
- CLEARLINE_WIN (i - menu->top + menu->offset);
-
- if (i == menu->current) {
- attrset (menu->color (i));
- ADDCOLOR (MT_COLOR_INDICATOR);
- BKGDSET (MT_COLOR_INDICATOR);
- addstr ("->");
- attrset (menu->color (i));
- addch (' ');
- }
- else {
- attrset (menu->color (i));
- move (i - menu->top + menu->offset, SW);
- addstr (" ");
- }
+ wattrset (main_w, menu->color (i));
- print_enriched_string (menu->color (i), (unsigned char *) buf, 1);
- SETCOLOR (MT_COLOR_NORMAL);
- BKGDSET (MT_COLOR_NORMAL);
+ if (i == menu->current) {
+ ADDCOLOR(main_w, MT_COLOR_INDICATOR);
+ BKGDSET(main_w, MT_COLOR_INDICATOR);
}
- else {
- attrset (menu->color (i));
- if (i == menu->current) {
- ADDCOLOR (MT_COLOR_INDICATOR);
- BKGDSET (MT_COLOR_INDICATOR);
- }
-
- CLEARLINE_WIN (i - menu->top + menu->offset);
+ CLEARLINE(main_w, i - menu->top + menu->offset);
- move (i - menu->top + menu->offset, SW);
- print_enriched_string (menu->color (i), (unsigned char *) buf,
- i != menu->current);
- SETCOLOR (MT_COLOR_NORMAL);
- BKGDSET (MT_COLOR_NORMAL);
- }
+ wmove (main_w, i - menu->top + menu->offset, 0);
+ print_enriched_string (menu->color (i), (unsigned char *) buf,
+ i != menu->current);
+ SETCOLOR(main_w, MT_COLOR_NORMAL);
+ BKGDSET(main_w, MT_COLOR_NORMAL);
+ } else {
+ CLEARLINE(main_w, i - menu->top + menu->offset);
}
- else
- CLEARLINE_WIN (i - menu->top + menu->offset);
}
- sidebar_draw (1);
-/* sidebar_draw_frames(); */
+ sidebar_draw ();
menu->redraw = 0;
}
return;
}
- move (menu->oldcurrent + menu->offset - menu->top, SW);
- SETCOLOR (MT_COLOR_NORMAL);
- BKGDSET (MT_COLOR_NORMAL);
+ SETCOLOR(main_w, MT_COLOR_NORMAL);
+ BKGDSET(main_w, MT_COLOR_NORMAL);
- if (option (OPTARROWCURSOR)) {
- /* clear the pointer */
- attrset (menu->color (menu->oldcurrent));
- addstr (" ");
+ /* erase the current indicator */
+ wattrset(main_w, menu->color(menu->oldcurrent));
+ wmove (main_w, menu->oldcurrent + menu->offset - menu->top, 0);
+ wclrtoeol (main_w);
+ menu_make_entry (buf, sizeof (buf), menu, menu->oldcurrent);
+ menu_pad_string (buf, sizeof (buf));
+ print_enriched_string (menu->color (menu->oldcurrent),
+ (unsigned char *) buf, 1);
- if (menu->redraw & REDRAW_MOTION_RESYNCH) {
- clrtoeol ();
- menu_make_entry (buf, sizeof (buf), menu, menu->oldcurrent);
- menu_pad_string (buf, sizeof (buf));
- move (menu->oldcurrent + menu->offset - menu->top, SW + 3);
- print_enriched_string (menu->color (menu->oldcurrent),
- (unsigned char *) buf, 1);
- SETCOLOR (MT_COLOR_NORMAL);
- }
+ /* now draw the new one to reflect the change */
+ menu_make_entry (buf, sizeof (buf), menu, menu->current);
+ menu_pad_string (buf, sizeof (buf));
+ wattrset (main_w, menu->color (menu->current));
+ ADDCOLOR(main_w, MT_COLOR_INDICATOR);
+ BKGDSET(main_w, MT_COLOR_INDICATOR);
+ CLEARLINE(main_w, menu->current - menu->top + menu->offset);
+ wmove (main_w, menu->current + menu->offset - menu->top, 0);
+ print_enriched_string (menu->color (menu->current), (unsigned char *) buf,
+ 0);
+ SETCOLOR(main_w, MT_COLOR_NORMAL);
+ BKGDSET(main_w, MT_COLOR_NORMAL);
- /* now draw it in the new location */
- move (menu->current + menu->offset - menu->top, SW);
- attrset (menu->color (menu->current));
- ADDCOLOR (MT_COLOR_INDICATOR);
- addstr ("->");
- SETCOLOR (MT_COLOR_NORMAL);
- }
- else {
- /* erase the current indicator */
- attrset (menu->color (menu->oldcurrent));
- clrtoeol ();
- menu_make_entry (buf, sizeof (buf), menu, menu->oldcurrent);
- menu_pad_string (buf, sizeof (buf));
- print_enriched_string (menu->color (menu->oldcurrent),
- (unsigned char *) buf, 1);
-
- /* now draw the new one to reflect the change */
- menu_make_entry (buf, sizeof (buf), menu, menu->current);
- menu_pad_string (buf, sizeof (buf));
- attrset (menu->color (menu->current));
- ADDCOLOR (MT_COLOR_INDICATOR);
- BKGDSET (MT_COLOR_INDICATOR);
- CLEARLINE_WIN (menu->current - menu->top + menu->offset);
- move (menu->current + menu->offset - menu->top, SW);
- print_enriched_string (menu->color (menu->current), (unsigned char *) buf,
- 0);
- SETCOLOR (MT_COLOR_NORMAL);
- BKGDSET (MT_COLOR_NORMAL);
- }
menu->redraw &= REDRAW_STATUS;
}
{
char buf[STRING];
- move (menu->current + menu->offset - menu->top, SW);
menu_make_entry (buf, sizeof (buf), menu, menu->current);
menu_pad_string (buf, sizeof (buf));
- if (option (OPTARROWCURSOR)) {
- int attr = menu->color (menu->current);
-
- attrset (attr);
- clrtoeol ();
- attrset (menu->color (menu->current));
- ADDCOLOR (MT_COLOR_INDICATOR);
- addstr ("->");
- attrset (attr);
- addch (' ');
- menu_pad_string (buf, sizeof (buf));
- print_enriched_string (menu->color (menu->current), (unsigned char *) buf,
- 1);
- SETCOLOR (MT_COLOR_NORMAL);
- }
- else {
- attrset (menu->color (menu->current));
- ADDCOLOR (MT_COLOR_INDICATOR);
- BKGDSET (MT_COLOR_INDICATOR);
- clrtoeol ();
- print_enriched_string (menu->color (menu->current), (unsigned char *) buf,
- 0);
- SETCOLOR (MT_COLOR_NORMAL);
- BKGDSET (MT_COLOR_NORMAL);
- }
+ wattrset (main_w, menu->color (menu->current));
+ ADDCOLOR(main_w, MT_COLOR_INDICATOR);
+ BKGDSET(main_w, MT_COLOR_INDICATOR);
+ wmove (main_w, menu->current + menu->offset - menu->top, 0);
+ wclrtoeol (main_w);
+ print_enriched_string (menu->color (menu->current), (unsigned char *) buf,
+ 0);
+ SETCOLOR(main_w, MT_COLOR_NORMAL);
+ BKGDSET(main_w, MT_COLOR_NORMAL);
+
menu->redraw &= REDRAW_STATUS;
}
-void menu_redraw_prompt (MUTTMENU * menu)
+static void menu_redraw_prompt (MUTTMENU * menu)
{
if (menu->dialog) {
if (option (OPTMSGERR)) {
if (*Errorbuf)
mutt_clear_error ();
- SETCOLOR (MT_COLOR_NORMAL);
- mvaddstr (LINES - 1, 0, menu->prompt);
- clrtoeol ();
+ SETCOLOR(stdscr, MT_COLOR_NORMAL);
+ mvwaddstr(stdscr, LINES - 1, 0, menu->prompt);
+ wclrtoeol(stdscr);
}
}
int c = MIN (MenuContext, menu->pagelen / 2);
int old_top = menu->top;
- if (!option (OPTMENUMOVEOFF) && menu->max <= menu->pagelen) { /* less entries than lines */
- if (menu->top != 0) {
- menu->top = 0;
- set_option (OPTNEEDREDRAW);
- }
+ if ((menu->pagelen <= 0) || (c < MenuContext)) {
+ if (menu->current < menu->top + c)
+ menu->top = menu->current - c;
+ else if (menu->current >= menu->top + menu->pagelen - c)
+ menu->top = menu->current - menu->pagelen + c + 1;
} else {
- if (option (OPTMENUSCROLL) || (menu->pagelen <= 0) || (c < MenuContext)) {
- if (menu->current < menu->top + c)
- menu->top = menu->current - c;
- else if (menu->current >= menu->top + menu->pagelen - c)
- menu->top = menu->current - menu->pagelen + c + 1;
- } else {
- if (menu->current < menu->top + c)
- menu->top -= (menu->pagelen - c) * ((menu->top + menu->pagelen - 1 - menu->current) / (menu->pagelen - c)) - c;
- else if ((menu->current >= menu->top + menu->pagelen - c))
- menu->top += (menu->pagelen - c) * ((menu->current - menu->top) / (menu->pagelen - c)) - c;
- }
+ if (menu->current < menu->top + c)
+ menu->top -= (menu->pagelen - c) * ((menu->top + menu->pagelen - 1 - menu->current) / (menu->pagelen - c)) - c;
+ else if ((menu->current >= menu->top + menu->pagelen - c))
+ menu->top += (menu->pagelen - c) * ((menu->current - menu->top) / (menu->pagelen - c)) - c;
}
- if (!option (OPTMENUMOVEOFF)) /* make entries stick to bottom */
- menu->top = MIN (menu->top, menu->max - menu->pagelen);
menu->top = MAX (menu->top, 0);
if (menu->top != old_top)
void menu_jump (MUTTMENU * menu)
{
int n;
- char buf[SHORT_STRING];
+ char buf[STRING];
if (menu->max) {
mutt_ungetch (LastKey, 0);
if (menu->max) {
int c = MIN (MenuContext, menu->pagelen / 2);
- if (menu->top + 1 < menu->max - c && (option (OPTMENUMOVEOFF)
- || (menu->max > menu->pagelen
- && menu->top <
- menu->max - menu->pagelen))) {
+ if (menu->top + 1 < menu->max - c) {
menu->top++;
if (menu->current < menu->top + c && menu->current < menu->max - 1)
menu->current++;
menu->redraw = REDRAW_INDEX;
- }
- else
+ } else {
mutt_error _("You cannot scroll down farther.");
- }
- else
+ }
+ } else {
mutt_error _("No entries.");
+ }
}
void menu_prev_line (MUTTMENU * menu)
* halfdown: jumplen == pagelen/2
*/
#define DIRECTION ((neg * 2) + 1)
-void menu_length_jump (MUTTMENU *menu, int jumplen) {
+static void menu_length_jump (MUTTMENU *menu, int jumplen) {
int tmp, neg = (jumplen >= 0) ? 0 : -1;
int c = MIN (MenuContext, menu->pagelen / 2);
menu->top += jumplen;
/* jumped too long? */
- if ((neg || !option (OPTMENUMOVEOFF)) && DIRECTION * menu->top > tmp)
+ if (neg && DIRECTION * menu->top > tmp)
menu->top = tmp;
/* need to move the cursor? */
mutt_error _("No entries.");
}
-void menu_next_entry (MUTTMENU * menu)
+static void menu_next_entry (MUTTMENU * menu)
{
if (menu->current < menu->max - 1) {
menu->current++;
mutt_error _("You are on the last entry.");
}
-void menu_prev_entry (MUTTMENU * menu)
+static void menu_prev_entry (MUTTMENU * menu)
{
if (menu->current) {
menu->current--;
p->top = 0;
p->offset = 1;
p->redraw = REDRAW_FULL;
- p->pagelen = PAGELEN;
+ p->pagelen = LINES - 3;
p->color = default_color;
p->search = menu_search_generic;
return (p);
int r;
int searchDir;
regex_t re;
- char buf[SHORT_STRING];
+ char buf[STRING];
if (op != OP_SEARCH_NEXT && op != OP_SEARCH_OPPOSITE) {
m_strcpy(buf, sizeof(buf), NONULL(menu->searchBuf));
return OP_REDRAW;
menu->oldcurrent = menu->current;
-
- if (option (OPTARROWCURSOR))
- move (menu->current - menu->top + menu->offset, SW + 2);
- else if (option (OPTBRAILLEFRIENDLY))
- move (menu->current - menu->top + menu->offset, SW);
- else
- move (menu->current - menu->top + menu->offset, COLS - 1);
-
mutt_refresh ();
-
/* try to catch dialog keys before ops */
if (menu->dialog && menu_dialog_dokey (menu, &i) == 0)
return i;
i = km_dokey (menu->menu);
if (i == OP_TAG_PREFIX || i == OP_TAG_PREFIX_COND) {
if (menu->tagged) {
- mvaddstr (LINES - 1, 0, "Tag-");
- clrtoeol ();
+ mvwaddstr(stdscr, LINES - 1, 0, "Tag-");
+ wclrtoeol(stdscr);
i = km_dokey (menu->menu);
menu->tagprefix = 1;
- CLEARLINE (LINES - 1);
+ CLEARLINE(stdscr, LINES - 1);
}
else if (i == OP_TAG_PREFIX) {
mutt_error _("No tagged entries.");
mutt_curs_set (1);
-#if defined (USE_SLANG_CURSES) || defined (HAVE_RESIZETERM)
if (SigWinch) {
- mutt_resize_screen ();
+ ui_layout_resize();
menu->redraw = REDRAW_FULL;
- SigWinch = 0;
- clearok (stdscr, TRUE); /*force complete redraw */
}
-#endif
if (i == -1)
continue;
mutt_what_key ();
break;
- case OP_REBUILD_CACHE:
- mx_rebuild_cache ();
- break;
-
case OP_REDRAW:
- clearok (stdscr, TRUE);
+ clearok (main_w, TRUE);
menu->redraw = REDRAW_FULL;
break;