summaryrefslogtreecommitdiff
path: root/watch.c
diff options
context:
space:
mode:
Diffstat (limited to 'watch.c')
-rw-r--r--watch.c104
1 files changed, 85 insertions, 19 deletions
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) {