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