Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int page = 1; // ustawienie okna głównego
- const int fontPos1 = 8; //kolejne pozycje pixeli na wyświetlaczu
- const int fontPos2 = 16; // _____ do konstruktora
- const int fontPos3 = 24;
- int l = 0, m = 1, n = 2;
- bool menuHighlight[3] = { 1, 0, 0 }
- #define OLED_RESET 4
- Adafruit_SSD1306 display(OLED_RESET);
- class MenuItem
- {
- public:
- String _name;
- MenuItem(String name) {
- _name = name;
- }
- void getName() {
- return _name;
- }
- String setName(String name) {
- _name = name;
- }
- void displayMenuPage();
- };
- class MenuItemString : public MenuItem
- {
- void displayMenuPage(String Value)override {
- cout << Value << " " << _name;
- }
- }
- class MenuItemInt : public MenuItem
- {
- void displayMenuPage(int Value)override {
- cout << Value << " " << _name;
- }
- }
- class MenuItemBool : public MenuItem
- {
- void displayMenuPage(bool Value)override {
- cout << Value << " " << _name;
- }
- }
- void drawMenu(MenuItem[] menuItem) {
- display.setTextSize(1); // ustawienie wyglądu głównego menu
- display.clearDisplay();
- display.setTextColor(WHITE, BLACK);
- display.setCursor(32, 0);
- display.print("MtG: Momir");
- //rysowanie glownego menu oraz podmenu
- if (page == 1) {
- //display ( item , pozycja czcionki , podświetlenie )
- displayMenuItem(menuItem[l].getName(), fontPos1, menuHighlight[0]);
- displayMenuItem(menuItem[m].getName(), fontPos2, menuHighlight[1]);
- displayMenuItem(menuItem[n].getName(), fontPos3, menuHighlight[2]);
- Serial.println(page);
- }
- else if (page == 2) {
- menuPageDisp();
- }
- display.display();
- }
- void menuPageDisp() {
- //switch (Oledmenu.getMenuItem()) {
- //case 0:
- // menuItem[0].displayMenuPage(manaCost) //przykład dla int
- // break;
- //case 1:
- // menuItem[1].displayMenuPage(volume) //przykład dla int
- // break;
- //case 2:
- // menuItem[2].displayMenuPage(standard[selectedStandard]) //przykład dla tablicy string
- // break;
- //case 3:
- // menuItem[3].displayMenuPage( difficulty[selectedDifficulty]); //przykład dla tablicy string
- // break;
- }
- }
- void displayMenuItem(String item, int position, bool selected) //potrzebne do rysowania elemnetów menu
- {
- if (selected)
- {
- display.setTextColor(BLACK, WHITE);
- }
- else
- {
- display.setTextColor(WHITE, BLACK);
- }
- display.setCursor(0, position);
- display.print("> " + item);
- }
- int getMenuItem() { // zwraca aktualnie wybrany przedmiot w Menu
- if (menuHighlight[0]) {
- return l;
- }
- if (menuHighlight[1]) {
- return m;
- }
- if (menuHighlight[2]) {
- return n;
- }
- }
- int resetValuesMore(int i, int MinValue, int MaxValue) { //przekręcenie licznika w górę
- i += 1;
- if (i > MaxValue) { ///sizeof(menuItem)
- i = MinValue;
- }
- return i;
- }
- int resetValuesLess(int i, int MinValue, int MaxValue) { // przekręcenie licznika w dół
- i -= 1;
- if (i < MinValue) { //sizeof(menuItem)
- i = MaxValue;
- }
- return i;
- }
- void setMenuItem(String a) { // zmienia nazwe przedmiotu w menu
- if (menuHighlight[0]) {
- menuItem[l] = a;
- }
- if (menuHighlight[1]) {
- menuItem[m] = a;
- }
- if (menuHighlight[2]) {
- menuItem[n] = a;
- }
- }
- void checkEncoder() {
- ClickEncoder::Button b = encoder->getButton();
- if (b != ClickEncoder::Open) {
- switch (b) {
- case ClickEncoder::Clicked:
- middle = true;
- break;
- }
- }
- if (middle) //wcisniecie przycisku enkodera
- {
- middle = false;
- if (page == 1) {
- switch (getMenuItem()) {
- case 4:
- if (backlight) { // dla bool
- Serial.println();
- backlight = false;
- setMenuItem("Light: ON");
- //+ ew. jakas metoda
- }
- else {
- backlight = true;
- setMenuItem("Light: OFF");
- }
- break;
- case 5:
- resetDefaults();
- break;
- default:
- page = 2;
- break;
- }
- }
- else if (page == 2) {
- page = 1;
- }
- }
- if (down && page == 1) { // Początek przesuwania menu w dół
- down = false;
- if (menuHighlight[0] && !menuHighlight[1]) {
- menuHighlight[0] = false;
- menuHighlight[1] = true;
- }
- else if (menuHighlight[1] && !menuHighlight[2]) {
- menuHighlight[1] = false;
- menuHighlight[2] = true;
- }
- else if (menuHighlight[2] && !menuHighlight[1] && !menuHighlight[0]) { //tego brakowało tu był błąd
- l = resetValuesMore(l, 0, (sizeof(menuItem) / 6) - 1);
- m = resetValuesMore(m, 0, (sizeof(menuItem) / 6) - 1);
- n = resetValuesMore(n, 0, (sizeof(menuItem) / 6) - 1);
- }
- }
- else if (up && page == 2) { //kontorla odejmowania wartości przez encoder
- up = false;
- switch (getMenuItem()) {
- case 0:
- manaCost--;
- break;
- case 1:
- volume--;
- break;
- case 2:
- // selectedStandard--;
- selectedStandard = resetValuesLess(selectedStandard, 0, 3);
- break;
- case 3:
- // selectedDifficulty--;
- selectedDifficulty = resetValuesLess(selectedDifficulty, 0, 1);
- break;
- }
- }
- if (up && page == 1) // Obsługa przesuwania menu w górę
- {
- up = false;
- if (!menuHighlight[1] && menuHighlight[2]) {
- menuHighlight[2] = false;
- menuHighlight[1] = true;
- }
- else if (!menuHighlight[0] && menuHighlight[1]) {
- menuHighlight[1] = false;
- menuHighlight[0] = true;
- }
- else if (menuHighlight[0] && !menuHighlight[1] && !menuHighlight[2]) {
- l = resetValuesLess(l, 0, (sizeof(menuItem) / 6) - 1);
- m = resetValuesLess(m, 0, (sizeof(menuItem) / 6) - 1);
- n = resetValuesLess(n, 0, (sizeof(menuItem) / 6) - 1);
- }
- }
- else if (down && page == 2) { //kontorla odejmowania wartości przez encoder w podmenu
- down = false;
- switch (getMenuItem()) {
- case 0:
- manaCost = resetValuesMore(manaCost, 0, 16);
- break;
- case 1: // co z tym zrobić?
- volume++;
- break;
- case 2:
- // selectedStandard++;
- selectedStandard = resetValuesMore(selectedStandard, 0, 3);
- break;
- case 3:
- // selectedDifficulty++;
- selectedDifficulty = resetValuesMore(selectedDifficulty, 0, 1);
- break;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement