Advertisement
Guest User

momir

a guest
May 24th, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.04 KB | None | 0 0
  1. int page = 1;              // ustawienie okna głównego
  2. const int fontPos1 = 8;         //kolejne pozycje pixeli na wyświetlaczu
  3. const int fontPos2 = 16;        // _____ do konstruktora
  4. const int fontPos3 = 24;
  5. int l = 0, m = 1, n = 2;
  6. bool menuHighlight[3] = { 1, 0, 0 }
  7.  
  8. #define OLED_RESET 4
  9. Adafruit_SSD1306 display(OLED_RESET);
  10.  
  11. class MenuItem
  12. {
  13. public:
  14.     String _name;
  15.     MenuItem(String name) {
  16.         _name = name;
  17.     }
  18.     void getName() {
  19.         return _name;
  20.     }
  21.     String setName(String name) {
  22.         _name = name;
  23.     }
  24.     void displayMenuPage();
  25. };
  26. class MenuItemString : public MenuItem
  27. {
  28.     void displayMenuPage(String Value)override {
  29.         cout << Value << "   " << _name;
  30.     }
  31.    
  32. }
  33. class MenuItemInt : public MenuItem
  34. {
  35.     void displayMenuPage(int Value)override {
  36.         cout << Value << "   " << _name;
  37.     }
  38.  
  39. }
  40. class MenuItemBool : public MenuItem
  41. {
  42.     void displayMenuPage(bool Value)override {
  43.         cout << Value << "   " << _name;
  44.     }
  45.  
  46. }
  47.  
  48.  
  49. void drawMenu(MenuItem[] menuItem) {
  50.     display.setTextSize(1);                   //  ustawienie wyglądu głównego menu
  51.     display.clearDisplay();
  52.     display.setTextColor(WHITE, BLACK);
  53.     display.setCursor(32, 0);
  54.     display.print("MtG: Momir");
  55.     //rysowanie glownego menu oraz podmenu
  56.     if (page == 1) {
  57.         //display ( item , pozycja czcionki , podświetlenie )
  58.         displayMenuItem(menuItem[l].getName(), fontPos1, menuHighlight[0]);
  59.         displayMenuItem(menuItem[m].getName(), fontPos2, menuHighlight[1]);
  60.         displayMenuItem(menuItem[n].getName(), fontPos3, menuHighlight[2]);
  61.         Serial.println(page);
  62.     }
  63.     else if (page == 2) {
  64.         menuPageDisp();
  65.     }
  66.     display.display();
  67. }
  68. void menuPageDisp() {
  69.     //switch (Oledmenu.getMenuItem()) {
  70.     //case 0:
  71.     //  menuItem[0].displayMenuPage(manaCost) //przykład dla int
  72.     //  break;
  73.     //case 1:
  74.     //  menuItem[1].displayMenuPage(volume)   //przykład dla int
  75.     //  break;
  76.     //case 2:
  77.     //  menuItem[2].displayMenuPage(standard[selectedStandard])   //przykład dla tablicy string
  78.     //  break;
  79.     //case 3:
  80.     //  menuItem[3].displayMenuPage( difficulty[selectedDifficulty]);  //przykład dla tablicy string
  81.     //  break;
  82.     }
  83. }
  84.  
  85. void displayMenuItem(String item, int position, bool selected)   //potrzebne do rysowania elemnetów menu
  86. {
  87.     if (selected)
  88.     {
  89.         display.setTextColor(BLACK, WHITE);
  90.     }
  91.     else
  92.     {
  93.         display.setTextColor(WHITE, BLACK);
  94.     }
  95.     display.setCursor(0, position);
  96.     display.print("> " + item);
  97. }
  98.  
  99. int getMenuItem() {           // zwraca aktualnie wybrany przedmiot w Menu
  100.     if (menuHighlight[0]) {
  101.         return l;
  102.     }
  103.     if (menuHighlight[1]) {
  104.         return m;
  105.     }
  106.     if (menuHighlight[2]) {
  107.         return n;
  108.     }
  109.  
  110. }
  111.  
  112. int resetValuesMore(int i, int MinValue, int MaxValue) { //przekręcenie licznika w górę
  113.     i += 1;
  114.     if (i > MaxValue) {  ///sizeof(menuItem)
  115.         i = MinValue;
  116.     }
  117.     return i;
  118. }
  119.  
  120. int resetValuesLess(int i, int MinValue, int MaxValue) {  // przekręcenie licznika w dół
  121.     i -= 1;
  122.     if (i < MinValue) { //sizeof(menuItem)
  123.         i = MaxValue;
  124.     }
  125.     return i;
  126. }
  127.  
  128. void setMenuItem(String a) {        // zmienia nazwe przedmiotu w menu
  129.  
  130.     if (menuHighlight[0]) {
  131.         menuItem[l] = a;
  132.     }
  133.     if (menuHighlight[1]) {
  134.         menuItem[m] = a;
  135.     }
  136.     if (menuHighlight[2]) {
  137.         menuItem[n] = a;
  138.     }
  139.  
  140. }
  141.  
  142.  
  143. void checkEncoder() {
  144.     ClickEncoder::Button b = encoder->getButton();
  145.     if (b != ClickEncoder::Open) {
  146.         switch (b) {
  147.         case ClickEncoder::Clicked:
  148.             middle = true;
  149.             break;
  150.         }
  151.     }
  152.  
  153.     if (middle)                                          //wcisniecie przycisku enkodera
  154.     {
  155.         middle = false;
  156.         if (page == 1) {
  157.             switch (getMenuItem()) {
  158.             case 4:
  159.                 if (backlight) {           // dla bool
  160.                     Serial.println();
  161.                     backlight = false;
  162.                     setMenuItem("Light: ON");
  163.                     //+ ew. jakas metoda
  164.                 }
  165.                 else {
  166.                     backlight = true;
  167.                     setMenuItem("Light: OFF");
  168.                 }
  169.                 break;
  170.             case 5:
  171.                 resetDefaults();
  172.                 break;
  173.             default:
  174.                 page = 2;
  175.                 break;
  176.             }
  177.         }
  178.         else if (page == 2) {
  179.             page = 1;
  180.         }
  181.     }
  182.  
  183.     if (down && page == 1) {    // Początek przesuwania menu w dół
  184.         down = false;
  185.         if (menuHighlight[0] && !menuHighlight[1]) {
  186.             menuHighlight[0] = false;
  187.             menuHighlight[1] = true;
  188.         }
  189.         else if (menuHighlight[1] && !menuHighlight[2]) {
  190.             menuHighlight[1] = false;
  191.             menuHighlight[2] = true;
  192.         }
  193.         else if (menuHighlight[2] && !menuHighlight[1] && !menuHighlight[0]) {                           //tego brakowało tu był błąd
  194.             l = resetValuesMore(l, 0, (sizeof(menuItem) / 6) - 1);
  195.             m = resetValuesMore(m, 0, (sizeof(menuItem) / 6) - 1);
  196.             n = resetValuesMore(n, 0, (sizeof(menuItem) / 6) - 1);
  197.         }
  198.     }
  199.     else if (up && page == 2) {            //kontorla odejmowania wartości przez encoder
  200.         up = false;
  201.         switch (getMenuItem()) {
  202.         case 0:
  203.             manaCost--;
  204.             break;
  205.         case 1:
  206.             volume--;
  207.             break;
  208.         case 2:
  209.             //        selectedStandard--;
  210.             selectedStandard = resetValuesLess(selectedStandard, 0, 3);
  211.             break;
  212.         case 3:
  213.             //        selectedDifficulty--;
  214.             selectedDifficulty = resetValuesLess(selectedDifficulty, 0, 1);
  215.             break;
  216.         }
  217.     }
  218.     if (up && page == 1)                     // Obsługa przesuwania menu w górę
  219.     {
  220.         up = false;
  221.         if (!menuHighlight[1] && menuHighlight[2]) {
  222.             menuHighlight[2] = false;
  223.             menuHighlight[1] = true;
  224.         }
  225.         else if (!menuHighlight[0] && menuHighlight[1]) {
  226.             menuHighlight[1] = false;
  227.             menuHighlight[0] = true;
  228.         }
  229.         else if (menuHighlight[0] && !menuHighlight[1] && !menuHighlight[2]) {
  230.             l = resetValuesLess(l, 0, (sizeof(menuItem) / 6) - 1);
  231.             m = resetValuesLess(m, 0, (sizeof(menuItem) / 6) - 1);
  232.             n = resetValuesLess(n, 0, (sizeof(menuItem) / 6) - 1);
  233.         }
  234.     }
  235.     else if (down && page == 2) {            //kontorla odejmowania wartości przez encoder w podmenu
  236.         down = false;
  237.         switch (getMenuItem()) {
  238.         case 0:
  239.             manaCost = resetValuesMore(manaCost, 0, 16);
  240.             break;
  241.         case 1: // co z tym zrobić?
  242.             volume++;
  243.             break;
  244.         case 2:
  245.             //        selectedStandard++;
  246.             selectedStandard = resetValuesMore(selectedStandard, 0, 3);
  247.             break;
  248.         case 3:
  249.             //        selectedDifficulty++;
  250.             selectedDifficulty = resetValuesMore(selectedDifficulty, 0, 1);
  251.             break;
  252.         }
  253.     }
  254.  
  255. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement