consolidated screen manager menu loop selection

This commit is contained in:
rljonesau 2019-03-15 22:34:25 +11:00
parent ead0411d7a
commit c7609a984f
11 changed files with 37 additions and 47 deletions

View file

@ -87,11 +87,11 @@ CClockScreen::keyHandler(uint8_t event)
} }
// press UP // press UP
if(event & key_Up) { if(event & key_Up) {
_ScreenManager.selectBranchMenu(CScreenManager::SetClock); // switch to clock set screen _ScreenManager.select(CScreenManager::SetClock); // switch to clock set screen
} }
// press DOWN // press DOWN
if(event & key_Down) { if(event & key_Down) {
_ScreenManager.selectTimerMenuLoop(); // switch to timer set screen loop _ScreenManager.select(CScreenManager::TimerMenuLoop); // switch to timer set screen loop
} }
} }
return true; return true;

View file

@ -162,7 +162,7 @@ CExperimentalSettingsScreen::keyHandler(uint8_t event)
if(event & key_Centre) { if(event & key_Centre) {
switch(_rowSel) { switch(_rowSel) {
case 0: case 0:
_ScreenManager.selectRootMenuLoop(); // force return to main menu _ScreenManager.select(CScreenManager::RootMenuLoop); // force return to main menu
break; break;
case 1: case 1:
case 2: case 2:

View file

@ -122,7 +122,7 @@ CFuelMixtureScreen::keyHandler(uint8_t event)
if(event & key_Centre) { if(event & key_Centre) {
switch(_rowSel) { switch(_rowSel) {
case 0: case 0:
_ScreenManager.selectRootMenuLoop(); _ScreenManager.select(CScreenManager::RootMenuLoop);
break; break;
case 1: case 1:
case 2: case 2:

View file

@ -216,7 +216,7 @@ CHeaterSettingsScreen::keyHandler(uint8_t event)
if(event & key_Centre) { if(event & key_Centre) {
switch(_rowSel) { switch(_rowSel) {
case 0: case 0:
_ScreenManager.selectRootMenuLoop(); _ScreenManager.select(CScreenManager::RootMenuLoop);
break; break;
case 1: case 1:
case 2: case 2:

View file

@ -66,7 +66,7 @@ CInheritSettingsScreen::show()
switch(_nAdoptSettings) { switch(_nAdoptSettings) {
case 0: case 0:
_ScreenManager.selectRootMenuLoop(); // force return to main menu _ScreenManager.select(CScreenManager::RootMenuLoop); // force return to main menu
_ScreenManager.reqUpdate(); _ScreenManager.reqUpdate();
return false; return false;
case 1: case 1:

View file

@ -101,7 +101,7 @@ CScreenManager::CScreenManager()
{ {
_pDisplay = NULL; _pDisplay = NULL;
_rootMenu = -1; _rootMenu = -1;
_cancelSideMenus(); _cancelNonRootMenus();
_bReqUpdate = false; _bReqUpdate = false;
_DimTime = millis() + 60000; _DimTime = millis() + 60000;
_pRebootScreen = NULL; _pRebootScreen = NULL;
@ -209,7 +209,7 @@ CScreenManager::checkUpdate()
_leaveScreen(); _leaveScreen();
// fall back to main menu // fall back to main menu
selectRootMenuLoop(); select(RootMenuLoop);
// sticky screens are Detailed Control, Basic Control, or Clock. // sticky screens are Detailed Control, Basic Control, or Clock.
// otherwise return to Basic Control screen // otherwise return to Basic Control screen
if(_rootMenu > 2) { if(_rootMenu > 2) {
@ -364,45 +364,36 @@ CScreenManager::keyHandler(uint8_t event)
} }
void void
CScreenManager::_cancelSideMenus() CScreenManager::_cancelNonRootMenus()
{ {
_timerMenu = -1; _timerMenu = -1;
_tuningMenu = -1; _tuningMenu = -1;
_branchMenu = -1; _branchMenu = -1;
} }
void void
CScreenManager::selectTimerMenuLoop() CScreenManager::select(eUILoops loop)
{ {
_leaveScreen(); _leaveScreen();
_cancelSideMenus(); _cancelNonRootMenus();
_timerMenu = 0; switch(loop) {
case RootMenuLoop:
break;
case TimerMenuLoop:
_timerMenu = 0;
break;
case TuningMenuLoop:
_tuningMenu = 0;
break;
}
_enterScreen(); _enterScreen();
} }
void void
CScreenManager::selectTuningMenuLoop() CScreenManager::select(eUIBranches branch)
{ {
_leaveScreen(); _leaveScreen();
_cancelSideMenus(); _cancelNonRootMenus();
_tuningMenu = 0;
_enterScreen();
}
void
CScreenManager::selectRootMenuLoop()
{
_leaveScreen();
_cancelSideMenus();
_enterScreen();
}
void
CScreenManager::selectBranchMenu(eUIBranches branch)
{
_leaveScreen();
_cancelSideMenus();
_branchMenu = branch; _branchMenu = branch;
_enterScreen(); _enterScreen();
} }

View file

@ -45,9 +45,10 @@ class CScreenManager {
bool _bReqUpdate; bool _bReqUpdate;
void _enterScreen(); void _enterScreen();
void _leaveScreen(); void _leaveScreen();
void _cancelSideMenus(); void _cancelNonRootMenus();
public: public:
enum eUIBranches { SetClock, InheritSettings, Experimental }; enum eUIBranches { SetClock, InheritSettings, Experimental };
enum eUILoops { RootMenuLoop, TimerMenuLoop, TuningMenuLoop };
public: public:
CScreenManager(); CScreenManager();
~CScreenManager(); ~CScreenManager();
@ -60,10 +61,8 @@ public:
void keyHandler(uint8_t event); void keyHandler(uint8_t event);
void reqUpdate(); void reqUpdate();
void showRebootMsg(const char* content[2], long delayTime); void showRebootMsg(const char* content[2], long delayTime);
void selectBranchMenu(eUIBranches branch); void select(eUIBranches branch); // use to select branch menus
void selectTimerMenuLoop(); void select(eUILoops loop); // use to select loop menus, including the root or branches
void selectTuningMenuLoop();
void selectRootMenuLoop();
}; };
#endif // __SCREEN_MANAGER_H__ #endif // __SCREEN_MANAGER_H__

View file

@ -144,7 +144,7 @@ CSetClockScreen::keyHandler(uint8_t event)
// press CENTRE // press CENTRE
if(event & key_Centre) { if(event & key_Centre) {
if(_rowSel == 0) { if(_rowSel == 0) {
_ScreenManager.selectRootMenuLoop(); // exit, return to clock screen _ScreenManager.select(CScreenManager::RootMenuLoop); // exit, return to clock screen
} }
else { else {
if(_rowSel == 7) { // set the RTC! if(_rowSel == 7) { // set the RTC!
@ -157,7 +157,7 @@ CSetClockScreen::keyHandler(uint8_t event)
// press LEFT // press LEFT
if(event & key_Left) { if(event & key_Left) {
if(_rowSel == 0) { if(_rowSel == 0) {
_ScreenManager.selectRootMenuLoop(); // exit, return to clock screen _ScreenManager.select(CScreenManager::RootMenuLoop); // exit, return to clock screen
} }
else { else {
_adjTimeDate(-1); _adjTimeDate(-1);
@ -166,7 +166,7 @@ CSetClockScreen::keyHandler(uint8_t event)
// press RIGHT // press RIGHT
if(event & key_Right) { if(event & key_Right) {
if(_rowSel == 0) { if(_rowSel == 0) {
_ScreenManager.selectRootMenuLoop(); // exit, return to clock screen _ScreenManager.select(CScreenManager::RootMenuLoop); // exit, return to clock screen
} }
else { else {
_adjTimeDate(+1); _adjTimeDate(+1);
@ -180,7 +180,7 @@ CSetClockScreen::keyHandler(uint8_t event)
// press DOWN // press DOWN
if(event & key_Down) { if(event & key_Down) {
if(_rowSel == 0) { if(_rowSel == 0) {
_ScreenManager.selectRootMenuLoop(); // exit, return to clock screen _ScreenManager.select(CScreenManager::RootMenuLoop); // exit, return to clock screen
} else { } else {
_rowSel--; _rowSel--;
ROLLLOWERLIMIT(_rowSel, 1, 7); ROLLLOWERLIMIT(_rowSel, 1, 7);

View file

@ -161,7 +161,7 @@ CSetTimerScreen::keyHandler(uint8_t event)
// press CENTRE // press CENTRE
if(event & key_Centre) { if(event & key_Centre) {
if(_rowSel == 0) { if(_rowSel == 0) {
_ScreenManager.selectRootMenuLoop(); // exit: return to clock screen _ScreenManager.select(CScreenManager::RootMenuLoop); // exit: return to clock screen
} }
else if(_rowSel == 2) { // exit from per day settings else if(_rowSel == 2) { // exit from per day settings
_rowSel = 1; _rowSel = 1;

View file

@ -147,7 +147,7 @@ CSettingsScreen::keyHandler(uint8_t event)
{ {
if(CPasswordScreen::keyHandler(event)) { if(CPasswordScreen::keyHandler(event)) {
if(_isPasswordOK()) { if(_isPasswordOK()) {
_ScreenManager.selectTuningMenuLoop(); _ScreenManager.select(CScreenManager::TuningMenuLoop);
} }
} }
@ -168,7 +168,7 @@ CSettingsScreen::keyHandler(uint8_t event)
if(event & key_Centre) if(event & key_Centre)
_reqOEMWarning(); _reqOEMWarning();
else { else {
_ScreenManager.selectBranchMenu(CScreenManager::InheritSettings); _ScreenManager.select(CScreenManager::InheritSettings);
} }
} }
else { else {
@ -177,7 +177,7 @@ CSettingsScreen::keyHandler(uint8_t event)
} }
// press DOWN // press DOWN
if(event & key_Down) { if(event & key_Down) {
_ScreenManager.selectBranchMenu(CScreenManager::Experimental); _ScreenManager.select(CScreenManager::Experimental);
} }
} }
} }

View file

@ -160,7 +160,7 @@ CTimerChartScreen::keyHandler(uint8_t event)
bHeld = false; bHeld = false;
// press CENTRE // press CENTRE
if(event & key_Centre) { if(event & key_Centre) {
_ScreenManager.selectRootMenuLoop(); // exit: return to clock screen _ScreenManager.select(CScreenManager::RootMenuLoop); // exit: return to clock screen
} }
// press LEFT - navigate fields, or screens // press LEFT - navigate fields, or screens
if(event & key_Left) { if(event & key_Left) {