Justin Howard / Mbed 2 deprecated AdaFruit_RGBLCD

Dependencies:   AdaFruit_RGBLCDShield MCP23017 mbed RTclock

Dependents:   SX1276_GPS

Fork of MCP_test by Wim Huiskamp

Revision:
17:731a47339cb8
Parent:
15:d1eaddb363be
Child:
20:93c70a1869ee
--- a/MenuManager.cpp	Tue Aug 12 04:28:23 2014 +0000
+++ b/MenuManager.cpp	Thu Aug 14 10:47:27 2014 +0000
@@ -14,7 +14,7 @@
     : m_pModules(in_pModules)
     , m_nModules(in_nModules)
     , m_cLCD(in_cLCD)
-    , m_eMode(eModeMenu)
+    , m_eMode(Module::eModeLast)
     , m_nMenuPos(0)
     , m_nIndex(0)
     , m_nCursorX(0)
@@ -64,7 +64,8 @@
 
 void MenuManager::loop()
 {
-    m_eMode = eModeMenu;
+    setMode(Module::eModeMenu);
+    
     m_nMenuPos = 0;    
     m_nIndex = 0;    
 
@@ -83,7 +84,7 @@
         {
             switch (m_eMode)
             {
-                case eModeMenu:
+                case Module::eModeMenu:
                     showModules(true);
                     
                     int nOffsetX = m_pModules[m_nMenuPos]->getCursorOffset(m_nIndex);
@@ -101,10 +102,11 @@
     // Change mode based on select
     if (in_nKeys & BUTTON_SELECT)
     {
-        m_eMode = (EModes)((m_eMode + 1) % eModeLast);
+        Module::EModes eMode = (Module::EModes)((m_eMode + 1) % Module::eModeLast);        
+        setMode(eMode);
         
         // Start at top corner
-        if (eModeSelect == m_eMode)
+        if (Module::eModeSelect == m_eMode)
         {
             m_nIndex = 0;
             m_nCursorY = 0;
@@ -113,7 +115,7 @@
 
     switch (m_eMode)
     {                
-        case eModeMenu:
+        case Module::eModeMenu:
             setCursor(false,false);
             showTracking(false);
                                 
@@ -123,7 +125,7 @@
             m_nMenuPos = m_nMenuPos % m_nModules;                    
             break;
             
-        case eModeSelect:
+        case Module::eModeSelect:
             setCursor(true,false);
             showTracking(true);
                                                     
@@ -134,7 +136,7 @@
             if (in_nKeys & BUTTON_RIGHT) m_nIndex++;
             break;
             
-        case eModeChange:
+        case Module::eModeChange:
             setCursor(false,true);
             showTracking(true);
             
@@ -158,6 +160,16 @@
     if (in_bBlink) m_cLCD.blink(); else m_cLCD.noBlink();     
 }
 
+void MenuManager::setMode(Module::EModes in_eMode)
+{
+    m_eMode = in_eMode;
+    
+    for (size_t i = 0; i < m_nModules; i++)
+    {    
+        m_pModules[i]->onModeChange(m_eMode);
+    }
+}
+
 void MenuManager::showModules(bool in_bRefresh)
 {
     m_cLCD.setCursor(2,0);