Change I/O signals to pass a unique window ID
[projects/chimara/chimara.git] / libchimara / window.h
1 #ifndef WINDOW_H
2 #define WINDOW_H
3
4 #include <gtk/gtk.h>
5 #include "chimara-glk-private.h"
6 #include "glk.h"
7 #include "gi_dispa.h"
8 #include "stream.h"
9 #include "input.h"
10 #include "style.h"
11 #include "hyperlink.h"
12 #include "mouse.h"
13 #include "graphics.h"
14
15
16 enum InputRequestType
17 {
18         INPUT_REQUEST_NONE,
19         INPUT_REQUEST_CHARACTER,
20         INPUT_REQUEST_CHARACTER_UNICODE,
21         INPUT_REQUEST_LINE,
22         INPUT_REQUEST_LINE_UNICODE
23 };
24
25 /**
26  * glk_window_struct:
27  *
28  * This is an opaque structure (see <link linkend="chimara-Opaque-Structures">
29  * Opaque Structures</link> and should not be accessed directly.
30  */
31 struct glk_window_struct
32 {
33         /*< private >*/
34         glui32 magic, rock;
35         char *librock; /* "library rock" - unique string identifier */
36         gidispatch_rock_t disprock;
37         /* Pointer to the node in the global tree that contains this window */
38         GNode *window_node;
39         /* Window parameters */
40         glui32 type;
41         /* "widget" is the actual widget with the window's functionality */
42         GtkWidget *widget;
43         /* "frame" is the widget that is the child of the ChimaraGlk container, such 
44         as a scroll window. It may be the same as "widget". */
45         GtkWidget *frame;
46         /* In text buffer windows, the scrolled window and the pager are extra
47         widgets that are neither "widget" nor "frame" */
48         GtkWidget *scrolledwindow;
49         GtkWidget *pager;
50         /* Width and height of the window's size units, in pixels */
51         int unit_width;
52         int unit_height;
53         /* Streams associated with the window */
54         strid_t window_stream;
55         strid_t echo_stream;
56         /* Width and height of the window, in characters (text grids only) */
57         glui32 width;
58         glui32 height;
59         /* Window split data (pair windows only) */
60         winid_t key_window;
61         glui32 split_method;
62         glui32 constraint_size;
63         /* Input request stuff */
64         enum InputRequestType input_request_type;
65         gchar *line_input_buffer;
66         glui32 *line_input_buffer_unicode;
67         glui32 line_input_buffer_max_len;
68         gidispatch_rock_t buffer_rock;
69         gboolean mouse_input_requested;
70         GList *history;
71         GList *history_pos;
72         GSList *extra_line_terminators;
73         GSList *current_extra_line_terminators;
74         /* Line input echoing (text buffers only) */
75         gboolean echo_line_input;
76         gboolean echo_current_line_input;
77         /* Line input field (text grids only) */
78         glui32 input_length;
79         GtkTextChildAnchor *input_anchor;
80         GtkWidget *input_entry;
81         gulong line_input_entry_changed;
82         /* Signal handlers */
83         gulong char_input_keypress_handler;
84         gulong line_input_keypress_handler;
85         gulong insert_text_handler;
86         gulong tag_event_handler;
87         gulong shutdown_keypress_handler;
88         gulong button_press_event_handler;
89         gulong size_allocate_handler;
90         gulong pager_keypress_handler;
91         gulong pager_adjustment_handler;
92         /* Window buffer */
93         GString *buffer;
94         GtkTextTag *zcolor;
95         GtkTextTag *zcolor_reversed;
96         /* Hyperlinks */
97         GHashTable *hyperlinks;
98         struct hyperlink *current_hyperlink;
99         gboolean hyperlink_event_requested;
100         /* Graphics */
101         glui32 background_color;
102         cairo_surface_t *backing_store;
103         /* Pager (textbuffer only) */
104         gboolean currently_paging;
105 };
106
107 #endif