Mercurial > ~mikael > mcabber > hg
comparison 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 |
comparison
equal
deleted
inserted
replaced
1289:57fe57474122 | 1290:e42f48103609 |
---|---|
133 | 133 |
134 GSList *keyseqlist; | 134 GSList *keyseqlist; |
135 static void add_keyseq(char *seqstr, guint mkeycode, gint value); | 135 static void add_keyseq(char *seqstr, guint mkeycode, gint value); |
136 | 136 |
137 void scr_WriteInWindow(const char *winId, const char *text, time_t timestamp, | 137 void scr_WriteInWindow(const char *winId, const char *text, time_t timestamp, |
138 unsigned int prefix_flags, int force_show); | 138 unsigned int prefix_flags, int force_show, |
139 unsigned mucnicklen); | |
139 | 140 |
140 #ifdef HAVE_ASPELL_H | 141 #ifdef HAVE_ASPELL_H |
141 #define ASPELLBADCHAR 5 | 142 #define ASPELLBADCHAR 5 |
142 AspellConfig *spell_config; | 143 AspellConfig *spell_config; |
143 AspellSpeller *spell_checker; | 144 AspellSpeller *spell_checker; |
710 | 711 |
711 if (Curses) { | 712 if (Curses) { |
712 wprintw(logWnd, "\n%s", buffer_locale); | 713 wprintw(logWnd, "\n%s", buffer_locale); |
713 update_panels(); | 714 update_panels(); |
714 scr_WriteInWindow(NULL, buf_specialwindow, timestamp, | 715 scr_WriteInWindow(NULL, buf_specialwindow, timestamp, |
715 HBB_PREFIX_SPECIAL, FALSE); | 716 HBB_PREFIX_SPECIAL, FALSE, 0); |
716 } else { | 717 } else { |
717 printf("%s\n", buffer_locale); | 718 printf("%s\n", buffer_locale); |
718 // ncurses are not initialized yet, so we call directly hbuf routine | 719 // ncurses are not initialized yet, so we call directly hbuf routine |
719 hbuf_add_line(&statushbuf, buf_specialwindow, timestamp, | 720 hbuf_add_line(&statushbuf, buf_specialwindow, timestamp, |
720 HBB_PREFIX_SPECIAL, 0, 0); | 721 HBB_PREFIX_SPECIAL, 0, 0, 0); |
721 } | 722 } |
722 | 723 |
723 g_free(convbuf1); | 724 g_free(convbuf1); |
724 g_free(convbuf2); | 725 g_free(convbuf2); |
725 g_free(buffer); | 726 g_free(buffer); |
897 } | 898 } |
898 | 899 |
899 // Make sure we are at the right position | 900 // Make sure we are at the right position |
900 wmove(win_entry->win, n, getprefixwidth()-1); | 901 wmove(win_entry->win, n, getprefixwidth()-1); |
901 wprintw(win_entry->win, "%s", line->text); // Display text line | 902 wprintw(win_entry->win, "%s", line->text); // Display text line |
903 wclrtoeol(win_entry->win); | |
904 | |
905 //The MUC nick - overwrite with propper color | |
906 if (line->mucnicklen) { | |
907 //Store the char after the nick | |
908 char tmp = line->text[line->mucnicklen]; | |
909 //TODO choose the color in proper way | |
910 wattrset(win_entry->win, get_color(COLOR_RED_BOLD_FG)); | |
911 wmove(win_entry->win, n, getprefixwidth()-1); | |
912 //Terminate the string after the nick | |
913 line->text[line->mucnicklen] = '\0'; | |
914 wprintw(win_entry->win, "%s", line->text); | |
915 //Return the char | |
916 line->text[line->mucnicklen] = tmp; | |
917 } | |
902 | 918 |
903 // Return the color back | 919 // Return the color back |
904 if (line->flags & (HBB_PREFIX_HLIGHT_OUT | HBB_PREFIX_HLIGHT | 920 if ((line->flags & (HBB_PREFIX_HLIGHT_OUT | HBB_PREFIX_HLIGHT |
905 | HBB_PREFIX_INFO | HBB_PREFIX_IN)) | 921 | HBB_PREFIX_INFO | HBB_PREFIX_IN)) || (line->mucnicklen)) |
906 wattrset(win_entry->win, get_color(COLOR_GENERAL)); | 922 wattrset(win_entry->win, get_color(COLOR_GENERAL)); |
907 wclrtoeol(win_entry->win); | |
908 g_free(line->text); | 923 g_free(line->text); |
909 g_free(line); | 924 g_free(line); |
910 } else { | 925 } else { |
911 wclrtobot(win_entry->win); | 926 wclrtobot(win_entry->win); |
912 break; | 927 break; |
1004 // Write some text in the winId window (this usually is a jid). | 1019 // Write some text in the winId window (this usually is a jid). |
1005 // Use winId == NULL for the special status buffer. | 1020 // Use winId == NULL for the special status buffer. |
1006 // Lines are splitted when they are too long to fit in the chat window. | 1021 // Lines are splitted when they are too long to fit in the chat window. |
1007 // If this window doesn't exist, it is created. | 1022 // If this window doesn't exist, it is created. |
1008 void scr_WriteInWindow(const char *winId, const char *text, time_t timestamp, | 1023 void scr_WriteInWindow(const char *winId, const char *text, time_t timestamp, |
1009 unsigned int prefix_flags, int force_show) | 1024 unsigned int prefix_flags, int force_show, |
1025 unsigned mucnicklen) | |
1010 { | 1026 { |
1011 winbuf *win_entry; | 1027 winbuf *win_entry; |
1012 char *text_locale; | 1028 char *text_locale; |
1013 int dont_show = FALSE; | 1029 int dont_show = FALSE; |
1014 int special; | 1030 int special; |
1041 else | 1057 else |
1042 num_history_blocks = get_max_history_blocks(); | 1058 num_history_blocks = get_max_history_blocks(); |
1043 | 1059 |
1044 text_locale = from_utf8(text); | 1060 text_locale = from_utf8(text); |
1045 hbuf_add_line(&win_entry->bd->hbuf, text_locale, timestamp, prefix_flags, | 1061 hbuf_add_line(&win_entry->bd->hbuf, text_locale, timestamp, prefix_flags, |
1046 maxX - Roster_Width - getprefixwidth(), num_history_blocks); | 1062 maxX - Roster_Width - getprefixwidth(), num_history_blocks, mucnicklen); |
1047 g_free(text_locale); | 1063 g_free(text_locale); |
1048 | 1064 |
1049 if (win_entry->bd->cleared) { | 1065 if (win_entry->bd->cleared) { |
1050 win_entry->bd->cleared = FALSE; | 1066 win_entry->bd->cleared = FALSE; |
1051 if (g_list_next(win_entry->bd->top)) | 1067 if (g_list_next(win_entry->bd->top)) |
1692 redrawwin(stdscr); | 1708 redrawwin(stdscr); |
1693 } | 1709 } |
1694 } | 1710 } |
1695 | 1711 |
1696 inline void scr_WriteMessage(const char *bjid, const char *text, | 1712 inline void scr_WriteMessage(const char *bjid, const char *text, |
1697 time_t timestamp, guint prefix_flags) | 1713 time_t timestamp, guint prefix_flags, |
1714 unsigned mucnicklen) | |
1698 { | 1715 { |
1699 char *xtext; | 1716 char *xtext; |
1700 | 1717 |
1701 if (!timestamp) timestamp = time(NULL); | 1718 if (!timestamp) timestamp = time(NULL); |
1702 | 1719 |
1703 xtext = ut_expand_tabs(text); // Expand tabs and filter out some chars | 1720 xtext = ut_expand_tabs(text); // Expand tabs and filter out some chars |
1704 | 1721 |
1705 scr_WriteInWindow(bjid, xtext, timestamp, prefix_flags, FALSE); | 1722 scr_WriteInWindow(bjid, xtext, timestamp, prefix_flags, FALSE, mucnicklen); |
1706 | 1723 |
1707 if (xtext != (char*)text) | 1724 if (xtext != (char*)text) |
1708 g_free(xtext); | 1725 g_free(xtext); |
1709 } | 1726 } |
1710 | 1727 |
1711 // If prefix is NULL, HBB_PREFIX_IN is supposed. | 1728 // If prefix is NULL, HBB_PREFIX_IN is supposed. |
1712 void scr_WriteIncomingMessage(const char *jidfrom, const char *text, | 1729 void scr_WriteIncomingMessage(const char *jidfrom, const char *text, |
1713 time_t timestamp, guint prefix) | 1730 time_t timestamp, guint prefix, unsigned mucnicklen) |
1714 { | 1731 { |
1715 if (!(prefix & | 1732 if (!(prefix & |
1716 ~HBB_PREFIX_NOFLAG & ~HBB_PREFIX_HLIGHT & ~HBB_PREFIX_HLIGHT_OUT & | 1733 ~HBB_PREFIX_NOFLAG & ~HBB_PREFIX_HLIGHT & ~HBB_PREFIX_HLIGHT_OUT & |
1717 ~HBB_PREFIX_PGPCRYPT)) | 1734 ~HBB_PREFIX_PGPCRYPT)) |
1718 prefix |= HBB_PREFIX_IN; | 1735 prefix |= HBB_PREFIX_IN; |
1719 | 1736 |
1720 scr_WriteMessage(jidfrom, text, timestamp, prefix); | 1737 scr_WriteMessage(jidfrom, text, timestamp, prefix, mucnicklen); |
1721 } | 1738 } |
1722 | 1739 |
1723 void scr_WriteOutgoingMessage(const char *jidto, const char *text, guint prefix) | 1740 void scr_WriteOutgoingMessage(const char *jidto, const char *text, guint prefix) |
1724 { | 1741 { |
1725 GSList *roster_elt; | 1742 GSList *roster_elt; |
1726 roster_elt = roster_find(jidto, jidsearch, | 1743 roster_elt = roster_find(jidto, jidsearch, |
1727 ROSTER_TYPE_USER|ROSTER_TYPE_AGENT|ROSTER_TYPE_ROOM); | 1744 ROSTER_TYPE_USER|ROSTER_TYPE_AGENT|ROSTER_TYPE_ROOM); |
1728 | 1745 |
1729 scr_WriteMessage(jidto, text, 0, prefix|HBB_PREFIX_OUT|HBB_PREFIX_HLIGHT_OUT); | 1746 scr_WriteMessage(jidto, text, 0, prefix|HBB_PREFIX_OUT|HBB_PREFIX_HLIGHT_OUT, 0); |
1730 | 1747 |
1731 // Show jidto's buffer unless the buddy is not in the buddylist | 1748 // Show jidto's buffer unless the buddy is not in the buddylist |
1732 if (roster_elt && g_list_position(buddylist, roster_elt->data) != -1) | 1749 if (roster_elt && g_list_position(buddylist, roster_elt->data) != -1) |
1733 scr_ShowWindow(jidto, FALSE); | 1750 scr_ShowWindow(jidto, FALSE); |
1734 } | 1751 } |