diff --git a/CHANGELOG.txt b/CHANGELOG.txt index a532fe5a7..1c761a494 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -4,6 +4,7 @@ D2X-Rebirth Changelog -------- d2x-Info.plist, d2xgl-Info.plist, English.lproj/InfoPlist.strings, RELEASE-NOTES.txt: Increment version to 0.57.2 for Mac and RELEASE-NOTES d2x-rebirth.xcodeproj/project.pbxproj, editor/data/, editor/data/curve.pad, editor/data/dummy.pad, editor/data/group.pad, editor/data/lighting.pad, editor/data/med.mnu, editor/data/newobj.pad, editor/data/object.pad, editor/data/objmov.pad, editor/data/pc6x8.fnt, editor/data/pc8x16.fnt, editor/data/segmove.pad, editor/data/segsize.pad, editor/data/test.pad, editor/data/texture.pad, editor/med.c, include/physfsx.h, misc/physfsx.c, ui/ui.c: Actually add editor data files and make sure DXX can find them +arch/include/event.h, editor/med.c, include/ui.h, ui/button.c, ui/checkbox.c, ui/dialog.c, ui/gadget.c, ui/icon.c, ui/inputbox.c, ui/listbox.c, ui/radio.c, ui/scroll.c, ui/ui.c, ui/userbox.c: All gadgets now send events 20120109 -------- diff --git a/arch/include/event.h b/arch/include/event.h index fe2c6bc0e..cd40c2e75 100644 --- a/arch/include/event.h +++ b/arch/include/event.h @@ -44,7 +44,12 @@ typedef enum event_type EVENT_NEWMENU_DRAW, // draw after the newmenu stuff is drawn (e.g. savegame previews) EVENT_NEWMENU_CHANGED, // an item had its value/text changed - EVENT_NEWMENU_SELECTED // user chose something - pressed enter/clicked on it + EVENT_NEWMENU_SELECTED, // user chose something - pressed enter/clicked on it + + EVENT_UI_GADGET_PRESSED, // user 'pressed' a gadget + EVENT_UI_LISTBOX_MOVED, + EVENT_UI_LISTBOX_SELECTED, + EVENT_UI_USERBOX_DRAGGED } event_type; // A vanilla event. Cast to the correct type of event according to 'type'. diff --git a/editor/med.c b/editor/med.c index 6179ab69a..66a597789 100644 --- a/editor/med.c +++ b/editor/med.c @@ -1200,16 +1200,16 @@ void editor(void) break; } -// if (CurWindow->keyboard_focus_gadget == (UI_GADGET *)GameViewBox) current_view=NULL; -// if (CurWindow->keyboard_focus_gadget == (UI_GADGET *)GroupViewBox) current_view=NULL; +// if (EditorWindow->keyboard_focus_gadget == (UI_GADGET *)GameViewBox) current_view=NULL; +// if (EditorWindow->keyboard_focus_gadget == (UI_GADGET *)GroupViewBox) current_view=NULL; new_cv = current_view ; #if ORTHO_VIEWS - if (CurWindow->keyboard_focus_gadget == (UI_GADGET *)LargeViewBox) new_cv=&LargeView; - if (CurWindow->keyboard_focus_gadget == (UI_GADGET *)TopViewBox) new_cv=&TopView; - if (CurWindow->keyboard_focus_gadget == (UI_GADGET *)FrontViewBox) new_cv=&FrontView; - if (CurWindow->keyboard_focus_gadget == (UI_GADGET *)RightViewBox) new_cv=&RightView; + if (EditorWindow->keyboard_focus_gadget == (UI_GADGET *)LargeViewBox) new_cv=&LargeView; + if (EditorWindow->keyboard_focus_gadget == (UI_GADGET *)TopViewBox) new_cv=&TopView; + if (EditorWindow->keyboard_focus_gadget == (UI_GADGET *)FrontViewBox) new_cv=&FrontView; + if (EditorWindow->keyboard_focus_gadget == (UI_GADGET *)RightViewBox) new_cv=&RightView; #endif if (new_cv != current_view ) { current_view->ev_changed = 1; diff --git a/include/ui.h b/include/ui.h index 44ef976ce..cd0fef74a 100644 --- a/include/ui.h +++ b/include/ui.h @@ -21,6 +21,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #define _UI_H struct d_event; +enum event_type; struct window; @@ -245,9 +246,6 @@ typedef struct { extern grs_font * ui_small_font; extern UI_MOUSE Mouse; -extern UI_DIALOG * CurWindow; -extern UI_DIALOG * FirstWindow; -extern UI_DIALOG * LastWindow; extern unsigned char CBLACK,CGREY,CWHITE,CBRIGHT,CRED; extern UI_GADGET * selected_gadget; @@ -283,15 +281,17 @@ extern void ui_close_dialog( UI_DIALOG * dlg ); extern UI_GADGET * ui_gadget_add( UI_DIALOG * dlg, short kind, short x1, short y1, short x2, short y2 ); extern UI_GADGET_BUTTON * ui_add_gadget_button( UI_DIALOG * dlg, short x, short y, short w, short h, char * text, int (*function_to_call)(void) ); extern void ui_gadget_delete_all( UI_DIALOG * dlg ); +extern int ui_gadget_send_event(UI_DIALOG *dlg, enum event_type type, UI_GADGET *gadget); +extern UI_GADGET *ui_event_get_gadget(struct d_event *event); extern int ui_dialog_do_gadgets( UI_DIALOG * dlg, struct d_event *event ); -extern void ui_draw_button( UI_GADGET_BUTTON * button ); +extern void ui_draw_button( UI_DIALOG *dlg, UI_GADGET_BUTTON * button ); extern int ui_mouse_on_gadget( UI_GADGET * gadget ); -extern int ui_button_do( UI_GADGET_BUTTON * button, struct d_event *event ); +extern int ui_button_do( UI_DIALOG *dlg, UI_GADGET_BUTTON * button, struct d_event *event ); -extern int ui_listbox_do( UI_GADGET_LISTBOX * listbox, struct d_event *event ); -extern void ui_draw_listbox( UI_GADGET_LISTBOX * listbox ); +extern int ui_listbox_do( UI_DIALOG *dlg, UI_GADGET_LISTBOX * listbox, struct d_event *event ); +extern void ui_draw_listbox( UI_DIALOG *dlg, UI_GADGET_LISTBOX * listbox ); extern UI_GADGET_LISTBOX *ui_add_gadget_listbox(UI_DIALOG *dlg, short x, short y, short w, short h, short numitems, char **list); extern void ui_mega_process(); @@ -300,21 +300,21 @@ extern int ui_event_handler(struct d_event *event); extern void ui_get_button_size( char * text, int * width, int * height ); extern UI_GADGET_SCROLLBAR * ui_add_gadget_scrollbar( UI_DIALOG * dlg, short x, short y, short w, short h, int start, int stop, int position, int window_size ); -extern int ui_scrollbar_do( UI_GADGET_SCROLLBAR * scrollbar, struct d_event *event ); -extern void ui_draw_scrollbar( UI_GADGET_SCROLLBAR * scrollbar ); +extern int ui_scrollbar_do( UI_DIALOG *dlg, UI_GADGET_SCROLLBAR * scrollbar, struct d_event *event ); +extern void ui_draw_scrollbar( UI_DIALOG *dlg, UI_GADGET_SCROLLBAR * scrollbar ); extern void ui_dprintf( UI_DIALOG * dlg, char * format, ... ); extern void ui_dprintf_at( UI_DIALOG * dlg, short x, short y, char * format, ... ); -extern void ui_draw_radio( UI_GADGET_RADIO * radio ); +extern void ui_draw_radio( UI_DIALOG *dlg, UI_GADGET_RADIO * radio ); extern UI_GADGET_RADIO * ui_add_gadget_radio( UI_DIALOG * dlg, short x, short y, short w, short h, short group, char * text ); -extern int ui_radio_do( UI_GADGET_RADIO * radio, struct d_event *event ); +extern int ui_radio_do( UI_DIALOG *dlg, UI_GADGET_RADIO * radio, struct d_event *event ); extern void ui_radio_set_value(UI_GADGET_RADIO *radio, int value); -extern void ui_draw_checkbox( UI_GADGET_CHECKBOX * checkbox ); +extern void ui_draw_checkbox( UI_DIALOG *dlg, UI_GADGET_CHECKBOX * checkbox ); extern UI_GADGET_CHECKBOX * ui_add_gadget_checkbox( UI_DIALOG * dlg, short x, short y, short w, short h, short group, char * text ); -extern int ui_checkbox_do( UI_GADGET_CHECKBOX * checkbox, struct d_event *event ); +extern int ui_checkbox_do( UI_DIALOG *dlg, UI_GADGET_CHECKBOX * checkbox, struct d_event *event ); extern void ui_checkbox_check(UI_GADGET_CHECKBOX * checkbox, int check); extern UI_GADGET * ui_gadget_get_prev( UI_GADGET * gadget ); @@ -324,15 +324,15 @@ extern void ui_gadget_calc_keys( UI_DIALOG * dlg); extern void ui_listbox_change(UI_DIALOG *dlg, UI_GADGET_LISTBOX *listbox, short numitems, char **list); -extern void ui_draw_inputbox( UI_GADGET_INPUTBOX * inputbox ); +extern void ui_draw_inputbox( UI_DIALOG *dlg, UI_GADGET_INPUTBOX * inputbox ); extern UI_GADGET_INPUTBOX * ui_add_gadget_inputbox( UI_DIALOG * dlg, short x, short y, short w, short h, char * text ); -extern int ui_inputbox_do( UI_GADGET_INPUTBOX * inputbox, struct d_event *event ); +extern int ui_inputbox_do( UI_DIALOG *dlg, UI_GADGET_INPUTBOX * inputbox, struct d_event *event ); extern void ui_inputbox_set_text(UI_GADGET_INPUTBOX *inputbox, char *text); -extern int ui_userbox_do( UI_GADGET_USERBOX * userbox, struct d_event *event ); +extern int ui_userbox_do( UI_DIALOG *dlg, UI_GADGET_USERBOX * userbox, struct d_event *event ); extern UI_GADGET_USERBOX * ui_add_gadget_userbox( UI_DIALOG * dlg, short x, short y, short w, short h ); -extern void ui_draw_userbox( UI_GADGET_USERBOX * userbox ); +extern void ui_draw_userbox( UI_DIALOG *dlg, UI_GADGET_USERBOX * userbox ); extern int MenuX( int x, int y, int NumButtons, char * text[] ); @@ -372,7 +372,7 @@ int ui_get_file( char * filename, char * Filespec ); int MessageBoxN( short xc, short yc, int NumButtons, char * text, char * Button[] ); void ui_draw_icon( UI_GADGET_ICON * icon ); -int ui_icon_do( UI_GADGET_ICON * icon, struct d_event *event ); +int ui_icon_do( UI_DIALOG *dlg, UI_GADGET_ICON * icon, struct d_event *event ); UI_GADGET_ICON * ui_add_gadget_icon( UI_DIALOG * dlg, char * text, short x, short y, short w, short h, int k,int (*f)(void) ); int GetKeyCode(char * text); diff --git a/ui/button.c b/ui/button.c index 1689bca9f..0f095fb61 100644 --- a/ui/button.c +++ b/ui/button.c @@ -51,7 +51,7 @@ void ui_get_button_size( char * text, int * width, int * height ) } -void ui_draw_button( UI_GADGET_BUTTON * button ) +void ui_draw_button(UI_DIALOG *dlg, UI_GADGET_BUTTON * button) { int color; @@ -62,7 +62,7 @@ void ui_draw_button( UI_GADGET_BUTTON * button ) gr_set_current_canvas( button->canvas ); color = button->canvas->cv_color; - if (CurWindow->keyboard_focus_gadget == (UI_GADGET *)button) + if (dlg->keyboard_focus_gadget == (UI_GADGET *)button) gr_set_fontcolor( CRED, -1 ); else { @@ -129,7 +129,7 @@ UI_GADGET_BUTTON * ui_add_gadget_button( UI_DIALOG * dlg, short x, short y, shor } -int ui_button_do( UI_GADGET_BUTTON * button, d_event *event ) +int ui_button_do(UI_DIALOG *dlg, UI_GADGET_BUTTON * button, d_event *event) { int rval = 0; @@ -165,7 +165,7 @@ int ui_button_do( UI_GADGET_BUTTON * button, d_event *event ) if ((keypress == button->hotkey) || ((keypress == button->hotkey1) && button->user_function1) || - ((CurWindow->keyboard_focus_gadget==(UI_GADGET *)button) && ((keypress==KEY_SPACEBAR) || (keypress==KEY_ENTER)) )) + ((dlg->keyboard_focus_gadget==(UI_GADGET *)button) && ((keypress==KEY_SPACEBAR) || (keypress==KEY_ENTER)) )) { button->position = 2; rval = 1; @@ -180,7 +180,7 @@ int ui_button_do( UI_GADGET_BUTTON * button, d_event *event ) button->position = 0; if ((keypress == button->hotkey) || - ((CurWindow->keyboard_focus_gadget==(UI_GADGET *)button) && ((keypress==KEY_SPACEBAR) || (keypress==KEY_ENTER)) )) + ((dlg->keyboard_focus_gadget==(UI_GADGET *)button) && ((keypress==KEY_SPACEBAR) || (keypress==KEY_ENTER)) )) button->pressed = 1; if ((keypress == button->hotkey1) && button->user_function1) @@ -190,13 +190,18 @@ int ui_button_do( UI_GADGET_BUTTON * button, d_event *event ) } } - ui_draw_button( button ); + ui_draw_button( dlg, button ); if (button->pressed && button->user_function ) { button->user_function(); rval = 1; } + else if (button->pressed) + { + ui_gadget_send_event(dlg, EVENT_UI_GADGET_PRESSED, (UI_GADGET *)button); + rval = 1; + } return rval; } diff --git a/ui/checkbox.c b/ui/checkbox.c index 6d7369792..12a487fdb 100644 --- a/ui/checkbox.c +++ b/ui/checkbox.c @@ -30,7 +30,7 @@ static char rcsid[] = "$Id: checkbox.c,v 1.1.1.1 2006/03/17 19:52:20 zicodxx Exp #define Middle(x) ((2*(x)+1)/4) -void ui_draw_checkbox( UI_GADGET_CHECKBOX * checkbox ) +void ui_draw_checkbox( UI_DIALOG *dlg, UI_GADGET_CHECKBOX * checkbox ) { if ((checkbox->status==1) || (checkbox->position != checkbox->oldposition)) @@ -40,7 +40,7 @@ void ui_draw_checkbox( UI_GADGET_CHECKBOX * checkbox ) ui_mouse_hide(); gr_set_current_canvas( checkbox->canvas ); - if (CurWindow->keyboard_focus_gadget == (UI_GADGET *)checkbox) + if (dlg->keyboard_focus_gadget == (UI_GADGET *)checkbox) gr_set_fontcolor( CRED, -1 ); else gr_set_fontcolor( CBLACK, -1 ); @@ -88,7 +88,7 @@ UI_GADGET_CHECKBOX * ui_add_gadget_checkbox( UI_DIALOG * dlg, short x, short y, } -int ui_checkbox_do( UI_GADGET_CHECKBOX * checkbox, d_event *event ) +int ui_checkbox_do( UI_DIALOG *dlg, UI_GADGET_CHECKBOX * checkbox, d_event *event ) { int rval = 0; @@ -122,7 +122,7 @@ int ui_checkbox_do( UI_GADGET_CHECKBOX * checkbox, d_event *event ) key = event_key_get(event); - if ((CurWindow->keyboard_focus_gadget==(UI_GADGET *)checkbox) && ((key==KEY_SPACEBAR) || (key==KEY_ENTER)) ) + if ((dlg->keyboard_focus_gadget==(UI_GADGET *)checkbox) && ((key==KEY_SPACEBAR) || (key==KEY_ENTER)) ) { checkbox->position = 2; rval = 1; @@ -136,17 +136,18 @@ int ui_checkbox_do( UI_GADGET_CHECKBOX * checkbox, d_event *event ) checkbox->position = 0; - if ((CurWindow->keyboard_focus_gadget==(UI_GADGET *)checkbox) && ((key==KEY_SPACEBAR) || (key==KEY_ENTER)) ) + if ((dlg->keyboard_focus_gadget==(UI_GADGET *)checkbox) && ((key==KEY_SPACEBAR) || (key==KEY_ENTER)) ) checkbox->pressed = 1; } if (checkbox->pressed == 1) { checkbox->flag ^= 1; + ui_gadget_send_event(dlg, EVENT_UI_GADGET_PRESSED, (UI_GADGET *)checkbox); rval = 1; } - ui_draw_checkbox( checkbox ); + ui_draw_checkbox( dlg, checkbox ); return rval; } diff --git a/ui/dialog.c b/ui/dialog.c index 091ac0078..bfe5ea7be 100644 --- a/ui/dialog.c +++ b/ui/dialog.c @@ -47,10 +47,6 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #define _enable() #endif -UI_DIALOG * CurWindow = NULL; -UI_DIALOG * FirstWindow = NULL; -UI_DIALOG * LastWindow = NULL; - int last_keypress = 0; #define BORDER_WIDTH 8 @@ -327,9 +323,6 @@ void ui_close_dialog( UI_DIALOG * dlg ) selected_gadget = NULL; - if (CurWindow==dlg) - CurWindow = NULL; - if (dlg->wind) window_close(dlg->wind); diff --git a/ui/gadget.c b/ui/gadget.c index 20d83fbb4..3018403ad 100644 --- a/ui/gadget.c +++ b/ui/gadget.c @@ -33,6 +33,12 @@ static char rcsid[] = "$Id: gadget.c,v 1.1.1.1 2006/03/17 19:52:21 zicodxx Exp $ UI_GADGET * selected_gadget; +typedef struct event_gadget +{ + event_type type; + UI_GADGET *gadget; +} event_gadget; + UI_GADGET * ui_gadget_add( UI_DIALOG * dlg, short kind, short x1, short y1, short x2, short y2 ) { UI_GADGET * gadget; @@ -172,7 +178,7 @@ int ui_mouse_on_gadget( UI_GADGET * gadget ) if ((x >= gadget->x1) && (x <= gadget->x2-1) && (y >= gadget->y1) && (y <= gadget->y2-1) ) { #if 0 // check is no longer required - if it is under another window, that dialog's handler would have returned 1 - if (is_under_another_window(CurWindow, gadget)) + if (is_under_another_window(dlg, gadget)) return 0; #endif return 1; @@ -180,14 +186,67 @@ int ui_mouse_on_gadget( UI_GADGET * gadget ) return 0; } +int ui_gadget_do(UI_DIALOG *dlg, UI_GADGET *g, d_event *event) +{ + switch( g->kind ) + { + case 1: + return ui_button_do(dlg, (UI_GADGET_BUTTON *)g, event); + break; + case 2: + return ui_listbox_do(dlg, (UI_GADGET_LISTBOX *)g, event); + break; + case 3: + return ui_scrollbar_do(dlg, (UI_GADGET_SCROLLBAR *)g, event); + break; + case 4: + return ui_radio_do(dlg, (UI_GADGET_RADIO *)g, event); + break; + case 5: + return ui_checkbox_do(dlg, (UI_GADGET_CHECKBOX *)g, event); + break; + case 6: + return ui_inputbox_do(dlg, (UI_GADGET_INPUTBOX *)g, event); + break; + case 7: + return ui_userbox_do(dlg, (UI_GADGET_USERBOX *)g, event); + break; + case 8: + return ui_keytrap_do((UI_GADGET_KEYTRAP *)g, event); + break; + case 9: + return ui_icon_do(dlg, (UI_GADGET_ICON *)g, event); + break; + } + + return 0; +} + +int ui_gadget_send_event(UI_DIALOG *dlg, event_type type, UI_GADGET *gadget) +{ + event_gadget event; + + event.type = type; + event.gadget = gadget; + + if (gadget->parent) + return ui_gadget_do(dlg, gadget->parent, (d_event *) &event); + + return window_send_event(ui_dialog_get_window(dlg), (d_event *) &event); +} + +UI_GADGET *ui_event_get_gadget(d_event *event) +{ + Assert(event->type == EVENT_UI_GADGET_PRESSED); // more to come? + return ((event_gadget *) event)->gadget; +} + int ui_dialog_do_gadgets(UI_DIALOG * dlg, d_event *event) { int keypress = 0; UI_GADGET * tmp, * tmp1; int rval = 0; - CurWindow = dlg; - if (event->type == EVENT_KEY_COMMAND) keypress = event_key_get(event); @@ -274,46 +333,11 @@ int ui_dialog_do_gadgets(UI_DIALOG * dlg, d_event *event) { // If it is under another dialog, that dialog's handler would have returned 1 for mouse events. // Key events are handled in a priority depending on the window ordering. - //if (!is_under_another_window( CurWindow, tmp )) - { - UI_DIALOG *curwindow_save=CurWindow; - - switch( tmp->kind ) - { - case 1: - rval = ui_button_do( (UI_GADGET_BUTTON *)tmp, event ); - break; - case 2: - rval = ui_listbox_do( (UI_GADGET_LISTBOX *)tmp, event ); - break; - case 3: - rval = ui_scrollbar_do( (UI_GADGET_SCROLLBAR *)tmp, event ); - break; - case 4: - rval = ui_radio_do( (UI_GADGET_RADIO *)tmp, event ); - break; - case 5: - rval = ui_checkbox_do( (UI_GADGET_CHECKBOX *)tmp, event ); - break; - case 6: - rval = ui_inputbox_do( (UI_GADGET_INPUTBOX *)tmp, event ); - break; - case 7: - rval = ui_userbox_do( (UI_GADGET_USERBOX *)tmp, event ); - break; - case 8: - rval = ui_keytrap_do( (UI_GADGET_KEYTRAP *)tmp, event ); - break; - case 9: - rval = ui_icon_do( (UI_GADGET_ICON *)tmp, event ); - break; - } - - CurWindow=curwindow_save; - } + //if (!is_under_another_window( dlg, tmp )) + rval = ui_gadget_do(dlg, tmp, event); tmp = tmp->next; - } while(/* !rval && */tmp != dlg->gadget ); // FIXME: Have to loop through all the controls, because of controls within controls + } while(/*!rval &&*/ tmp != dlg->gadget); // have to look for pesky scrollbars in case an arrow button or arrow key are held down return rval; } diff --git a/ui/icon.c b/ui/icon.c index f6bd260f7..c1d118a2d 100644 --- a/ui/icon.c +++ b/ui/icon.c @@ -117,7 +117,7 @@ UI_GADGET_ICON * ui_add_gadget_icon( UI_DIALOG * dlg, char * text, short x, shor } -int ui_icon_do( UI_GADGET_ICON * icon, d_event *event ) +int ui_icon_do( UI_DIALOG *dlg, UI_GADGET_ICON * icon, d_event *event ) { int rval = 0; @@ -173,6 +173,7 @@ int ui_icon_do( UI_GADGET_ICON * icon, d_event *event ) { icon->status = 1; icon->flag = (sbyte)icon->user_function(); + ui_gadget_send_event(dlg, EVENT_UI_GADGET_PRESSED, (UI_GADGET *)icon); rval = 1; } diff --git a/ui/inputbox.c b/ui/inputbox.c index 5ece00bd0..2e77497c8 100644 --- a/ui/inputbox.c +++ b/ui/inputbox.c @@ -44,7 +44,7 @@ void strndel(char *s, int p, int n) *(s+p+n) = '\0'; // Delete and zero fill } -void ui_draw_inputbox( UI_GADGET_INPUTBOX * inputbox ) +void ui_draw_inputbox( UI_DIALOG *dlg, UI_GADGET_INPUTBOX * inputbox ) { int w, h, aw; @@ -53,7 +53,7 @@ void ui_draw_inputbox( UI_GADGET_INPUTBOX * inputbox ) ui_mouse_hide(); gr_set_current_canvas( inputbox->canvas ); - if (CurWindow->keyboard_focus_gadget == (UI_GADGET *)inputbox) + if (dlg->keyboard_focus_gadget == (UI_GADGET *)inputbox) { if (inputbox->first_time) gr_set_fontcolor( CBLACK, CRED ); @@ -71,7 +71,7 @@ void ui_draw_inputbox( UI_GADGET_INPUTBOX * inputbox ) gr_setcolor( CBLACK ); gr_rect( 2+w, 0, inputbox->width-1, inputbox->height-1 ); - if (CurWindow->keyboard_focus_gadget == (UI_GADGET *)inputbox && !inputbox->first_time ) + if (dlg->keyboard_focus_gadget == (UI_GADGET *)inputbox && !inputbox->first_time ) { gr_setcolor(CRED); Vline( 2,inputbox->height-3, 2+w+1 ); @@ -111,7 +111,7 @@ UI_GADGET_INPUTBOX * ui_add_gadget_inputbox( UI_DIALOG * dlg, short x, short y, } -int ui_inputbox_do( UI_GADGET_INPUTBOX * inputbox, d_event *event ) +int ui_inputbox_do( UI_DIALOG *dlg, UI_GADGET_INPUTBOX * inputbox, d_event *event ) { unsigned char ascii; int keypress = 0; @@ -123,7 +123,7 @@ int ui_inputbox_do( UI_GADGET_INPUTBOX * inputbox, d_event *event ) inputbox->oldposition = inputbox->position; inputbox->pressed=0; - if (CurWindow->keyboard_focus_gadget==(UI_GADGET *)inputbox) + if (dlg->keyboard_focus_gadget==(UI_GADGET *)inputbox) { switch( keypress ) { @@ -162,8 +162,14 @@ int ui_inputbox_do( UI_GADGET_INPUTBOX * inputbox, d_event *event ) } else { inputbox->first_time = 1; } - - ui_draw_inputbox( inputbox ); + + if (inputbox->pressed) + { + ui_gadget_send_event(dlg, EVENT_UI_GADGET_PRESSED, (UI_GADGET *)inputbox); + rval = 1; + } + + ui_draw_inputbox( dlg, inputbox ); return rval; } diff --git a/ui/listbox.c b/ui/listbox.c index b9212b034..c1bf47d69 100644 --- a/ui/listbox.c +++ b/ui/listbox.c @@ -27,7 +27,7 @@ static char rcsid[] = "$Id: listbox.c,v 1.1.1.1 2006/03/17 19:52:20 zicodxx Exp #include "key.h" #include "timer.h" -void ui_draw_listbox( UI_GADGET_LISTBOX * listbox ) +void ui_draw_listbox( UI_DIALOG *dlg, UI_GADGET_LISTBOX * listbox ) { int i, x, y, stop; int w, h, aw; @@ -57,14 +57,14 @@ void ui_draw_listbox( UI_GADGET_LISTBOX * listbox ) { if (i !=listbox->current_item) { - if ((listbox->current_item == -1) && (CurWindow->keyboard_focus_gadget == (UI_GADGET *)listbox) && (i == listbox->first_item) ) + if ((listbox->current_item == -1) && (dlg->keyboard_focus_gadget == (UI_GADGET *)listbox) && (i == listbox->first_item) ) gr_set_fontcolor( CRED, CBLACK ); else gr_set_fontcolor( CWHITE, CBLACK ); } else { - if (CurWindow->keyboard_focus_gadget == (UI_GADGET *)listbox) + if (dlg->keyboard_focus_gadget == (UI_GADGET *)listbox) gr_set_fontcolor( CRED, CGREY ); else gr_set_fontcolor( CBLACK, CGREY ); @@ -150,7 +150,7 @@ UI_GADGET_LISTBOX * ui_add_gadget_listbox(UI_DIALOG *dlg, short x, short y, shor } -int ui_listbox_do( UI_GADGET_LISTBOX * listbox, d_event *event ) +int ui_listbox_do( UI_DIALOG *dlg, UI_GADGET_LISTBOX * listbox, d_event *event ) { int mitem, oldfakepos, kf; int keypress = 0; @@ -168,11 +168,11 @@ int ui_listbox_do( UI_GADGET_LISTBOX * listbox, d_event *event ) listbox->first_item = 0; listbox->old_current_item = listbox->current_item; listbox->old_first_item = listbox->first_item; - ui_draw_listbox( listbox ); + ui_draw_listbox( dlg, listbox ); - if (CurWindow->keyboard_focus_gadget == (UI_GADGET *)listbox) + if (dlg->keyboard_focus_gadget == (UI_GADGET *)listbox) { - CurWindow->keyboard_focus_gadget = ui_gadget_get_next((UI_GADGET *)listbox); + dlg->keyboard_focus_gadget = ui_gadget_get_next((UI_GADGET *)listbox); } return rval; @@ -182,7 +182,8 @@ int ui_listbox_do( UI_GADGET_LISTBOX * listbox, d_event *event ) listbox->old_first_item = listbox->first_item; - if (listbox->scrollbar->moved ) + if ((event->type == EVENT_UI_GADGET_PRESSED) && + (ui_event_get_gadget(event) == (UI_GADGET *)listbox->scrollbar)) { listbox->moved = 1; @@ -205,7 +206,7 @@ int ui_listbox_do( UI_GADGET_LISTBOX * listbox, d_event *event ) rval = 1; } - if ( CurWindow->keyboard_focus_gadget==(UI_GADGET *)listbox ) + if ( dlg->keyboard_focus_gadget==(UI_GADGET *)listbox ) { if (keypress==KEY_ENTER) { listbox->selected_item = listbox->current_item; @@ -364,8 +365,14 @@ int ui_listbox_do( UI_GADGET_LISTBOX * listbox, d_event *event ) } } + + if (listbox->moved || (listbox->selected_item > 0)) + { + ui_gadget_send_event(dlg, (listbox->selected_item > 0) ? EVENT_UI_LISTBOX_SELECTED : EVENT_UI_LISTBOX_MOVED, (UI_GADGET *)listbox); + rval = 1; + } - ui_draw_listbox( listbox ); + ui_draw_listbox( dlg, listbox ); return rval; } diff --git a/ui/radio.c b/ui/radio.c index 459f56d31..4bddd7fac 100644 --- a/ui/radio.c +++ b/ui/radio.c @@ -30,7 +30,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #define Middle(x) ((2*(x)+1)/4) -void ui_draw_radio( UI_GADGET_RADIO * radio ) +void ui_draw_radio( UI_DIALOG *dlg, UI_GADGET_RADIO * radio ) { if ((radio->status==1) || (radio->position != radio->oldposition)) @@ -40,7 +40,7 @@ void ui_draw_radio( UI_GADGET_RADIO * radio ) ui_mouse_hide(); gr_set_current_canvas( radio->canvas ); - if (CurWindow->keyboard_focus_gadget == (UI_GADGET *) radio) + if (dlg->keyboard_focus_gadget == (UI_GADGET *) radio) gr_set_fontcolor(CRED, -1); else gr_set_fontcolor(CBLACK, -1); @@ -87,7 +87,7 @@ UI_GADGET_RADIO * ui_add_gadget_radio( UI_DIALOG * dlg, short x, short y, short } -int ui_radio_do( UI_GADGET_RADIO * radio, d_event *event ) +int ui_radio_do( UI_DIALOG *dlg, UI_GADGET_RADIO * radio, d_event *event ) { UI_GADGET * tmp; UI_GADGET_RADIO * tmpr; @@ -123,7 +123,7 @@ int ui_radio_do( UI_GADGET_RADIO * radio, d_event *event ) key = event_key_get(event); - if ((CurWindow->keyboard_focus_gadget==(UI_GADGET *)radio) && ((key==KEY_SPACEBAR) || (key==KEY_ENTER)) ) + if ((dlg->keyboard_focus_gadget==(UI_GADGET *)radio) && ((key==KEY_SPACEBAR) || (key==KEY_ENTER)) ) { radio->position = 2; rval = 1; @@ -137,7 +137,7 @@ int ui_radio_do( UI_GADGET_RADIO * radio, d_event *event ) radio->position = 0; - if ((CurWindow->keyboard_focus_gadget==(UI_GADGET *)radio) && ((key==KEY_SPACEBAR) || (key==KEY_ENTER)) ) + if ((dlg->keyboard_focus_gadget==(UI_GADGET *)radio) && ((key==KEY_SPACEBAR) || (key==KEY_ENTER)) ) radio->pressed = 1; } @@ -161,10 +161,14 @@ int ui_radio_do( UI_GADGET_RADIO * radio, d_event *event ) } radio->flag = 1; } - else if (radio->pressed) - rval = 1; - ui_draw_radio( radio ); + if (radio->pressed) + { + ui_gadget_send_event(dlg, EVENT_UI_GADGET_PRESSED, (UI_GADGET *)radio); + rval = 1; + } + + ui_draw_radio( dlg, radio ); return rval; } diff --git a/ui/scroll.c b/ui/scroll.c index bed50338d..f8f228c8d 100644 --- a/ui/scroll.c +++ b/ui/scroll.c @@ -27,7 +27,7 @@ static char rcsid[] = "$Id: scroll.c,v 1.1.1.1 2006/03/17 19:52:16 zicodxx Exp $ #include "key.h" #include "timer.h" -void ui_draw_scrollbar( UI_GADGET_SCROLLBAR * scrollbar ) +void ui_draw_scrollbar( UI_DIALOG *dlg, UI_GADGET_SCROLLBAR * scrollbar ) { if (scrollbar->status==0) return; @@ -36,7 +36,7 @@ void ui_draw_scrollbar( UI_GADGET_SCROLLBAR * scrollbar ) ui_mouse_hide(); gr_set_current_canvas( scrollbar->canvas ); - if (CurWindow->keyboard_focus_gadget == (UI_GADGET *)scrollbar) + if (dlg->keyboard_focus_gadget == (UI_GADGET *)scrollbar) gr_setcolor( CRED ); else gr_setcolor( CGREY ); @@ -96,7 +96,7 @@ UI_GADGET_SCROLLBAR * ui_add_gadget_scrollbar( UI_DIALOG * dlg, short x, short y } -int ui_scrollbar_do( UI_GADGET_SCROLLBAR * scrollbar, d_event *event ) +int ui_scrollbar_do( UI_DIALOG *dlg, UI_GADGET_SCROLLBAR * scrollbar, d_event *event ) { int OnMe, OnSlider, keyfocus; int oldpos, op; @@ -105,14 +105,14 @@ int ui_scrollbar_do( UI_GADGET_SCROLLBAR * scrollbar, d_event *event ) keyfocus = 0; - if (CurWindow->keyboard_focus_gadget==(UI_GADGET *)scrollbar) + if (dlg->keyboard_focus_gadget==(UI_GADGET *)scrollbar) keyfocus = 1; if (scrollbar->start==scrollbar->stop) { scrollbar->position = 0; scrollbar->fake_position = 0; - ui_draw_scrollbar( scrollbar ); + ui_draw_scrollbar( dlg, scrollbar ); return 0; } @@ -276,10 +276,15 @@ int ui_scrollbar_do( UI_GADGET_SCROLLBAR * scrollbar, d_event *event ) if (op != scrollbar->position ) scrollbar->moved = 1; + if (scrollbar->moved) + { + ui_gadget_send_event(dlg, EVENT_UI_GADGET_PRESSED, (UI_GADGET *)scrollbar); + rval = 1; + } if (oldpos != scrollbar->fake_position) scrollbar->status = 1; - ui_draw_scrollbar( scrollbar ); + ui_draw_scrollbar( dlg, scrollbar ); return rval; } diff --git a/ui/ui.c b/ui/ui.c index aa5c950ad..2ee5ff441 100644 --- a/ui/ui.c +++ b/ui/ui.c @@ -58,8 +58,6 @@ void ui_init() gr_set_fontcolor( CBLACK, CWHITE ); - CurWindow = NULL; - ui_pad_init(); atexit(ui_close ); diff --git a/ui/userbox.c b/ui/userbox.c index bd5a0b9bc..3223bc54c 100644 --- a/ui/userbox.c +++ b/ui/userbox.c @@ -27,7 +27,7 @@ static char rcsid[] = "$Id: userbox.c,v 1.1.1.1 2006/03/17 19:52:22 zicodxx Exp #include "mouse.h" #include "key.h" -void ui_draw_userbox( UI_GADGET_USERBOX * userbox ) +void ui_draw_userbox( UI_DIALOG *dlg, UI_GADGET_USERBOX * userbox ) { if ( userbox->status==1 ) @@ -37,7 +37,7 @@ void ui_draw_userbox( UI_GADGET_USERBOX * userbox ) ui_mouse_hide(); gr_set_current_canvas( userbox->canvas ); - if (CurWindow->keyboard_focus_gadget == (UI_GADGET *)userbox) + if (dlg->keyboard_focus_gadget == (UI_GADGET *)userbox) gr_setcolor( CRED ); else gr_setcolor( CBRIGHT ); @@ -76,7 +76,7 @@ UI_GADGET_USERBOX * ui_add_gadget_userbox( UI_DIALOG * dlg, short x, short y, sh } -int ui_userbox_do( UI_GADGET_USERBOX * userbox, d_event *event ) +int ui_userbox_do( UI_DIALOG *dlg, UI_GADGET_USERBOX * userbox, d_event *event ) { int OnMe, olddrag; int x, y, z; @@ -101,22 +101,23 @@ int ui_userbox_do( UI_GADGET_USERBOX * userbox, d_event *event ) { if ( B1_JUST_PRESSED ) { - userbox->b1_dragging = 1; + userbox->b1_held_down = 1; userbox->b1_drag_x1 = x - userbox->x1; userbox->b1_drag_y1 = y - userbox->y1; - userbox->b1_clicked = 1; rval = 1; } else if (B1_JUST_RELEASED) { - userbox->b1_held_down = 0; userbox->b1_dragging = 0; + if (userbox->b1_held_down) + userbox->b1_clicked = 1; + userbox->b1_held_down = 0; rval = 1; } - if ( userbox->b1_dragging ) + if ( (event->type == EVENT_MOUSE_MOVED) && userbox->b1_held_down ) { - userbox->b1_held_down = 1; + userbox->b1_dragging = 1; userbox->b1_drag_x2 = x - userbox->x1; userbox->b1_drag_y2 = y - userbox->y1; } @@ -142,13 +143,19 @@ int ui_userbox_do( UI_GADGET_USERBOX * userbox, d_event *event ) userbox->b1_done_dragging = 1; } - if (CurWindow->keyboard_focus_gadget==(UI_GADGET *)userbox) + if (dlg->keyboard_focus_gadget==(UI_GADGET *)userbox) { userbox->keypress = keypress; rval = 1; } + + if (userbox->b1_clicked || userbox->b1_dragging) + { + ui_gadget_send_event(dlg, userbox->b1_clicked ? EVENT_UI_GADGET_PRESSED : EVENT_UI_USERBOX_DRAGGED, (UI_GADGET *)userbox); + rval = 1; + } - ui_draw_userbox( userbox ); + ui_draw_userbox( dlg, userbox ); return rval; }