#ifndef UI_MANAGER_H #define UI_MANAGER_H #include #include #include #include "TrackerTypes.h" #include "MelodyStrategy.h" class UIManager { public: UIManager(); void begin(); void showMessage(const char* msg); void draw(UIState currentState, int menuSelection, int navSelection, EditMode editMode, int midiChannel, int tempo, MelodyStrategy* currentStrategy, int queuedTheme, int currentThemeIndex, int numScaleNotes, const int* scaleNotes, int melodySeed, bool mutationEnabled, bool songModeEnabled, const Step sequence[][NUM_STEPS], int scrollOffset, int playbackStep, bool isPlaying, const char* mainMenu[], int mainMenuCount, const char* randomizeMenu[], int randomizeMenuCount, const char* setupMenu[], int setupMenuCount, int theme1Index, PlayMode playMode, int currentTrack, int randomizeTrack, const bool* trackMute); void updateLeds(const Step sequence[][NUM_STEPS], int navSelection, int playbackStep, bool isPlaying, UIState currentState, EditMode editMode, bool songModeEnabled, int songRepeatsRemaining, bool sequenceChangeScheduled, PlayMode playMode, int currentTrack, int numScaleNotes, const int* scaleNotes, const bool* trackMute); private: Adafruit_SSD1306 display; Adafruit_NeoPixel pixels; uint32_t leds_buffer[8][8]; // For piano roll void drawMenu(const char* title, const char* items[], int count, int selection, UIState currentState, int midiChannel, int tempo, const char* flavourName, int queuedTheme, int currentThemeIndex, int numScaleNotes, const int* scaleNotes, int melodySeed, bool mutationEnabled, bool songModeEnabled, int theme1Index, PlayMode playMode, int randomizeTrack, const bool* trackMute); void drawTracker(int navSelection, EditMode editMode, int midiChannel, const Step sequence[][NUM_STEPS], int scrollOffset, int playbackStep, bool isPlaying, PlayMode playMode, int currentTrack); uint32_t getNoteColor(int note, bool dim); int getPixelIndex(int x, int y); }; extern UIManager ui; #endif