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.
14 #pragma off (unreferenced)
15 static char rcsid[] = "$Id: gadget.c,v 1.1.1.1 2001-01-19 03:30:14 bradleyb Exp $";
16 #pragma on (unreferenced)
29 UI_GADGET * selected_gadget;
31 UI_GADGET * ui_gadget_add( UI_WINDOW * wnd, short kind, short x1, short y1, short x2, short y2 )
35 gadget = (UI_GADGET *)malloc( sizeof(UI_GADGET) );
36 if (gadget==NULL) exit(1);
38 if (wnd->gadget == NULL )
41 gadget->prev = gadget;
42 gadget->next = gadget;
44 wnd->gadget->prev->next = gadget;
45 gadget->next = wnd->gadget;
46 gadget->prev = wnd->gadget->prev;
47 wnd->gadget->prev = gadget;
50 gadget->when_tab = NULL;
51 gadget->when_btab = NULL;
52 gadget->when_up = NULL;
53 gadget->when_down = NULL;
54 gadget->when_left = NULL;
55 gadget->when_right = NULL;
58 gadget->oldstatus = 0;
59 if ( x1==0 && x2==0 && y1==0 && y2== 0 )
60 gadget->canvas = NULL;
62 gadget->canvas = gr_create_sub_canvas( wnd->canvas, x1, y1, x2-x1+1, y2-y1+1 );
63 gadget->x1 = gadget->canvas->cv_bitmap.bm_x;
64 gadget->y1 = gadget->canvas->cv_bitmap.bm_y;
65 gadget->x2 = gadget->canvas->cv_bitmap.bm_x+x2-x1+1;
66 gadget->y2 = gadget->canvas->cv_bitmap.bm_y+y2-y1+1;
67 gadget->parent = NULL;
73 void ui_gadget_delete_all( UI_WINDOW * wnd )
79 while( wnd->gadget != NULL )
82 if (tmp->next == tmp )
86 tmp->next->prev = tmp->prev;
87 tmp->prev->next = tmp->next;
88 wnd->gadget = tmp->next;
91 gr_free_sub_canvas( tmp->canvas );
94 if (tmp->kind == 1 ) // Button
96 UI_GADGET_BUTTON * but1 = (UI_GADGET_BUTTON *)tmp;
101 if (tmp->kind == 6 ) // Inputbox
103 UI_GADGET_INPUTBOX * but1 = (UI_GADGET_INPUTBOX *)tmp;
107 if (tmp->kind == 5 ) // Checkbox
109 UI_GADGET_CHECKBOX * but1 = (UI_GADGET_CHECKBOX *)tmp;
113 if (tmp->kind == 9 ) // Icon
115 UI_GADGET_ICON * but1 = (UI_GADGET_ICON *)tmp;
125 int is_under_another_window( UI_WINDOW * win, UI_GADGET * gadget )
131 while( temp != NULL ) {
132 if ( ( gadget->x1 > temp->x) &&
133 ( gadget->x1 < (temp->x+temp->width) ) &&
134 ( gadget->y1 > temp->y) &&
135 ( gadget->y1 < (temp->y+temp->height) )
143 if ( ( gadget->x2 > temp->x) &&
144 ( gadget->x2 < (temp->x+temp->width) ) &&
145 ( gadget->y2 > temp->y) &&
146 ( gadget->y2 < (temp->y+temp->height) )
160 int ui_mouse_on_gadget( UI_GADGET * gadget )
162 if ((Mouse.x >= gadget->x1) && (Mouse.x <= gadget->x2-1) && (Mouse.y >= gadget->y1) && (Mouse.y <= gadget->y2-1) ) {
163 if (is_under_another_window(CurWindow, gadget))
170 void ui_window_do_gadgets( UI_WINDOW * wnd )
173 UI_GADGET * tmp, * tmp1;
177 keypress = last_keypress;
181 if (tmp == NULL ) return;
183 if (selected_gadget==NULL)
184 selected_gadget = tmp;
186 tmp1 = wnd->keyboard_focus_gadget;
190 if (ui_mouse_on_gadget(tmp) && B1_JUST_PRESSED )
192 selected_gadget = tmp;
193 if (tmp->parent!=NULL)
195 while (tmp->parent != NULL )
197 wnd->keyboard_focus_gadget = tmp;
202 wnd->keyboard_focus_gadget = tmp;
206 if ( tmp->hotkey == keypress )
208 wnd->keyboard_focus_gadget = tmp;
212 } while( tmp != wnd->gadget );
214 if (wnd->keyboard_focus_gadget != NULL)
219 if ( wnd->keyboard_focus_gadget->when_tab != NULL )
220 wnd->keyboard_focus_gadget = wnd->keyboard_focus_gadget->when_tab;
222 case (KEY_TAB+KEY_SHIFTED):
223 if ( wnd->keyboard_focus_gadget->when_btab != NULL )
224 wnd->keyboard_focus_gadget = wnd->keyboard_focus_gadget->when_btab;
227 if ( wnd->keyboard_focus_gadget->when_up != NULL )
228 wnd->keyboard_focus_gadget = wnd->keyboard_focus_gadget->when_up;
231 if ( wnd->keyboard_focus_gadget->when_down != NULL )
232 wnd->keyboard_focus_gadget = wnd->keyboard_focus_gadget->when_down;
235 if ( wnd->keyboard_focus_gadget->when_left != NULL )
236 wnd->keyboard_focus_gadget = wnd->keyboard_focus_gadget->when_left;
239 if ( wnd->keyboard_focus_gadget->when_right != NULL )
240 wnd->keyboard_focus_gadget = wnd->keyboard_focus_gadget->when_right;
245 if (wnd->keyboard_focus_gadget != tmp1)
247 if (wnd->keyboard_focus_gadget != NULL )
248 wnd->keyboard_focus_gadget->status = 1;
256 if (!is_under_another_window( CurWindow, tmp )) {
257 UI_WINDOW *curwindow_save=CurWindow;
262 ui_button_do( (UI_GADGET_BUTTON *)tmp, keypress );
265 ui_listbox_do( (UI_GADGET_LISTBOX *)tmp, keypress );
268 ui_scrollbar_do( (UI_GADGET_SCROLLBAR *)tmp, keypress );
271 ui_radio_do( (UI_GADGET_RADIO *)tmp, keypress );
274 ui_checkbox_do( (UI_GADGET_CHECKBOX *)tmp, keypress );
277 ui_inputbox_do( (UI_GADGET_INPUTBOX *)tmp, keypress );
280 ui_userbox_do( (UI_GADGET_USERBOX *)tmp, keypress );
283 ui_keytrap_do( (UI_GADGET_KEYTRAP *)tmp, keypress );
286 ui_icon_do( (UI_GADGET_ICON *)tmp, keypress );
290 CurWindow=curwindow_save;
294 } while( tmp != wnd->gadget );
299 UI_GADGET * ui_gadget_get_next( UI_GADGET * gadget )
305 while( tmp != gadget && (tmp->parent!=NULL) )
311 UI_GADGET * ui_gadget_get_prev( UI_GADGET * gadget )
317 while( tmp != gadget && (tmp->parent!=NULL) )
323 void ui_gadget_calc_keys( UI_WINDOW * wnd)
329 if (tmp==NULL) return;
333 tmp->when_tab = ui_gadget_get_next(tmp);
334 tmp->when_btab = ui_gadget_get_prev(tmp);
337 } while( tmp != wnd->gadget );