summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/curses/gui-curses-bar.c381
-rw-r--r--src/gui/curses/gui-curses-chat.c8
-rw-r--r--src/gui/curses/gui-curses-color.c1
-rw-r--r--src/gui/curses/gui-curses-keyboard.c8
-rw-r--r--src/gui/curses/gui-curses-main.c10
-rw-r--r--src/gui/curses/gui-curses-nicklist.c28
-rw-r--r--src/gui/curses/gui-curses.h1
-rw-r--r--src/gui/gtk/gui-gtk-bar.c93
-rw-r--r--src/gui/gtk/gui-gtk.h1
-rw-r--r--src/gui/gui-bar-item.c133
-rw-r--r--src/gui/gui-bar-item.h3
-rw-r--r--src/gui/gui-bar.c99
-rw-r--r--src/gui/gui-bar.h12
-rw-r--r--src/gui/gui-color.c5
-rw-r--r--src/gui/gui-color.h1
-rw-r--r--src/gui/gui-nicklist.c61
-rw-r--r--src/gui/gui-nicklist.h6
17 files changed, 737 insertions, 114 deletions
diff --git a/src/gui/curses/gui-curses-bar.c b/src/gui/curses/gui-curses-bar.c
index 22e681d3b..8aacb980c 100644
--- a/src/gui/curses/gui-curses-bar.c
+++ b/src/gui/curses/gui-curses-bar.c
@@ -26,6 +26,7 @@
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
+#include <limits.h>
#include "../../core/weechat.h"
#include "../../core/wee-config.h"
@@ -146,6 +147,80 @@ gui_bar_window_get_size (struct t_gui_bar *bar, struct t_gui_window *window,
}
/*
+ * gui_bar_get_min_width: return minimum width of a bar window displayed for
+ * a bar
+ * for example, if a bar is displayed in 3 windows,
+ * this function return min width of these 3 bar windows
+ */
+
+int
+gui_bar_get_min_width (struct t_gui_bar *bar)
+{
+ struct t_gui_window *ptr_win;
+ struct t_gui_bar_window *ptr_bar_win;
+ int min_width;
+
+ if (CONFIG_INTEGER(bar->type) == GUI_BAR_TYPE_ROOT)
+ return bar->bar_window->width;
+
+ min_width = INT_MAX;
+ for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window)
+ {
+ for (ptr_bar_win = GUI_CURSES(ptr_win)->bar_windows;
+ ptr_bar_win; ptr_bar_win = ptr_bar_win->next_bar_window)
+ {
+ if (ptr_bar_win->bar == bar)
+ {
+ if (ptr_bar_win->width < min_width)
+ min_width = ptr_bar_win->width;
+ }
+ }
+ }
+
+ if (min_width == INT_MAX)
+ return 0;
+
+ return min_width;
+}
+
+/*
+ * gui_bar_get_min_height: return minimum height of a bar window displayed for
+ * a bar
+ * for example, if a bar is displayed in 3 windows,
+ * this function return min width of these 3 bar windows
+ */
+
+int
+gui_bar_get_min_height (struct t_gui_bar *bar)
+{
+ struct t_gui_window *ptr_win;
+ struct t_gui_bar_window *ptr_bar_win;
+ int min_height;
+
+ if (CONFIG_INTEGER(bar->type) == GUI_BAR_TYPE_ROOT)
+ return bar->bar_window->height;
+
+ min_height = INT_MAX;
+ for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window)
+ {
+ for (ptr_bar_win = GUI_CURSES(ptr_win)->bar_windows;
+ ptr_bar_win; ptr_bar_win = ptr_bar_win->next_bar_window)
+ {
+ if (ptr_bar_win->bar == bar)
+ {
+ if (ptr_bar_win->height < min_height)
+ min_height = ptr_bar_win->height;
+ }
+ }
+ }
+
+ if (min_height == INT_MAX)
+ return 0;
+
+ return min_height;
+}
+
+/*
* gui_bar_check_size_add: check if "add_size" is ok for bar
* return 1 if new size is ok
* 0 if new size is too big
@@ -401,6 +476,8 @@ gui_bar_window_new (struct t_gui_bar *bar, struct t_gui_window *window)
new_bar_window->y = 0;
new_bar_window->width = 1;
new_bar_window->height = 1;
+ new_bar_window->scroll_x = 0;
+ new_bar_window->scroll_y = 0;
new_bar_window->cursor_x = -1;
new_bar_window->cursor_y = -1;
new_bar_window->current_size = (CONFIG_INTEGER(bar->size) == 0) ?
@@ -579,9 +656,12 @@ gui_bar_window_add_missing_bars (struct t_gui_window *window)
/*
* gui_bar_window_print_string: print a string text on a bar window
+ * return 1 if all was printed, 0 if some text
+ * was not displayed (wrapped due to bar window
+ * width)
*/
-void
+int
gui_bar_window_print_string (struct t_gui_bar_window *bar_window,
int *x, int *y,
const char *string)
@@ -590,7 +670,7 @@ gui_bar_window_print_string (struct t_gui_bar_window *bar_window,
char str_fg[3], str_bg[3], utf_char[16], *next_char, *output;
if (!string || !string[0])
- return;
+ return 1;
wmove (bar_window->win_bar, *y, *x);
@@ -710,9 +790,9 @@ gui_bar_window_print_string (struct t_gui_bar_window *bar_window,
if (*x + size_on_screen > bar_window->width)
{
if (CONFIG_INTEGER(bar_window->bar->filling) == GUI_BAR_FILLING_VERTICAL)
- return;
+ return 0;
if (*y >= bar_window->height - 1)
- return;
+ return 0;
*x = 0;
(*y)++;
wmove (bar_window->win_bar, *y, *x);
@@ -728,6 +808,7 @@ gui_bar_window_print_string (struct t_gui_bar_window *bar_window,
string = next_char;
}
}
+ return 1;
}
/*
@@ -743,6 +824,7 @@ gui_bar_window_draw (struct t_gui_bar_window *bar_window,
char space_with_reinit_color[32];
int length_reinit_color, content_length, length, length_on_screen;
int max_length, optimal_number_of_lines, chars_available;
+ int some_data_not_displayed;
if (!gui_init_ok)
return;
@@ -877,18 +959,60 @@ gui_bar_window_draw (struct t_gui_bar_window *bar_window,
CONFIG_COLOR(bar_window->bar->color_bg));
x = 0;
y = 0;
+ some_data_not_displayed = 0;
+ if ((bar_window->scroll_y > 0)
+ && (bar_window->scroll_y >= items_count))
+ {
+ bar_window->scroll_y = items_count - bar_window->height;
+ if (bar_window->scroll_y < 0)
+ bar_window->scroll_y = 0;
+ }
for (line = 0;
(line < items_count) && (y < bar_window->height);
line++)
{
- gui_bar_window_print_string (bar_window, &x, &y,
- items[line]);
- if (CONFIG_INTEGER(bar_window->bar->filling) == GUI_BAR_FILLING_VERTICAL)
+ if ((bar_window->scroll_y == 0)
+ || (line >= bar_window->scroll_y))
{
- x = 0;
- y++;
+ if (!gui_bar_window_print_string (bar_window, &x, &y,
+ items[line]))
+ {
+ some_data_not_displayed = 1;
+ }
+ if (CONFIG_INTEGER(bar_window->bar->filling) == GUI_BAR_FILLING_VERTICAL)
+ {
+ x = 0;
+ y++;
+ }
+ else
+ {
+ gui_bar_window_print_string (bar_window, &x, &y,
+ space_with_reinit_color);
+ }
}
}
+ if (bar_window->scroll_y > 0)
+ {
+ x = (bar_window->height > 1) ? bar_window->width - 2 : 0;
+ if (x < 0)
+ x = 0;
+ y = 0;
+ gui_window_set_custom_color_fg_bg (bar_window->win_bar,
+ CONFIG_COLOR(config_color_bar_more),
+ CONFIG_INTEGER(bar_window->bar->color_bg));
+ mvwprintw (bar_window->win_bar, y, x, "--");
+ }
+ if (some_data_not_displayed || (line < items_count))
+ {
+ x = bar_window->width - 2;
+ if (x < 0)
+ x = 0;
+ y = (bar_window->height > 1) ? bar_window->height - 1 : 0;
+ gui_window_set_custom_color_fg_bg (bar_window->win_bar,
+ CONFIG_COLOR(config_color_bar_more),
+ CONFIG_INTEGER(bar_window->bar->color_bg));
+ mvwprintw (bar_window->win_bar, y, x, "++");
+ }
}
if (items)
string_free_exploded (items);
@@ -936,23 +1060,60 @@ gui_bar_window_draw (struct t_gui_bar_window *bar_window,
item_value2 : item_value,
"\n", 0, 0,
&items_count);
+ some_data_not_displayed = 0;
+ if ((bar_window->scroll_y > 0)
+ && (bar_window->scroll_y >= items_count))
+ {
+ bar_window->scroll_y = items_count - bar_window->height;
+ if (bar_window->scroll_y < 0)
+ bar_window->scroll_y = 0;
+ }
for (line = 0;
(line < items_count) && (y < bar_window->height);
line++)
{
- gui_bar_window_print_string (bar_window, &x, &y,
- items[line]);
- if (CONFIG_INTEGER(bar_window->bar->filling) == GUI_BAR_FILLING_VERTICAL)
+ if ((bar_window->scroll_y == 0)
+ || (line >= bar_window->scroll_y))
{
- x = 0;
- y++;
- }
- else
- {
- gui_bar_window_print_string (bar_window, &x, &y,
- space_with_reinit_color);
+ if (!gui_bar_window_print_string (bar_window, &x, &y,
+ items[line]))
+ {
+ some_data_not_displayed = 1;
+ }
+ if (CONFIG_INTEGER(bar_window->bar->filling) == GUI_BAR_FILLING_VERTICAL)
+ {
+ x = 0;
+ y++;
+ }
+ else
+ {
+ gui_bar_window_print_string (bar_window, &x, &y,
+ space_with_reinit_color);
+ }
}
}
+ if (bar_window->scroll_y > 0)
+ {
+ x = (bar_window->height > 1) ? bar_window->width - 2 : 0;
+ if (x < 0)
+ x = 0;
+ y = 0;
+ gui_window_set_custom_color_fg_bg (bar_window->win_bar,
+ CONFIG_COLOR(config_color_bar_more),
+ CONFIG_INTEGER(bar_window->bar->color_bg));
+ mvwprintw (bar_window->win_bar, y, x, "--");
+ }
+ if (some_data_not_displayed || (line < items_count))
+ {
+ x = bar_window->width - 2;
+ if (x < 0)
+ x = 0;
+ y = (bar_window->height > 1) ? bar_window->height - 1 : 0;
+ gui_window_set_custom_color_fg_bg (bar_window->win_bar,
+ CONFIG_COLOR(config_color_bar_more),
+ CONFIG_INTEGER(bar_window->bar->color_bg));
+ mvwprintw (bar_window->win_bar, y, x, "++");
+ }
if (item_value2)
free (item_value2);
if (items)
@@ -1046,6 +1207,186 @@ gui_bar_draw (struct t_gui_bar *bar)
}
/*
+ * gui_bar_window_scroll: scroll a bar window with a value
+ * if add == 1, then value is added (otherwise subtracted)
+ * if add_x == 1, then value is added to scroll_x (otherwise scroll_y)
+ * if percent == 1, then value is a percentage (otherwise number of chars)
+ */
+
+void
+gui_bar_window_scroll (struct t_gui_bar_window *bar_window,
+ struct t_gui_window *window,
+ int add_x, int scroll_beginning, int scroll_end,
+ int add, int percent, int value)
+{
+ int old_scroll_x, old_scroll_y;
+
+ old_scroll_x = bar_window->scroll_x;
+ old_scroll_y = bar_window->scroll_y;
+
+ if (scroll_beginning)
+ {
+ if (add_x)
+ bar_window->scroll_x = 0;
+ else
+ bar_window->scroll_y = 0;
+ }
+ else if (scroll_end)
+ {
+ if (add_x)
+ bar_window->scroll_x = INT_MAX;
+ else
+ bar_window->scroll_y = INT_MAX;
+ }
+ else
+ {
+ if (percent)
+ {
+ if (add_x)
+ value = (bar_window->width * value) / 100;
+ else
+ value = (bar_window->height * value) / 100;
+ if (value == 0)
+ value = 1;
+ }
+ if (add)
+ {
+ if (add_x)
+ bar_window->scroll_x += value;
+ else
+ bar_window->scroll_y += value;
+ }
+ else
+ {
+ if (add_x)
+ bar_window->scroll_x -= value;
+ else
+ bar_window->scroll_y -= value;
+ }
+ }
+
+ if (bar_window->scroll_x < 0)
+ bar_window->scroll_x = 0;
+
+ if (bar_window->scroll_y < 0)
+ bar_window->scroll_y = 0;
+
+ /* refresh only if scroll has changed (X and/or Y) */
+ if ((old_scroll_x != bar_window->scroll_x)
+ || (old_scroll_y != bar_window->scroll_y))
+ {
+ gui_bar_window_draw (bar_window, window);
+ }
+}
+
+/*
+ * gui_bar_scroll: scroll a bar for a buffer
+ * return 1 if scroll is ok, 0 if error
+ */
+
+int
+gui_bar_scroll (struct t_gui_bar *bar, struct t_gui_buffer *buffer,
+ const char *scroll)
+{
+ struct t_gui_window *ptr_win;
+ struct t_gui_bar_window *ptr_bar_win;
+ long number;
+ char *str, *error;
+ int length, add_x, add, percent, scroll_beginning, scroll_end;
+
+ add_x = 0;
+ str = NULL;
+ number = 0;
+ add = 0;
+ percent = 0;
+ scroll_beginning = 0;
+ scroll_end = 0;
+
+ if ((scroll[0] == 'x') || (scroll[0] == 'X'))
+ {
+ add_x = 1;
+ scroll++;
+ }
+ else if ((scroll[0] == 'y') || (scroll[0] == 'Y'))
+ {
+ scroll++;
+ }
+ else
+ return 0;
+
+ if ((scroll[0] == 'b') || (scroll[0] == 'B'))
+ {
+ scroll_beginning = 1;
+ }
+ else if ((scroll[0] == 'e') || (scroll[0] == 'E'))
+ {
+ scroll_end = 1;
+ }
+ else
+ {
+ if (scroll[0] == '+')
+ {
+ add = 1;
+ scroll++;
+ }
+ else if (scroll[0] == '-')
+ {
+ scroll++;
+ }
+ else
+ return 0;
+
+ length = strlen (scroll);
+ if (length == 0)
+ return 0;
+
+ if (scroll[length - 1] == '%')
+ {
+ str = string_strndup (scroll, length - 1);
+ percent = 1;
+ }
+ else
+ str = strdup (scroll);
+ if (!str)
+ return 0;
+
+ error = NULL;
+ number = strtol (str, &error, 10);
+
+ if (!error || error[0] || (number <= 0))
+ {
+ free (str);
+ return 0;
+ }
+ }
+
+ if (CONFIG_INTEGER(bar->type) == GUI_BAR_TYPE_ROOT)
+ gui_bar_window_scroll (bar->bar_window, NULL,
+ add_x, scroll_beginning, scroll_end,
+ add, percent, number);
+ else
+ {
+ for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window)
+ {
+ if (ptr_win->buffer == buffer)
+ {
+ for (ptr_bar_win = GUI_CURSES(ptr_win)->bar_windows;
+ ptr_bar_win; ptr_bar_win = ptr_bar_win->next_bar_window)
+ {
+ gui_bar_window_scroll (ptr_bar_win, ptr_win,
+ add_x, scroll_beginning, scroll_end,
+ add, percent, number);
+ }
+ }
+ }
+ }
+
+ free (str);
+
+ return 1;
+}
+
+/*
* gui_bar_window_print_log: print bar window infos in log (usually for crash dump)
*/
@@ -1059,6 +1400,8 @@ gui_bar_window_print_log (struct t_gui_bar_window *bar_window)
log_printf (" y . . . . . . . . : %d", bar_window->y);
log_printf (" width . . . . . . : %d", bar_window->width);
log_printf (" height. . . . . . : %d", bar_window->height);
+ log_printf (" scroll_x. . . . . : %d", bar_window->scroll_x);
+ log_printf (" scroll_y. . . . . : %d", bar_window->scroll_y);
log_printf (" cursor_x. . . . . : %d", bar_window->cursor_x);
log_printf (" cursor_y. . . . . : %d", bar_window->cursor_y);
log_printf (" current_size. . . : %d", bar_window->current_size);
diff --git a/src/gui/curses/gui-curses-chat.c b/src/gui/curses/gui-curses-chat.c
index bd20dca1b..9f1a8e480 100644
--- a/src/gui/curses/gui-curses-chat.c
+++ b/src/gui/curses/gui-curses-chat.c
@@ -84,8 +84,8 @@ gui_chat_draw_title (struct t_gui_buffer *buffer, int erase)
if (ptr_win->win_title_start > 0)
{
- gui_window_set_weechat_color (GUI_CURSES(ptr_win)->win_title,
- GUI_COLOR_TITLE_MORE);
+ //gui_window_set_weechat_color (GUI_CURSES(ptr_win)->win_title,
+ // GUI_COLOR_TITLE_MORE);
wprintw (GUI_CURSES(ptr_win)->win_title, "%s", "++");
}
@@ -94,8 +94,8 @@ gui_chat_draw_title (struct t_gui_buffer *buffer, int erase)
gui_window_set_weechat_color (GUI_CURSES(ptr_win)->win_title,
GUI_COLOR_TITLE);
wprintw (GUI_CURSES(ptr_win)->win_title, "%s", ptr_title);
- gui_window_set_weechat_color (GUI_CURSES(ptr_win)->win_title,
- GUI_COLOR_TITLE_MORE);
+ //gui_window_set_weechat_color (GUI_CURSES(ptr_win)->win_title,
+ // GUI_COLOR_TITLE_MORE);
mvwprintw (GUI_CURSES(ptr_win)->win_title, 0,
ptr_win->win_width - 2,
"%s", "++");
diff --git a/src/gui/curses/gui-curses-color.c b/src/gui/curses/gui-curses-color.c
index 818a0f4f3..42557dd99 100644
--- a/src/gui/curses/gui-curses-color.c
+++ b/src/gui/curses/gui-curses-color.c
@@ -357,7 +357,6 @@ gui_color_init_weechat ()
gui_color_build (GUI_COLOR_SEPARATOR, CONFIG_COLOR(config_color_separator), CONFIG_COLOR(config_color_chat_bg));
gui_color_build (GUI_COLOR_TITLE, CONFIG_COLOR(config_color_title), CONFIG_COLOR(config_color_title_bg));
- gui_color_build (GUI_COLOR_TITLE_MORE, CONFIG_COLOR(config_color_title_more), CONFIG_COLOR(config_color_title_bg));
gui_color_build (GUI_COLOR_CHAT, CONFIG_COLOR(config_color_chat), CONFIG_COLOR(config_color_chat_bg));
gui_color_build (GUI_COLOR_CHAT_TIME, CONFIG_COLOR(config_color_chat_time), CONFIG_COLOR(config_color_chat_bg));
diff --git a/src/gui/curses/gui-curses-keyboard.c b/src/gui/curses/gui-curses-keyboard.c
index 4eeaede59..02f9b6023 100644
--- a/src/gui/curses/gui-curses-keyboard.c
+++ b/src/gui/curses/gui-curses-keyboard.c
@@ -123,10 +123,10 @@ gui_keyboard_default_bindings ()
gui_keyboard_bind (NULL, /* m-p */ "meta-p", "/window scroll_previous_highlight");
gui_keyboard_bind (NULL, /* F9 */ "meta2-20~", "/window scroll_topic_left");
gui_keyboard_bind (NULL, /* F10 */ "meta2-21~", "/window scroll_topic_right");
- gui_keyboard_bind (NULL, /* F11 */ "meta2-23~", "/window nicklist_page_up");
- gui_keyboard_bind (NULL, /* F12 */ "meta2-24~", "/window nicklist_page_down");
- gui_keyboard_bind (NULL, /* m-F11 */ "meta-meta2-23~", "/window nicklist_beginning");
- gui_keyboard_bind (NULL, /* m-F12 */ "meta-meta2-24~", "/window nicklist_end");
+ gui_keyboard_bind (NULL, /* F11 */ "meta2-23~", "/bar scroll nicklist * y-100%");
+ gui_keyboard_bind (NULL, /* F12 */ "meta2-24~", "/bar scroll nicklist * y+100%");
+ gui_keyboard_bind (NULL, /* m-F11 */ "meta-meta2-23~", "/bar scroll nicklist * yb");
+ gui_keyboard_bind (NULL, /* m-F12 */ "meta-meta2-24~", "/bar scroll nicklist * ye");
gui_keyboard_bind (NULL, /* ^L */ "ctrl-L", "/window refresh");
gui_keyboard_bind (NULL, /* F7 */ "meta2-18~", "/window -1");
gui_keyboard_bind (NULL, /* F8 */ "meta2-19~", "/window +1");
diff --git a/src/gui/curses/gui-curses-main.c b/src/gui/curses/gui-curses-main.c
index 2fb742703..f76c7ae09 100644
--- a/src/gui/curses/gui-curses-main.c
+++ b/src/gui/curses/gui-curses-main.c
@@ -211,6 +211,7 @@ gui_main_loop ()
struct t_hook *hook_fd_keyboard;
struct t_gui_window *ptr_win;
struct t_gui_buffer *ptr_buffer;
+ struct t_gui_bar *ptr_bar;
struct timeval tv_timeout;
fd_set read_fds, write_fds, except_fds;
int max_fd;
@@ -250,6 +251,15 @@ gui_main_loop ()
if (gui_status_refresh_needed)
gui_status_draw (1);
+ for (ptr_bar = gui_bars; ptr_bar; ptr_bar = ptr_bar->next_bar)
+ {
+ if (ptr_bar->bar_refresh_needed)
+ {
+ gui_bar_draw (ptr_bar);
+ ptr_bar->bar_refresh_needed = 0;
+ }
+ }
+
for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window)
{
if (ptr_win->refresh_needed)
diff --git a/src/gui/curses/gui-curses-nicklist.c b/src/gui/curses/gui-curses-nicklist.c
index 1ac90ae6a..8b189099f 100644
--- a/src/gui/curses/gui-curses-nicklist.c
+++ b/src/gui/curses/gui-curses-nicklist.c
@@ -48,6 +48,7 @@ gui_nicklist_draw (struct t_gui_buffer *buffer, int erase)
struct t_gui_window *ptr_win;
struct t_gui_nick_group *ptr_group, *save_ptr_group;
struct t_gui_nick *ptr_nick, *save_ptr_nick;
+ struct t_config_option *ptr_option;
int i, j, k, x, y, x2, max_y, column, max_length, max_chars;
int nicks_displayed, num_to_display, chars_left;
char format_empty[32], *buf, *ptr_buf, *ptr_next, saved_char;
@@ -241,15 +242,30 @@ gui_nicklist_draw (struct t_gui_buffer *buffer, int erase)
}
chars_left -= ptr_nick->group->level;
}
- gui_window_set_weechat_color (GUI_CURSES(ptr_win)->win_nick,
- ptr_nick->prefix_color);
+
+ //gui_window_set_weechat_color (GUI_CURSES(ptr_win)->win_nick,
+ // ptr_nick->prefix_color);
+ config_file_search_with_string (ptr_nick->prefix_color,
+ NULL, NULL, &ptr_option,
+ NULL);
+ if (ptr_option)
+ gui_window_set_custom_color_fg (GUI_CURSES(ptr_win)->win_nick,
+ CONFIG_COLOR(ptr_option));
+
mvwprintw (GUI_CURSES(ptr_win)->win_nick,
y, x, "%c", ptr_nick->prefix);
x++;
chars_left--;
- gui_window_set_weechat_color (GUI_CURSES(ptr_win)->win_nick,
- ptr_nick->color);
+ //gui_window_set_weechat_color (GUI_CURSES(ptr_win)->win_nick,
+ // ptr_nick->color);
+ config_file_search_with_string (ptr_nick->color,
+ NULL, NULL, &ptr_option,
+ NULL);
+ if (ptr_option)
+ gui_window_set_custom_color_fg (GUI_CURSES(ptr_win)->win_nick,
+ CONFIG_COLOR(ptr_option));
+
ptr_buf = ptr_nick->name;
}
else
@@ -262,8 +278,8 @@ gui_nicklist_draw (struct t_gui_buffer *buffer, int erase)
x++;
}
chars_left -= ptr_group->level;
- gui_window_set_weechat_color (GUI_CURSES(ptr_win)->win_nick,
- ptr_group->color);
+ //gui_window_set_weechat_color (GUI_CURSES(ptr_win)->win_nick,
+ // ptr_group->color);
//wattron (GUI_CURSES(ptr_win)->win_nick, A_UNDERLINE);
ptr_buf = gui_nicklist_get_group_start (ptr_group->name);
}
diff --git a/src/gui/curses/gui-curses.h b/src/gui/curses/gui-curses.h
index 92e815ea9..ac48ff02e 100644
--- a/src/gui/curses/gui-curses.h
+++ b/src/gui/curses/gui-curses.h
@@ -43,6 +43,7 @@ struct t_gui_bar_window
struct t_gui_bar *bar; /* pointer to bar */
int x, y; /* position of window */
int width, height; /* window size */
+ int scroll_x, scroll_y; /* X-Y scroll in bar */
int cursor_x, cursor_y; /* use to move cursor on screen (for */
/* input_text item) */
WINDOW *win_bar; /* bar Curses window */
diff --git a/src/gui/gtk/gui-gtk-bar.c b/src/gui/gtk/gui-gtk-bar.c
index 1c2e821c1..f07f2cceb 100644
--- a/src/gui/gtk/gui-gtk-bar.c
+++ b/src/gui/gtk/gui-gtk-bar.c
@@ -111,6 +111,80 @@ gui_bar_window_get_size (struct t_gui_bar *bar, struct t_gui_window *window,
}
/*
+ * gui_bar_get_min_width: return minimum width of a bar window displayed for
+ * a bar
+ * for example, if a bar is displayed in 3 windows,
+ * this function return min width of these 3 bar windows
+ */
+
+int
+gui_bar_get_min_width (struct t_gui_bar *bar)
+{
+ struct t_gui_window *ptr_win;
+ struct t_gui_bar_window *ptr_bar_win;
+ int min_width;
+
+ if (CONFIG_INTEGER(bar->type) == GUI_BAR_TYPE_ROOT)
+ return bar->bar_window->width;
+
+ min_width = INT_MAX;
+ for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window)
+ {
+ for (ptr_bar_win = GUI_GTK(ptr_win)->bar_windows;
+ ptr_bar_win; ptr_bar_win = ptr_bar_win->next_bar_window)
+ {
+ if (ptr_bar_win->bar == bar)
+ {
+ if (ptr_bar_win->width < min_width)
+ min_width = ptr_bar_win->width;
+ }
+ }
+ }
+
+ if (min_width == INT_MAX)
+ return 0;
+
+ return min_width;
+}
+
+/*
+ * gui_bar_get_min_height: return minimum height of a bar window displayed for
+ * a bar
+ * for example, if a bar is displayed in 3 windows,
+ * this function return min width of these 3 bar windows
+ */
+
+int
+gui_bar_get_min_height (struct t_gui_bar *bar)
+{
+ struct t_gui_window *ptr_win;
+ struct t_gui_bar_window *ptr_bar_win;
+ int min_height;
+
+ if (CONFIG_INTEGER(bar->type) == GUI_BAR_TYPE_ROOT)
+ return bar->bar_window->height;
+
+ min_height = INT_MAX;
+ for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window)
+ {
+ for (ptr_bar_win = GUI_GTK(ptr_win)->bar_windows;
+ ptr_bar_win; ptr_bar_win = ptr_bar_win->next_bar_window)
+ {
+ if (ptr_bar_win->bar == bar)
+ {
+ if (ptr_bar_win->height < min_height)
+ min_height = ptr_bar_win->height;
+ }
+ }
+ }
+
+ if (min_height == INT_MAX)
+ return 0;
+
+ return min_height;
+}
+
+/*
* gui_bar_check_size_add: check if "add_size" is ok for bar
* return 1 if new size is ok
* 0 if new size is too big
@@ -333,6 +407,23 @@ gui_bar_draw (struct t_gui_bar *bar)
}
/*
+ * gui_bar_scroll: scroll a bar for a buffer
+ * return 1 if scroll is ok, 0 if error
+ */
+
+int
+gui_bar_scroll (struct t_gui_bar *bar, struct t_gui_buffer *buffer,
+ const char *scroll)
+{
+ (void) bar;
+ (void) buffer;
+ (void) scroll;
+
+ /* TODO: write this function for Gtk */
+ return 0;
+}
+
+/*
* gui_bar_window_print_log: print bar window infos in log (usually for crash dump)
*/
@@ -346,6 +437,8 @@ gui_bar_window_print_log (struct t_gui_bar_window *bar_window)
log_printf (" y . . . . . . . . : %d", bar_window->y);
log_printf (" width . . . . . . : %d", bar_window->width);
log_printf (" height. . . . . . : %d", bar_window->height);
+ log_printf (" scroll_x. . . . . : %d", bar_window->scroll_x);
+ log_printf (" scroll_y. . . . . : %d", bar_window->scroll_y);
log_printf (" prev_bar_window . : 0x%x", bar_window->prev_bar_window);
log_printf (" next_bar_window . : 0x%x", bar_window->next_bar_window);
}
diff --git a/src/gui/gtk/gui-gtk.h b/src/gui/gtk/gui-gtk.h
index 6b5a339a0..53428daac 100644
--- a/src/gui/gtk/gui-gtk.h
+++ b/src/gui/gtk/gui-gtk.h
@@ -59,6 +59,7 @@ struct t_gui_bar_window
struct t_gui_bar *bar; /* pointer to bar */
int x, y; /* position of window */
int width, height; /* window size */
+ int scroll_x, scroll_y; /* X-Y scroll in bar */
int current_size; /* current size (width or height) */
struct t_gui_bar_window *prev_bar_window; /* link to previous bar win */
/* (only for non-root bars) */
diff --git a/src/gui/gui-bar-item.c b/src/gui/gui-bar-item.c
index 35498dce3..c91820afc 100644
--- a/src/gui/gui-bar-item.c
+++ b/src/gui/gui-bar-item.c
@@ -42,6 +42,7 @@
#include "gui-completion.h"
#include "gui-filter.h"
#include "gui-hotlist.h"
+#include "gui-nicklist.h"
#include "gui-window.h"
@@ -49,8 +50,8 @@ struct t_gui_bar_item *gui_bar_items = NULL; /* first bar item */
struct t_gui_bar_item *last_gui_bar_item = NULL; /* last bar item */
char *gui_bar_item_names[GUI_BAR_NUM_ITEMS] =
{ "input_prompt", "input_text", "time", "buffer_count", "buffer_plugin",
- "buffer_name", "buffer_filter", "nicklist_count", "scroll", "hotlist",
- "completion", "buffer_title"
+ "buffer_name", "buffer_filter", "buffer_nicklist_count", "scroll", "hotlist",
+ "completion", "buffer_title", "buffer_nicklist"
};
struct t_gui_bar_item_hook *gui_bar_item_hooks = NULL;
struct t_hook *gui_bar_item_timer = NULL;
@@ -268,7 +269,7 @@ gui_bar_item_input_text_update_for_display (const char *item_content,
if (buf)
{
length_screen_before_cursor = gui_chat_strlen_screen (buf);
- length_screen_after_cursor = gui_chat_strlen_screen (pos_cursor + strlen (str_cursor));
+ length_screen_after_cursor = gui_chat_strlen_screen (pos_cursor);
free (buf);
}
}
@@ -531,7 +532,7 @@ gui_bar_item_update (const char *item_name)
if (!CONFIG_BOOLEAN(ptr_bar->hidden)
&& gui_bar_contains_item (ptr_bar, item_name))
{
- gui_bar_draw (ptr_bar);
+ gui_bar_ask_refresh (ptr_bar);
}
}
}
@@ -797,14 +798,15 @@ gui_bar_item_default_buffer_filter (void *data, struct t_gui_bar_item *item,
}
/*
- * gui_bar_item_default_nicklist_count: default item for number of nicks in
- * buffer nicklist
+ * gui_bar_item_default_buffer_nicklist_count: default item for number of nicks
+ * in buffer nicklist
*/
char *
-gui_bar_item_default_nicklist_count (void *data, struct t_gui_bar_item *item,
- struct t_gui_window *window,
- int max_width, int max_height)
+gui_bar_item_default_buffer_nicklist_count (void *data,
+ struct t_gui_bar_item *item,
+ struct t_gui_window *window,
+ int max_width, int max_height)
{
char buf[32];
@@ -1016,6 +1018,102 @@ gui_bar_item_default_buffer_title (void *data, struct t_gui_bar_item *item,
}
/*
+ * gui_bar_item_default_buffer_nicklist: default item for nicklist
+ */
+
+char *
+gui_bar_item_default_buffer_nicklist (void *data, struct t_gui_bar_item *item,
+ struct t_gui_window *window,
+ int max_width, int max_height)
+{
+ struct t_gui_nick_group *ptr_group;
+ struct t_gui_nick *ptr_nick;
+ struct t_config_option *ptr_option;
+ int i, length;
+ char *buf, str_prefix[2];
+
+ /* make C compiler happy */
+ (void) data;
+ (void) item;
+ (void) max_width;
+ (void) max_height;
+
+ if (!window)
+ window = gui_current_window;
+
+ length = 1;
+ ptr_group = NULL;
+ ptr_nick = NULL;
+ gui_nicklist_get_next_item (window->buffer, &ptr_group, &ptr_nick);
+ while (ptr_group || ptr_nick)
+ {
+ if ((ptr_nick && ptr_nick->visible)
+ || (ptr_group && window->buffer->nicklist_display_groups
+ && ptr_group->visible))
+ {
+ if (ptr_nick)
+ length += ptr_nick->group->level + 16 /* color */
+ + 1 /* prefix */ + 16 /* color */
+ + strlen (ptr_nick->name) + 1;
+ else
+ length += ptr_group->level - 1
+ + strlen (gui_nicklist_get_group_start (ptr_group->name))
+ + 1;
+ }
+ gui_nicklist_get_next_item (window->buffer, &ptr_group, &ptr_nick);
+ }
+
+ buf = malloc (length);
+ if (buf)
+ {
+ buf[0] = '\0';
+ ptr_group = NULL;
+ ptr_nick = NULL;
+ gui_nicklist_get_next_item (window->buffer, &ptr_group, &ptr_nick);
+ while (ptr_group || ptr_nick)
+ {
+ if ((ptr_nick && ptr_nick->visible)
+ || (ptr_group && window->buffer->nicklist_display_groups
+ && ptr_group->visible))
+ {
+ if (ptr_nick)
+ {
+ if (window->buffer->nicklist_display_groups)
+ {
+ for (i = 0; i < ptr_nick->group->level; i++)
+ {
+ strcat (buf, " ");
+ }
+ }
+ config_file_search_with_string (ptr_nick->prefix_color,
+ NULL, NULL, &ptr_option,
+ NULL);
+ if (ptr_option)
+ strcat (buf, gui_color_get_custom (gui_color_get_name (CONFIG_COLOR(ptr_option))));
+ str_prefix[0] = ptr_nick->prefix;
+ str_prefix[1] = '\0';
+ strcat (buf, str_prefix);
+ strcat (buf, GUI_COLOR_CUSTOM_BAR_FG);
+ strcat (buf, ptr_nick->name);
+ }
+ else
+ {
+ for (i = 0; i < ptr_group->level - 1; i++)
+ {
+ strcat (buf, " ");
+ }
+ strcat (buf, gui_nicklist_get_group_start (ptr_group->name));
+ }
+ strcat (buf, "\n");
+ }
+ gui_nicklist_get_next_item (window->buffer, &ptr_group, &ptr_nick);
+ }
+ }
+
+ return buf;
+}
+
+/*
* gui_bar_item_timer_cb: timer callback
*/
@@ -1152,14 +1250,14 @@ gui_bar_item_init ()
gui_bar_item_hook ("filters_*",
gui_bar_item_names[GUI_BAR_ITEM_BUFFER_FILTER]);
- /* nicklist count */
+ /* buffer nicklist count */
gui_bar_item_new (NULL,
- gui_bar_item_names[GUI_BAR_ITEM_NICKLIST_COUNT],
- &gui_bar_item_default_nicklist_count, NULL);
+ gui_bar_item_names[GUI_BAR_ITEM_BUFFER_NICKLIST_COUNT],
+ &gui_bar_item_default_buffer_nicklist_count, NULL);
gui_bar_item_hook ("buffer_switch",
- gui_bar_item_names[GUI_BAR_ITEM_NICKLIST_COUNT]);
+ gui_bar_item_names[GUI_BAR_ITEM_BUFFER_NICKLIST_COUNT]);
gui_bar_item_hook ("nicklist_changed",
- gui_bar_item_names[GUI_BAR_ITEM_NICKLIST_COUNT]);
+ gui_bar_item_names[GUI_BAR_ITEM_BUFFER_NICKLIST_COUNT]);
/* scroll indicator */
gui_bar_item_new (NULL,
@@ -1188,6 +1286,13 @@ gui_bar_item_init ()
&gui_bar_item_default_buffer_title, NULL);
gui_bar_item_hook ("buffer_title_changed",
gui_bar_item_names[GUI_BAR_ITEM_BUFFER_TITLE]);
+
+ /* buffer nicklist */
+ gui_bar_item_new (NULL,
+ gui_bar_item_names[GUI_BAR_ITEM_BUFFER_NICKLIST],
+ &gui_bar_item_default_buffer_nicklist, NULL);
+ gui_bar_item_hook ("nicklist_changed",
+ gui_bar_item_names[GUI_BAR_ITEM_BUFFER_NICKLIST]);
}
/*
diff --git a/src/gui/gui-bar-item.h b/src/gui/gui-bar-item.h
index 7d225c217..e522921c4 100644
--- a/src/gui/gui-bar-item.h
+++ b/src/gui/gui-bar-item.h
@@ -29,11 +29,12 @@ enum t_gui_bar_item_weechat
GUI_BAR_ITEM_BUFFER_PLUGIN,
GUI_BAR_ITEM_BUFFER_NAME,
GUI_BAR_ITEM_BUFFER_FILTER,
- GUI_BAR_ITEM_NICKLIST_COUNT,
+ GUI_BAR_ITEM_BUFFER_NICKLIST_COUNT,
GUI_BAR_ITEM_SCROLL,
GUI_BAR_ITEM_HOTLIST,
GUI_BAR_ITEM_COMPLETION,
GUI_BAR_ITEM_BUFFER_TITLE,
+ GUI_BAR_ITEM_BUFFER_NICKLIST,
/* number of bar items */
GUI_BAR_NUM_ITEMS,
};
diff --git a/src/gui/gui-bar.c b/src/gui/gui-bar.c
index 09358c5d4..e513b6967 100644
--- a/src/gui/gui-bar.c
+++ b/src/gui/gui-bar.c
@@ -300,6 +300,16 @@ gui_bar_search_with_option_name (const char *option_name)
}
/*
+ * gui_bar_ask_refresh: ask refresh for bar
+ */
+
+void
+gui_bar_ask_refresh (struct t_gui_bar *bar)
+{
+ bar->bar_refresh_needed = 1;
+}
+
+/*
* gui_bar_refresh: ask for bar refresh on screen (for all windows where bar is)
*/
@@ -1173,6 +1183,7 @@ gui_bar_alloc (const char *name)
new_bar->items_count = 0;
new_bar->items_array = NULL;
new_bar->bar_window = NULL;
+ new_bar->bar_refresh_needed = 0;
new_bar->prev_bar = NULL;
new_bar->next_bar = NULL;
}
@@ -1244,6 +1255,7 @@ gui_bar_new_with_options (struct t_weechat_plugin *plugin, const char *name,
new_bar->items_array = NULL;
}
new_bar->bar_window = NULL;
+ new_bar->bar_refresh_needed = 1;
/* add bar to bars list */
gui_bar_insert (new_bar);
@@ -1570,7 +1582,7 @@ gui_bar_create_default ()
/* search an input_text item */
if (!gui_bar_item_used_in_a_bar (gui_bar_item_names[GUI_BAR_ITEM_INPUT_TEXT], 1))
{
- ptr_bar = gui_bar_search ("input");
+ ptr_bar = gui_bar_search (GUI_BAR_DEFAULT_NAME_INPUT);
if (ptr_bar)
{
/* add item "input_text" to input bar */
@@ -1587,6 +1599,8 @@ gui_bar_create_default ()
CONFIG_STRING(ptr_bar->items) : "",
gui_bar_item_names[GUI_BAR_ITEM_INPUT_TEXT]);
config_file_option_set (ptr_bar->items, buf, 1);
+ gui_chat_printf (NULL, _("Bar \"%s\" updated"),
+ GUI_BAR_DEFAULT_NAME_INPUT);
gui_bar_draw (ptr_bar);
free (buf);
}
@@ -1605,15 +1619,23 @@ gui_bar_create_default ()
snprintf (buf, length, "[%s],%s",
gui_bar_item_names[GUI_BAR_ITEM_INPUT_PROMPT],
gui_bar_item_names[GUI_BAR_ITEM_INPUT_TEXT]);
- if (gui_bar_new (NULL, "input", "0", "999", "window", "",
- "bottom", "horizontal", "1", "0",
+ if (gui_bar_new (NULL, GUI_BAR_DEFAULT_NAME_INPUT,
+ "0", /* hidden */
+ "1000", /* priority */
+ "window", /* type */
+ "", /* conditions */
+ "bottom", /* position */
+ "horizontal", /* filling */
+ "1", /* size */
+ "0", /* size_max */
gui_color_get_name (CONFIG_COLOR(config_color_input)),
gui_color_get_name (CONFIG_COLOR(config_color_input_delimiters)),
gui_color_get_name (CONFIG_COLOR(config_color_input_bg)),
- "0", buf))
+ "0", /* separators */
+ buf)) /* items */
{
gui_chat_printf (NULL, _("Bar \"%s\" created"),
- "input");
+ GUI_BAR_DEFAULT_NAME_INPUT);
}
free (buf);
}
@@ -1621,7 +1643,7 @@ gui_bar_create_default ()
}
/* search status bar */
- ptr_bar = gui_bar_search ("status");
+ ptr_bar = gui_bar_search (GUI_BAR_DEFAULT_NAME_STATUS);
if (!ptr_bar)
{
/* create status bar */
@@ -1633,7 +1655,7 @@ gui_bar_create_default ()
+ strlen (gui_bar_item_names[GUI_BAR_ITEM_BUFFER_FILTER])
+ strlen (gui_bar_item_names[GUI_BAR_ITEM_COMPLETION])
+ strlen (gui_bar_item_names[GUI_BAR_ITEM_SCROLL])
- + strlen (gui_bar_item_names[GUI_BAR_ITEM_NICKLIST_COUNT])
+ + strlen (gui_bar_item_names[GUI_BAR_ITEM_BUFFER_NICKLIST_COUNT])
+ (9 * 4) + 1;
buf = malloc (length);
if (buf)
@@ -1643,39 +1665,80 @@ gui_bar_create_default ()
gui_bar_item_names[GUI_BAR_ITEM_BUFFER_COUNT],
gui_bar_item_names[GUI_BAR_ITEM_BUFFER_PLUGIN],
gui_bar_item_names[GUI_BAR_ITEM_BUFFER_NAME],
- gui_bar_item_names[GUI_BAR_ITEM_NICKLIST_COUNT],
+ gui_bar_item_names[GUI_BAR_ITEM_BUFFER_NICKLIST_COUNT],
gui_bar_item_names[GUI_BAR_ITEM_HOTLIST],
gui_bar_item_names[GUI_BAR_ITEM_BUFFER_FILTER],
gui_bar_item_names[GUI_BAR_ITEM_COMPLETION],
gui_bar_item_names[GUI_BAR_ITEM_SCROLL]);
- if (gui_bar_new (NULL, "status", "0", "0", "window", "",
- "bottom", "horizontal", "1", "0",
+ if (gui_bar_new (NULL, GUI_BAR_DEFAULT_NAME_STATUS,
+ "0", /* hidden */
+ "500", /* priority */
+ "window", /* type */
+ "", /* conditions */
+ "bottom", /* position */
+ "horizontal", /* filling */
+ "1", /* size */
+ "0", /* size_max */
gui_color_get_name (CONFIG_COLOR(config_color_status)),
gui_color_get_name (CONFIG_COLOR(config_color_status_delimiters)),
gui_color_get_name (CONFIG_COLOR(config_color_status_bg)),
- "0", buf))
+ "0", /* separators */
+ buf)) /* items */
{
gui_chat_printf (NULL, _("Bar \"%s\" created"),
- "status");
+ GUI_BAR_DEFAULT_NAME_STATUS);
}
free (buf);
}
}
/* search title bar */
- ptr_bar = gui_bar_search ("title");
+ ptr_bar = gui_bar_search (GUI_BAR_DEFAULT_NAME_TITLE);
if (!ptr_bar)
{
/* create title bar */
- if (gui_bar_new (NULL, "title", "0", "0", "window", "",
- "top", "horizontal", "1", "0",
+ if (gui_bar_new (NULL, GUI_BAR_DEFAULT_NAME_TITLE,
+ "0", /* hidden */
+ "500", /* priority */
+ "window", /* type */
+ "", /* conditions */
+ "top", /* position */
+ "horizontal", /* filling */
+ "1", /* size */
+ "0", /* size_max */
gui_color_get_name (CONFIG_COLOR(config_color_title)),
gui_color_get_name (CONFIG_COLOR(config_color_title)),
gui_color_get_name (CONFIG_COLOR(config_color_title_bg)),
- "0", gui_bar_item_names[GUI_BAR_ITEM_BUFFER_TITLE]))
+ "0", /* separators */
+ gui_bar_item_names[GUI_BAR_ITEM_BUFFER_TITLE])) /* items */
{
gui_chat_printf (NULL, _("Bar \"%s\" created"),
- "title");
+ GUI_BAR_DEFAULT_NAME_TITLE);
+ }
+ }
+
+ /* search nicklist bar */
+ ptr_bar = gui_bar_search (GUI_BAR_DEFAULT_NAME_NICKLIST);
+ if (!ptr_bar)
+ {
+ /* create nicklist bar */
+ if (gui_bar_new (NULL, GUI_BAR_DEFAULT_NAME_NICKLIST,
+ "0", /* hidden */
+ "200", /* priority */
+ "window", /* type */
+ "nicklist", /* conditions */
+ "right", /* position */
+ "vertical", /* filling */
+ "0", /* size */
+ "0", /* size_max */
+ gui_color_get_name (CONFIG_COLOR(config_color_nicklist)),
+ gui_color_get_name (CONFIG_COLOR(config_color_nicklist)),
+ gui_color_get_name (CONFIG_COLOR(config_color_nicklist_bg)),
+ "1", /* separators */
+ gui_bar_item_names[GUI_BAR_ITEM_BUFFER_NICKLIST])) /* items */
+ {
+ gui_chat_printf (NULL, _("Bar \"%s\" created"),
+ GUI_BAR_DEFAULT_NAME_NICKLIST);
}
}
}
@@ -1692,7 +1755,7 @@ gui_bar_update (const char *name)
for (ptr_bar = gui_bars; ptr_bar; ptr_bar = ptr_bar->next_bar)
{
if (!CONFIG_BOOLEAN(ptr_bar->hidden) && (strcmp (ptr_bar->name, name) == 0))
- gui_bar_draw (ptr_bar);
+ gui_bar_ask_refresh (ptr_bar);
}
}
diff --git a/src/gui/gui-bar.h b/src/gui/gui-bar.h
index 57579fc76..7b686bb05 100644
--- a/src/gui/gui-bar.h
+++ b/src/gui/gui-bar.h
@@ -22,6 +22,12 @@
struct t_weechat_plugin;
struct t_gui_window;
+struct t_gui_buffer;
+
+#define GUI_BAR_DEFAULT_NAME_INPUT "input"
+#define GUI_BAR_DEFAULT_NAME_STATUS "status"
+#define GUI_BAR_DEFAULT_NAME_TITLE "title"
+#define GUI_BAR_DEFAULT_NAME_NICKLIST "nicklist"
enum t_gui_bar_option
{
@@ -94,6 +100,7 @@ struct t_gui_bar
char **items_array; /* exploded bar items */
struct t_gui_bar_window *bar_window; /* pointer to bar window */
/* (for type root only) */
+ int bar_refresh_needed; /* refresh for bar is needed? */
struct t_gui_bar *prev_bar; /* link to previous bar */
struct t_gui_bar *next_bar; /* link to next bar */
};
@@ -118,6 +125,7 @@ extern int gui_bar_check_conditions_for_window (struct t_gui_bar *bar,
extern int gui_bar_root_get_size (struct t_gui_bar *bar,
enum t_gui_bar_position position);
extern struct t_gui_bar *gui_bar_search (const char *name);
+extern void gui_bar_ask_refresh (struct t_gui_bar *bar);
extern int gui_bar_set (struct t_gui_bar *bar, const char *property, const char *value);
extern void gui_bar_create_option_temp (struct t_gui_bar *temp_bar,
int index_option, const char *value);
@@ -151,6 +159,8 @@ extern void gui_bar_window_set_current_size (struct t_gui_bar *bar, int size);
extern int gui_bar_window_get_size (struct t_gui_bar *bar,
struct t_gui_window *window,
enum t_gui_bar_position position);
+extern int gui_bar_get_min_width (struct t_gui_bar *bar);
+extern int gui_bar_get_min_height (struct t_gui_bar *bar);
extern int gui_bar_check_size_add (struct t_gui_bar *bar, int add_size);
extern int gui_bar_window_new (struct t_gui_bar *bar,
struct t_gui_window *window);
@@ -158,6 +168,8 @@ extern void gui_bar_window_free (struct t_gui_bar_window *bar_window,
struct t_gui_window *window);
extern void gui_bar_free_bar_windows (struct t_gui_bar *bar);
extern void gui_bar_draw (struct t_gui_bar *bar);
+extern int gui_bar_scroll (struct t_gui_bar *bar, struct t_gui_buffer *buffer,
+ const char *scroll);
extern void gui_bar_window_print_log (struct t_gui_bar_window *bar_window);
#endif /* gui-bar.h */
diff --git a/src/gui/gui-color.c b/src/gui/gui-color.c
index 920771bd7..6b5db98f2 100644
--- a/src/gui/gui-color.c
+++ b/src/gui/gui-color.c
@@ -114,7 +114,10 @@ gui_color_get_custom (const char *color_name)
/* attribute or other color name (GUI dependent) */
index_color = (index_color + 1) % 20;
color[index_color][0] = '\0';
-
+
+ if (!color_name || !color_name[0])
+ return color[index_color];
+
if (string_strcasecmp (color_name, "reset") == 0)
{
snprintf (color[index_color], sizeof (color[index_color]),
diff --git a/src/gui/gui-color.h b/src/gui/gui-color.h
index 41937d083..bc7464f45 100644
--- a/src/gui/gui-color.h
+++ b/src/gui/gui-color.h
@@ -27,7 +27,6 @@ enum t_gui_color_enum
GUI_COLOR_SEPARATOR = 0,
GUI_COLOR_TITLE,
- GUI_COLOR_TITLE_MORE,
GUI_COLOR_CHAT,
GUI_COLOR_CHAT_TIME,
diff --git a/src/gui/gui-nicklist.c b/src/gui/gui-nicklist.c
index aacafd96a..179b906f1 100644
--- a/src/gui/gui-nicklist.c
+++ b/src/gui/gui-nicklist.c
@@ -164,7 +164,6 @@ gui_nicklist_add_group (struct t_gui_buffer *buffer,
const char *color, int visible)
{
struct t_gui_nick_group *new_group;
- int num_color;
if (!name || gui_nicklist_search_group (buffer, parent_group, name))
return NULL;
@@ -172,18 +171,9 @@ gui_nicklist_add_group (struct t_gui_buffer *buffer,
new_group = malloc (sizeof (*new_group));
if (!new_group)
return NULL;
-
- if (color)
- {
- num_color = gui_color_search_config_int (color);
- if (num_color < 0)
- num_color = GUI_COLOR_NICKLIST;
- }
- else
- num_color = GUI_COLOR_NICKLIST;
new_group->name = strdup (name);
- new_group->color = num_color;
+ new_group->color = (color) ? strdup (color) : NULL;
new_group->visible = visible;
new_group->parent = (parent_group) ? parent_group : buffer->nicklist_root;
new_group->level = (new_group->parent) ? new_group->parent->level + 1 : 0;
@@ -313,7 +303,6 @@ gui_nicklist_add_nick (struct t_gui_buffer *buffer,
int visible)
{
struct t_gui_nick *new_nick;
- int num_color, num_color_prefix;
if (!name || gui_nicklist_search_nick (buffer, NULL, name))
return NULL;
@@ -321,30 +310,12 @@ gui_nicklist_add_nick (struct t_gui_buffer *buffer,
new_nick = malloc (sizeof (*new_nick));
if (!new_nick)
return NULL;
-
- if (color)
- {
- num_color = gui_color_search_config_int (color);
- if (num_color < 0)
- num_color = GUI_COLOR_NICKLIST;
- }
- else
- num_color = GUI_COLOR_NICKLIST;
-
- if (prefix_color)
- {
- num_color_prefix = gui_color_search_config_int (prefix_color);
- if (num_color_prefix < 0)
- num_color_prefix = GUI_COLOR_NICKLIST;
- }
- else
- num_color_prefix = GUI_COLOR_NICKLIST;
-
+
new_nick->group = (group) ? group : buffer->nicklist_root;
new_nick->name = strdup (name);
- new_nick->color = num_color;
+ new_nick->color = (color) ? strdup (color) : NULL;
new_nick->prefix = prefix;
- new_nick->prefix_color = num_color_prefix;
+ new_nick->prefix_color = (prefix_color) ? strdup (prefix_color) : NULL;
new_nick->visible = visible;
gui_nicklist_insert_nick_sorted (new_nick->group, new_nick);
@@ -385,6 +356,10 @@ gui_nicklist_remove_nick (struct t_gui_buffer *buffer,
/* free data */
if (nick->name)
free (nick->name);
+ if (nick->color)
+ free (nick->color);
+ if (nick->prefix_color)
+ free (nick->prefix_color);
if (nick->visible)
{
@@ -442,6 +417,8 @@ gui_nicklist_remove_group (struct t_gui_buffer *buffer,
/* free data */
if (group->name)
free (group->name);
+ if (group->color)
+ free (group->color);
if (group->visible)
{
@@ -652,7 +629,7 @@ gui_nicklist_print_log (struct t_gui_nick_group *group, int indent)
(indent * 2) + 6);
log_printf (format, " ", group->name);
snprintf (format, sizeof (format),
- "%%-%dscolor . . . : %%d",
+ "%%-%dscolor . . . : '%%s'",
(indent * 2) + 6);
log_printf (format, " ", group->color);
snprintf (format, sizeof (format),
@@ -707,35 +684,35 @@ gui_nicklist_print_log (struct t_gui_nick_group *group, int indent)
(indent * 2) + 4);
log_printf (format, " ", ptr_nick);
snprintf (format, sizeof (format),
- "%%-%dsgroup . . . : 0x%%X",
+ "%%-%dsgroup . . . . . : 0x%%X",
(indent * 2) + 6);
log_printf (format, " ", ptr_nick->group);
snprintf (format, sizeof (format),
- "%%-%dsname. . . . : '%%s'",
+ "%%-%dsname. . . . . . : '%%s'",
(indent * 2) + 6);
log_printf (format, " ", ptr_nick->name);
snprintf (format, sizeof (format),
- "%%-%dscolor . . . : %%d",
+ "%%-%dscolor . . . . . : '%%s'",
(indent * 2) + 6);
log_printf (format, " ", ptr_nick->color);
snprintf (format, sizeof (format),
- "%%-%dsprefix. . . : '%%c'",
+ "%%-%dsprefix. . . . . : '%%c'",
(indent * 2) + 6);
log_printf (format, " ", ptr_nick->prefix);
snprintf (format, sizeof (format),
- "%%-%dsprefix_color: %%d",
+ "%%-%dsprefix_color. . : '%%s'",
(indent * 2) + 6);
log_printf (format, " ", ptr_nick->prefix_color);
snprintf (format, sizeof (format),
- "%%-%dsvisible . . : %%d",
+ "%%-%dsvisible . . . . : %%d",
(indent * 2) + 6);
log_printf (format, " ", ptr_nick->visible);
snprintf (format, sizeof (format),
- "%%-%dsprev_nick . : 0x%%X",
+ "%%-%dsprev_nick . . . : 0x%%X",
(indent * 2) + 6);
log_printf (format, " ", ptr_nick->prev_nick);
snprintf (format, sizeof (format),
- "%%-%dsnext_nick . : 0x%%X",
+ "%%-%dsnext_nick . . . : 0x%%X",
(indent * 2) + 6);
log_printf (format, " ", ptr_nick->next_nick);
}
diff --git a/src/gui/gui-nicklist.h b/src/gui/gui-nicklist.h
index cf031675b..4ca8f7a70 100644
--- a/src/gui/gui-nicklist.h
+++ b/src/gui/gui-nicklist.h
@@ -25,7 +25,7 @@ struct t_gui_buffer;
struct t_gui_nick_group
{
char *name; /* group name */
- int color; /* color for group in nicklist */
+ char *color; /* color for group in nicklist */
int visible; /* 1 if group is displayed */
int level; /* group level (root is 0) */
struct t_gui_nick_group *parent; /* parent */
@@ -41,9 +41,9 @@ struct t_gui_nick
{
struct t_gui_nick_group *group; /* group which contains nick */
char *name; /* nick name */
- int color; /* color for nick in nicklist */
+ char *color; /* color for nick in nicklist */
char prefix; /* prefix for nick (for admins, ..) */
- int prefix_color; /* color for prefix */
+ char *prefix_color; /* color for prefix */
int visible; /* 1 if nick is displayed */
struct t_gui_nick *prev_nick; /* link to previous nick */
struct t_gui_nick *next_nick; /* link to next nick */