Пример #1
0
// The dialog handler borrows heavily from the newmenu_handler
static int ui_dialog_handler(window *wind, d_event *event, UI_DIALOG *dlg)
{
	int rval = 0;

	if (event->type == EVENT_WINDOW_CLOSED ||
		event->type == EVENT_WINDOW_ACTIVATED ||
		event->type == EVENT_WINDOW_DEACTIVATED)
		return 0;

	if (dlg->callback)
		if ((*dlg->callback)(dlg, event, dlg->userdata))
			return 1;		// event handled

	if (!window_exists(wind))
		return 1;

	switch (event->type)
	{
		case EVENT_MOUSE_BUTTON_DOWN:
		case EVENT_MOUSE_BUTTON_UP:
		case EVENT_MOUSE_MOVED:
			/*return*/ ui_dialog_do_gadgets(dlg, event);
			if (!window_exists(wind))
				return 1;

			rval = mouse_in_window(dlg->wind);
			break;

		case EVENT_KEY_COMMAND:
		case EVENT_KEY_RELEASE:
			rval = ui_dialog_do_gadgets(dlg, event);
			break;

		case EVENT_IDLE:
			timer_delay2(50);
			rval = ui_dialog_do_gadgets(dlg, event);
			break;

		case EVENT_WINDOW_DRAW:
		{
			d_event event2 = { EVENT_UI_DIALOG_DRAW };
			ui_dialog_draw(dlg);
			rval = ui_dialog_do_gadgets(dlg, event);
			window_send_event(wind, &event2);
			break;
		}

		case EVENT_WINDOW_CLOSE:
			ui_gadget_delete_all(dlg);
			selected_gadget = NULL;
			d_free( dlg );
			break;

		default:
			break;
	}

	return rval;
}
Пример #2
0
// The dialog handler borrows heavily from the newmenu_handler
static window_event_result ui_dialog_handler(window *wind,const d_event &event, UI_DIALOG *dlg)
{
	window_event_result rval{window_event_result::ignored};

	if (event.type == EVENT_WINDOW_ACTIVATED ||
		event.type == EVENT_WINDOW_DEACTIVATED)
		return window_event_result::ignored;
	
	if (dlg->d_callback)
		if ((rval = (*dlg->d_callback)(dlg, event, dlg->d_userdata)) != window_event_result::ignored)
			return rval;		// event handled

	switch (event.type)
	{
		case EVENT_IDLE:
			timer_delay2(50);
			/*-fallthrough*/
		case EVENT_MOUSE_BUTTON_DOWN:
		case EVENT_MOUSE_BUTTON_UP:
		case EVENT_MOUSE_MOVED:
		case EVENT_KEY_COMMAND:
		case EVENT_KEY_RELEASE:
			return ui_dialog_do_gadgets(dlg, event);
		case EVENT_WINDOW_DRAW:
		{
			ui_dialog_draw(dlg);
			rval = ui_dialog_do_gadgets(dlg, event);
			if (rval != window_event_result::close)
			{
				d_event event2 = { EVENT_UI_DIALOG_DRAW };
				window_send_event(*wind, event2);
			}
			return rval;
		}

		case EVENT_WINDOW_CLOSE:
			if (rval != window_event_result::deleted)	// check if handler already deleted dialog (e.g. if UI_DIALOG was subclassed)
				delete dlg;
			return window_event_result::ignored;	// free the window in any case (until UI_DIALOG is subclass of window)
		default:
			return window_event_result::ignored;
	}
}