diff options
Diffstat (limited to 'watch.c')
-rw-r--r-- | watch.c | 60 |
1 files changed, 51 insertions, 9 deletions
@@ -59,8 +59,10 @@ ciMonWatch::ciMonWatch() m_pControl = NULL; replayTitle = NULL; - replayShortTitle = NULL; replayTitleLast = NULL; + + currentTime = NULL; + m_eWatchMode = eLiveTV; m_eVideoMode = eVideoNone; m_eAudioMode = eAudioNone; @@ -96,9 +98,9 @@ ciMonWatch::~ciMonWatch() delete replayTitle; replayTitle = NULL; } - if(replayShortTitle) { - delete replayShortTitle; - replayShortTitle = NULL; + if(currentTime) { + delete currentTime; + currentTime = NULL; } } @@ -182,7 +184,7 @@ void ciMonWatch::Action(void) int nContrast = -1; unsigned int n; - int nCnt = 0; + unsigned int nCnt = 0; int nLastTopProgressBar = -1; int nTopProgressBar = 0; int nLastBottomProgressBar = -1; @@ -215,6 +217,13 @@ void ciMonWatch::Action(void) case eReplayAudioCD: nIcons |= eIconDiscSpin | eIconDiscEllispe | eIconTopDVD; break; } + // every second the clock need updates. + if (theSetup.m_bTwoLineMode && m_eWatchMode != eLiveTV) { + if((0 == (nCnt % 10))) { + m_bUpdateScreen |= CurrentTime(); + } + } + bFlush = RenderScreen(); if(m_eWatchMode == eLiveTV) { if((chFollowingTime - chPresentTime) > 0) { @@ -367,25 +376,32 @@ void ciMonWatch::Action(void) bool ciMonWatch::RenderScreen() { cString* scRender; + cString* scHeader = NULL; bool bForce = m_bUpdateScreen; if(osdMessage) { scRender = osdMessage; } else if(osdItem) { scRender = osdItem; } else if(m_eWatchMode == eLiveTV) { + scHeader = chName; if(Program()) { bForce = true; } if(chPresentTitle) scRender = chPresentTitle; - else + else { + scHeader = currentTime; scRender = chName; + } } else { if(Replay()) { bForce = true; } + scHeader = currentTime; scRender = replayTitle; } + + if(bForce) { m_nScrollOffset = 0; m_bScrollBackward = false; @@ -393,7 +409,14 @@ bool ciMonWatch::RenderScreen() { if(bForce || m_nScrollOffset > 0 || m_bScrollBackward) { this->clear(); if(scRender) { - int iRet = this->DrawText(0 - m_nScrollOffset,0,(*scRender)); + + int iRet = -1; + if(theSetup.m_bTwoLineMode) { + iRet = this->DrawText(0 - m_nScrollOffset,8, *scRender); + } else { + iRet = this->DrawText(0 - m_nScrollOffset,0, *scRender); + } + switch(iRet) { case 0: if(m_nScrollOffset <= 0) { @@ -415,12 +438,31 @@ bool ciMonWatch::RenderScreen() { } } + if(scHeader && theSetup.m_bTwoLineMode) { + this->DrawText(0, 0, *scHeader); + } + m_bUpdateScreen = false; return true; } return false; } +bool ciMonWatch::CurrentTime() { + time_t ts = time(NULL); + + if((ts / 60) != (tsCurrentLast / 60)) { + + if(currentTime) + delete currentTime; + + tsCurrentLast = ts; + currentTime = new cString(TimeString(ts)); + return currentTime != NULL; + } + return false; +} + bool ciMonWatch::Replay() { if(replayTitleLast != replayTitle) { @@ -810,9 +852,9 @@ void ciMonWatch::OsdStatusMessage(const char *sz) } } -bool ciMonWatch::SetFont(const char *szFont) { +bool ciMonWatch::SetFont(const char *szFont, int bTwoLineMode) { cMutexLooker m(mutex); - if(ciMonLCD::SetFont(szFont)) { + if(ciMonLCD::SetFont(szFont, bTwoLineMode)) { m_bUpdateScreen = true; return true; } |