diff options
author | anbr <vdr07@deltab.de> | 2009-05-24 20:36:41 +0200 |
---|---|---|
committer | anbr <vdr07@deltab.de> | 2009-05-24 20:36:41 +0200 |
commit | b03b6aa72ca6a991cff8c32f12d6fb47f9103a5e (patch) | |
tree | dbf9c23380be1f81fbea0976f4036dad0349b9e1 | |
parent | 78581d3dbbecf9b8d9b336b3b00a1d7f6f861558 (diff) | |
download | vdr-plugin-imonlcd-b03b6aa72ca6a991cff8c32f12d6fb47f9103a5e.tar.gz vdr-plugin-imonlcd-b03b6aa72ca6a991cff8c32f12d6fb47f9103a5e.tar.bz2 |
Render current OSD state
-rw-r--r-- | status.c | 18 | ||||
-rw-r--r-- | watch.c | 104 | ||||
-rw-r--r-- | watch.h | 7 |
3 files changed, 100 insertions, 29 deletions
@@ -64,14 +64,15 @@ void ciMonStatusMonitor::Replaying(const cControl *pControl, const char *szName, void ciMonStatusMonitor::OsdClear(void) { -#ifdef unusedMOREDEBUGMSG +#ifdef MOREDEBUGMSG dsyslog("iMonLCD: OsdClear"); #endif + m_pDev->OsdClear(); } void ciMonStatusMonitor::OsdTitle(const char *Title) { -#ifdef unusedMOREDEBUGMSG +#ifdef MOREDEBUGMSG dsyslog("iMonLCD: OsdTitle '%s'", Title); #endif } @@ -81,7 +82,7 @@ void ciMonStatusMonitor::OsdStatusMessage(const char *szMessage) #ifdef MOREDEBUGMSG dsyslog("iMonLCD: OsdStatusMessage '%s'", szMessage ? szMessage : "NULL"); #endif - m_pDev->StatusMessage(szMessage); + m_pDev->OsdStatusMessage(szMessage); } void ciMonStatusMonitor::OsdHelpKeys(const char *Red, const char *Green, const char *Yellow, const char *Blue) @@ -91,23 +92,24 @@ void ciMonStatusMonitor::OsdHelpKeys(const char *Red, const char *Green, const c #endif } -void ciMonStatusMonitor::OsdCurrentItem(const char *Text) +void ciMonStatusMonitor::OsdCurrentItem(const char *szText) { -#ifdef unusedMOREDEBUGMSG - dsyslog("iMonLCD: OsdCurrentItem %s", Text); +#ifdef MOREDEBUGMSG + dsyslog("iMonLCD: OsdCurrentItem %s", szText); #endif + m_pDev->OsdCurrentItem(szText); } void ciMonStatusMonitor::OsdTextItem(const char *Text, bool Scroll) { -#ifdef unusedMOREDEBUGMSG +#ifdef MOREDEBUGMSG dsyslog("iMonLCD: OsdTextItem %s %d", Text, Scroll); #endif } void ciMonStatusMonitor::OsdChannel(const char *Text) { -#ifdef unusedMOREDEBUGMSG +#ifdef MOREDEBUGMSG dsyslog("iMonLCD: OsdChannel %s", Text); #endif } @@ -47,7 +47,7 @@ ciMonWatch::ciMonWatch() m_nLastVolume = cDevice::CurrentVolume(); m_bVolumeMute = false; - m_bShowOsdMessage = false; + osdItem = NULL; osdMessage = NULL; m_pControl = NULL; @@ -81,6 +81,10 @@ ciMonWatch::~ciMonWatch() delete osdMessage; osdMessage = NULL; } + if(osdItem) { + delete osdItem; + osdItem = NULL; + } if(replayTitle) { delete replayTitle; replayTitle = NULL; @@ -292,11 +296,13 @@ void ciMonWatch::Action(void) bool ciMonWatch::RenderScreen() { cString* scRender; bool bForce = m_bUpdateScreen; - if(m_eWatchMode == eLiveTV) { + if(osdMessage) { + scRender = osdMessage; + } else if(osdItem) { + scRender = osdItem; + } else if(m_eWatchMode == eLiveTV) { if(Program()) { bForce = true; - m_nScrollOffset = 0; - m_bScrollBackward = false; } if(chPresentTitle) scRender = chPresentTitle; @@ -305,11 +311,13 @@ bool ciMonWatch::RenderScreen() { } else { if(Replay()) { bForce = true; - m_nScrollOffset = 0; - m_bScrollBackward = false; } scRender = replayTitle; } + if(bForce) { + m_nScrollOffset = 0; + m_bScrollBackward = false; + } if(bForce || m_nScrollOffset > 0 || m_bScrollBackward) { this->clear(); if(scRender) { @@ -654,23 +662,81 @@ bool ciMonWatch::Volume(int nVolume, bool bAbsolute) return bStateIsChanged; } -void ciMonWatch::StatusMessage(const char *szMessage) + +void ciMonWatch::OsdClear() { + cMutexLooker m(mutex); + if(osdMessage) { + delete osdMessage; + osdMessage = NULL; + m_bUpdateScreen = true; + } + if(osdItem) { + delete osdItem; + osdItem = NULL; + m_bUpdateScreen = true; + } +} + +void ciMonWatch::OsdCurrentItem(const char *sz) { + char *s = NULL; + char *sc = NULL; + if(sz && !isempty(sz)) { + s = strdup(sz); + sc = compactspace(strreplace(s,'\t',' ')); + } + if(sc + && osdItem + && 0 == strcmp(sc, *osdItem)) { + if(s) { + free(s); + } + return; + } cMutexLooker m(mutex); - if(szMessage) { - if(osdMessage) { - delete osdMessage; - osdMessage = NULL; - } - if (!isempty(szMessage)) { - osdMessage = new cString(szMessage); - m_bShowOsdMessage = true; - m_bUpdateScreen = true; - } - } else { - m_bShowOsdMessage = false; + if(osdItem) { + delete osdItem; + osdItem = NULL; + m_bUpdateScreen = true; + } + if(sc) { + osdItem = new cString(sc); + m_bUpdateScreen = true; + } + if(s) { + free(s); + } +} + +void ciMonWatch::OsdStatusMessage(const char *sz) +{ + char *s = NULL; + char *sc = NULL; + if(sz && !isempty(sz)) { + s = strdup(sz); + sc = compactspace(strreplace(s,'\t',' ')); + } + if(sc + && osdMessage + && 0 == strcmp(sc, *osdMessage)) { + if(s) { + free(s); + } + return; + } + cMutexLooker m(mutex); + if(osdMessage) { + delete osdMessage; + osdMessage = NULL; m_bUpdateScreen = true; } + if(sc) { + osdMessage = new cString(sc); + m_bUpdateScreen = true; + } + if(s) { + free(s); + } } bool ciMonWatch::SetFont(const char *szFont) { @@ -95,7 +95,7 @@ private: int m_nLastVolume; bool m_bVolumeMute; - bool m_bShowOsdMessage; + cString* osdItem; cString* osdMessage; eReplayMode m_eReplayMode; @@ -120,7 +120,10 @@ public: void Recording(const cDevice *pDevice, const char *szName, const char *szFileName, bool bOn); void Channel(int nChannelNumber); bool Volume(int nVolume, bool bAbsolute); - void StatusMessage(const char *szMessage); + + void OsdClear(); + void OsdCurrentItem(const char *sz); + void OsdStatusMessage(const char *sz); virtual bool SetFont(const char *szFont); }; |