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