Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: AdaFruit_RGBLCDShield MCP23017 mbed RTclock
Fork of MCP_test by
Diff: MenuManager.cpp
- 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);
