summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoranbr <vdr07@deltab.de>2009-05-24 20:36:41 +0200
committeranbr <vdr07@deltab.de>2009-05-24 20:36:41 +0200
commitb03b6aa72ca6a991cff8c32f12d6fb47f9103a5e (patch)
treedbf9c23380be1f81fbea0976f4036dad0349b9e1
parent78581d3dbbecf9b8d9b336b3b00a1d7f6f861558 (diff)
downloadvdr-plugin-imonlcd-b03b6aa72ca6a991cff8c32f12d6fb47f9103a5e.tar.gz
vdr-plugin-imonlcd-b03b6aa72ca6a991cff8c32f12d6fb47f9103a5e.tar.bz2
Render current OSD state
-rw-r--r--status.c18
-rw-r--r--watch.c104
-rw-r--r--watch.h7
3 files changed, 100 insertions, 29 deletions
diff --git a/status.c b/status.c
index 035282f..34d5348 100644
--- a/status.c
+++ b/status.c
@@ -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
}
diff --git a/watch.c b/watch.c
index 2cc52ae..8e00db2 100644
--- a/watch.c
+++ b/watch.c
@@ -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) {
diff --git a/watch.h b/watch.h
index 4ac3da2..68aa894 100644
--- a/watch.h
+++ b/watch.h
@@ -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);
};