X-Git-Url: http://git.madism.org/?a=blobdiff_plain;f=sidebar.c;h=869919618a4daa02ea588982300a63397464f677;hb=fd9992da39f78bd5e4ae5bbd8c003cd2ecc8fe75;hp=85605bd5cb8fee16d643164dbd2106b5c9bb1bdd;hpb=9ff4c5cafac6f3cda731034777f28ac5e71cc4fb;p=apps%2Fmadmutt.git diff --git a/sidebar.c b/sidebar.c index 85605bd..8699196 100644 --- a/sidebar.c +++ b/sidebar.c @@ -27,6 +27,7 @@ #include #include "keymap.h" #include +#include /*BUFFY *CurBuffy = 0;*/ static BUFFY *TopBuffy = 0; @@ -45,6 +46,23 @@ static int quick_log10(int n) return (++len); } +static int cur_is_hidden (int maxline) +{ + int l = 0, seen = 0; + BUFFY* tmp = TopBuffy; + if (!CurBuffy) + return (0); + while (tmp && l < maxline && !seen) + { + if (strcmp (tmp->path, CurBuffy->path) == 0) + seen = 1; + else + tmp = tmp->next; + l++; + } + return (seen == 0 || l == maxline); +} + void calc_boundaries (int menu) { BUFFY *tmp = Incoming; @@ -59,7 +77,7 @@ void calc_boundaries (int menu) if ( TopBuffy == 0 && BottomBuffy == 0 ) TopBuffy = Incoming; if ( BottomBuffy == 0 ) { - int count = LINES - 2 - (menu != MENU_PAGER); + int count = LINES - 2 - (menu != MENU_PAGER || option (OPTSTATUSONTOP)); BottomBuffy = TopBuffy; while ( --count && BottomBuffy->next ) BottomBuffy = BottomBuffy->next; @@ -87,8 +105,11 @@ static char * shortened_hierarchy(char * box) { char * last_dot; int i,j; char * new_box; - for (i=0;i0) { + sprintf(entry + SidebarWidth - 5 - quick_log10(size) - dlen - quick_log10(new) - quick_log10(flagged), + "% d(%d)[%d]", size, new, flagged); + } else { + sprintf(entry + SidebarWidth - 3 - quick_log10(size) - dlen - quick_log10(new), + "% d(%d)", size, new); + } + } else { + if (flagged>0) { + sprintf( entry + SidebarWidth - 3 - quick_log10(size) - dlen - quick_log10(flagged), "% d[%d]", size,flagged); + } else { + sprintf( entry + SidebarWidth - 1 - quick_log10(size) - dlen, "% d", size); + } + + } if (option(OPTSHORTENHIERARCHY)) { free(box); } @@ -165,14 +197,26 @@ void set_curbuffy(char buf[LONG_STRING]) } } +void set_buffystats (CONTEXT* Context) +{ + BUFFY* tmp = Incoming; + while (tmp) + { + if (strcmp (tmp->path, Context->path) == 0) + { + tmp->msg_unread = Context->unread; + tmp->msgcount = Context->msgcount; + tmp->msg_flagged = Context->flagged; + break; + } + tmp = tmp->next; + } +} + int draw_sidebar(int menu) { int lines = option(OPTHELP) ? 1 : 0; BUFFY *tmp; -#ifndef USE_SLANG_CURSES - attr_t attrs; -#endif - short color_pair; short delim_len = mutt_strlen (SidebarDelim); /* initialize first time */ @@ -194,39 +238,30 @@ int draw_sidebar(int menu) { prev_show_value = option(OPTMBOXPANE); } - if ( SidebarWidth == 0 ) return 0; - /* get attributes for divider */ - SETCOLOR(MT_COLOR_STATUS); -#ifndef USE_SLANG_CURSES - attr_get(&attrs, &color_pair, 0); -#else - color_pair = attr_get(); -#endif - SETCOLOR(MT_COLOR_NORMAL); - /* draw the divider */ - - for ( ; lines < LINES-1-(menu != MENU_PAGER); lines++ ) { + SETCOLOR(MT_COLOR_STATUS); + for (lines = option (OPTSTATUSONTOP) ? 0 : 1; + lines < LINES-1-(menu != MENU_PAGER || option (OPTSTATUSONTOP)); lines++ ) { move(lines, SidebarWidth - delim_len); addstr (NONULL (SidebarDelim)); - #ifndef USE_SLANG_CURSES - mvchgat(lines, SidebarWidth - delim_len, delim_len, 0, color_pair, NULL); - #endif } + SETCOLOR(MT_COLOR_NORMAL); + if ( Incoming == 0 ) return 0; lines = option(OPTHELP) ? 1 : 0; /* go back to the top */ + if (cur_is_hidden (LINES-1-(menu != MENU_PAGER))) + CurBuffy = TopBuffy; + if ( known_lines != LINES || TopBuffy == 0 || BottomBuffy == 0 ) calc_boundaries(menu); if ( CurBuffy == 0 ) CurBuffy = Incoming; tmp = TopBuffy; - SETCOLOR(MT_COLOR_NORMAL); - - for ( ; tmp && lines < LINES-1 - (menu != MENU_PAGER); tmp = tmp->next ) { + for ( ; tmp && lines < LINES-1 - (menu != MENU_PAGER || option (OPTSTATUSONTOP)); tmp = tmp->next ) { if ( tmp == CurBuffy ) SETCOLOR(MT_COLOR_INDICATOR); else if ( tmp->msg_unread > 0 ) @@ -238,18 +273,19 @@ int draw_sidebar(int menu) { if ( Context && !strcmp( tmp->path, Context->path ) ) { printw( "%.*s", SidebarWidth - delim_len, make_sidebar_entry(basename(tmp->path), - Context->msgcount, Context->unread)); + Context->msgcount, Context->unread, Context->flagged)); tmp->msg_unread = Context->unread; tmp->msgcount = Context->msgcount; + tmp->msg_flagged = Context->flagged; } else printw( "%.*s", SidebarWidth - delim_len, make_sidebar_entry(basename(tmp->path), - tmp->msgcount,tmp->msg_unread)); + tmp->msgcount,tmp->msg_unread, tmp->msg_flagged)); lines++; } SETCOLOR(MT_COLOR_NORMAL); - for ( ; lines < LINES - 1 - (menu != MENU_PAGER); lines++ ) { + for ( ; lines < LINES - 1 - (menu != MENU_PAGER || option (OPTSTATUSONTOP)); lines++ ) { int i = 0; move( lines, 0 ); for ( ; i < SidebarWidth - delim_len; i++ )