more useless and cluttered things.
[apps/madmutt.git] / lib-ui / sidebar.c
index 464a5c4..8065e55 100644 (file)
@@ -32,18 +32,18 @@ static short prev_show_value;
 
 /* computes first entry to be shown */
 static void calc_boundaries (void) {
-  if (list_empty(Incoming))
+  if (!Incoming.len)
     return;
-  if (CurBuffy < 0 || CurBuffy >= Incoming->length)
+  if (CurBuffy < 0 || CurBuffy >= Incoming.len)
     CurBuffy = 0;
-  if (TopBuffy < 0 || TopBuffy >= Incoming->length)
+  if (TopBuffy < 0 || TopBuffy >= Incoming.len)
     TopBuffy = 0;
 
   if (option (OPTSIDEBARNEWMAILONLY)) {
     int i = CurBuffy;
     TopBuffy = CurBuffy - 1;
     while (i >= 0) {
-      if (((BUFFY*) Incoming->data[i])->new > 0)
+      if (Incoming.arr[i]->new > 0)
         TopBuffy = i;
       i--;
     }
@@ -53,51 +53,53 @@ static void calc_boundaries (void) {
     TopBuffy = 0;
 }
 
-static char *shortened_hierarchy (char *box, int maxlen)
+static char *shortened_hierarchy (char *hbox, int maxlen)
 {
   int dots = 0;
   char *last_dot = NULL;
-  int i, j, len = m_strlen(box);
+  int i, j, len = m_strlen(hbox);
   char *new_box;
 
   if (!SidebarBoundary || !*SidebarBoundary)
-    return (m_strdup(box));
+    return (m_strdup(hbox));
 
   for (i = 0; i < len; ++i) {
-    if (strchr (SidebarBoundary, box[i])) {
+    if (strchr (SidebarBoundary, hbox[i])) {
       ++dots;
-      last_dot = &box[i];
+      last_dot = &hbox[i];
     }
   }
 
   if (last_dot) {
     ++last_dot;
     new_box = p_new(char, maxlen + 1);
-    new_box[0] = box[0];
+    new_box[0] = hbox[0];
     for (i = 1, j = 1; j < maxlen && i < len; ++i) {
-      if (strchr (SidebarBoundary, box[i])) {
-        new_box[j++] = box[i];
+      if (strchr (SidebarBoundary, hbox[i])) {
+        new_box[j++] = hbox[i];
         new_box[j] = 0;
-        if (&box[i + 1] != last_dot || j + m_strlen(last_dot) > maxlen) {
-          new_box[j++] = box[i + 1];
+        if (&hbox[i + 1] != last_dot || j + m_strlen(last_dot) > maxlen) {
+          new_box[j++] = hbox[i + 1];
           new_box[j] = 0;
         } else {
-          strcat (&new_box[j], last_dot);
+          m_strcat(&new_box[j], maxlen + 1, last_dot);
           break;
         }
       }
     }
     return new_box;
   }
-  return m_strdup(box);
+  return m_strdup(hbox);
 }
 
-static const char* sidebar_number_format (char* dest, ssize_t destlen, char op,
-                                          const char* src, const char* fmt,
-                                          const char* ifstr, const char* elstr,
-                                          unsigned long data, format_flag flags) {
-  char tmp[SHORT_STRING];
-  BUFFY* b = (BUFFY*) Incoming->data[data];
+static const char *
+sidebar_number_format(char* dest, ssize_t destlen,
+                      char op, const char* src, const char* fmt,
+                      const char* ifstr, const char* elstr,
+                      anytype data, format_flag flags)
+{
+  char tmp[STRING];
+  BUFFY* b = Incoming.arr[data.i];
   int opt = flags & M_FORMAT_OPTIONAL;
   int c = Context && !m_strcmp(Context->path, b->path);
 
@@ -162,13 +164,10 @@ static const char* sidebar_number_format (char* dest, ssize_t destlen, char op,
       break;
   }
 
-  if (opt)
-    mutt_FormatString (dest, destlen, ifstr, sidebar_number_format,
-                       data, M_FORMAT_OPTIONAL);
-  else if (flags & M_FORMAT_OPTIONAL)
-    mutt_FormatString (dest, destlen, elstr, sidebar_number_format,
-                       data, M_FORMAT_OPTIONAL);
-  return (src);
+  if (flags & M_FORMAT_OPTIONAL)
+    m_strformat(dest, destlen, 0, opt ? ifstr : elstr,
+                sidebar_number_format, data, flags);
+  return src;
 }
 
 int sidebar_need_count (void) {
@@ -183,65 +182,56 @@ int sidebar_need_count (void) {
  *      0       item was not printed ('cause of $sidebar_newmail_only)
  *      1       item was printed
  */
-int make_sidebar_entry (char* box, int idx, ssize_t len)
+static int make_sidebar_entry (char* sbox, int idx, ssize_t len)
 {
   int shortened = 0, lencnt = 0;
-  char no[SHORT_STRING], entry[SHORT_STRING];
-  int l = m_strlen(ImapHomeNamespace);
+  char no[STRING], entry[STRING];
   int l_m = m_strlen(Maildir);
 
   if (SidebarWidth > COLS)
     SidebarWidth = COLS;
 
-  if (option (OPTSIDEBARNEWMAILONLY) && box && Context && Context->path && 
-      m_strcmp(Context->path, box) && ((BUFFY*) Incoming->data[idx])->new == 0)
+  if (option (OPTSIDEBARNEWMAILONLY) && sbox && Context && Context->path && 
+      m_strcmp(Context->path, sbox) && Incoming.arr[idx]->new == 0)
     /* if $sidebar_newmail_only is set, don't display the
      * box only if it's not the currently opened
      * (i.e. always display the currently opened) */
-    return (0);
+    return 0;
 
-  mutt_FormatString (no, len, NONULL (SidebarNumberFormat),
-                     sidebar_number_format, idx, M_FORMAT_OPTIONAL);
+  m_strformat(no, len, SidebarWidth, SidebarNumberFormat, sidebar_number_format, idx, 0);
   lencnt = m_strlen(no);
-  memset(&entry, ' ', sizeof(entry));
-
-  if (l > 0 && m_strncmp(box, ImapHomeNamespace, l) == 0 && 
-      m_strlen(box) > l)
-    box += l + 1; /* we're trimming the ImapHomeNamespace, the "+ 1" is for the separator */
-  else
-  if (l_m > 0 && m_strncmp(box, Maildir, l_m) == 0 && 
-      m_strlen(box) > l_m) {
-    box += l_m;
+
+  if (l_m > 0 && m_strncmp(sbox, Maildir, l_m) == 0 && 
+      m_strlen(sbox) > l_m) {
+    sbox += l_m;
     if (Maildir[strlen(Maildir)-1]!='/') {
-      box += 1;
+      sbox += 1;
     }
   } else
-    box = basename (box);
+    sbox = basename (sbox);
 
-  if (option (OPTSHORTENHIERARCHY) && m_strlen(box) > len-lencnt-1) {
-    box = shortened_hierarchy (box, len-lencnt-1);
+  if (option(OPTSHORTENHIERARCHY) && m_strlen(sbox) > len-lencnt-1) {
+    sbox = shortened_hierarchy (sbox, len-lencnt-1);
     shortened = 1;
   }
 
-  m_strcpy(entry, len - lencnt, box);
-  entry[m_strlen(entry)] = ' ';
-  memcpy(entry + (len - lencnt), no, lencnt);
-
-  addnstr (entry, len);
+  snprintf(entry, sizeof(entry), "%*s", (int)len, no);
+  memcpy(entry, sbox, MIN(len - 1, m_strlen(sbox)));
+  addnstr(entry, len);
 
   if (shortened)
-    p_delete(&box);
+    p_delete(&sbox);
 
-  return (1);
+  return 1;
 }
 
 /* returns folder name of currently 
  * selected folder for <sidebar-open>
  */
 const char* sidebar_get_current (void) {
-  if (list_empty(Incoming))
+  if (!Incoming.len)
     return (NULL);
-  return ((char*) ((BUFFY*) Incoming->data[CurBuffy])->path);
+  return Incoming.arr[CurBuffy]->path;
 }
 
 /* internally sets item to buf */
@@ -256,16 +246,16 @@ void sidebar_set_current (const char* buf) {
 /* fix counters for a context
  * FIXME since ctx must not be of our business, move it elsewhere
  */
-void sidebar_set_buffystats (CONTEXT* Context) {
+void sidebar_set_buffystats (CONTEXT* curContext) {
   int i = 0;
   BUFFY* tmp = NULL;
-  if (!Context || list_empty(Incoming) || (i = buffy_lookup (Context->path)) < 0)
+  if (!curContext || !Incoming.len || (i = buffy_lookup (curContext->path)) < 0)
     return;
-  tmp = (BUFFY*) Incoming->data[i];
-  tmp->new = Context->new;
-  tmp->msg_unread = Context->unread;
-  tmp->msgcount = Context->msgcount;
-  tmp->msg_flagged = Context->flagged;
+  tmp = Incoming.arr[i];
+  tmp->new = curContext->new;
+  tmp->msg_unread = curContext->unread;
+  tmp->msgcount = curContext->msgcount;
+  tmp->msg_flagged = curContext->flagged;
 }
 
 void sidebar_draw_frames (void) {
@@ -316,13 +306,13 @@ void sidebar_draw_frames (void) {
 /* actually draws something
  * FIXME this needs some clue when to do it
  */
-int sidebar_draw (int menu) {
+int sidebar_draw (void) {
   int first_line = option (OPTSTATUSONTOP) ? 1 : option (OPTHELP) ? 1 : 0,
       last_line = LINES - 2 + (option (OPTSTATUSONTOP) && !option (OPTHELP) ? 1 : 0),
       i = 0,line;
   BUFFY *tmp;
   ssize_t delim_len = m_strlen(SidebarDelim);
-  char blank[SHORT_STRING];
+  char blank[STRING];
 
   known_lines=last_line-first_line;
 
@@ -357,12 +347,12 @@ int sidebar_draw (int menu) {
 
   sidebar_draw_frames();
 
-  if (list_empty(Incoming))
+  if (!Incoming.len)
     return 0;
 
   /* actually print items */
-  for (i = TopBuffy, line=first_line; i < Incoming->length && line < last_line; i++) {
-    tmp = (BUFFY*) Incoming->data[i];
+  for (i = TopBuffy, line=first_line; i < Incoming.len && line < last_line; i++) {
+    tmp = Incoming.arr[i];
 
     if (i == CurBuffy)
       SETCOLOR (MT_COLOR_INDICATOR);
@@ -391,11 +381,11 @@ int sidebar_draw (int menu) {
 /* returns index of new item with new mail or -1 */
 static int exist_next_new () {
   int i = 0;
-  if (list_empty(Incoming))
+  if (!Incoming.len)
     return (-1);
   i = CurBuffy + 1;
-  while (i < Incoming->length)
-    if (((BUFFY*) Incoming->data[i++])->new > 0)
+  while (i < Incoming.len)
+    if (Incoming.arr[i++]->new > 0)
       return (i-1);
   return (-1);
 }
@@ -403,25 +393,25 @@ static int exist_next_new () {
 /* returns index of prev item with new mail or -1 */
 static int exist_prev_new () {
   int i = 0;
-  if (list_empty(Incoming))
+  if (!Incoming.len)
     return (-1);
   i = CurBuffy - 1;
   while (i >= 0)
-    if (((BUFFY*) Incoming->data[i--])->new > 0)
+    if (Incoming.arr[i--]->new > 0)
       return (i+1);
   return (-1);
 }
 
-void sidebar_scroll (int op, int menu) {
+void sidebar_scroll (int op) {
   int i = 0;
 
-  if (!SidebarWidth || list_empty(Incoming))
+  if (!SidebarWidth || !Incoming.len)
     return;
 
   switch (op) {
   case OP_SIDEBAR_NEXT:
     if (!option (OPTSIDEBARNEWMAILONLY)) {
-      if (CurBuffy + 1 == Incoming->length) {
+      if (CurBuffy + 1 == Incoming.len) {
         mutt_error (_("You are on the last mailbox."));
         return;
       }
@@ -464,17 +454,17 @@ void sidebar_scroll (int op, int menu) {
       CurBuffy = 0;
     break;
   case OP_SIDEBAR_SCROLL_DOWN:
-    if (CurBuffy + 1 == Incoming->length) {
+    if (CurBuffy + 1 == Incoming.len) {
       mutt_error (_("You are on the last mailbox."));
       return;
     }
     CurBuffy += known_lines;
-    if (CurBuffy >= Incoming->length)
-      CurBuffy = Incoming->length - 1;
+    if (CurBuffy >= Incoming.len)
+      CurBuffy = Incoming.len - 1;
     break;
   default:
     return;
   }
   calc_boundaries ();
-  sidebar_draw (menu);
+  sidebar_draw ();
 }