All gadgets now send events

This commit is contained in:
Chris Taylor 2012-03-03 20:19:15 +08:00
parent 5e77e6f143
commit dc84147b51
15 changed files with 186 additions and 129 deletions

View file

@ -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
--------

View file

@ -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'.

View file

@ -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;

View file

@ -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);

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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);

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -58,8 +58,6 @@ void ui_init()
gr_set_fontcolor( CBLACK, CWHITE );
CurWindow = NULL;
ui_pad_init();
atexit(ui_close );

View file

@ -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;
}