dword imgbtn_oninput(void * x, int action, ATEV * atev) { ACONTROLP ctl = (ACONTROLP) x; IMGBTNDP d = (IMGBTNDP) ctl->d; dword msg = 0; switch (action) { case ATEV_MOUSEDN: { vibrate(30); d->pushed = 1; msg = aw_msg(0, 1, 0, 0); ctl->ondraw(ctl); } break; case ATEV_MOUSEUP: { d->pushed = 0; if (aw_touchoncontrol(ctl, atev->x, atev->y)) { msg = aw_msg(d->touchmsg, 1, 0, 0); } else { msg = aw_msg(0, 1, 0, 0); } ctl->ondraw(ctl); } break; case ATEV_SELECT: { if (atev->d) { vibrate(30); d->pushed = 1; msg = aw_msg(0, 1, 0, 0); ctl->ondraw(ctl); } else { d->pushed = 0; msg = aw_msg(d->touchmsg, 1, 0, 0); ctl->ondraw(ctl); } } break; } return msg; }
dword accb_oninput(void * x,int action,ATEV * atev){ ACONTROLP ctl = (ACONTROLP) x; ACCBDP d = (ACCBDP) ctl->d; dword msg = 0; switch (action){ case ATEV_MOUSEDN: { vibrate(30); d->pushed=1; msg=aw_msg(0,1,0,0); ctl->ondraw(ctl); } break; case ATEV_MOUSEUP: { d->pushed=0; if (aw_touchoncontrol(ctl,atev->x,atev->y)) d->checked = !d->checked; msg=aw_msg(0,1,0,0); ctl->ondraw(ctl); } break; case ATEV_SELECT: { if (atev->d){ vibrate(30); d->pushed=1; } else{ d->pushed=0; d->checked = !d->checked; } msg=aw_msg(0,1,0,0); ctl->ondraw(ctl); } break; } return msg; }
//-- Dispatch Messages dword aw_dispatch(AWINDOWP win){ dword msg; int i; ui_clear_key_queue(); while(1){ //-- Wait For Event ATEV atev; int action =atouch_wait(&atev); //-- Reset Message Value msg = aw_msg(0,0,0,0); //-- Check an Action Value switch (action){ case ATEV_MESSAGE:{ msg = atev.msg; } break; case ATEV_BACK:{ if (!atev.d){ msg = aw_msg(5,0,0,0); } } break; case ATEV_DOWN: case ATEV_RIGHT: if (!atev.d){ if (win->focusIndex!=-1){ ACONTROLP ctl = (ACONTROLP) win->controls[win->focusIndex]; if (ctl->oninput!=NULL){ msg = ctl->oninput((void*)ctl,action,&atev); } if (aw_gl(msg)==0){ for (i=win->focusIndex+1;i<win->controln;i++){ ACONTROLP fctl = (ACONTROLP) win->controls[i]; if (fctl->onfocus!=NULL){ if (fctl->onfocus(fctl)){ win->focusIndex = i; ctl->onblur(ctl); aw_draw(win); break; } } } } } } break; case ATEV_UP: case ATEV_LEFT: if (!atev.d){ if (win->focusIndex!=-1){ ACONTROLP ctl = (ACONTROLP) win->controls[win->focusIndex]; if (ctl->oninput!=NULL){ msg = ctl->oninput((void*)ctl,action,&atev); } if (aw_gl(msg)==0){ for (i=win->focusIndex-1;i>=0;i--){ ACONTROLP fctl = (ACONTROLP) win->controls[i]; if (fctl->onfocus!=NULL){ if (fctl->onfocus(fctl)){ win->focusIndex = i; ctl->onblur(ctl); aw_draw(win); break; } } } } } } break; case ATEV_MENU: case ATEV_SEARCH: case ATEV_HOME: case ATEV_SELECT:{ if (win->focusIndex!=-1){ ACONTROLP ctl = (ACONTROLP) win->controls[win->focusIndex]; if (ctl->oninput!=NULL){ msg = ctl->oninput((void*)ctl,action,&atev); } } } break; case ATEV_MOUSEDN: { if (win->controln>0){ int i; for (i=win->controln-1;i>=0;i--){ ACONTROLP ctl = (ACONTROLP) win->controls[i]; if (aw_touchoncontrol(ctl,atev.x,atev.y)){ if (ctl->oninput!=NULL){ msg = ctl->oninput((void*)ctl,action,&atev); win->touchIndex = i; break; } } } } } break; case ATEV_MOUSEUP:{ if (win->touchIndex!=-1){ ACONTROLP ctl = (ACONTROLP) win->controls[win->touchIndex]; if (ctl->oninput!=NULL) msg = ctl->oninput((void*)ctl,action,&atev); win->touchIndex = -1; } } break; case ATEV_MOUSEMV:{ if (win->touchIndex!=-1){ ACONTROLP ctl = (ACONTROLP) win->controls[win->touchIndex]; if (ctl->oninput!=NULL) msg = ctl->oninput((void*)ctl,action,&atev); } } break; } if (aw_gd(msg)==1) aw_draw(win); if (aw_gm(msg)!=0) return msg; } return msg; }