UVControl/src/screen.h

84 lines
1.3 KiB
C++

#ifndef __screen
#define __screen
#include <LiquidCrystal.h>
class ScreenManager;
class BaseScreen
{
private:
ScreenManager* mScreenManager;
protected:
ScreenManager* getScreenManager();
uint32_t getCurrentTime();
LiquidCrystal* getDisplay();
public:
BaseScreen(ScreenManager* screenManager)
{
mScreenManager = screenManager;
}
virtual ~BaseScreen() {}
virtual void onShow() = 0;
virtual void onHide() = 0;
virtual void onButton() = 0;
virtual void onEncoder(int32_t lastPosition, int32_t newPosition) = 0;
virtual void onTick() = 0;
};
class ScreenManager
{
private:
LiquidCrystal* mDisplay;
uint32_t* mCurrentTime;
BaseScreen* mCurrent = NULL;
public:
ScreenManager(LiquidCrystal* display, uint32_t* currentTime)
{
mDisplay = display;
mCurrentTime = currentTime;
}
inline BaseScreen* getCurrent()
{
return mCurrent;
}
inline uint32_t getCurrentTime()
{
return *mCurrentTime;
}
inline LiquidCrystal* getDisplay()
{
return mDisplay;
}
template<class T> void show()
{
if (mCurrent != NULL)
{
mCurrent->onHide();
delete mCurrent;
}
mCurrent = new T(this);
mCurrent->onShow();
}
};
#endif