#ifndef _SCREEN_H #define _SCREEN_H #include <Arduino.h> #include <vector> #include <string> #include <Basecamp.hpp> #include <Configuration.hpp> #include <U8g2lib.h> #ifdef U8X8_HAVE_HW_SPI #include <SPI.h> #endif #ifdef U8X8_HAVE_HW_I2C #include <Wire.h> #endif #include "mp3.h" #include "BME280.h" #include "image.h" enum menuType { eNone=0, eMainScreen, eMainMenu }; extern U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2; extern char timeStr[]; extern BME280 bme280; extern MP3 mp3; extern menuType menuChange; extern Basecamp iot; class Screen { public: // Screen(); virtual void draw(void) = 0; virtual void next(void); virtual void previous(void); virtual uint8_t select(void); const char* title = "Test Screen"; private: }; class SelectionList : public Screen { public: SelectionList(); SelectionList(const char*, uint8_t, const char*); void draw(void) override; void next(void) override; void previous(void) override; uint8_t select(void) override; const char* title = "Cloud Types"; protected: uint8_t current_pos = 0; std::vector<std::string> string_list = { "Altocumulus", "Altostratus", "Cirrocumulus", "Cirrostratus", "Cirrus", "Cumulonimbus", "Cumulus", "Nimbostratus", "Stratocumulus", "Stratus" }; uint8_t top_item = 0; uint8_t visible = 4; }; class MainMenu : public SelectionList { public: MainMenu(); uint8_t select(void) override; private: }; class MainScreen : public Screen { public: void draw(void) override; void next(void) override; void previous(void) override; uint8_t select(void) override; const char* title = "Main Screen"; private: uint32_t lastVolumeChange = 0; u8g2_uint_t titleStr_offset = 0; uint8_t volume = 20; }; #endif /* _SCREEN_H */