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.
28 UI_GADGET * selected_gadget;
30 UI_GADGET * ui_gadget_add( UI_WINDOW * wnd, short kind, short x1, short y1, short x2, short y2 )
34 gadget = (UI_GADGET *) d_malloc(sizeof(UI_GADGET));
35 if (gadget==NULL) exit(1);
37 if (wnd->gadget == NULL )
40 gadget->prev = gadget;
41 gadget->next = gadget;
43 wnd->gadget->prev->next = gadget;
44 gadget->next = wnd->gadget;
45 gadget->prev = wnd->gadget->prev;
46 wnd->gadget->prev = gadget;
49 gadget->when_tab = NULL;
50 gadget->when_btab = NULL;
51 gadget->when_up = NULL;
52 gadget->when_down = NULL;
53 gadget->when_left = NULL;
54 gadget->when_right = NULL;
57 gadget->oldstatus = 0;
58 if ( x1==0 && x2==0 && y1==0 && y2== 0 )
59 gadget->canvas = NULL;
61 gadget->canvas = gr_create_sub_canvas( wnd->canvas, x1, y1, x2-x1+1, y2-y1+1 );
62 gadget->x1 = gadget->canvas->cv_bitmap.bm_x;
63 gadget->y1 = gadget->canvas->cv_bitmap.bm_y;
64 gadget->x2 = gadget->canvas->cv_bitmap.bm_x+x2-x1+1;
65 gadget->y2 = gadget->canvas->cv_bitmap.bm_y+y2-y1+1;
66 gadget->parent = NULL;
72 void ui_gadget_delete_all( UI_WINDOW * wnd )
78 while( wnd->gadget != NULL )
81 if (tmp->next == tmp )
85 tmp->next->prev = tmp->prev;
86 tmp->prev->next = tmp->next;
87 wnd->gadget = tmp->next;
90 gr_free_sub_canvas( tmp->canvas );
93 if (tmp->kind == 1 ) // Button
95 UI_GADGET_BUTTON * but1 = (UI_GADGET_BUTTON *)tmp;
100 if (tmp->kind == 6 ) // Inputbox
102 UI_GADGET_INPUTBOX * but1 = (UI_GADGET_INPUTBOX *)tmp;
103 d_free( but1->text );
106 if (tmp->kind == 5 ) // Checkbox
108 UI_GADGET_CHECKBOX * but1 = (UI_GADGET_CHECKBOX *)tmp;
109 d_free( but1->text );
112 if (tmp->kind == 9 ) // Icon
114 UI_GADGET_ICON * but1 = (UI_GADGET_ICON *)tmp;
115 d_free( but1->text );
124 int is_under_another_window( UI_WINDOW * win, UI_GADGET * gadget )
130 while( temp != NULL ) {
131 if ( ( gadget->x1 > temp->x) &&
132 ( gadget->x1 < (temp->x+temp->width) ) &&
133 ( gadget->y1 > temp->y) &&
134 ( gadget->y1 < (temp->y+temp->height) )
142 if ( ( gadget->x2 > temp->x) &&
143 ( gadget->x2 < (temp->x+temp->width) ) &&
144 ( gadget->y2 > temp->y) &&
145 ( gadget->y2 < (temp->y+temp->height) )
159 int ui_mouse_on_gadget( UI_GADGET * gadget )
161 if ((Mouse.x >= gadget->x1) && (Mouse.x <= gadget->x2-1) && (Mouse.y >= gadget->y1) && (Mouse.y <= gadget->y2-1) ) {
162 if (is_under_another_window(CurWindow, gadget))
169 void ui_window_do_gadgets( UI_WINDOW * wnd )
172 UI_GADGET * tmp, * tmp1;
176 keypress = last_keypress;
180 if (tmp == NULL ) return;
182 if (selected_gadget==NULL)
183 selected_gadget = tmp;
185 tmp1 = wnd->keyboard_focus_gadget;
189 if (ui_mouse_on_gadget(tmp) && B1_JUST_PRESSED )
191 selected_gadget = tmp;
192 if (tmp->parent!=NULL)
194 while (tmp->parent != NULL )
196 wnd->keyboard_focus_gadget = tmp;
201 wnd->keyboard_focus_gadget = tmp;
205 if ( tmp->hotkey == keypress )
207 wnd->keyboard_focus_gadget = tmp;
211 } while( tmp != wnd->gadget );
213 if (wnd->keyboard_focus_gadget != NULL)
218 if ( wnd->keyboard_focus_gadget->when_tab != NULL )
219 wnd->keyboard_focus_gadget = wnd->keyboard_focus_gadget->when_tab;
221 case (KEY_TAB+KEY_SHIFTED):
222 if ( wnd->keyboard_focus_gadget->when_btab != NULL )
223 wnd->keyboard_focus_gadget = wnd->keyboard_focus_gadget->when_btab;
226 if ( wnd->keyboard_focus_gadget->when_up != NULL )
227 wnd->keyboard_focus_gadget = wnd->keyboard_focus_gadget->when_up;
230 if ( wnd->keyboard_focus_gadget->when_down != NULL )
231 wnd->keyboard_focus_gadget = wnd->keyboard_focus_gadget->when_down;
234 if ( wnd->keyboard_focus_gadget->when_left != NULL )
235 wnd->keyboard_focus_gadget = wnd->keyboard_focus_gadget->when_left;
238 if ( wnd->keyboard_focus_gadget->when_right != NULL )
239 wnd->keyboard_focus_gadget = wnd->keyboard_focus_gadget->when_right;
244 if (wnd->keyboard_focus_gadget != tmp1)
246 if (wnd->keyboard_focus_gadget != NULL )
247 wnd->keyboard_focus_gadget->status = 1;
255 if (!is_under_another_window( CurWindow, tmp )) {
256 UI_WINDOW *curwindow_save=CurWindow;
261 ui_button_do( (UI_GADGET_BUTTON *)tmp, keypress );
264 ui_listbox_do( (UI_GADGET_LISTBOX *)tmp, keypress );
267 ui_scrollbar_do( (UI_GADGET_SCROLLBAR *)tmp, keypress );
270 ui_radio_do( (UI_GADGET_RADIO *)tmp, keypress );
273 ui_checkbox_do( (UI_GADGET_CHECKBOX *)tmp, keypress );
276 ui_inputbox_do( (UI_GADGET_INPUTBOX *)tmp, keypress );
279 ui_userbox_do( (UI_GADGET_USERBOX *)tmp, keypress );
282 ui_keytrap_do( (UI_GADGET_KEYTRAP *)tmp, keypress );
285 ui_icon_do( (UI_GADGET_ICON *)tmp, keypress );
289 CurWindow=curwindow_save;
293 } while( tmp != wnd->gadget );
298 UI_GADGET * ui_gadget_get_next( UI_GADGET * gadget )
304 while( tmp != gadget && (tmp->parent!=NULL) )
310 UI_GADGET * ui_gadget_get_prev( UI_GADGET * gadget )
316 while( tmp != gadget && (tmp->parent!=NULL) )
322 void ui_gadget_calc_keys( UI_WINDOW * wnd)
328 if (tmp==NULL) return;
332 tmp->when_tab = ui_gadget_get_next(tmp);
333 tmp->when_btab = ui_gadget_get_prev(tmp);
336 } while( tmp != wnd->gadget );