uint8_t WidgetEvent( struct sWidget *pWidget, struct sEvent *pEvent ){
if( WIDGET_SRC_UI == pEvent->src ){
WidgetEventID( pWidget, pEvent );
if( NULL != pWidget->pChild ){
WidgetEvent( pWidget->pChild, pEvent );
}
if( NULL != pWidget->pNext ){
WidgetEvent( pWidget->pNext, pEvent );
}
return 1;
}else{
if( NULL != pWidget->pNext ){
if( WidgetEvent( pWidget->pNext, pEvent ) ){
return 1;
}
}
if( NULL != pWidget->pChild ){
if( WidgetEvent( pWidget->pChild, pEvent ) ){
return 1;
}
}
if( WidgetEventID( pWidget, pEvent ) ){
return 1;
}
}
return 0;
}
uint8_t WidgetEventID( struct sWidget *pWidget, struct sEvent *pEvent ){
switch( pWidget->ID ){
case WIDGET_ID_CONTAINER: return WidgetEventContainer( pWidget, pEvent );
case WIDGET_ID_TEXT: return WidgetEventText( pWidget, pEvent );
case WIDGET_ID_BUTTON: return WidgetEventButton( pWidget, pEvent );
default: return 0;
}
return 0;
}
uint8_t WidgetEventContainer( struct sWidget *pWidget, struct sEvent *pEvent ){
if( WIDGET_SRC_UI == pEvent->src && WIDGET_TP_DRAW == pEvent->type ){
GLCDsRect( pWidget->pGLCD, pWidget->rect, GLCD_FILL, GLCD_COLOR_WHITE );
GLCDsRect( pWidget->pGLCD, pWidget->rect, GLCD_NO_FILL, GLCD_COLOR_BLACK );
return 1;
}else if( WIDGET_SRC_KEYB == pEvent->src && WIDGET_TP_RELEASE == pEvent->type && EVENT_DATA_A == pEvent->data1 ){
// Next Widget
return 1;
}else if( WIDGET_SRC_KEYB == pEvent->src && WIDGET_TP_HOLD == pEvent->type && EVENT_DATA_A == pEvent->data1 ){
// Next Screen
return 1;
}else if( WIDGET_SRC_KEYB == pEvent->src && WIDGET_TP_RELEASE == pEvent->type && EVENT_DATA_C == pEvent->data1 ){
// Prev Widget
return 1;
}else if( WIDGET_SRC_KEYB == pEvent->src && WIDGET_TP_HOLD == pEvent->type && EVENT_DATA_C == pEvent->data1 ){
// Prev Screen
return 1;
}else if( WIDGET_SRC_TOUCH == pEvent->src && WIDGET_TP_PRESS == pEvent->type ){
struct sPoint point = { pEvent->data1, pEvent->data2 };
if( isInside( pWidget->rect, point ) ){
// FocusGain();
return 1;
}else{
return 0;
}
}
return 0;
}
uint8_t WidgetEventText( struct sWidget *pWidget, struct sEvent *pEvent ){
if( WIDGET_SRC_UI == pEvent->src && WIDGET_TP_DRAW == pEvent->type ){
GLCDsRect( pWidget->pGLCD, pWidget->rect, GLCD_FILL, GLCD_COLOR_WHITE );
GLCDsRect( pWidget->pGLCD, pWidget->rect, GLCD_NO_FILL, GLCD_COLOR_BLACK );
GLCDsText( pWidget->pGLCD, pWidget->rect, pWidget->pfont, pWidget->str, GLCD_NO_FILL, GLCD_COLOR_BLACK );
return 1;
}
return 0;
}
uint8_t WidgetEventButton( struct sWidget *pWidget, struct sEvent *pEvent ){
if( WIDGET_SRC_UI == pEvent->src && WIDGET_TP_DRAW == pEvent->type ){
GLCDsRect( pWidget->pGLCD, pWidget->rect, GLCD_FILL, GLCD_COLOR_WHITE );
GLCDsRect( pWidget->pGLCD, pWidget->rect, GLCD_NO_FILL, GLCD_COLOR_BLACK );
if( WidgetFlagTest( pWidget, WIDGET_FLAG_PRESSED ) ){
GLCDsRect( pWidget->pGLCD, pWidget->rect, GLCD_FILL, GLCD_COLOR_BLACK );
}
GLCDsImage( pWidget->pGLCD, pWidget->rect, pWidget->pBmp );
GLCDsText( pWidget->pGLCD, pWidget->rect, pWidget->pfont, pWidget->str, GLCD_NO_FILL, GLCD_COLOR_BLACK );
return 1;
}
if( WidgetFlagTest( pWidget->state, WIDGET_FLAG_PRESSED ) ){
if( WIDGET_SRC_TOUCH == pEvent->src && WIDGET_TP_PRESS == pEvent->type ){
struct sPoint point = { pEvent->data1, pEvent->data2 };
if( isInside( pWidget->rect, point ) ){
// FocusGain();
WidgetFlagClear( pWidget->state, WIDGET_FLAG_PRESSED );
WidgetEventButton( pWidget, WIDGET_EVENT_DRAW );
return 1;
}else{
return 0;
}
}
if( WIDGET_SRC_KEYB == pEvent->src && WIDGET_TP_RELEASE == pEvent->type && EVENT_DATA_B == pEvent->data1 ){
WidgetFlagClear( pWidget->state, WIDGET_FLAG_PRESSED );
WidgetEventButton( pWidget, WIDGET_EVENT_DRAW );
return 1;
}
}else{
if( WIDGET_SRC_TOUCH == pEvent->src && WIDGET_TP_PRESS == pEvent->type ){
struct sPoint point = { pEvent->data1, pEvent->data2 };
if( isInside( pWidget->rect, point ) ){
// FocusGain();
WidgetFlagSet( pWidget->state, WIDGET_FLAG_PRESSED );
WidgetEventButton( pWidget, WIDGET_EVENT_DRAW );
if( NULL != pButton->pfCallBack ){
pButton->pfCallBack( pWidget );
}
return 1;
}else{
return 0;
}
}
if( WIDGET_SRC_KEYB == pEvent->src && WIDGET_TP_PRESS == pEvent->type && EVENT_DATA_B == pEvent->data1 ){
WidgetFlagSet( pWidget->state, WIDGET_FLAG_PRESSED );
WidgetEventButton( pWidget, WIDGET_EVENT_DRAW );
if( NULL != pButton->pfCallBack ){
pButton->pfCallBack( pWidget );
}
return 1;
}
}
return 0;
}