summaryrefslogtreecommitdiff
path: root/coreengine/viewdisplaychannel.c
diff options
context:
space:
mode:
Diffstat (limited to 'coreengine/viewdisplaychannel.c')
-rw-r--r--coreengine/viewdisplaychannel.c447
1 files changed, 413 insertions, 34 deletions
diff --git a/coreengine/viewdisplaychannel.c b/coreengine/viewdisplaychannel.c
index f8e163a..7ab36ce 100644
--- a/coreengine/viewdisplaychannel.c
+++ b/coreengine/viewdisplaychannel.c
@@ -24,9 +24,66 @@ cViewChannel::cViewChannel(void) {
veStatusInfo = NULL;
veScraperContent = NULL;
veEcmInfo = NULL;
+#ifdef USE_ZAPCOCKPIT
+ veChannelHints = NULL;
+ veChannelDetail = NULL;
+ veChannelListDetail = NULL;
+ veGroupChannelListDetail = NULL;
+ channelList = NULL;
+ groupList = NULL;
+ groupChannelList = NULL;
+#endif
}
cViewChannel::~cViewChannel() {
+#ifdef USE_ZAPCOCKPIT
+ delete channelList;
+ delete groupList;
+ delete groupChannelList;
+#endif
+}
+
+void cViewChannel::SetGlobals(cGlobals *globals) {
+ cView::SetGlobals(globals);
+#ifdef USE_ZAPCOCKPIT
+ if (channelList)
+ channelList->SetGlobals(globals);
+ if (groupList)
+ groupList->SetGlobals(globals);
+ if (groupChannelList)
+ groupChannelList->SetGlobals(globals);
+#endif
+}
+
+void cViewChannel::PreCache(void) {
+ cView::PreCache();
+#ifdef USE_ZAPCOCKPIT
+ if (channelList) {
+ channelList->SetContainer(attribs->X(), attribs->Y(), attribs->Width(), attribs->Height());
+ channelList->PreCache();
+ }
+ if (groupList) {
+ groupList->SetContainer(attribs->X(), attribs->Y(), attribs->Width(), attribs->Height());
+ groupList->PreCache();
+ }
+ if (groupChannelList) {
+ groupChannelList->SetContainer(attribs->X(), attribs->Y(), attribs->Width(), attribs->Height());
+ groupChannelList->PreCache();
+ }
+#endif
+}
+
+void cViewChannel::AddChannelViewList(const char *listName, cViewList *viewList) {
+#ifdef USE_ZAPCOCKPIT
+ if (!strcmp(listName, "channellist"))
+ channelList = dynamic_cast<cViewListChannelList*>(viewList);
+ else if (!strcmp(listName, "grouplist"))
+ groupList = dynamic_cast<cViewListGroupList*>(viewList);
+ else if (!strcmp(listName, "groupchannellist"))
+ groupChannelList = dynamic_cast<cViewListChannelList*>(viewList);
+ else
+ esyslog("skindesigner: invalid view list %s in displaychannel", listName);
+#endif
}
void cViewChannel::SetViewElements(void) {
@@ -43,6 +100,13 @@ void cViewChannel::SetViewElements(void) {
viewElementNames.insert(pair<string, int>("devices", (int)eVeDisplayChannel::devices));
viewElementNames.insert(pair<string, int>("currentweather", (int)eVeDisplayChannel::currentweather));
viewElementNames.insert(pair<string, int>("scrapercontent", (int)eVeDisplayChannel::scrapercontent));
+ viewElementNames.insert(pair<string, int>("channelhints", (int)eVeDisplayChannel::channelhints));
+ viewElementNames.insert(pair<string, int>("channeldetail", (int)eVeDisplayChannel::channeldetail));
+ viewElementNames.insert(pair<string, int>("channellistback", (int)eVeDisplayChannel::channellistback));
+ viewElementNames.insert(pair<string, int>("channellistdetail", (int)eVeDisplayChannel::channellistdetail));
+ viewElementNames.insert(pair<string, int>("grouplistback", (int)eVeDisplayChannel::grouplistback));
+ viewElementNames.insert(pair<string, int>("groupchannellistback", (int)eVeDisplayChannel::groupchannellistback));
+ viewElementNames.insert(pair<string, int>("groupchannellistdetail", (int)eVeDisplayChannel::groupchannellistdetail));
viewElementNames.insert(pair<string, int>("datetime", (int)eVeDisplayChannel::datetime));
viewElementNames.insert(pair<string, int>("time", (int)eVeDisplayChannel::time));
viewElementNames.insert(pair<string, int>("message", (int)eVeDisplayChannel::message));
@@ -83,6 +147,24 @@ void cViewChannel::SetViewElementObjects(void) {
{
veScraperContent = dynamic_cast<cVeDcScraperContent*>(viewElements[i]);
}
+#ifdef USE_ZAPCOCKPIT
+ else if (dynamic_cast<cVeDcChannelListDetail*>(viewElements[i]))
+ {
+ veChannelListDetail = dynamic_cast<cVeDcChannelListDetail*>(viewElements[i]);
+ }
+ else if (dynamic_cast<cVeDcGroupChannelListDetail*>(viewElements[i]))
+ {
+ veGroupChannelListDetail = dynamic_cast<cVeDcGroupChannelListDetail*>(viewElements[i]);
+ }
+ else if (dynamic_cast<cVeDcChannelHints*>(viewElements[i]))
+ {
+ veChannelHints = dynamic_cast<cVeDcChannelHints*>(viewElements[i]);
+ }
+ else if (dynamic_cast<cVeDcChannelDetail*>(viewElements[i]))
+ {
+ veChannelDetail = dynamic_cast<cVeDcChannelDetail*>(viewElements[i]);
+ }
+#endif
else if (dynamic_cast<cVeDcEcmInfo*>(viewElements[i]))
{
veEcmInfo = dynamic_cast<cVeDcEcmInfo*>(viewElements[i]);
@@ -100,8 +182,16 @@ void cViewChannel::SetViewElementObjects(void) {
void cViewChannel::ClearVariables(void) {
cView::ClearVariables();
+#ifdef USE_ZAPCOCKPIT
+ viewType = dcDefault;
+ viewTypeLast = dcDefault;
+ initExtended = true;
+ displayList = false;
+ initList = false;
+ channelInput = false;
+#endif
channelChange = false;
- displayChannelGroups = false;
+ mode = dmDefault;
if (veCustomTokens)
veCustomTokens->Reset();
timersLoaded = false;
@@ -114,8 +204,23 @@ void cViewChannel::SetChannel(const cChannel *channel, int number) {
globalTimers.LoadTimers();
}
channelChange = true;
- bool wasChannelGroups = displayChannelGroups;
- displayChannelGroups = false;
+
+ //check if channelgroups have to be cleared
+ bool clearChannelGroups = (mode == dmChannelGroups) ? true : false;
+ mode = dmDefault;
+
+#ifdef USE_ZAPCOCKPIT
+ //check if channel hints have to be cleared
+ if (number) {
+ channelInput = true;
+ } else if (channelInput) {
+ channelInput = false;
+ if (veChannelHints)
+ veChannelHints->Close();
+ }
+ if (veChannelDetail)
+ veChannelDetail->Clear(true);
+#endif
if (veChannelInfo) {
veChannelInfo->Clear();
@@ -124,24 +229,15 @@ void cViewChannel::SetChannel(const cChannel *channel, int number) {
if (channel) {
if (!channel->GroupSep()) {
- if (wasChannelGroups)
+ if (clearChannelGroups)
Clear((int)eVeDisplayChannel::channelgroup);
if (veStatusInfo)
veStatusInfo->Set(channel);
if (veEcmInfo)
veEcmInfo->Set(channel);
} else {
- displayChannelGroups = true;
- Clear((int)eVeDisplayChannel::channelinfo, true);
- Clear((int)eVeDisplayChannel::epginfo, true);
- Clear((int)eVeDisplayChannel::statusinfo, true);
- Clear((int)eVeDisplayChannel::progressbar, true);
- Clear((int)eVeDisplayChannel::screenresolution, true);
- Clear((int)eVeDisplayChannel::signalquality, true);
- Clear((int)eVeDisplayChannel::audioinfo, true);
- Clear((int)eVeDisplayChannel::ecminfo, true);
- Clear((int)eVeDisplayChannel::devices, true);
- Clear((int)eVeDisplayChannel::customtokens, true);
+ mode = dmChannelGroups;
+ ClearBasic(false);
if (veChannelGroup)
veChannelGroup->Set(channel);
}
@@ -178,31 +274,310 @@ void cViewChannel::SetMessage(eMessageType type, const char *text) {
}
}
+#ifdef USE_ZAPCOCKPIT
+
+void cViewChannel::SetViewType(eDisplaychannelView viewType) {
+ viewTypeLast = this->viewType;
+ this->viewType = viewType;
+}
+
+int cViewChannel::MaxItems(void) {
+ initList = true;
+ if (viewType == dcChannelList && channelList)
+ return channelList->NumItems();
+ else if (viewType == dcGroupsList && groupList)
+ return groupList->NumItems();
+ else if (viewType == dcGroupsChannelList && groupChannelList)
+ return groupChannelList->NumItems();
+ return 0;
+}
+
+void cViewChannel::SetChannelInfo(const cChannel *channel) {
+ if (!channel)
+ return;
+ if (viewType == dcChannelInfo && veChannelDetail) {
+ ClearOnDisplay();
+ veChannelDetail->Set(channel);
+ Render((int)eVeDisplayChannel::channeldetail);
+ } else if (viewType == dcChannelListInfo && veChannelListDetail) {
+ veChannelListDetail->Set(channel);
+ Render((int)eVeDisplayChannel::channellistdetail);
+ } else if (viewType == dcGroupsChannelListInfo && veGroupChannelListDetail) {
+ veGroupChannelListDetail->Set(channel);
+ Render((int)eVeDisplayChannel::groupchannellistdetail);
+ }
+}
+
+void cViewChannel::SetChannelList(const cChannel *channel, int index, bool current) {
+ displayList = true;
+ if (viewType == dcChannelList && channelList) {
+ channelList->Set(channel, index, current);
+ } else if (viewType == dcGroupsChannelList && groupChannelList) {
+ groupChannelList->Set(channel, index, current);
+ }
+}
+
+void cViewChannel::SetGroupList(const char *group, int numChannels, int index, bool current) {
+ displayList = true;
+ if (groupList) {
+ groupList->Set(group, numChannels, index, current);
+ }
+}
+
+void cViewChannel::ClearList(void) {
+ if (viewType == dcChannelList && channelList)
+ channelList->Clear();
+ if (viewType == dcGroupsList && groupList)
+ groupList->Clear();
+}
+
+void cViewChannel::SetNumChannelHints(int num) {
+ if (veChannelHints)
+ veChannelHints->SetNumHints(num);
+ channelHints = true;
+}
+
+void cViewChannel::SetChannelHint(const cChannel *channel) {
+ if (veChannelHints)
+ veChannelHints->SetHint(channel);
+}
+
+#endif //USE_ZAPCOCKPIT
+
+void cViewChannel::Close(void) {
+ delete fader;
+ fader = NULL;
+ delete shifter;
+ shifter = NULL;
+ if (initFinished && ShiftTime() > 0) {
+ cRect shiftbox = CoveredArea();
+ cPoint ref = cPoint(shiftbox.X(), shiftbox.Y());
+ cPoint end = ShiftStart(shiftbox);
+ shifter = new cAnimation((cShiftable*)this, end, ref, false);
+ shifter->Shift();
+ delete shifter;
+ shifter = NULL;
+ } else if (initFinished && FadeTime() > 0) {
+ fader = new cAnimation((cFadable*)this, false);
+ fader->Fade();
+ delete fader;
+ fader = NULL;
+ }
+ UnScaleTv();
+ ClearVariables();
+ for (int i=0; i < numViewElements; i++) {
+ if (!viewElements[i])
+ continue;
+ viewElements[i]->Close();
+ }
+#ifdef USE_ZAPCOCKPIT
+ if (channelList)
+ channelList->Close();
+ if (groupList)
+ groupList->Close();
+ if (groupChannelList)
+ groupChannelList->Close();
+#endif
+ sdOsd.Flush();
+ sdOsd.DeleteOsd();
+}
+
+void cViewChannel::ClearBasic(bool clearBackground) {
+ if (clearBackground) {
+ Clear((int)eVeDisplayChannel::background, true);
+ Clear((int)eVeDisplayChannel::currentweather, true);
+ }
+ Clear((int)eVeDisplayChannel::channelinfo, true);
+ Clear((int)eVeDisplayChannel::epginfo, true);
+ Clear((int)eVeDisplayChannel::statusinfo, true);
+ Clear((int)eVeDisplayChannel::scrapercontent, true);
+ Clear((int)eVeDisplayChannel::progressbar, true);
+ Clear((int)eVeDisplayChannel::screenresolution, true);
+ Clear((int)eVeDisplayChannel::signalquality, true);
+ Clear((int)eVeDisplayChannel::audioinfo, true);
+ Clear((int)eVeDisplayChannel::ecminfo, true);
+ Clear((int)eVeDisplayChannel::devices, true);
+ Clear((int)eVeDisplayChannel::customtokens, true);
+}
+
+void cViewChannel::ClearExtended(void) {
+#ifdef USE_ZAPCOCKPIT
+ //exit from channel list
+ if ((viewTypeLast == dcChannelList || viewTypeLast == dcChannelListInfo) && viewType == dcDefault && channelList) {
+ channelList->Clear();
+ Clear((int)eVeDisplayChannel::channellistback);
+ Clear((int)eVeDisplayChannel::channellistdetail);
+ SetDirty((int)eVeDisplayChannel::channellistback);
+ initExtended = true;
+ ShowBasic();
+ }
+ //exit from channellist info to channel list
+ if (viewTypeLast == dcChannelListInfo && viewType == dcChannelList) {
+ Clear((int)eVeDisplayChannel::channellistdetail);
+ SetDirty((int)eVeDisplayChannel::channellistdetail);
+ }
+ //exit from group list
+ if (viewTypeLast == dcGroupsList && viewType == dcDefault && groupList) {
+ groupList->Clear();
+ Clear((int)eVeDisplayChannel::grouplistback);
+ SetDirty((int)eVeDisplayChannel::grouplistback);
+ initExtended = true;
+ ShowBasic();
+ }
+ //exit from group channel list to group list
+ if (viewTypeLast == dcGroupsChannelList && viewType == dcGroupsList && groupChannelList) {
+ groupChannelList->Clear();
+ Clear((int)eVeDisplayChannel::groupchannellistback);
+ SetDirty((int)eVeDisplayChannel::groupchannellistback);
+ }
+ //exit from groupchannellist info to groupchannel list
+ if (viewTypeLast == dcGroupsChannelListInfo && viewType == dcGroupsChannelList) {
+ Clear((int)eVeDisplayChannel::groupchannellistdetail);
+ SetDirty((int)eVeDisplayChannel::groupchannellistdetail);
+ }
+ //exit from channel list
+ if ((viewTypeLast == dcGroupsChannelList || viewTypeLast == dcGroupsChannelListInfo) && viewType == dcDefault && groupList && groupChannelList) {
+ groupList->Clear();
+ groupChannelList->Clear();
+ Clear((int)eVeDisplayChannel::grouplistback);
+ Clear((int)eVeDisplayChannel::groupchannellistback);
+ Clear((int)eVeDisplayChannel::groupchannellistdetail);
+ SetDirty((int)eVeDisplayChannel::groupchannellistback);
+ SetDirty((int)eVeDisplayChannel::grouplistback);
+ SetDirty((int)eVeDisplayChannel::groupchannellistdetail);
+ initExtended = true;
+ ShowBasic();
+ }
+ //exit from channel info to channel or group list
+ if (viewTypeLast == dcChannelInfo && (viewType == dcChannelList || viewType == dcGroupsList)) {
+ Clear((int)eVeDisplayChannel::channeldetail, true);
+ }
+ viewTypeLast = dcDefault;
+#endif
+}
+
+void cViewChannel::ClearOnDisplay(void) {
+#ifdef USE_ZAPCOCKPIT
+ if (viewType == dcChannelInfo && veChannelDetail) {
+ vector<int> clear = veChannelDetail->GetClearOnDisplay();
+ for (vector<int>::iterator ve = clear.begin(); ve != clear.end(); ve++) {
+ Hide(*ve);
+ }
+ } else {
+ cViewElement *listBack = NULL;
+ if (viewType == dcChannelList)
+ listBack = viewElements[(int)eVeDisplayChannel::channellistback];
+ else if (viewType == dcGroupsList)
+ listBack = viewElements[(int)eVeDisplayChannel::grouplistback];
+ if (!listBack)
+ return;
+ if (listBack->DoClearAll()) {
+ HideBasic();
+ return;
+ }
+ vector<int> clear = listBack->GetClearOnDisplay();
+ for (vector<int>::iterator ve = clear.begin(); ve != clear.end(); ve++) {
+ Hide(*ve);
+ }
+ }
+#endif
+}
+
+void cViewChannel::DrawBasic(bool initial) {
+ if (initial) {
+ Render((int)eVeDisplayChannel::background);
+ Render((int)eVeDisplayChannel::currentweather);
+ }
+ Render((int)eVeDisplayChannel::channelinfo);
+ Render((int)eVeDisplayChannel::epginfo);
+ Render((int)eVeDisplayChannel::statusinfo);
+ Render((int)eVeDisplayChannel::scrapercontent);
+ Render((int)eVeDisplayChannel::progressbar, channelChange);
+ Render((int)eVeDisplayChannel::screenresolution);
+ Render((int)eVeDisplayChannel::signalquality);
+ Render((int)eVeDisplayChannel::audioinfo);
+ Render((int)eVeDisplayChannel::ecminfo);
+ Render((int)eVeDisplayChannel::devices);
+ Render((int)eVeDisplayChannel::customtokens);
+ Render((int)eVeDisplayChannel::message);
+
+#ifdef USE_ZAPCOCKPIT
+ if (channelHints) {
+ channelHints = false;
+ if (veChannelHints) {
+ if (veChannelHints->Active())
+ veChannelHints->Close();
+ veChannelHints->Parse();
+ veChannelHints->Render();
+ }
+ }
+#endif
+}
+
+void cViewChannel::HideBasic(void) {
+ for (int ve = (int)eVeDisplayChannel::background; ve <= (int)eVeDisplayChannel::ecminfo; ve++) {
+ Hide(ve);
+ }
+}
+
+void cViewChannel::ShowBasic(void) {
+ for (int ve = (int)eVeDisplayChannel::background; ve <= (int)eVeDisplayChannel::ecminfo; ve++) {
+ Show(ve);
+ }
+}
+
+void cViewChannel::DrawExtended(void) {
+#ifdef USE_ZAPCOCKPIT
+ if (!displayList)
+ return;
+ if (initExtended) {
+ ClearOnDisplay();
+ initExtended = false;
+ }
+ if (!init && initList)
+ sdOsd.LockFlush();
+ if (viewType == dcChannelList && channelList) {
+ Render((int)eVeDisplayChannel::channellistback);
+ channelList->Draw(mcUndefined);
+ if (initList)
+ channelList->StartAnimation();
+ } else if (viewType == dcGroupsList && groupList) {
+ Render((int)eVeDisplayChannel::grouplistback);
+ groupList->Draw(mcUndefined);
+ if (initList)
+ groupList->StartAnimation();
+ } else if (viewType == dcGroupsChannelList && groupChannelList) {
+ Render((int)eVeDisplayChannel::groupchannellistback);
+ groupChannelList->Draw(mcUndefined);
+ if (initList)
+ groupChannelList->StartAnimation();
+ }
+ if (!init && initList)
+ sdOsd.UnlockFlush();
+ displayList = false;
+ initList = false;
+#endif
+}
+
void cViewChannel::Flush(bool animFlush) {
if (init) {
sdOsd.LockFlush();
- Render((int)eVeDisplayChannel::background);
- Render((int)eVeDisplayChannel::currentweather);
}
- if (!displayChannelGroups) {
- //normal display
+#ifdef USE_ZAPCOCKPIT
+ ClearExtended();
+#endif
+
+ //Basic Display Handling
+ if (mode == dmDefault) {
if (!shifting) {
- Render((int)eVeDisplayChannel::channelinfo);
- Render((int)eVeDisplayChannel::epginfo);
- Render((int)eVeDisplayChannel::statusinfo);
- Render((int)eVeDisplayChannel::scrapercontent);
- Render((int)eVeDisplayChannel::progressbar, channelChange);
- Render((int)eVeDisplayChannel::screenresolution);
- Render((int)eVeDisplayChannel::signalquality);
- Render((int)eVeDisplayChannel::audioinfo);
- Render((int)eVeDisplayChannel::ecminfo);
- Render((int)eVeDisplayChannel::devices);
- Render((int)eVeDisplayChannel::customtokens);
- Render((int)eVeDisplayChannel::message);
+ DrawBasic(init);
+ }
+ } else if (mode == dmChannelGroups) {
+ if (init) {
+ Render((int)eVeDisplayChannel::background);
+ Render((int)eVeDisplayChannel::currentweather);
}
- } else {
- //channelgroup display
Render((int)eVeDisplayChannel::channelgroup);
}
if (!shifting) {
@@ -210,6 +585,10 @@ void cViewChannel::Flush(bool animFlush) {
Render((int)eVeDisplayChannel::time);
}
channelChange = false;
+
+#ifdef USE_ZAPCOCKPIT
+ DrawExtended();
+#endif
+
cView::Flush(animFlush);
}
-