![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
Versión sin post-procesado del software del VmRideR
Dependencies: mbed
ScreenManager/ListaSelec.cpp
- Committer:
- jjmedina
- Date:
- 2015-06-15
- Revision:
- 1:a3c9b672b8e2
- Parent:
- 0:3d456b8ce449
File content as of revision 1:a3c9b672b8e2:
#include "mbed.h" #include "ListaSelec.h" extern ScreenManager SC; extern DigitalIn boton1; extern DigitalIn boton4; extern DigitalIn boton5; void ListaSelec::DrawElements(DogMLCD* lcd){ for(int i = 0; i < SCREENLINES; i++){ if((i + topElement) < nElementos){ lcd->XString(OFFSETX, HEIGHTCARACTER8*i + 1 + OFFSETY, list[i + topElement]); } } drawSelection(OFFSETX-1, HEIGHTCARACTER8*posMark + OFFSETY, WIDTH-OFFSETX, HEIGHTCARACTER8, lcd); } void ListaSelec::initialize(DogMLCD* lcd){ // Se inicializa la selección setSelect(0); topElement = 0; posMark = 0; lastPosMark = 0; // select font to use: lcd->XFont = xfont_8; // Se pintan los elementos de la lista DrawElements(lcd); // transmit work screen to physical screen: lcd->Flush(); } // El botón 1 sube la selección al elemento superior al actual void ListaSelec::button1pressed(DogMLCD* lcd){ // Si sales de los elementos seleccionables no se cambia de selección if((getSelect()-1) >= 0){ // Se selecciona el elemento setSelect(getSelect()-1); // Si se ha seleccionado un elemento superior que no está siendo mostrado en la pantalla if(getSelect() < topElement){ // Se sube hacia arriba el top element (se le resta 1) y se pintan de nuevo los elementos de pantalla topElement--; lcd->Clear(); DrawElements(lcd); }else{ // Sino se mueve el marcador de selección lastPosMark = posMark; posMark--; drawDeselection(OFFSETX-1, HEIGHTCARACTER8*lastPosMark + OFFSETY, WIDTH-OFFSETX , HEIGHTCARACTER8, lcd); drawSelection(OFFSETX-1, HEIGHTCARACTER8*posMark + OFFSETY, WIDTH-OFFSETX, HEIGHTCARACTER8, lcd); } // transmit work screen to physical screen: lcd->Flush(); } } // El botón 4 baja la selección al elemento superior al actual void ListaSelec::button4pressed(DogMLCD* lcd){ // Si sales de los elementos seleccionables no se cambia de selección if((getSelect()+1) <= (nElementos - 1)){ // Se selecciona el elemento setSelect(getSelect()+1); // Si se ha seleccionado un elemento inferior que no está siendo mostrado en la pantalla if(getSelect() > (topElement + SCREENLINES - 1)){ lcd->Clear(); topElement++; DrawElements(lcd); }else{ // Sino se mueve el marcador de selección lastPosMark = posMark; posMark++; drawDeselection(OFFSETX-1, HEIGHTCARACTER8*lastPosMark + OFFSETY, WIDTH-OFFSETX, HEIGHTCARACTER8, lcd); drawSelection(OFFSETX-1, HEIGHTCARACTER8*posMark + OFFSETY, WIDTH-OFFSETX, HEIGHTCARACTER8, lcd); } // transmit work screen to physical screen: lcd->Flush(); } } // El botón 5 envía a la pantalla correspondiente según el elemento seleccionado void ListaSelec::button5pressed(DogMLCD* lcd){ SC.changeScreen(nextScreenID[getSelect()]); } // Añade un elemento al menu con el texto especificado en el primer argumento // cada elemento nos enviará a la pantalla con el identificador del segundo argumento // Devuelve el identificador del elemento añadido int ListaSelec::addElement(char text[], char nameNextScreen[NCARSCREEN]){ //strcpy(list[nElementos], text); list[nElementos] = text; //strcpy(nextScreenID[nElementos], nameNextScreen); nextScreenID[nElementos] = nameNextScreen; nElementos++; return nElementos - 1; } char *ListaSelec::getElement(int index){ return list[index]; }