Versión de Firmware con funciones de RAM incorporadas.
Dependencies: mbed
Fork of VmRecorderV1dot1 by
ScreenManager/Menu.cpp@2:e818c80e6d5c, 2015-07-14 (annotated)
- Committer:
- JuanManuelAmador
- Date:
- Tue Jul 14 08:34:11 2015 +0000
- Revision:
- 2:e818c80e6d5c
- Parent:
- 0:3d456b8ce449
Funciones de memoria RAM introducidas.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
JuanManuelAmador | 0:3d456b8ce449 | 1 | #include "mbed.h" |
JuanManuelAmador | 0:3d456b8ce449 | 2 | #include "Menu.h" |
JuanManuelAmador | 0:3d456b8ce449 | 3 | |
JuanManuelAmador | 0:3d456b8ce449 | 4 | extern ScreenManager SC; |
JuanManuelAmador | 0:3d456b8ce449 | 5 | |
JuanManuelAmador | 0:3d456b8ce449 | 6 | extern DigitalIn boton1; |
JuanManuelAmador | 0:3d456b8ce449 | 7 | extern DigitalIn boton4; |
JuanManuelAmador | 0:3d456b8ce449 | 8 | extern DigitalIn boton5; |
JuanManuelAmador | 0:3d456b8ce449 | 9 | |
JuanManuelAmador | 0:3d456b8ce449 | 10 | void Menu::initialize(DogMLCD* lcd){ |
JuanManuelAmador | 0:3d456b8ce449 | 11 | // Se inicializa la selección |
JuanManuelAmador | 0:3d456b8ce449 | 12 | setSelect(0); |
JuanManuelAmador | 0:3d456b8ce449 | 13 | |
JuanManuelAmador | 0:3d456b8ce449 | 14 | // select font to use: |
JuanManuelAmador | 0:3d456b8ce449 | 15 | lcd->XFont = xfont_11; |
JuanManuelAmador | 0:3d456b8ce449 | 16 | |
JuanManuelAmador | 0:3d456b8ce449 | 17 | // Para pintar los elementos del menú primero |
JuanManuelAmador | 0:3d456b8ce449 | 18 | // se calcula la posición del primer elemento y el offset hasta el siguiente elemento (eje vertical) |
JuanManuelAmador | 0:3d456b8ce449 | 19 | int offset = HEIGHT/(nElementos + 1); |
JuanManuelAmador | 0:3d456b8ce449 | 20 | int posy0 = offset - SEMIHEIGHTFONT; |
JuanManuelAmador | 0:3d456b8ce449 | 21 | |
JuanManuelAmador | 0:3d456b8ce449 | 22 | // Se pintan los elementos del menu con dos particularidades: |
JuanManuelAmador | 0:3d456b8ce449 | 23 | // - El elemento seleccionado se pinta "seleccionado" |
JuanManuelAmador | 0:3d456b8ce449 | 24 | // - Los elementos se pintan centrados |
JuanManuelAmador | 0:3d456b8ce449 | 25 | |
JuanManuelAmador | 0:3d456b8ce449 | 26 | for(int i = 0; i < nElementos; i++){ |
JuanManuelAmador | 0:3d456b8ce449 | 27 | posElement[i][2] = widthElement(i, lcd); |
JuanManuelAmador | 0:3d456b8ce449 | 28 | posElement[i][0] = (WIDTH - posElement[i][2])/2; |
JuanManuelAmador | 0:3d456b8ce449 | 29 | posElement[i][1] = offset*(i) + posy0;; |
JuanManuelAmador | 0:3d456b8ce449 | 30 | lcd->XString(posElement[i][0], posElement[i][1], list[i]); |
JuanManuelAmador | 0:3d456b8ce449 | 31 | // Si el elemento está seleccionado se marca con la forma de selección correspondiente |
JuanManuelAmador | 0:3d456b8ce449 | 32 | if(i == getSelect()){ |
JuanManuelAmador | 0:3d456b8ce449 | 33 | drawSelection(posElement[i][0]-2, posElement[i][1]-1, posElement[i][2]+2, HEIGHTCARACTER+2, lcd); |
JuanManuelAmador | 0:3d456b8ce449 | 34 | } |
JuanManuelAmador | 0:3d456b8ce449 | 35 | } |
JuanManuelAmador | 0:3d456b8ce449 | 36 | |
JuanManuelAmador | 0:3d456b8ce449 | 37 | // transmit work screen to physical screen: |
JuanManuelAmador | 0:3d456b8ce449 | 38 | lcd->Flush(); |
JuanManuelAmador | 0:3d456b8ce449 | 39 | } |
JuanManuelAmador | 0:3d456b8ce449 | 40 | |
JuanManuelAmador | 0:3d456b8ce449 | 41 | // El botón 1 sube la selección al elemento superior al actual |
JuanManuelAmador | 0:3d456b8ce449 | 42 | void Menu::button1pressed(DogMLCD* lcd){ |
JuanManuelAmador | 0:3d456b8ce449 | 43 | // Si sales de los elementos seleccionables no se cambia de selección |
JuanManuelAmador | 0:3d456b8ce449 | 44 | if((getSelect()-1) >= 0){ |
JuanManuelAmador | 0:3d456b8ce449 | 45 | setSelect(getSelect()-1); |
JuanManuelAmador | 0:3d456b8ce449 | 46 | drawDeselection(posElement[getLastSelect()][0]-2, posElement[getLastSelect()][1]-1, posElement[getLastSelect()][2]+2, HEIGHTCARACTER+2, lcd); |
JuanManuelAmador | 0:3d456b8ce449 | 47 | drawSelection(posElement[getSelect()][0]-2, posElement[getSelect()][1]-1, posElement[getSelect()][2]+2, HEIGHTCARACTER+2, lcd); |
JuanManuelAmador | 0:3d456b8ce449 | 48 | // transmit work screen to physical screen: |
JuanManuelAmador | 0:3d456b8ce449 | 49 | lcd->Flush(); |
JuanManuelAmador | 0:3d456b8ce449 | 50 | } |
JuanManuelAmador | 0:3d456b8ce449 | 51 | } |
JuanManuelAmador | 0:3d456b8ce449 | 52 | |
JuanManuelAmador | 0:3d456b8ce449 | 53 | // El botón 4 baja la selección al elemento superior al actual |
JuanManuelAmador | 0:3d456b8ce449 | 54 | void Menu::button4pressed(DogMLCD* lcd){ |
JuanManuelAmador | 0:3d456b8ce449 | 55 | // Si sales de los elementos seleccionables no se cambia de selección |
JuanManuelAmador | 0:3d456b8ce449 | 56 | if((getSelect()+1) <= (nElementos - 1)){ |
JuanManuelAmador | 0:3d456b8ce449 | 57 | setSelect(getSelect()+1); |
JuanManuelAmador | 0:3d456b8ce449 | 58 | drawDeselection(posElement[getLastSelect()][0]-2, posElement[getLastSelect()][1]-1, posElement[getLastSelect()][2]+2, HEIGHTCARACTER+2, lcd); |
JuanManuelAmador | 0:3d456b8ce449 | 59 | drawSelection(posElement[getSelect()][0]-2, posElement[getSelect()][1]-1, posElement[getSelect()][2]+2, HEIGHTCARACTER+2, lcd); |
JuanManuelAmador | 0:3d456b8ce449 | 60 | // transmit work screen to physical screen: |
JuanManuelAmador | 0:3d456b8ce449 | 61 | lcd->Flush(); |
JuanManuelAmador | 0:3d456b8ce449 | 62 | } |
JuanManuelAmador | 0:3d456b8ce449 | 63 | } |
JuanManuelAmador | 0:3d456b8ce449 | 64 | |
JuanManuelAmador | 0:3d456b8ce449 | 65 | // El botón 5 envía a la pantalla correspondiente según el elemento seleccionado |
JuanManuelAmador | 0:3d456b8ce449 | 66 | void Menu::button5pressed(DogMLCD* lcd){ |
JuanManuelAmador | 0:3d456b8ce449 | 67 | SC.changeScreen(nextScreenID[getSelect()]); |
JuanManuelAmador | 0:3d456b8ce449 | 68 | } |
JuanManuelAmador | 0:3d456b8ce449 | 69 | |
JuanManuelAmador | 0:3d456b8ce449 | 70 | // Añade un elemento al menu con el texto especificado en el primer argumento |
JuanManuelAmador | 0:3d456b8ce449 | 71 | // cada elemento nos enviará a la pantalla con el identificador del segundo argumento |
JuanManuelAmador | 0:3d456b8ce449 | 72 | // Devuelve el identificador del elemento añadido |
JuanManuelAmador | 0:3d456b8ce449 | 73 | int Menu::addElement(char text[], char nameNextScreen[NCARSCREEN]){ |
JuanManuelAmador | 0:3d456b8ce449 | 74 | strcpy(list[nElementos], text); |
JuanManuelAmador | 0:3d456b8ce449 | 75 | strcpy(nextScreenID[nElementos], nameNextScreen); |
JuanManuelAmador | 0:3d456b8ce449 | 76 | nElementos++; |
JuanManuelAmador | 0:3d456b8ce449 | 77 | return nElementos - 1; |
JuanManuelAmador | 0:3d456b8ce449 | 78 | } |
JuanManuelAmador | 0:3d456b8ce449 | 79 | |
JuanManuelAmador | 0:3d456b8ce449 | 80 | |
JuanManuelAmador | 0:3d456b8ce449 | 81 | // Devuelve el ancho del elemento |
JuanManuelAmador | 0:3d456b8ce449 | 82 | // Para ello lo recorre sumando los pixeles que ocupa cada caracter |
JuanManuelAmador | 0:3d456b8ce449 | 83 | int Menu::widthElement(int element, DogMLCD* lcd){ |
JuanManuelAmador | 0:3d456b8ce449 | 84 | int width = 0; |
JuanManuelAmador | 0:3d456b8ce449 | 85 | for(int i = 0; i < (strlen(list[element])); i++){ |
JuanManuelAmador | 0:3d456b8ce449 | 86 | width += lcd->GetGlyph(list[element][i]).wid + 1; |
JuanManuelAmador | 0:3d456b8ce449 | 87 | } |
JuanManuelAmador | 0:3d456b8ce449 | 88 | return width; |
JuanManuelAmador | 0:3d456b8ce449 | 89 | } |
JuanManuelAmador | 0:3d456b8ce449 | 90 |