|

楼主 |
发表于 2022-9-13 15:17:51
|
显示全部楼层
UINT gx_studio_auto_event_handler(GX_WIDGET *widget, GX_EVENT *event_ptr, GX_CONST GX_STUDIO_EVENT_PROCESS *record)
{
UINT status = GX_SUCCESS;
GX_CONST GX_STUDIO_ACTION *action;
GX_CONST GX_WIDGET *parent = GX_NULL;
GX_WIDGET *target = GX_NULL;
GX_CONST GX_STUDIO_EVENT_ENTRY *entry = record->event_table;
while(entry->event_type)
{
if (entry->event_type == event_ptr->gx_event_type)
{
if((entry->event_type == GX_EVENT_ANIMATION_COMPLETE) &&
(entry->event_sender != event_ptr->gx_event_sender))
{
entry++;
continue;
}
action = entry->action_list;
while(action->opcode)
{
switch(action->opcode)
{
case GX_ACTION_TYPE_ATTACH:
if((action->flags & GX_ACTION_FLAG_POP_TARGET) ||
(action->flags & GX_ACTION_FLAG_POP_PARENT))
{
gx_system_screen_stack_get((GX_WIDGET **)&parent, &target);
}
if(!(action->flags & GX_ACTION_FLAG_POP_PARENT))
{
parent = action->parent;
}
if(!(action->flags & GX_ACTION_FLAG_POP_TARGET))
{
target = gx_studio_action_target_get(widget, action);
}
if (parent && target)
{
gx_widget_attach(parent, target);
}
break;
case GX_ACTION_TYPE_DETACH:
target = gx_studio_action_target_find(widget, action);
if (target)
{
gx_widget_detach(target);
if (target->gx_widget_status & GX_STATUS_STUDIO_CREATED)
{
gx_widget_delete(target);
}
}
break;
case GX_ACTION_TYPE_TOGGLE:
if(action->flags & GX_ACTION_FLAG_POP_TARGET)
{
gx_system_screen_stack_get(GX_NULL, &target);
}
else
{
target = gx_studio_action_target_get(widget, action);
}
gx_studio_screen_toggle(widget, target);
break;
case GX_ACTION_TYPE_SHOW:
target = gx_studio_action_target_get(widget, action);
if(target)
{
gx_widget_show(target);
}
break;
case GX_ACTION_TYPE_HIDE:
target = gx_studio_action_target_find(widget, action);
if(target)
{
gx_widget_hide(target);
}
break;
case GX_ACTION_TYPE_ANIMATION:
gx_studio_animation_execute(widget, action);
break;
case GX_ACTION_TYPE_WINDOW_EXECUTE:
if((action->flags & GX_ACTION_FLAG_POP_TARGET) ||
(action->flags & GX_ACTION_FLAG_POP_PARENT))
{
gx_system_screen_stack_get((GX_WIDGET **)&parent, &target);
}
if(!(action->flags & GX_ACTION_FLAG_POP_PARENT))
{
parent = widget->gx_widget_parent;
}
if(!(action->flags & GX_ACTION_FLAG_POP_TARGET))
{
target = gx_studio_action_target_get(widget, action);
}
if (parent && target)
{
gx_widget_attach(parent, target);
gx_window_execute((GX_WINDOW *) target, GX_NULL);
}
break;
case GX_ACTION_TYPE_WINDOW_EXECUTE_STOP:
return event_ptr->gx_event_sender;
case GX_ACTION_TYPE_SCREEN_STACK_PUSH:
target = gx_studio_action_target_get(widget, action);
if(target)
{
gx_system_screen_stack_push(target);
}
break;
case GX_ACTION_TYPE_SCREEN_STACK_POP:
gx_system_screen_stack_pop();
break;
case GX_ACTION_TYPE_SCREEN_STACK_RESET:
gx_system_screen_stack_reset();
break;
default:
break;
}
action++;
}
}
entry++;
}
if (record->chain_event_handler)
{
status = record->chain_event_handler(widget, event_ptr);
}
return status;
}
硬汉哥,你说的类似这种例程,实质应该也在自动生成的函数中实现了,只不过存在一定的被动,比如,有的按钮需要条件判断来跳转……
|
|