1 /* -*- c-basic-offset:2; tab-width:2; indent-tabs-mode:nil -*- */
2 
3 #ifndef __UI_SCROLLBAR_H__
4 #define __UI_SCROLLBAR_H__
5 
6 #include <pobl/bl_types.h> /* u_int */
7 #include <vt_term.h>
8 
9 #include "ui_window.h"
10 #include "ui_sb_view.h"
11 #include "ui_sb_mode.h"
12 #include "ui_color_manager.h"
13 #include "ui_picture.h"
14 
15 typedef struct ui_scrollbar_event_listener {
16   void *self;
17   void (*screen_scroll_to)(void *, int);
18   void (*screen_scroll_upward)(void *, u_int);
19   void (*screen_scroll_downward)(void *, u_int);
20   int (*screen_is_static)(void *);
21 
22 } ui_scrollbar_event_listener_t;
23 
24 typedef struct ui_scrollbar {
25   ui_window_t window;
26 
27   char *view_name;
28   ui_sb_view_t *view;
29 
30   char *fg_color;
31   char *bg_color;
32   ui_color_t fg_xcolor;
33   ui_color_t bg_xcolor;
34 
35   ui_scrollbar_event_listener_t *sb_listener;
36 
37   u_int bar_height;    /* Scrollbar height */
38   u_int top_margin;    /* Button area */
39   u_int bottom_margin; /* Button area */
40   u_int line_height;
41   u_int num_scr_lines;
42   u_int num_log_lines;
43   u_int num_filled_log_lines;
44   int bar_top_y; /* Scrollbar position without button area */
45   int y_on_bar;  /* Used in button_motion event handler */
46   int current_row;
47   int redraw_y;
48   u_int redraw_height;
49 
50   int up_button_y;
51   u_int up_button_height;
52   int down_button_y;
53   u_int down_button_height;
54   int8_t is_pressing_up_button;
55   int8_t is_pressing_down_button;
56 
57   int8_t is_motion;
58 
59 } ui_scrollbar_t;
60 
61 int ui_scrollbar_init(ui_scrollbar_t *sb, ui_scrollbar_event_listener_t *sb_listener,
62                       char *view_name, char *fg_color, char *bg_color, u_int height,
63                       u_int line_height, u_int num_log_lines, u_int num_filled_log_lines,
64                       int use_transbg, ui_picture_modifier_t *pic_mod);
65 
66 void ui_scrollbar_final(ui_scrollbar_t *sb);
67 
68 void ui_scrollbar_set_num_log_lines(ui_scrollbar_t *sb, u_int num_log_lines);
69 
70 void ui_scrollbar_set_num_filled_log_lines(ui_scrollbar_t *sb, u_int num_filled_log_lines);
71 
72 int ui_scrollbar_line_is_added(ui_scrollbar_t *sb);
73 
74 void ui_scrollbar_reset(ui_scrollbar_t *sb);
75 
76 int ui_scrollbar_move_upward(ui_scrollbar_t *sb, u_int size);
77 
78 int ui_scrollbar_move_downward(ui_scrollbar_t *sb, u_int size);
79 
80 int ui_scrollbar_move(ui_scrollbar_t *sb, int row);
81 
82 int ui_scrollbar_set_line_height(ui_scrollbar_t *sb, u_int line_height);
83 
84 int ui_scrollbar_set_fg_color(ui_scrollbar_t *sb, char *fg_color);
85 
86 int ui_scrollbar_set_bg_color(ui_scrollbar_t *sb, char *bg_color);
87 
88 int ui_scrollbar_change_view(ui_scrollbar_t *sb, char *name);
89 
90 int ui_scrollbar_set_transparent(ui_scrollbar_t *sb, ui_picture_modifier_t *pic_mod, int force);
91 
92 int ui_scrollbar_unset_transparent(ui_scrollbar_t *sb);
93 
94 #endif
95