X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=sidebar.c;h=4742101c48b090e4118b73deac27561095ae7159;hp=4ea49d4ae17ec5ac28ef06959e48fdb425dfbffc;hb=0995d7520848a31481107d897b9a930bff222ce7;hpb=e25811a4e3b78d25ccffcbe272b31d625138c61e diff --git a/sidebar.c b/sidebar.c index 4ea49d4..4742101 100644 --- a/sidebar.c +++ b/sidebar.c @@ -31,25 +31,16 @@ static int CurBuffy = 0; static int known_lines = 0; static short initialized = 0; static short prev_show_value; -static short saveSidebarWidth; /* computes first entry to be shown */ -void calc_boundaries (int menu) -{ - int lines = 0; - +static void calc_boundaries (void) { if (list_empty(Incoming)) return; if (CurBuffy < 0 || CurBuffy >= Incoming->length) CurBuffy = 0; if (TopBuffy < 0 || TopBuffy >= Incoming->length) TopBuffy = 0; - /* correct known_lines if it has changed because of a window resize */ - /* if (known_lines != LINES) - known_lines = LINES; */ - lines = LINES - 2 - (menu != MENU_PAGER || option (OPTSTATUSONTOP)); - known_lines = lines; if (option (OPTSIDEBARNEWMAILONLY)) { int i = CurBuffy; TopBuffy = CurBuffy - 1; @@ -58,8 +49,8 @@ void calc_boundaries (int menu) TopBuffy = i; i--; } - } else - TopBuffy = CurBuffy - (CurBuffy % lines); + } else if (known_lines>0) + TopBuffy = CurBuffy - (CurBuffy % known_lines); if (TopBuffy < 0) TopBuffy = 0; } @@ -149,6 +140,14 @@ static const char* sidebar_number_format (char* dest, size_t destlen, char op, break; /* new */ case 'n': + if (!opt) { + snprintf (tmp, sizeof (tmp), "%%%sd", fmt); + snprintf (dest, destlen, tmp, c ? Context->new : b->new); + } else if ((c && Context->new == 0) || (!c && b->new == 0)) + opt = 0; + break; + /* unread */ + case 'u': if (!opt) { snprintf (tmp, sizeof (tmp), "%%%sd", fmt); snprintf (dest, destlen, tmp, c ? Context->unread : b->msg_unread); @@ -254,8 +253,10 @@ const char* sidebar_get_current (void) { /* internally sets item to buf */ void sidebar_set_current (const char* buf) { int i = buffy_lookup (buf); - if (i >= 0) + if (i >= 0) { CurBuffy = i; + calc_boundaries(); + } } /* fix counters for a context @@ -278,31 +279,36 @@ void sidebar_set_buffystats (CONTEXT* Context) { */ int sidebar_draw (int menu) { - - int lines = option (OPTHELP) ? 1 : 0, draw_devider = 1, i = 0; + int first_line = option (OPTSTATUSONTOP) ? 1 : option (OPTHELP) ? 1 : 0; + int last_line = LINES-1; + int draw_devider = 1, i = 0; + int line; BUFFY *tmp; short delim_len = str_len (SidebarDelim); char blank[SHORT_STRING]; + if (option (OPTSTATUSONTOP)) { + last_line -= option (OPTHELP) ? 1 : 0; + } else { + last_line -= 1-(menu==MENU_PAGER); + } + + known_lines=last_line-first_line; + /* initialize first time */ if (!initialized) { prev_show_value = option (OPTMBOXPANE); - saveSidebarWidth = SidebarWidth; - if (!option (OPTMBOXPANE)){ - SidebarWidth = 0; + if (!option (OPTMBOXPANE)) draw_devider = 1; - } initialized = 1; } + if (TopBuffy==0 || CurBuffy==0) + calc_boundaries(); + /* save or restore the value SidebarWidth */ if (prev_show_value != option (OPTMBOXPANE)) { - if (prev_show_value && !option (OPTMBOXPANE)) { - saveSidebarWidth = SidebarWidth; - SidebarWidth = 0; - } - else if (!prev_show_value && option (OPTMBOXPANE)) { - SidebarWidth = saveSidebarWidth; + if (!prev_show_value && option (OPTMBOXPANE)) { /* after toggle: force recounting of all mail */ buffy_check (2); } @@ -323,10 +329,8 @@ int sidebar_draw (int menu) if (draw_devider == 1){ /* draw the divider */ SETCOLOR (MT_COLOR_SIDEBAR); - for (lines = 1; - lines < LINES - 1 - (menu != MENU_PAGER || option (OPTSTATUSONTOP)); - lines++) { - move (lines, SidebarWidth - delim_len); + for (line = first_line; line < last_line; line++) { + move (line, SidebarWidth - delim_len); if (option (OPTASCIICHARS)) addstr (NONULL (SidebarDelim)); else if (!option (OPTASCIICHARS) && !str_cmp (SidebarDelim, "|")) @@ -341,12 +345,9 @@ int sidebar_draw (int menu) if (list_empty(Incoming)) return 0; - lines = option (OPTHELP) ? 1 : 0; /* go back to the top */ - calc_boundaries (menu); /* actually print items */ - for (i = TopBuffy; i < Incoming->length && lines < LINES - 1 - - (menu != MENU_PAGER || option (OPTSTATUSONTOP)); i++) { + for (i = TopBuffy, line=first_line; i < Incoming->length && line < last_line; i++) { tmp = (BUFFY*) Incoming->data[i]; if (i == CurBuffy) @@ -358,15 +359,15 @@ int sidebar_draw (int menu) else SETCOLOR (MT_COLOR_NORMAL); - move (lines, 0); - lines += make_sidebar_entry (tmp->path, i, SidebarWidth-delim_len); + move (line, 0); + line += make_sidebar_entry (tmp->path, i, SidebarWidth-delim_len); } /* fill with blanks to bottom */ memset (&blank, ' ', sizeof (blank)); SETCOLOR (MT_COLOR_NORMAL); - for (; lines < LINES - 1 - (menu != MENU_PAGER || option (OPTSTATUSONTOP)); lines++) { - move (lines, 0); + for (; line < last_line; line++) { + move (line, 0); addnstr (blank, SidebarWidth-delim_len); } return 0; @@ -459,6 +460,6 @@ void sidebar_scroll (int op, int menu) { default: return; } - calc_boundaries (menu); + calc_boundaries (); sidebar_draw (menu); }