diff mcabber/src/screen.c @ 1290:e42f48103609

Drawing the MUC nicks by a different color (color is hardcoded to red, needs to be changed to something useable)
author Michal 'vorner' Vaner <vorner@ucw.cz>
date Sun, 26 Aug 2007 18:24:14 +0200
parents 02ad6200df26
children 9f64f548ac16
line wrap: on
line diff
--- a/mcabber/src/screen.c	Mon Aug 27 13:02:16 2007 +0200
+++ b/mcabber/src/screen.c	Sun Aug 26 18:24:14 2007 +0200
@@ -135,7 +135,8 @@
 static void add_keyseq(char *seqstr, guint mkeycode, gint value);
 
 void scr_WriteInWindow(const char *winId, const char *text, time_t timestamp,
-                       unsigned int prefix_flags, int force_show);
+                       unsigned int prefix_flags, int force_show,
+                       unsigned mucnicklen);
 
 #ifdef HAVE_ASPELL_H
 #define ASPELLBADCHAR 5
@@ -712,12 +713,12 @@
       wprintw(logWnd, "\n%s", buffer_locale);
       update_panels();
       scr_WriteInWindow(NULL, buf_specialwindow, timestamp,
-                        HBB_PREFIX_SPECIAL, FALSE);
+                        HBB_PREFIX_SPECIAL, FALSE, 0);
     } else {
       printf("%s\n", buffer_locale);
       // ncurses are not initialized yet, so we call directly hbuf routine
       hbuf_add_line(&statushbuf, buf_specialwindow, timestamp,
-        HBB_PREFIX_SPECIAL, 0, 0);
+        HBB_PREFIX_SPECIAL, 0, 0, 0);
     }
 
     g_free(convbuf1);
@@ -899,12 +900,26 @@
       // Make sure we are at the right position
       wmove(win_entry->win, n, getprefixwidth()-1);
       wprintw(win_entry->win, "%s", line->text); // Display text line
+      wclrtoeol(win_entry->win);
+
+      //The MUC nick - overwrite with propper color
+      if (line->mucnicklen) {
+        //Store the char after the nick
+        char tmp = line->text[line->mucnicklen];
+        //TODO choose the color in proper way
+        wattrset(win_entry->win, get_color(COLOR_RED_BOLD_FG));
+        wmove(win_entry->win, n, getprefixwidth()-1);
+        //Terminate the string after the nick
+        line->text[line->mucnicklen] = '\0';
+        wprintw(win_entry->win, "%s", line->text);
+        //Return the char
+        line->text[line->mucnicklen] = tmp;
+      }
 
       // Return the color back
-      if (line->flags & (HBB_PREFIX_HLIGHT_OUT | HBB_PREFIX_HLIGHT
-                         | HBB_PREFIX_INFO | HBB_PREFIX_IN))
+      if ((line->flags & (HBB_PREFIX_HLIGHT_OUT | HBB_PREFIX_HLIGHT
+          | HBB_PREFIX_INFO | HBB_PREFIX_IN)) || (line->mucnicklen))
         wattrset(win_entry->win, get_color(COLOR_GENERAL));
-      wclrtoeol(win_entry->win);
       g_free(line->text);
       g_free(line);
     } else {
@@ -1006,7 +1021,8 @@
 // Lines are splitted when they are too long to fit in the chat window.
 // If this window doesn't exist, it is created.
 void scr_WriteInWindow(const char *winId, const char *text, time_t timestamp,
-                       unsigned int prefix_flags, int force_show)
+                       unsigned int prefix_flags, int force_show,
+                       unsigned mucnicklen)
 {
   winbuf *win_entry;
   char *text_locale;
@@ -1043,7 +1059,7 @@
 
   text_locale = from_utf8(text);
   hbuf_add_line(&win_entry->bd->hbuf, text_locale, timestamp, prefix_flags,
-                maxX - Roster_Width - getprefixwidth(), num_history_blocks);
+                maxX - Roster_Width - getprefixwidth(), num_history_blocks, mucnicklen);
   g_free(text_locale);
 
   if (win_entry->bd->cleared) {
@@ -1694,7 +1710,8 @@
 }
 
 inline void scr_WriteMessage(const char *bjid, const char *text,
-                             time_t timestamp, guint prefix_flags)
+                             time_t timestamp, guint prefix_flags,
+                             unsigned mucnicklen)
 {
   char *xtext;
 
@@ -1702,7 +1719,7 @@
 
   xtext = ut_expand_tabs(text); // Expand tabs and filter out some chars
 
-  scr_WriteInWindow(bjid, xtext, timestamp, prefix_flags, FALSE);
+  scr_WriteInWindow(bjid, xtext, timestamp, prefix_flags, FALSE, mucnicklen);
 
   if (xtext != (char*)text)
     g_free(xtext);
@@ -1710,14 +1727,14 @@
 
 // If prefix is NULL, HBB_PREFIX_IN is supposed.
 void scr_WriteIncomingMessage(const char *jidfrom, const char *text,
-        time_t timestamp, guint prefix)
+        time_t timestamp, guint prefix, unsigned mucnicklen)
 {
   if (!(prefix &
         ~HBB_PREFIX_NOFLAG & ~HBB_PREFIX_HLIGHT & ~HBB_PREFIX_HLIGHT_OUT &
         ~HBB_PREFIX_PGPCRYPT))
     prefix |= HBB_PREFIX_IN;
 
-  scr_WriteMessage(jidfrom, text, timestamp, prefix);
+  scr_WriteMessage(jidfrom, text, timestamp, prefix, mucnicklen);
 }
 
 void scr_WriteOutgoingMessage(const char *jidto, const char *text, guint prefix)
@@ -1726,7 +1743,7 @@
   roster_elt = roster_find(jidto, jidsearch,
                            ROSTER_TYPE_USER|ROSTER_TYPE_AGENT|ROSTER_TYPE_ROOM);
 
-  scr_WriteMessage(jidto, text, 0, prefix|HBB_PREFIX_OUT|HBB_PREFIX_HLIGHT_OUT);
+  scr_WriteMessage(jidto, text, 0, prefix|HBB_PREFIX_OUT|HBB_PREFIX_HLIGHT_OUT, 0);
 
   // Show jidto's buffer unless the buddy is not in the buddylist
   if (roster_elt && g_list_position(buddylist, roster_elt->data) != -1)