67c4c87b1cb5d47dddddacc9500c4c8f32b3af48
[silc.git] / apps / irssi / src / perl / textui / TextUI.xs
1 #include "module.h"
2
3 void perl_statusbar_init(void);
4 void perl_statusbar_deinit(void);
5
6 static int initialized = FALSE;
7
8 static void perl_main_window_fill_hash(HV *hv, MAIN_WINDOW_REC *window)
9 {
10         hv_store(hv, "active", 6, plain_bless(window->active, "Irssi::UI::Window"), 0);
11
12         hv_store(hv, "first_line", 10, newSViv(window->first_line), 0);
13         hv_store(hv, "last_line", 9, newSViv(window->last_line), 0);
14         hv_store(hv, "width", 5, newSViv(window->width), 0);
15         hv_store(hv, "height", 6, newSViv(window->height), 0);
16
17         hv_store(hv, "statusbar_lines", 15, newSViv(window->statusbar_lines), 0);
18 }
19
20 static void perl_text_buffer_fill_hash(HV *hv, TEXT_BUFFER_REC *buffer)
21 {
22         hv_store(hv, "first_line", 10, plain_bless(buffer->first_line, "Irssi::TextUI::Line"), 0);
23         hv_store(hv, "lines_count", 11, newSViv(buffer->lines_count), 0);
24         hv_store(hv, "cur_line", 8, plain_bless(buffer->cur_line, "Irssi::TextUI::Line"), 0);
25         hv_store(hv, "last_eol", 8, newSViv(buffer->last_eol), 0);
26 }
27
28 static void perl_text_buffer_view_fill_hash(HV *hv, TEXT_BUFFER_VIEW_REC *view)
29 {
30         hv_store(hv, "buffer", 6, plain_bless(view->buffer, "Irssi::TextUI::TextBuffer"), 0);
31         hv_store(hv, "width", 5, newSViv(view->width), 0);
32         hv_store(hv, "height", 6, newSViv(view->height), 0);
33
34         hv_store(hv, "default_indent", 14, newSViv(view->default_indent), 0);
35         hv_store(hv, "longword_noindent", 17, newSViv(view->longword_noindent), 0);
36         hv_store(hv, "scroll", 6, newSViv(view->scroll), 0);
37
38         hv_store(hv, "ypos", 4, newSViv(view->ypos), 0);
39
40         hv_store(hv, "startline", 9, plain_bless(view->startline, "Irssi::TextUI::Line"), 0);
41         hv_store(hv, "subline", 7, newSViv(view->subline), 0);
42
43         hv_store(hv, "bottom_startline", 16, plain_bless(view->bottom_startline, "Irssi::TextUI::Line"), 0);
44         hv_store(hv, "bottom_subline", 14, newSViv(view->bottom_subline), 0);
45
46         hv_store(hv, "empty_linecount", 15, newSViv(view->empty_linecount), 0);
47         hv_store(hv, "bottom", 6, newSViv(view->bottom), 0);
48 }
49
50 static void perl_line_fill_hash(HV *hv, LINE_REC *line)
51 {
52         hv_store(hv, "info", 4, plain_bless(&line->info, "Irssi::TextUI::LineInfo"), 0);
53 }
54
55 static void perl_line_cache_fill_hash(HV *hv, LINE_CACHE_REC *cache)
56 {
57         hv_store(hv, "last_access", 11, newSViv(cache->last_access), 0);
58         hv_store(hv, "count", 5, newSViv(cache->count), 0);
59         /*LINE_CACHE_SUB_REC lines[1];*/
60 }
61
62 static void perl_line_info_fill_hash(HV *hv, LINE_INFO_REC *info)
63 {
64         hv_store(hv, "level", 5, newSViv(info->level), 0);
65         hv_store(hv, "time", 4, newSViv(info->time), 0);
66 }
67
68 static void perl_statusbar_item_fill_hash(HV *hv, SBAR_ITEM_REC *item)
69 {
70         hv_store(hv, "min_size", 8, newSViv(item->min_size), 0);
71         hv_store(hv, "max_size", 8, newSViv(item->max_size), 0);
72         hv_store(hv, "xpos", 4, newSViv(item->xpos), 0);
73         hv_store(hv, "size", 4, newSViv(item->size), 0);
74         if (item->bar->parent_window != NULL)
75                 hv_store(hv, "window", 6, plain_bless(item->bar->parent_window->active, "Irssi::UI::Window"), 0);
76 }
77
78 static PLAIN_OBJECT_INIT_REC textui_plains[] = {
79         { "Irssi::TextUI::MainWindow", (PERL_OBJECT_FUNC) perl_main_window_fill_hash },
80         { "Irssi::TextUI::TextBuffer", (PERL_OBJECT_FUNC) perl_text_buffer_fill_hash },
81         { "Irssi::TextUI::TextBufferView", (PERL_OBJECT_FUNC) perl_text_buffer_view_fill_hash },
82         { "Irssi::TextUI::Line", (PERL_OBJECT_FUNC) perl_line_fill_hash },
83         { "Irssi::TextUI::LineCache", (PERL_OBJECT_FUNC) perl_line_cache_fill_hash },
84         { "Irssi::TextUI::LineInfo", (PERL_OBJECT_FUNC) perl_line_info_fill_hash },
85         { "Irssi::TextUI::StatusbarItem", (PERL_OBJECT_FUNC) perl_statusbar_item_fill_hash },
86
87         { NULL, NULL }
88 };
89
90 MODULE = Irssi::TextUI  PACKAGE = Irssi::TextUI
91
92 PROTOTYPES: ENABLE
93
94 void
95 init()
96 CODE:
97         if (initialized) return;
98         perl_api_version_check("Irssi::TextUI");
99         initialized = TRUE;
100
101         irssi_add_plains(textui_plains);
102         perl_statusbar_init();
103
104 void
105 deinit()
106 CODE:
107         if (!initialized) return;
108         perl_statusbar_deinit();
109         initialized = FALSE;
110
111 MODULE = Irssi::TextUI PACKAGE = Irssi
112
113 void
114 gui_printtext(xpos, ypos, str)
115         int xpos
116         int ypos
117         char *str
118
119 void
120 gui_input_set(str)
121         char *str
122 CODE:
123         gui_entry_set_text(active_entry, str);
124
125 int
126 gui_input_get_pos()
127 CODE:
128         RETVAL = gui_entry_get_pos(active_entry);
129 OUTPUT:
130         RETVAL
131
132 void
133 gui_input_set_pos(pos)
134         int pos
135 CODE:
136         gui_entry_set_pos(active_entry, pos);
137
138 MODULE = Irssi::TextUI PACKAGE = Irssi::UI::Window
139
140 void
141 print_after(window, prev, level, str)
142         Irssi::UI::Window window
143         Irssi::TextUI::Line prev
144         int level
145         char *str
146 PREINIT:
147         TEXT_DEST_REC dest;
148         char *text;
149         char *text2;
150 CODE:
151         format_create_dest(&dest, NULL, NULL, level, window);
152         text = format_string_expand(str, NULL);
153         text2 = g_strconcat(text, "\n", NULL);
154         gui_printtext_after(&dest, prev, text2);
155         g_free(text);
156         g_free(text2);
157
158 void
159 gui_printtext_after(window, prev, level, str)
160         Irssi::UI::Window window
161         Irssi::TextUI::Line prev
162         int level
163         char *str
164 PREINIT:
165         TEXT_DEST_REC dest;
166 CODE:
167         format_create_dest(&dest, NULL, NULL, level, window);
168         gui_printtext_after(&dest, prev, str);
169
170 Irssi::TextUI::Line
171 last_line_insert(window)
172         Irssi::UI::Window window
173 CODE:
174         RETVAL = WINDOW_GUI(window)->insert_after;
175 OUTPUT:
176         RETVAL
177
178 MODULE = Irssi::TextUI PACKAGE = Irssi::UI::Server
179
180 void
181 gui_printtext_after(server, target, prev, level, str)
182         Irssi::Server server
183         char *target
184         Irssi::TextUI::Line prev
185         int level
186         char *str
187 PREINIT:
188         TEXT_DEST_REC dest;
189 CODE:
190         format_create_dest(&dest, server, target, level, NULL);
191         gui_printtext_after(&dest, prev, str);
192
193 BOOT:
194         irssi_boot(TextUI__Statusbar);
195         irssi_boot(TextUI__TextBuffer);
196         irssi_boot(TextUI__TextBufferView);
197
198 void
199 term_refresh_freeze()
200
201 void
202 term_refresh_thaw()