/********************************************************************* * * WIDGET_HandleActive */ int WIDGET_HandleActive(WM_HWIN hObj, WM_MESSAGE* pMsg) { WM_MESSAGE Msg; WIDGET* pWidget = WIDGET_H2P(hObj); switch (pMsg->MsgId) { case WM_GET_ID: pMsg->Data.v = pWidget->Id; return 0; /* Message handled -> Return */ case WM_SET_FOCUS: if (pMsg->Data.v == 1) { WIDGET_SetState(hObj, pWidget->State | WIDGET_STATE_FOCUS); } else { WIDGET_SetState(hObj, pWidget->State & ~WIDGET_STATE_FOCUS); } Msg.MsgId = WM_NOTIFY_CHILD_HAS_FOCUS; Msg.Data.v = pMsg->Data.v; WM_SendToParent(hObj, &Msg); return 0; case WM_GET_HAS_FOCUS: pMsg->Data.v = pWidget->State & WIDGET_STATE_FOCUS; return 0; /* Message handled */ case WM_SET_ENABLE: if (pMsg->Data.v) { WIDGET_OrState(hObj, WIDGET_STATE_ENABLED); } else { WIDGET_AndState(hObj, WIDGET_STATE_ENABLED); } case WM_GET_ACCEPT_FOCUS: pMsg->Data.v = (pWidget->State & WIDGET_STATE_FOCUSSABLE) ? 1 : 0; /* Can handle focus */ return 0; /* Message handled */ case WM_GET_INSIDE_RECT: WIDGET__GetInsideRect(pWidget, (GUI_RECT*)pMsg->Data.p); return 0; /* Message handled */ } return 1; /* Message NOT handled */ }
void BUTTON_SetState(BUTTON_Handle hObj, int State) { WIDGET_SetState(hObj, State); }
/********************************************************************* * * WIDGET_HandleActive */ int WIDGET_HandleActive(WM_HWIN hObj, WM_MESSAGE* pMsg) { int Diff, Notification; WIDGET* pWidget = WIDGET_H2P(hObj); switch (pMsg->MsgId) { case WM_WIDGET_SET_EFFECT: Diff = pWidget->pEffect->EffectSize; pWidget->pEffect = (const WIDGET_EFFECT*)pMsg->Data.p; Diff -= pWidget->pEffect->EffectSize; _UpdateChildPostions(hObj, Diff); WM_InvalidateWindow(hObj); return 0; /* Message handled -> Return */ case WM_GET_ID: pMsg->Data.v = pWidget->Id; return 0; /* Message handled -> Return */ case WM_PID_STATE_CHANGED: if (pWidget->State & WIDGET_STATE_FOCUSSABLE) { const WM_PID_STATE_CHANGED_INFO * pInfo = (const WM_PID_STATE_CHANGED_INFO*)pMsg->Data.p; if (pInfo->State) { WM_SetFocus(hObj); } } break; case WM_TOUCH_CHILD: /* A descendent (child) has been touched or released. If it has been touched, we need to get to top. */ { const WM_MESSAGE * pMsgOrg; const GUI_PID_STATE * pState; pMsgOrg = (const WM_MESSAGE*)pMsg->Data.p; /* The original touch message */ pState = (const GUI_PID_STATE*)pMsgOrg->Data.p; if (pState) { /* Message may not have a valid pointer (moved out) ! */ if (pState->Pressed) { WM_BringToTop(hObj); return 0; /* Message handled -> Return */ } } } break; case WM_SET_ID: pWidget->Id = pMsg->Data.v; return 0; /* Message handled -> Return */ case WM_SET_FOCUS: if (pMsg->Data.v == 1) { WIDGET_SetState(hObj, pWidget->State | WIDGET_STATE_FOCUS); Notification = WM_NOTIFICATION_GOT_FOCUS; } else { WIDGET_SetState(hObj, pWidget->State & ~WIDGET_STATE_FOCUS); Notification = WM_NOTIFICATION_LOST_FOCUS; } WM_NotifyParent(hObj, Notification); pMsg->Data.v = 0; /* Focus change accepted */ return 0; case WM_GET_ACCEPT_FOCUS: pMsg->Data.v = (pWidget->State & WIDGET_STATE_FOCUSSABLE) ? 1 : 0; /* Can handle focus */ return 0; /* Message handled */ case WM_GET_INSIDE_RECT: WIDGET__GetInsideRect(pWidget, (GUI_RECT*)pMsg->Data.p); return 0; /* Message handled */ } return 1; /* Message NOT handled */ }