#ifndef _SCREEN_H #define _SCREEN_H #include #include #include #include #ifdef U8X8_HAVE_HW_SPI #include #endif #ifdef U8X8_HAVE_HW_I2C #include #endif #include "mp3.h" #include "BME280.h" #include "image.h" extern U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2; extern char timeStr[]; extern BME280 bme280; extern MP3 mp3; 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"; private: std::vector string_list = { "Altocumulus\n", "Altostratus\n", "Cirrocumulus\n", "Cirrostratus\n", "Cirrus\n", "Cumulonimbus\n", "Cumulus\n", "Nimbostratus\n", "Stratocumulus\n", "Stratus" }; uint8_t current_pos = 0; uint8_t top_item = 0; uint8_t visible = 4; }; 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 lastButtonPress = 0; uint32_t lastVolumeChange = 0; u8g2_uint_t titleStr_offset = 0; uint8_t volume = 20; }; #endif /* _SCREEN_H */