UVControl/src/ScreenManager.h

88 lines
1.4 KiB
C++

#ifndef __ScreenManager
#define __ScreenManager
#include <LiquidCrystal.h>
class ScreenManager;
class BaseScreen
{
private:
ScreenManager* mScreenManager;
protected:
ScreenManager* getScreenManager();
unsigned long getCurrentTime();
LiquidCrystal* getDisplay();
void printTime(int value);
public:
BaseScreen(ScreenManager* screenManager)
{
mScreenManager = screenManager;
}
virtual ~BaseScreen() {}
virtual void onShow() = 0;
virtual void onHide() = 0;
virtual void onButton() = 0;
virtual void onEncoder(long lastPosition, long newPosition) = 0;
virtual void onTick() = 0;
};
class ScreenManager
{
private:
LiquidCrystal* mDisplay;
unsigned long* mCurrentTime;
BaseScreen* mCurrent = NULL;
public:
ScreenManager(LiquidCrystal* display, unsigned long* currentTime)
{
mDisplay = display;
mCurrentTime = currentTime;
}
inline BaseScreen* getCurrent()
{
return mCurrent;
}
inline unsigned long 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