UVControl/src/screen.h

84 lines
1.3 KiB
C
Raw Permalink Normal View History

#ifndef __screen
#define __screen
2017-11-26 19:22:15 +00:00
#include <LiquidCrystal.h>
class ScreenManager;
class BaseScreen
{
private:
ScreenManager* mScreenManager;
protected:
2017-11-27 14:51:32 +00:00
ScreenManager* getScreenManager();
uint32_t getCurrentTime();
2017-11-26 19:22:15 +00:00
LiquidCrystal* getDisplay();
public:
BaseScreen(ScreenManager* screenManager)
{
mScreenManager = screenManager;
}
2017-11-27 14:51:32 +00:00
virtual ~BaseScreen() {}
2017-11-26 19:22:15 +00:00
virtual void onShow() = 0;
virtual void onHide() = 0;
2017-11-27 14:51:32 +00:00
2017-11-26 19:22:15 +00:00
virtual void onButton() = 0;
virtual void onEncoder(int32_t lastPosition, int32_t newPosition) = 0;
2017-11-26 19:22:15 +00:00
virtual void onTick() = 0;
};
class ScreenManager
{
private:
LiquidCrystal* mDisplay;
uint32_t* mCurrentTime;
2017-11-27 14:51:32 +00:00
2017-11-26 19:22:15 +00:00
BaseScreen* mCurrent = NULL;
2017-11-27 14:51:32 +00:00
2017-11-26 19:22:15 +00:00
public:
ScreenManager(LiquidCrystal* display, uint32_t* currentTime)
2017-11-26 19:22:15 +00:00
{
mDisplay = display;
mCurrentTime = currentTime;
}
2017-11-27 14:51:32 +00:00
2017-11-26 19:22:15 +00:00
inline BaseScreen* getCurrent()
{
return mCurrent;
}
inline uint32_t getCurrentTime()
2017-11-26 19:22:15 +00:00
{
return *mCurrentTime;
}
inline LiquidCrystal* getDisplay()
{
return mDisplay;
2017-11-27 14:51:32 +00:00
}
template<class T> void show()
2017-11-26 19:22:15 +00:00
{
if (mCurrent != NULL)
{
mCurrent->onHide();
2017-12-07 22:43:24 +00:00
delete mCurrent;
2017-11-26 19:22:15 +00:00
}
2017-11-27 14:51:32 +00:00
2017-11-26 19:22:15 +00:00
mCurrent = new T(this);
mCurrent->onShow();
}
};
#endif