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 	byte            flag;
121 	byte            pressed;
122 	byte            position;
123 	byte            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             text_width;
166 	int             num_items;
167 	int             num_items_displayed;
168 	int             first_item;
169 	int             old_first_item;
170 	int             current_item;
171 	int             selected_item;
172 	int             old_current_item;
173 	unsigned int    last_scrolled;
174 	int             dragging;
175 	int             textheight;
176 	UI_GADGET_SCROLLBAR * scrollbar;
177 	int             moved;
178 } UI_GADGET_LISTBOX;
179 
180 typedef struct _ui_window {
181 	short           x, y;
182 	short           width, height;
183 	short           text_x, text_y;
184 	grs_canvas *    canvas;
185 	grs_canvas *    oldcanvas;
186 	grs_bitmap *    background;
187 	UI_GADGET *     gadget;
188 	UI_GADGET *     keyboard_focus_gadget;
189 	struct _ui_window * next;
190 	struct _ui_window * prev;
191 } UI_WINDOW;
192 
193 typedef struct  {
194 	short           new_dx, new_dy;
195 	short           new_buttons;
196 	short           x, y;
197 	short           dx, dy;
198 	short           hidden;
199 	short           backwards;
200 	short           b1_status;
201 	short           b1_last_status;
202 	short           b2_status;
203 	short           b2_last_status;
204 	short           b3_status;
205 	short           b3_last_status;
206 	short           bg_x, bg_y;
207 	short           bg_saved;
208 	grs_bitmap *    background;
209 	grs_bitmap *    pointer;
210 	unsigned int    time_lastpressed;
211 	short           moved;
212 } UI_MOUSE;
213 
214 #define BUTTON_PRESSED          1
215 #define BUTTON_RELEASED         2
216 #define BUTTON_JUST_PRESSED     4
217 #define BUTTON_JUST_RELEASED    8
218 #define BUTTON_DOUBLE_CLICKED   16
219 
220 #define B1_PRESSED          (Mouse.b1_status & BUTTON_PRESSED)
221 #define B1_RELEASED         (Mouse.b1_status & BUTTON_RELEASED)
222 #define B1_JUST_PRESSED     (Mouse.b1_status & BUTTON_JUST_PRESSED)
223 #define B1_JUST_RELEASED    (Mouse.b1_status & BUTTON_JUST_RELEASED)
224 #define B1_DOUBLE_CLICKED   (Mouse.b1_status & BUTTON_DOUBLE_CLICKED)
225 
226 extern grs_font * ui_small_font;
227 
228 extern UI_MOUSE Mouse;
229 extern UI_WINDOW * CurWindow;
230 extern UI_WINDOW * FirstWindow;
231 extern UI_WINDOW * LastWindow;
232 
233 extern unsigned char CBLACK,CGREY,CWHITE,CBRIGHT,CRED;
234 extern UI_GADGET * selected_gadget;
235 extern int last_keypress;
236 
237 extern void Hline(short x1, short x2, short y );
238 extern void Vline(short y1, short y2, short x );
239 extern void ui_string_centered( short x, short y, char * s );
240 extern void ui_draw_box_out( short x1, short y1, short x2, short y2 );
241 extern void ui_draw_box_in( short x1, short y1, short x2, short y2 );
242 extern void ui_draw_line_in( short x1, short y1, short x2, short y2 );
243 
244 
245 void ui_init();
246 void ui_close();
247 int MessageBox( short x, short y, int NumButtons, char * text, ... );
248 void ui_string_centered( short x, short y, char * s );
249 int PopupMenu( int NumItems, char * text[] );
250 
251 extern void ui_mouse_init();
252 extern grs_bitmap * ui_mouse_set_pointer( grs_bitmap * new );
253 
254 extern void ui_mouse_process();
255 extern void ui_mouse_hide();
256 extern void ui_mouse_show();
257 
258 #define WIN_BORDER 1
259 #define WIN_FILLED 2
260 #define WIN_SAVE_BG 4
261 #define WIN_DIALOG (4+2+1)
262 
263 extern UI_WINDOW * ui_open_window( short x, short y, short w, short h, int flags );
264 extern void ui_close_window( UI_WINDOW * wnd );
265 
266 extern UI_GADGET * ui_gadget_add( UI_WINDOW * wnd, short kind, short x1, short y1, short x2, short y2 );
267 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) );
268 extern void ui_gadget_delete_all( UI_WINDOW * wnd );
269 extern void ui_window_do_gadgets( UI_WINDOW * wnd );
270 extern void ui_draw_button( UI_GADGET_BUTTON * button );
271 
272 extern int ui_mouse_on_gadget( UI_GADGET * gadget );
273 
274 extern void ui_button_do( UI_GADGET_BUTTON * button, int keypress );
275 
276 extern void ui_listbox_do( UI_GADGET_LISTBOX * listbox, int keypress );
277 extern void ui_draw_listbox( UI_GADGET_LISTBOX * listbox );
278 extern UI_GADGET_LISTBOX * ui_add_gadget_listbox( UI_WINDOW * wnd, short x, short y, short w, short h, short numitems, char * list, int text_width );
279 
280 extern void ui_mega_process();
281 
282 extern void ui_get_button_size( char * text, int * width, int * height );
283 
284 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  );
285 extern void ui_scrollbar_do( UI_GADGET_SCROLLBAR * scrollbar, int keypress );
286 extern void ui_draw_scrollbar( UI_GADGET_SCROLLBAR * scrollbar );
287 
288 
289 extern void ui_wprintf( UI_WINDOW * wnd, char * format, ... );
290 extern void ui_wprintf_at( UI_WINDOW * wnd, short x, short y, char * format, ... );
291 
292 extern void ui_draw_radio( UI_GADGET_RADIO * radio );
293 extern UI_GADGET_RADIO * ui_add_gadget_radio( UI_WINDOW * wnd, short x, short y, short w, short h, short group, char * text );
294 extern void ui_radio_do( UI_GADGET_RADIO * radio, int keypress );
295 
296 extern void ui_draw_checkbox( UI_GADGET_CHECKBOX * checkbox );
297 extern UI_GADGET_CHECKBOX * ui_add_gadget_checkbox( UI_WINDOW * wnd, short x, short y, short w, short h, short group, char * text );
298 extern void ui_checkbox_do( UI_GADGET_CHECKBOX * checkbox, int keypress );
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, int text_width );
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 
311 
312 extern void ui_userbox_do( UI_GADGET_USERBOX * userbox, int keypress );
313 extern UI_GADGET_USERBOX * ui_add_gadget_userbox( UI_WINDOW * wnd, short x, short y, short w, short h );
314 extern void ui_draw_userbox( UI_GADGET_USERBOX * userbox );
315 
316 
317 extern int MenuX( int x, int y, int NumButtons, char * text[] );
318 
319 // Changes to a drive if valid.. 1=A, 2=B, etc
320 // If flag, then changes to it.
321 // Returns 0 if not-valid, 1 if valid.
322 int file_chdrive( int DriveNum, int flag );
323 
324 // Changes to directory in dir.  Even drive is changed.
325 // Returns 1 if failed.
326 //  0 = Changed ok.
327 //  1 = Invalid disk drive.
328 //  2 = Invalid directory.
329 
330 int file_chdir( char * dir );
331 
332 int file_getdirlist( int MaxNum, char list[][13] );
333 int file_getfilelist( int MaxNum, char list[][13], char * filespec );
334 int ui_get_filename( char * filename, char * Filespec, char * message  );
335 
336 
337 void * ui_malloc( int size );
338 void ui_free( void * buffer );
339 
340 UI_GADGET_KEYTRAP * ui_add_gadget_keytrap( UI_WINDOW * wnd, int key_to_trap, int (*function_to_call)(void)  );
341 void ui_keytrap_do( UI_GADGET_KEYTRAP * keytrap, int keypress );
342 
343 void ui_mouse_close();
344 
345 #define UI_RECORD_MOUSE     1
346 #define UI_RECORD_KEYS      2
347 #define UI_STATUS_NORMAL    0
348 #define UI_STATUS_RECORDING 1
349 #define UI_STATUS_PLAYING   2
350 #define UI_STATUS_FASTPLAY  3
351 
352 int ui_record_events( int NumberOfEvents, UI_EVENT * buffer, int Flags );
353 int ui_play_events_realtime( int NumberOfEvents, UI_EVENT * buffer );
354 int ui_play_events_fast( int NumberOfEvents, UI_EVENT * buffer );
355 int ui_recorder_status();
356 void ui_set_playback_speed( int speed );
357 
358 extern unsigned int ui_number_of_events;
359 extern unsigned int ui_event_counter;
360 
361 
362 int ui_get_file( char * filename, char * Filespec  );
363 
364 int MessageBoxN( short xc, short yc, int NumButtons, char * text, char * Button[] );
365 
366 void ui_draw_icon( UI_GADGET_ICON * icon );
367 void ui_icon_do( UI_GADGET_ICON * icon, int keypress );
368 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) );
369 
370 int GetKeyCode(char * text);
371 int DecodeKeyText( char * text );
372 void GetKeyDescription( char * text, int keypress );
373 
374 extern void menubar_init(char * filename );
375 extern void menubar_do( int keypress );
376 extern void menubar_close();
377 extern void menubar_hide();
378 extern void menubar_show();
379 
380 void ui_pad_init();
381 void ui_pad_close();
382 void ui_pad_activate( UI_WINDOW * wnd, int x, int y );
383 void ui_pad_deactivate();
384 void ui_pad_goto(int n);
385 void ui_pad_goto_next();
386 void ui_pad_goto_prev();
387 void ui_pad_read( int n, char * filename );
388 int ui_pad_get_current();
389 
390 void ui_barbox_open( char * text, int length );
391 int ui_barbox_update( int position );
392 void ui_barbox_close();
393 
394 void ui_reset_idle_seconds(void);
395 int ui_get_idle_seconds(void);
396 
397 extern char filename_list[300][13];
398 extern char directory_list[100][13];
399 
400 extern int ui_button_any_drawn;
401 
402 #endif
403 
404