164 lines
7.0 KiB
C
164 lines
7.0 KiB
C
/*
|
|
* Copyright (C) 2003-2020 Sébastien Helleu <flashcode@flashtux.org>
|
|
*
|
|
* This file is part of WeeChat, the extensible chat client.
|
|
*
|
|
* WeeChat is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* WeeChat is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with WeeChat. If not, see <https://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef WEECHAT_GUI_BAR_H
|
|
#define WEECHAT_GUI_BAR_H
|
|
|
|
struct t_infolist;
|
|
struct t_weechat_plugin;
|
|
struct t_gui_window;
|
|
|
|
#define GUI_BAR_DEFAULT_NAME_INPUT "input"
|
|
#define GUI_BAR_DEFAULT_NAME_TITLE "title"
|
|
#define GUI_BAR_DEFAULT_NAME_STATUS "status"
|
|
#define GUI_BAR_DEFAULT_NAME_NICKLIST "nicklist"
|
|
|
|
enum t_gui_bar_option
|
|
{
|
|
GUI_BAR_OPTION_HIDDEN = 0, /* true if bar is hidden */
|
|
GUI_BAR_OPTION_PRIORITY, /* bar priority */
|
|
GUI_BAR_OPTION_TYPE, /* type (root or window) */
|
|
GUI_BAR_OPTION_CONDITIONS, /* condition(s) for display */
|
|
GUI_BAR_OPTION_POSITION, /* bottom, top, left, right */
|
|
GUI_BAR_OPTION_FILLING_TOP_BOTTOM, /* filling when pos. is top/bottom */
|
|
GUI_BAR_OPTION_FILLING_LEFT_RIGHT, /* filling when pos. is left/right */
|
|
GUI_BAR_OPTION_SIZE, /* size of bar (in chars, 0 = auto) */
|
|
GUI_BAR_OPTION_SIZE_MAX, /* max size of bar (0 = no limit) */
|
|
GUI_BAR_OPTION_COLOR_FG, /* default text color for bar */
|
|
GUI_BAR_OPTION_COLOR_DELIM, /* default delimiter color for bar */
|
|
GUI_BAR_OPTION_COLOR_BG, /* default background color for bar */
|
|
GUI_BAR_OPTION_SEPARATOR, /* true if separator line displayed */
|
|
GUI_BAR_OPTION_ITEMS, /* bar items */
|
|
/* number of bar options */
|
|
GUI_BAR_NUM_OPTIONS,
|
|
};
|
|
|
|
enum t_gui_bar_type
|
|
{
|
|
GUI_BAR_TYPE_ROOT = 0,
|
|
GUI_BAR_TYPE_WINDOW,
|
|
/* number of bar types */
|
|
GUI_BAR_NUM_TYPES,
|
|
};
|
|
|
|
enum t_gui_bar_position
|
|
{
|
|
GUI_BAR_POSITION_BOTTOM = 0,
|
|
GUI_BAR_POSITION_TOP,
|
|
GUI_BAR_POSITION_LEFT,
|
|
GUI_BAR_POSITION_RIGHT,
|
|
/* number of bar positions */
|
|
GUI_BAR_NUM_POSITIONS,
|
|
};
|
|
|
|
enum t_gui_bar_filling
|
|
{
|
|
GUI_BAR_FILLING_HORIZONTAL = 0,
|
|
GUI_BAR_FILLING_VERTICAL,
|
|
GUI_BAR_FILLING_COLUMNS_HORIZONTAL,
|
|
GUI_BAR_FILLING_COLUMNS_VERTICAL,
|
|
/* number of bar positions */
|
|
GUI_BAR_NUM_FILLING,
|
|
};
|
|
|
|
struct t_gui_bar
|
|
{
|
|
/* user choices */
|
|
char *name; /* bar name */
|
|
struct t_config_option *options[GUI_BAR_NUM_OPTIONS];
|
|
|
|
/* internal vars */
|
|
int items_count; /* number of bar items */
|
|
int *items_subcount; /* number of sub items */
|
|
char ***items_array; /* bar items (after split) */
|
|
char ***items_buffer; /* buffer name for each (sub)item */
|
|
char ***items_prefix; /* prefix for each (sub)item */
|
|
char ***items_name; /* name for each (sub)item */
|
|
char ***items_suffix; /* suffix for each (sub)item */
|
|
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 */
|
|
};
|
|
|
|
/* variables */
|
|
|
|
extern char *gui_bar_option_string[];
|
|
extern char *gui_bar_type_string[];
|
|
extern char *gui_bar_position_string[];
|
|
extern char *gui_bar_filling_string[];
|
|
extern struct t_gui_bar *gui_bars;
|
|
extern struct t_gui_bar *last_gui_bar;
|
|
extern struct t_gui_bar *gui_temp_bars;
|
|
extern struct t_gui_bar *last_gui_temp_bar;
|
|
|
|
/* functions */
|
|
|
|
extern int gui_bar_valid (struct t_gui_bar *bar);
|
|
extern int gui_bar_search_option (const char *option_name);
|
|
extern int gui_bar_search_type (const char *type);
|
|
extern int gui_bar_search_position (const char *position);
|
|
extern enum t_gui_bar_filling gui_bar_get_filling (struct t_gui_bar *bar);
|
|
extern int gui_bar_check_conditions (struct t_gui_bar *bar,
|
|
struct t_gui_window *window);
|
|
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 void gui_bar_draw (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);
|
|
extern struct t_gui_bar *gui_bar_alloc (const char *name);
|
|
extern struct t_gui_bar *gui_bar_new (const char *name,
|
|
const char *hidden,
|
|
const char *priority,
|
|
const char *type,
|
|
const char *conditions,
|
|
const char *position,
|
|
const char *filling_top_bottom,
|
|
const char *filling_left_right,
|
|
const char *size,
|
|
const char *size_max,
|
|
const char *color_fg,
|
|
const char *color_delim,
|
|
const char *color_bg,
|
|
const char *separator,
|
|
const char *items);
|
|
extern void gui_bar_use_temp_bars ();
|
|
extern void gui_bar_create_default_input ();
|
|
extern void gui_bar_create_default_title ();
|
|
extern void gui_bar_create_default_status ();
|
|
extern void gui_bar_create_default_nicklist ();
|
|
extern void gui_bar_create_default ();
|
|
extern void gui_bar_update (const char *name);
|
|
extern int gui_bar_scroll (struct t_gui_bar *bar, struct t_gui_window *window,
|
|
const char *scroll);
|
|
extern void gui_bar_free (struct t_gui_bar *bar);
|
|
extern void gui_bar_free_all ();
|
|
extern struct t_hdata *gui_bar_hdata_bar_cb (const void *pointer,
|
|
void *data,
|
|
const char *hdata_name);
|
|
extern int gui_bar_add_to_infolist (struct t_infolist *infolist,
|
|
struct t_gui_bar *bar);
|
|
extern void gui_bar_print_log ();
|
|
|
|
#endif /* WEECHAT_GUI_BAR_H */
|