add ui_inputbox_set_text
[btb/d2x.git] / include / ui.h
1 /*
2 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
3 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
4 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
5 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
6 IN USING, DISPLAYING,  AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
7 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
8 FREE PURPOSES.  IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
9 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES.  THE END-USER UNDERSTANDS
10 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.  
11 COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
12 */
13
14 #ifndef _UI_H
15 #define _UI_H
16
17 typedef struct {
18         char    description[100];
19         char    * buttontext[17];
20         int     numkeys;
21         short keycode[100];
22         int     function_number[100];
23 } UI_KEYPAD;
24
25 typedef struct
26 {
27         unsigned int frame;
28         int type;
29         int data;
30 } UI_EVENT;
31
32 #define BASE_GADGET             \
33         short           kind;       \
34         struct _gadget  * prev;     \
35         struct _gadget  * next;     \
36         struct _gadget  * when_tab;  \
37         struct _gadget  * when_btab; \
38         struct _gadget  * when_up;    \
39         struct _gadget  * when_down;   \
40         struct _gadget  * when_left;   \
41         struct _gadget  * when_right;  \
42         struct _gadget  * parent;    \
43         int             status;     \
44         int             oldstatus;  \
45         grs_canvas *    canvas;     \
46         int             hotkey;     \
47         short           x1,y1,x2,y2;
48
49
50 typedef struct _gadget {
51         BASE_GADGET
52         unsigned char rsvd[256];
53 } UI_GADGET;
54
55
56 typedef struct  {
57         BASE_GADGET
58         int         trap_key;
59         int      (*user_function)(void);
60 } UI_GADGET_KEYTRAP;
61
62 typedef struct  {
63         BASE_GADGET
64         short           width, height;
65         short           b1_held_down;
66         short           b1_clicked;
67         short           b1_double_clicked;
68         short           b1_dragging;
69         short           b1_drag_x1, b1_drag_y1;
70         short           b1_drag_x2, b1_drag_y2;
71         short           b1_done_dragging;
72         int             keypress;
73         short           mouse_onme;
74         short           mouse_x, mouse_y;
75         grs_bitmap *    bitmap;
76 } UI_GADGET_USERBOX;
77
78 typedef struct  {
79         BASE_GADGET
80         short           width, height;
81         char            * text;
82         short           position;
83         short           oldposition;
84         short           pressed;
85         int              (*user_function)(void);
86         int              (*user_function1)(void);
87         int                              hotkey1;
88         int                              dim_if_no_function;
89 } UI_GADGET_BUTTON;
90
91
92 typedef struct  {
93         BASE_GADGET
94         short           width, height;
95         char            * text;
96         short           length;
97         short           slength;
98         short           position;
99         short           oldposition;
100         short           pressed;
101         short           first_time;
102 } UI_GADGET_INPUTBOX;
103
104 typedef struct  {
105         BASE_GADGET
106         short           width, height;
107         char            * text;
108         short           position;
109         short           oldposition;
110         short           pressed;
111         short           group;
112         short           flag;
113 } UI_GADGET_RADIO;
114
115
116 typedef struct  {
117         BASE_GADGET
118         char                             *text;
119         short               width, height;
120         sbyte           flag;
121         sbyte           pressed;
122         sbyte           position;
123         sbyte           oldposition;
124         int             trap_key;
125         int             (*user_function)(void);
126 } UI_GADGET_ICON;
127
128
129 typedef struct  {
130         BASE_GADGET
131         short           width, height;
132    char            * text;
133         short           position;
134         short           oldposition;
135         short           pressed;
136         short           group;
137         short           flag;
138 } UI_GADGET_CHECKBOX;
139
140
141 typedef struct  {
142         BASE_GADGET
143         short           horz;
144         short           width, height;
145         int             start;
146         int             stop;
147         int             position;
148         int             window_size;
149         int             fake_length;
150         int             fake_position;
151         int             fake_size;
152         UI_GADGET_BUTTON * up_button;
153         UI_GADGET_BUTTON * down_button;
154         unsigned int    last_scrolled;
155         short           drag_x, drag_y;
156         int             drag_starting;
157         int             dragging;
158         int             moved;
159 } UI_GADGET_SCROLLBAR;
160
161 typedef struct  {
162         BASE_GADGET
163         short           width, height;
164         char            **list;
165         int             num_items;
166         int             num_items_displayed;
167         int             first_item;
168         int             old_first_item;
169         int             current_item;
170         int             selected_item;
171         int             old_current_item;
172         unsigned int    last_scrolled;
173         int             dragging;
174         int             textheight;
175         UI_GADGET_SCROLLBAR * scrollbar;
176         int             moved;
177 } UI_GADGET_LISTBOX;
178
179 typedef struct _ui_window {
180         short           x, y;
181         short           width, height;
182         short           text_x, text_y;
183         grs_canvas *    canvas;
184         grs_canvas *    oldcanvas;
185         grs_bitmap *    background;
186         UI_GADGET *     gadget;
187         UI_GADGET *     keyboard_focus_gadget;
188         struct _ui_window * next;
189         struct _ui_window * prev;
190 } UI_WINDOW;
191
192 typedef struct  {
193         short           new_dx, new_dy;
194         short           new_buttons;
195         short           x, y;
196         short           dx, dy;
197         short           hidden;
198         short           backwards;
199         short           b1_status;
200         short           b1_last_status;
201         short           b2_status;
202         short           b2_last_status;
203         short           b3_status;
204         short           b3_last_status;
205         short           bg_x, bg_y;
206         short           bg_saved;
207         grs_bitmap *    background;
208         grs_bitmap *    pointer;
209         unsigned int    time_lastpressed;
210         short           moved;
211 } UI_MOUSE;
212
213 #define BUTTON_PRESSED          1
214 #define BUTTON_RELEASED         2
215 #define BUTTON_JUST_PRESSED     4
216 #define BUTTON_JUST_RELEASED    8
217 #define BUTTON_DOUBLE_CLICKED   16
218
219 #define B1_PRESSED          (Mouse.b1_status & BUTTON_PRESSED)
220 #define B1_RELEASED         (Mouse.b1_status & BUTTON_RELEASED)
221 #define B1_JUST_PRESSED     (Mouse.b1_status & BUTTON_JUST_PRESSED)
222 #define B1_JUST_RELEASED    (Mouse.b1_status & BUTTON_JUST_RELEASED)
223 #define B1_DOUBLE_CLICKED   (Mouse.b1_status & BUTTON_DOUBLE_CLICKED)
224
225 extern grs_font * ui_small_font;
226
227 extern UI_MOUSE Mouse;
228 extern UI_WINDOW * CurWindow;
229 extern UI_WINDOW * FirstWindow;
230 extern UI_WINDOW * LastWindow;
231
232 extern unsigned char CBLACK,CGREY,CWHITE,CBRIGHT,CRED;
233 extern UI_GADGET * selected_gadget;
234 extern int last_keypress;
235
236 extern void Hline(short x1, short x2, short y );
237 extern void Vline(short y1, short y2, short x );
238 extern void ui_string_centered( short x, short y, char * s );
239 extern void ui_draw_box_out( short x1, short y1, short x2, short y2 );
240 extern void ui_draw_box_in( short x1, short y1, short x2, short y2 );
241 extern void ui_draw_line_in( short x1, short y1, short x2, short y2 );
242
243
244 void ui_init();
245 void ui_close();
246 int MessageBox( short x, short y, int NumButtons, char * text, ... );
247 void ui_string_centered( short x, short y, char * s );
248 int PopupMenu( int NumItems, char * text[] );
249
250 extern void ui_mouse_init();
251 extern grs_bitmap * ui_mouse_set_pointer( grs_bitmap * new );
252
253 extern void ui_mouse_process();
254 extern void ui_mouse_hide();
255 extern void ui_mouse_show();
256
257 #define WIN_BORDER 1
258 #define WIN_FILLED 2
259 #define WIN_SAVE_BG 4
260 #define WIN_DIALOG (4+2+1)
261
262 extern UI_WINDOW * ui_open_window( short x, short y, short w, short h, int flags );
263 extern void ui_close_window( UI_WINDOW * wnd );
264
265 extern UI_GADGET * ui_gadget_add( UI_WINDOW * wnd, short kind, short x1, short y1, short x2, short y2 );
266 extern UI_GADGET_BUTTON * ui_add_gadget_button( UI_WINDOW * wnd, short x, short y, short w, short h, char * text, int (*function_to_call)(void) );
267 extern void ui_gadget_delete_all( UI_WINDOW * wnd );
268 extern void ui_window_do_gadgets( UI_WINDOW * wnd );
269 extern void ui_draw_button( UI_GADGET_BUTTON * button );
270
271 extern int ui_mouse_on_gadget( UI_GADGET * gadget );
272
273 extern void ui_button_do( UI_GADGET_BUTTON * button, int keypress );
274
275 extern void ui_listbox_do( UI_GADGET_LISTBOX * listbox, int keypress );
276 extern void ui_draw_listbox( UI_GADGET_LISTBOX * listbox );
277 extern UI_GADGET_LISTBOX *ui_add_gadget_listbox(UI_WINDOW *wnd, short x, short y, short w, short h, short numitems, char **list);
278
279 extern void ui_mega_process();
280
281 extern void ui_get_button_size( char * text, int * width, int * height );
282
283 extern UI_GADGET_SCROLLBAR * ui_add_gadget_scrollbar( UI_WINDOW * wnd, short x, short y, short w, short h, int start, int stop, int position, int window_size  );
284 extern void ui_scrollbar_do( UI_GADGET_SCROLLBAR * scrollbar, int keypress );
285 extern void ui_draw_scrollbar( UI_GADGET_SCROLLBAR * scrollbar );
286
287
288 extern void ui_wprintf( UI_WINDOW * wnd, char * format, ... );
289 extern void ui_wprintf_at( UI_WINDOW * wnd, short x, short y, char * format, ... );
290
291 extern void ui_draw_radio( UI_GADGET_RADIO * radio );
292 extern UI_GADGET_RADIO * ui_add_gadget_radio( UI_WINDOW * wnd, short x, short y, short w, short h, short group, char * text );
293 extern void ui_radio_do( UI_GADGET_RADIO * radio, int keypress );
294
295 extern void ui_draw_checkbox( UI_GADGET_CHECKBOX * checkbox );
296 extern UI_GADGET_CHECKBOX * ui_add_gadget_checkbox( UI_WINDOW * wnd, short x, short y, short w, short h, short group, char * text );
297 extern void ui_checkbox_do( UI_GADGET_CHECKBOX * checkbox, int keypress );
298 extern void ui_checkbox_check(UI_GADGET_CHECKBOX * checkbox, sbyte check);
299
300 extern UI_GADGET * ui_gadget_get_prev( UI_GADGET * gadget );
301 extern UI_GADGET * ui_gadget_get_next( UI_GADGET * gadget );
302 extern void ui_gadget_calc_keys( UI_WINDOW * wnd);
303
304 extern void ui_listbox_change(UI_WINDOW *wnd, UI_GADGET_LISTBOX *listbox, short numitems, char **list);
305
306
307 extern void ui_draw_inputbox( UI_GADGET_INPUTBOX * inputbox );
308 extern UI_GADGET_INPUTBOX * ui_add_gadget_inputbox( UI_WINDOW * wnd, short x, short y, short w, short h, char * text );
309 extern void ui_inputbox_do( UI_GADGET_INPUTBOX * inputbox, int keypress );
310 extern void ui_inputbox_set_text(UI_GADGET_INPUTBOX *inputbox, char *text);
311
312
313 extern void ui_userbox_do( UI_GADGET_USERBOX * userbox, int keypress );
314 extern UI_GADGET_USERBOX * ui_add_gadget_userbox( UI_WINDOW * wnd, short x, short y, short w, short h );
315 extern void ui_draw_userbox( UI_GADGET_USERBOX * userbox );
316
317
318 extern int MenuX( int x, int y, int NumButtons, char * text[] );
319
320 char **file_getdirlist(int *NumFiles, char *dir);
321 char **file_getfilelist(int *NumDirs, char *filespec, char *dir);
322 int ui_get_filename( char * filename, char * Filespec, char * message  );
323
324
325 void * ui_malloc( int size );
326 void ui_free( void * buffer );
327
328 UI_GADGET_KEYTRAP * ui_add_gadget_keytrap( UI_WINDOW * wnd, int key_to_trap, int (*function_to_call)(void)  );
329 void ui_keytrap_do( UI_GADGET_KEYTRAP * keytrap, int keypress );
330
331 void ui_mouse_close();
332
333 #define UI_RECORD_MOUSE     1
334 #define UI_RECORD_KEYS      2
335 #define UI_STATUS_NORMAL    0
336 #define UI_STATUS_RECORDING 1
337 #define UI_STATUS_PLAYING   2
338 #define UI_STATUS_FASTPLAY  3
339
340 int ui_record_events( int NumberOfEvents, UI_EVENT * buffer, int Flags );
341 int ui_play_events_realtime( int NumberOfEvents, UI_EVENT * buffer );
342 int ui_play_events_fast( int NumberOfEvents, UI_EVENT * buffer );
343 int ui_recorder_status();
344 void ui_set_playback_speed( int speed );
345
346 extern unsigned int ui_number_of_events;
347 extern unsigned int ui_event_counter;
348
349
350 int ui_get_file( char * filename, char * Filespec  );
351
352 int MessageBoxN( short xc, short yc, int NumButtons, char * text, char * Button[] );
353
354 void ui_draw_icon( UI_GADGET_ICON * icon );
355 void ui_icon_do( UI_GADGET_ICON * icon, int keypress );
356 UI_GADGET_ICON * ui_add_gadget_icon( UI_WINDOW * wnd, char * text, short x, short y, short w, short h, int k,int (*f)(void) );
357
358 int GetKeyCode(char * text);
359 int DecodeKeyText( char * text );
360 void GetKeyDescription( char * text, int keypress );
361
362 extern void menubar_init(char * filename );
363 extern void menubar_do( int keypress );
364 extern void menubar_close();
365 extern void menubar_hide();
366 extern void menubar_show();
367
368 void ui_pad_init();
369 void ui_pad_close();
370 void ui_pad_activate( UI_WINDOW * wnd, int x, int y );
371 void ui_pad_deactivate();
372 void ui_pad_goto(int n);
373 void ui_pad_goto_next();
374 void ui_pad_goto_prev();
375 void ui_pad_read( int n, char * filename );
376 int ui_pad_get_current();
377
378 void ui_barbox_open( char * text, int length );
379 void ui_barbox_update( int position );
380 void ui_barbox_close();
381
382 void ui_reset_idle_seconds(void);
383 int ui_get_idle_seconds(void);
384
385 extern int ui_button_any_drawn;
386
387 #endif
388