Library for 3.2'' uLcd Picaso Display4D system Picaso Serial Environment Command Set web: http://www.4dsystems.com.au/product/20/67/Processors_Graphics/PICASO/
Diff: Keyboard.cpp
- Revision:
- 1:a74e42cf52b2
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Keyboard.cpp Sun Apr 05 13:54:48 2015 +0000 @@ -0,0 +1,608 @@ +#include "Keyboard.h" + +// +Keyboard::Keyboard(Screen* pscreen,string titre,Nunchuk* pnunchuk,Buzzer* pbuzzer,float sampleTime):myScreen(pscreen),myTitre(titre), + myBuzzer(pbuzzer),myNunchuk(pnunchuk),mySampleTime(sampleTime) +{ + myBeep= new Note("F%4",50); + myEnter=false; + + myIndice=0; + myPointeur=0; + + initialisation(); + + createScreen(); +} +//------------------------------------------------ +Keyboard::Keyboard(Screen* pscreen,string titre,Buzzer* pbuzzer):myScreen(pscreen),myTitre(titre),myBuzzer(pbuzzer) +{ + myNunchuk=NULL; + mySampleTime=0.1; + + myBeep= new Note("F%4",50); + myEnter=false; + + myIndice=0; + myPointeur=0; + + initialisation(); + + createScreen(); +} +//------------------------------------------------ +void Keyboard::initialisation(void) +{ + myMessage.event=EVENT_NO_ACTIVITY; + myMessage.objId=0; + myMessage.posiX=0; + myMessage.posiY=0; + + for(int i=0; i<50; i++) { + myBuffer[i]='\0'; + } + // + for(int i=0; i<40; i++) { + myTabBtn[i]=0; + } + myString=""; + + pLabelTitre=0; + pLabel=0; + + pBtn_0=0; + pBtn_1=0; + pBtn_2=0; + pBtn_3=0; + pBtn_4=0; + pBtn_5=0; + pBtn_6=0; + pBtn_7=0; + pBtn_8=0; + pBtn_9=0; + + pBtn_A=0; + pBtn_B=0; + pBtn_C=0; + pBtn_D=0; + pBtn_E=0; + pBtn_F=0; + pBtn_G=0; + pBtn_H=0; + pBtn_I=0; + pBtn_J=0; + + pBtn_K=0; + pBtn_L=0; + pBtn_M=0; + pBtn_N=0; + pBtn_O=0; + pBtn_P=0; + pBtn_Q=0; + pBtn_R=0; + pBtn_S=0; + pBtn_T=0; + pBtn_U=0; + + pBtn_V=0; + pBtn_W=0; + pBtn_X=0; + pBtn_Y=0; + pBtn_Z=0; + + pBtn_Point=0; + + pBtn_Esp=0; + pBtn_Del=0; + pBtn_Ok=0; +} +//------------------------------------------------ +Keyboard::~Keyboard(void) +{ + myTicker.detach(); + + if(myScreen!=NULL) + delete myScreen; + + if(myBeep!=NULL) + delete myBeep; + +} +//------------------------------------------------ +bool Keyboard::isEnterPressed(void) +{ + return myEnter; +} +//------------------------------------------------ +void Keyboard::loop(void) +{ + + if(myNunchuk==NULL) { + + TouchEvent event=myScreen->getTouchEvent(&myMessage);//EVENT_NO_ACTIVITY EVENT_PRESS EVENT_RELEASE EVENT_MOVE + + if(event>0) { + myScreen->getProcessMessage(&myMessage); + affiche(); + + } + } + // + else { + myNunchuk->process(); + actionNunchuk(); + } + +} +//------------------------------------------------ +void Keyboard::draw(void) +{ + myScreen->drawAllWidget(); + + wait(0.1); + + myTicker.attach(this,&Keyboard::loop,mySampleTime); +} +//------------------------------------------------ +//int Keyboard::getString(char* str) +string Keyboard::getString(void) +{ + myString=""; + + for(int i=0; i<myIndice; i++) { + myString+=myBuffer[i]; + } + + return myString; + /* + for(int i=0; i<myIndice; i++) { + str[i]=myBuffer[i]; + } + + return myIndice; + */ +} + +//------------------------------------------------- +void Keyboard::createScreen(void) +{ + UINT16 w=22; + UINT16 h=25; + + UINT16 sx=5; + UINT16 sy=150; + + myPointeur=0; + + //--------------------- + pLabelTitre= new Label(myScreen,5,5,myTitre,FONT_3,BLACK,YELLOW); + //--------------------- + pLabel= new Label(myScreen,5,40,"_",FONT_3,BLACK,YELLOW); + + // + pBtn_0= new Button(myScreen,BTN_0_ID,sx,sy,"0",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_0; + myPointeur++; + sx+=w; + // + pBtn_1= new Button(myScreen,BTN_1_ID,sx,sy,"1",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_1; + myPointeur++; + sx+=w; + + pBtn_2= new Button(myScreen,BTN_2_ID,sx,sy,"2",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_2; + myPointeur++; + sx+=w; + + pBtn_3= new Button(myScreen,BTN_3_ID,sx,sy,"3",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_3; + myPointeur++; + sx+=w; + + pBtn_4= new Button(myScreen,BTN_4_ID,sx,sy,"4",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_4; + myPointeur++; + sx+=w; + + pBtn_5= new Button(myScreen,BTN_5_ID,sx,sy,"5",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_5; + myPointeur++; + sx+=w; + + pBtn_6= new Button(myScreen,BTN_6_ID,sx,sy,"6",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_6; + myPointeur++; + sx+=w; + + pBtn_7= new Button(myScreen,BTN_7_ID,sx,sy,"7",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_7; + myPointeur++; + sx+=w; + + pBtn_8= new Button(myScreen,BTN_8_ID,sx,sy,"8",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_8; + myPointeur++; + sx+=w; + + pBtn_9= new Button(myScreen,BTN_9_ID,sx,sy,"9",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_9; + myPointeur++; + + //---- + sx=5; + sy+=h+5; + pBtn_A= new Button(myScreen,BTN_A_ID,sx,sy,"A",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_A; + myPointeur++; + sx+=w; + + pBtn_Z= new Button(myScreen,BTN_Z_ID,sx,sy,"Z",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_Z; + myPointeur++; + sx+=w; + + pBtn_E= new Button(myScreen,BTN_E_ID,sx,sy,"E",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_E; + myPointeur++; + sx+=w; + + pBtn_R= new Button(myScreen,BTN_R_ID,sx,sy,"R",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_R; + myPointeur++; + sx+=w; + + pBtn_T= new Button(myScreen,BTN_T_ID,sx,sy,"T",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_T; + myPointeur++; + sx+=w; + + pBtn_Y= new Button(myScreen,BTN_Y_ID,sx,sy,"Y",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_Y; + myPointeur++; + sx+=w; + + pBtn_U= new Button(myScreen,BTN_U_ID,sx,sy,"U",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_U; + myPointeur++; + sx+=w; + + pBtn_I= new Button(myScreen,BTN_I_ID,sx,sy,"I",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_I; + myPointeur++; + sx+=w; + + pBtn_O= new Button(myScreen,BTN_O_ID,sx,sy,"O",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_O; + myPointeur++; + sx+=w; + + pBtn_P= new Button(myScreen,BTN_P_ID,sx,sy,"P",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_P; + myPointeur++; + //------------------------------ + sx=5; + sy+=h; + + sx+=w/2; + pBtn_Q= new Button(myScreen,BTN_Q_ID,sx,sy,"Q",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_Q; + myPointeur++; + sx+=w; + + pBtn_S= new Button(myScreen,BTN_S_ID,sx,sy,"S",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_S; + myPointeur++; + sx+=w; + + pBtn_D= new Button(myScreen,BTN_D_ID,sx,sy,"D",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_D; + myPointeur++; + sx+=w; + + pBtn_F= new Button(myScreen,BTN_F_ID,sx,sy,"F",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_F; + myPointeur++; + sx+=w; + + pBtn_G= new Button(myScreen,BTN_G_ID,sx,sy,"G",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_G; + myPointeur++; + sx+=w; + + pBtn_H= new Button(myScreen,BTN_H_ID,sx,sy,"H",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_H; + myPointeur++; + sx+=w; + + pBtn_J= new Button(myScreen,BTN_J_ID,sx,sy,"J",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_J; + myPointeur++; + sx+=w; + + pBtn_K= new Button(myScreen,BTN_K_ID,sx,sy,"K",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_K; + myPointeur++; + sx+=w; + + pBtn_L= new Button(myScreen,BTN_L_ID,sx,sy,"L",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_L; + myPointeur++; + //---------------- + sx=5; + sy+=h; + + sx+=w; + + pBtn_W= new Button(myScreen,BTN_W_ID,sx,sy,"W",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_W; + myPointeur++; + sx+=w; + + pBtn_X= new Button(myScreen,BTN_X_ID,sx,sy,"X",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_X; + myPointeur++; + sx+=w; + + pBtn_C= new Button(myScreen,BTN_C_ID,sx,sy,"C",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_C; + myPointeur++; + sx+=w; + + pBtn_V= new Button(myScreen,BTN_V_ID,sx,sy,"V",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_V; + myPointeur++; + sx+=w; + + pBtn_B= new Button(myScreen,BTN_B_ID,sx,sy,"B",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_B; + myPointeur++; + sx+=w; + + pBtn_N= new Button(myScreen,BTN_N_ID,sx,sy,"N",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_N; + myPointeur++; + sx+=w; + + pBtn_M= new Button(myScreen,BTN_M_ID,sx,sy,"M",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_M; + myPointeur++; + sx+=w; + + pBtn_Point=new Button(myScreen,BTN_POINT_ID,sx,sy,".",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_Point; + myPointeur++; + //------------------- + sx=5; + sy+=h+5; + + pBtn_Del=new Button(myScreen,BTN_DEL_ID,sx,sy,"Suppr",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_Del; + myPointeur++; + sx+=3*w; + + pBtn_Esp= new Button(myScreen,BTN_ESP_ID,sx,sy," Espace ",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_Esp; + myPointeur++; + sx+=4*w; + + pBtn_Ok=new Button(myScreen,BTN_OK_ID,sx,sy,"Enter",FONT_3,BLACK,GRAY,BUTTON_STATE_PRESSED); + myTabBtn[myPointeur]=pBtn_Ok; + + // + myPointeur=10; + +} +//-------------------------------------------------- +void Keyboard::affiche(void) +{ + UINT16 id=myMessage.objId; + + static Button* pb=NULL; + + if(myMessage.event==EVENT_PRESS && id>0) { + if(myBuzzer!=NULL) + myBuzzer->tone(myBeep); + + pb=(Button*)myScreen->getWidgetById(id); + + if(pb!=NULL) { + pb->setState(BUTTON_STATE_RELEASED); + wait(0.1); + pb->setState(BUTTON_STATE_PRESSED); + } + + if(myIndice >50 || myIndice<0) + myIndice=0; + + // + afficheById(id); + + } +} +//-------------------------------------------------- +void Keyboard::afficheById(UINT16 id) +{ + char str='_'; + +//les nombres + if(id>=10 && id<20) { + str='0'+(id-10); + + myBuffer[myIndice]=str; + myIndice++; + + myBuffer[myIndice]='_'; + //pLabel->setNewText(myBuffer,myIndice-1); + pLabel->setNewText(myBuffer); + return; + + } +// +//les lettres + if(id>=100 && id<126) { + str='A'+(id-100); + + myBuffer[myIndice]=str; + myIndice++; + + myBuffer[myIndice]='_'; + //pLabel->setNewText(myBuffer,myIndice-1); + pLabel->setNewText(myBuffer); + return; + } +// +//le point + if(id==BTN_POINT_ID) { + str='.'; + myBuffer[myIndice]=str; + myIndice++; + + myBuffer[myIndice]='_'; + // pLabel->setNewText(myBuffer,myIndice-1); + pLabel->setNewText(myBuffer); + + return; + } +// +//l'espace + if(id==BTN_ESP_ID) { + str=' '; + + myBuffer[myIndice]=str; + myIndice++; + + myBuffer[myIndice]='_'; + // pLabel->setNewText(myBuffer,myIndice-1); + pLabel->setNewText(myBuffer); + return; + } +// +//enter + if(id==BTN_OK_ID) { + myEnter=true; + return; + } + +//Supp + if(id==BTN_DEL_ID) { + if(myIndice>=0) + myIndice--; + + myBuffer[myIndice]='_'; + //pLabel->setNewText(myBuffer,myIndice-1); + pLabel->setNewText(myBuffer); + } +} + +//-------------------------------------------------- +void Keyboard::actionNunchuk(void) +{ + + static bool isZ=false; + static Button* pb=myTabBtn[10]; + + + signed char posX=myNunchuk->getJoyX(); + + signed char valZ=myNunchuk->getBtnZ(); + + signed char valC=myNunchuk->getBtnC(); + + + // + switch(valC) { + case 1: + myEnter=true; + return; + // + case 0: + myEnter=false; + break; + } + // + //////////////////////// + switch(valZ) { + case 1: + if(isZ==false) { + if(myPointeur==39) { + myEnter=true; + return; + } + + pb=myTabBtn[myPointeur]; + + UINT16 id=pb->getId(); + + afficheById(id); + + + isZ=true; + } + break; + + // + case 0: + isZ=false; + break; + + // + default: + break; + } + // + + + // + switch(posX) { + case -1: + myPointeur--; + if(myPointeur<0) + myPointeur=39; + + pb=myTabBtn[myPointeur]; + + if(pb!=NULL) { + pb->setState(BUTTON_STATE_RELEASED); + wait(0.1); + pb->setState(BUTTON_STATE_PRESSED); + } + + break; + + // + case 1: + myPointeur++; + + if(myPointeur>39) + myPointeur=0; + + pb=myTabBtn[myPointeur]; + + if(pb!=NULL) { + pb->setState(BUTTON_STATE_RELEASED); + wait(0.1); + pb->setState(BUTTON_STATE_PRESSED); + } + + break; + + // + case 0: + + if(pb!=NULL ) { + pb->setState(BUTTON_STATE_RELEASED); + wait(0.1); + pb->setState(BUTTON_STATE_PRESSED); + wait(0.1); + } + break; + + // + default: + break; + } + + // +} +//-------------------------------------------------- \ No newline at end of file