diff options
Diffstat (limited to 'watch.c')
-rw-r--r-- | watch.c | 59 |
1 files changed, 56 insertions, 3 deletions
@@ -37,6 +37,10 @@ ciMonWatch::ciMonWatch() : cThread("iMonLCD: watch thread") , m_bShutdown(false) { + m_nIconsForceOn = 0; + m_nIconsForceOff = 0; + m_nIconsForceMask = 0; + unsigned int n; for(n=0;n<memberof(m_nCardIsRecording);++n) { m_nCardIsRecording[n] = 0; @@ -129,7 +133,7 @@ void ciMonWatch::close() { localtime_r(&tt, &l); cString topic = cString::sprintf("%d. %02d:%02d %s", l.tm_mday, l.tm_hour, l.tm_min, t->File()); this->DrawText(0,0,topic); - this->icons(eIconALARM); + this->icons(eIconAlarm); } else { this->DrawText(0,0,tr("None active timer")); this->icons(0); @@ -160,7 +164,7 @@ void ciMonWatch::close() { void ciMonWatch::Action(void) { - int nLastIcons = -1; + unsigned int nLastIcons = -1; int nContrast = -1; unsigned int n; @@ -178,7 +182,7 @@ void ciMonWatch::Action(void) LOCK_THREAD; - int nIcons = 0; + unsigned int nIcons = 0; bool bUpdateIcons = false; bool bFlush = false; if(m_bShutdown) @@ -314,6 +318,15 @@ void ciMonWatch::Action(void) Contrast(nContrast); } + //Force icon state (defined by svdrp) + nIcons &= ~(m_nIconsForceMask); + nIcons |= (m_nIconsForceOn); + nIcons &= ~(m_nIconsForceOff); + if(m_nIconsForceOn & eIconDiscRunSpin) { + bUpdateIcons |= (0 == (nCnt % 4)); + nIcons &= ~(eIconDiscSpinBackward); + } + if(bUpdateIcons || nIcons != nLastIcons) { icons(nIcons); nLastIcons = nIcons; @@ -794,3 +807,43 @@ bool ciMonWatch::SetFont(const char *szFont) { } + + +eIconState ciMonWatch::ForceIcon(unsigned int nIcon, eIconState nState) { + + unsigned int nIconOff = nIcon; + if(nIconOff & eIconTopMask) + nIconOff |= eIconTopMask; + else if(nIconOff & eIconSpeakerMask) + nIconOff |= eIconSpeakerMask; + else if(nIconOff & eIconBR_Mask) + nIconOff |= eIconBR_Mask; + else if(nIconOff & eIconBM_Mask) + nIconOff |= eIconBM_Mask; + else if(nIconOff & eIconBL_Mask) + nIconOff |= eIconBL_Mask; + + switch(nState) { + case eIconStateAuto: + m_nIconsForceOn &= ~(nIconOff); + m_nIconsForceOff &= ~(nIconOff); + m_nIconsForceMask &= ~(nIconOff); + break; + case eIconStateOn: + m_nIconsForceOn |= nIcon; + m_nIconsForceOff &= ~(nIconOff); + m_nIconsForceMask |= nIconOff; + break; + case eIconStateOff: + m_nIconsForceOff |= nIcon; + m_nIconsForceOn &= ~(nIconOff); + m_nIconsForceMask |= nIconOff; + break; + default: + break; + } + if(m_nIconsForceOn & nIcon) return eIconStateOn; + if(m_nIconsForceOff & nIcon) return eIconStateOff; + return eIconStateAuto; +} + |