XR4-display / include / XRDisplay.h
XRDisplay.h
Raw
#ifndef XRDisplay_h
#define XRDisplay_h

#include "XRConfig.h"
#include "XRSequenceInstrumentTrack.h"
#include "XRSequenceInstrumentTrackProgram.h"

#include <Arduino.h>

#include <utility>
#include <vector>
#include <string>
#include <sstream>

class Display
{
public:
    static void init(ILI9341_t3n &tft);
    static void animateLogo(ILI9341_t3n &tft, bool remove = false);

    static void drawIntroScreen(ILI9341_t3n &tft);
    static void drawMainScreen(
            ILI9341_t3n &tft,
            unsigned int instrumentSelected,
            const std::vector<SequenceInstrumentTrack *>& instrumentTracks,
            bool refreshPrograms,
            unsigned int tempo,
            unsigned int selProgram = 0,
            bool cursoringPrograms = false,
            bool isRunning = false,
            unsigned int currPageIdx = 0
    );

    static void drawTempoScreen(ILI9341_t3n &tft, unsigned int currTempo);

    static void drawInstrumentConfigWindow(
            ILI9341_t3n &tft,
            SequenceInstrumentTrack *instrumentTrack,
            unsigned int selConfigPropIdx
    );
    static void drawInstrumentConfigPropWindow(
            ILI9341_t3n &tft,
            SequenceInstrumentTrack *instrumentTrack,
            unsigned int selConfigPropIdx,
            unsigned int selConfigPropSettingIdx
    );

    static void drawSettingsTray(ILI9341_t3n &tft, unsigned int tempo);

    static void drawPrograms(
            ILI9341_t3n &tft,
            unsigned int currInstrument,
            const std::vector<SequenceInstrumentTrack *>& instrumentTracks,
            unsigned int selProgram = 0,
            bool cursoringPrograms = false,
            bool isRunning = false,
            unsigned int currPageIdx = 0
    );
    static void drawProgramConfigWindow(
            ILI9341_t3n &tft,
            SequenceInstrumentTrackProgram *program,
            unsigned int currInstrument,
            unsigned int currCursoredProgramIdx,
            unsigned int currPrgConfigPropIdx
    );
    static void drawProgramConfigPropWindow(
            ILI9341_t3n &tft,
            SequenceInstrumentTrackProgram *program,
            unsigned int currPrgConfigPropIdx,
            unsigned int currPrgConfigPropSettingIdx
    );

    static void drawWarn(ILI9341_t3n &tft, const char* message);

private:
    static void setConfigPropDisplayForIdx(
            ILI9341_t3n &display,
            unsigned int propIndex,
            unsigned int selConfigPropIdx,
            SequenceInstrumentTrack *instrumentTrack
    );
    static void setConfigPropSettingDisplayForIdx(
            ILI9341_t3n &display,
            unsigned int propSettingIdx,
            unsigned int selConfigPropIdx,
            unsigned int selConfigPropSettingIdx,
            SequenceInstrumentTrack *instrumentTrack
    );

    static void setPrgConfigPropDisplayForIdx(
            ILI9341_t3n &display,
            unsigned int propIndex,
            unsigned int currPrgConfigPropIdx,
            SequenceInstrumentTrackProgram *program
    );
    static void setPrgConfigPropSettingDisplayForIdx(
            ILI9341_t3n &display,
            unsigned int propSettingIdx,
            unsigned int currPrgConfigPropIdx,
            unsigned int currPrgConfigPropSettingIdx,
            SequenceInstrumentTrackProgram *program
    );

    //void drawDisabledLaneByInstrument(ILI9341_t3n &display, int instrumentNum);
    static void drawPlaceholder(ILI9341_t3n &display, int instrumentNum, int prgPosY, int color, int spacing = 3);
    static void drawDisabledLaneByInstrumentV2(ILI9341_t3n &display, int instrumentNum, bool isRed, bool isActive, int color);

    static void printRightAlignedString(ILI9341_t3n &display, const std::string& buf, int x, int y);
};

#endif /* XRDisplay_h */