Added SILC Thread Queue API
[crypto.git] / apps / irssi / src / fe-text / statusbar.h
index 32d35b8238687a9f658349d55eb6b63ebf3491b6..148fd02e5a2e4100f92ea00a5fb01b5056190e6e 100644 (file)
 
 #include "mainwindows.h"
 
-#define SBAR_PRIORITY_HIGH     100
-#define SBAR_PRIORITY_NORMAL   0
-#define SBAR_PRIORITY_LOW      -100
-
-enum {
-       STATUSBAR_POS_UP,
-       STATUSBAR_POS_MIDDLE,
-       STATUSBAR_POS_DOWN
-};
+#define STATUSBAR_PRIORITY_HIGH                100
+#define STATUSBAR_PRIORITY_NORMAL      0
+#define STATUSBAR_PRIORITY_LOW         -100
 
 typedef struct SBAR_ITEM_REC SBAR_ITEM_REC;
 typedef void (*STATUSBAR_FUNC) (SBAR_ITEM_REC *item, int get_size_only);
 
+/* type */
+#define STATUSBAR_TYPE_ROOT    1
+#define STATUSBAR_TYPE_WINDOW  2
+
+/* placement */
+#define STATUSBAR_TOP          1
+#define STATUSBAR_BOTTOM       2
+
+/* visible */
+#define STATUSBAR_VISIBLE_ALWAYS        1
+#define STATUSBAR_VISIBLE_ACTIVE        2
+#define STATUSBAR_VISIBLE_INACTIVE      3
+
 typedef struct {
-       MAIN_WINDOW_REC *window;
+       char *name;
+        GSList *config_bars;
+       GSList *bars;
+} STATUSBAR_GROUP_REC;
 
-       int pos;
-       int line;
+typedef struct {
+       char *name;
 
-        char *color_string;
-        int color;
+       int type; /* root/window */
+       int placement; /* top/bottom */
+       int position; /* the higher the number, the lower it is in screen */
+       int visible; /* active/inactive/always */
 
-       int ypos; /* real position in screen at the moment */
        GSList *items;
+} STATUSBAR_CONFIG_REC;
+
+typedef struct {
+       STATUSBAR_GROUP_REC *group;
+       STATUSBAR_CONFIG_REC *config;
+
+       MAIN_WINDOW_REC *parent_window; /* if config->type == STATUSBAR_TYPE_WINDOW */
+        GSList *items;
+
+       char *color; /* background color */
+       int real_ypos; /* real Y-position in screen at the moment */
+
+       unsigned int dirty:1;
+        int dirty_xpos; /* -1 = only redraw some items, >= 0 = redraw all items after from xpos */
 } STATUSBAR_REC;
 
+typedef struct {
+       char *name;
+       char *value; /* if non-NULL, overrides the default */
+
+       int priority;
+       unsigned int right_alignment:1;
+} SBAR_ITEM_CONFIG_REC;
+
 struct SBAR_ITEM_REC {
        STATUSBAR_REC *bar;
-       STATUSBAR_FUNC func;
+       SBAR_ITEM_CONFIG_REC *config;
+        STATUSBAR_FUNC func;
 
        /* what item wants */
-        int priority;
        int min_size, max_size;
-       unsigned int right_justify:1;
 
        /* what item gets */
-        int xpos, size;
+       int xpos, size;
+
+        int current_size; /* item size currently in screen */
+       unsigned int dirty:1;
 };
 
-/* ypos is used only when pos == STATUSBAR_POS_MIDDLE */
-STATUSBAR_REC *statusbar_create(int pos, int ypos);
-void statusbar_destroy(STATUSBAR_REC *bar);
+extern GSList *statusbar_groups;
+extern STATUSBAR_GROUP_REC *active_statusbar_group;
+
+void statusbar_item_register(const char *name, const char *value,
+                            STATUSBAR_FUNC func);
+void statusbar_item_unregister(const char *name);
 
-STATUSBAR_REC *statusbar_find(int pos, int line);
+STATUSBAR_GROUP_REC *statusbar_group_create(const char *name);
+void statusbar_group_destroy(STATUSBAR_GROUP_REC *rec);
+STATUSBAR_GROUP_REC *statusbar_group_find(const char *name);
+
+STATUSBAR_REC *statusbar_create(STATUSBAR_GROUP_REC *group,
+                                STATUSBAR_CONFIG_REC *config,
+                                MAIN_WINDOW_REC *parent_window);
+void statusbar_destroy(STATUSBAR_REC *bar);
+STATUSBAR_REC *statusbar_find(STATUSBAR_GROUP_REC *group, const char *name,
+                             MAIN_WINDOW_REC *window);
 
 SBAR_ITEM_REC *statusbar_item_create(STATUSBAR_REC *bar,
-                                    int priority, int right_justify,
-                                    STATUSBAR_FUNC func);
-void statusbar_item_remove(SBAR_ITEM_REC *item);
+                                    SBAR_ITEM_CONFIG_REC *config);
+void statusbar_item_destroy(SBAR_ITEM_REC *item);
+
+void statusbar_item_default_handler(SBAR_ITEM_REC *item, int get_size_only,
+                                   const char *str, const char *data,
+                                   int escape_vars);
 
 /* redraw statusbar, NULL = all */
-void statusbar_redraw(STATUSBAR_REC *bar);
+void statusbar_redraw(STATUSBAR_REC *bar, int force);
 void statusbar_item_redraw(SBAR_ITEM_REC *item);
+void statusbar_items_redraw(const char *name);
+
+void statusbar_recreate_items(STATUSBAR_REC *bar);
+void statusbars_recreate_items(void);
+void statusbars_create_window_bars(void);
+
+void statusbar_redraw_dirty(void);
 
 void statusbar_init(void);
 void statusbar_deinit(void);