summaryrefslogtreecommitdiff
path: root/coreengine/viewdisplayreplay.c
diff options
context:
space:
mode:
authorlouis <louis.braun@gmx.de>2016-01-26 18:32:38 +0100
committerlouis <louis.braun@gmx.de>2016-01-26 18:32:38 +0100
commit809fbda03c5014ba9cd361f5113d1d717cd41ea6 (patch)
tree264bbc5640375f1bcb165fc7f4a3e595adcc26ca /coreengine/viewdisplayreplay.c
parent196dd7eb9965a405bb16b51dc870fbbb31aeef87 (diff)
downloadvdr-plugin-skindesigner-809fbda03c5014ba9cd361f5113d1d717cd41ea6.tar.gz
vdr-plugin-skindesigner-809fbda03c5014ba9cd361f5113d1d717cd41ea6.tar.bz2
Version 0.8.0 beta
Diffstat (limited to 'coreengine/viewdisplayreplay.c')
-rw-r--r--coreengine/viewdisplayreplay.c314
1 files changed, 314 insertions, 0 deletions
diff --git a/coreengine/viewdisplayreplay.c b/coreengine/viewdisplayreplay.c
new file mode 100644
index 0000000..503b72f
--- /dev/null
+++ b/coreengine/viewdisplayreplay.c
@@ -0,0 +1,314 @@
+#include "viewdisplayreplay.h"
+
+/************************************************************************************
+* cViewReplay
+************************************************************************************/
+
+cViewReplay::cViewReplay(void) {
+ veCustomTokens = NULL;
+ veEndTime = NULL;
+ veMessage = NULL;
+ veScraperContent = NULL;
+ veRecTitle = NULL;
+ veRecInfo = NULL;
+ veCurrentTime = NULL;
+ veTotalTime = NULL;
+ veProgressbar = NULL;
+ veCutMarks = NULL;
+ veProgressModeOnly = NULL;
+ veControlIcons = NULL;
+ veControlIconsModeOnly = NULL;
+ veJump = NULL;
+ veOnPause = NULL;
+ veOnPauseModeOnly = NULL;
+ ClearVariables();
+ viewId = eViewType::DisplayReplay;
+ viewName = strdup("displayreplay");
+ numViewElements = (int)eVeDisplayReplay::count;
+ viewElements = new cViewElement*[numViewElements];
+ for (int i=0; i < numViewElements; i++) {
+ viewElements[i] = NULL;
+ }
+ SetViewElements();
+}
+
+cViewReplay::~cViewReplay() {
+}
+
+void cViewReplay::SetViewElements(void) {
+ viewElementNames.insert(pair<string, int>("background", (int)eVeDisplayReplay::background));
+ viewElementNames.insert(pair<string, int>("backgroundmodeonly", (int)eVeDisplayReplay::backgroundmodeonly));
+ viewElementNames.insert(pair<string, int>("datetime", (int)eVeDisplayReplay::datetime));
+ viewElementNames.insert(pair<string, int>("time", (int)eVeDisplayReplay::time));
+ viewElementNames.insert(pair<string, int>("scrapercontent", (int)eVeDisplayReplay::scrapercontent));
+ viewElementNames.insert(pair<string, int>("rectitle", (int)eVeDisplayReplay::rectitle));
+ viewElementNames.insert(pair<string, int>("recinfo", (int)eVeDisplayReplay::recinfo));
+ viewElementNames.insert(pair<string, int>("currenttime", (int)eVeDisplayReplay::currenttime));
+ viewElementNames.insert(pair<string, int>("endtime", (int)eVeDisplayReplay::endtime));
+ viewElementNames.insert(pair<string, int>("totaltime", (int)eVeDisplayReplay::totaltime));
+ viewElementNames.insert(pair<string, int>("progressbar", (int)eVeDisplayReplay::progressbar));
+ viewElementNames.insert(pair<string, int>("cutmarks", (int)eVeDisplayReplay::cutmarks));
+ viewElementNames.insert(pair<string, int>("cutmarks", (int)eVeDisplayReplay::cutmarks));
+ viewElementNames.insert(pair<string, int>("controlicons", (int)eVeDisplayReplay::controlicons));
+ viewElementNames.insert(pair<string, int>("controliconsmodeonly", (int)eVeDisplayReplay::controliconsmodeonly));
+ viewElementNames.insert(pair<string, int>("progressmodeonly", (int)eVeDisplayReplay::progressmodeonly));
+ viewElementNames.insert(pair<string, int>("jump", (int)eVeDisplayReplay::jump));
+ viewElementNames.insert(pair<string, int>("message", (int)eVeDisplayReplay::message));
+ viewElementNames.insert(pair<string, int>("onpause", (int)eVeDisplayReplay::onpause));
+ viewElementNames.insert(pair<string, int>("onpausemodeonly", (int)eVeDisplayReplay::onpausemodeonly));
+ viewElementNames.insert(pair<string, int>("customtokens", (int)eVeDisplayReplay::customtokens));
+}
+
+void cViewReplay::SetViewElementObjects(void) {
+ for (int i = 0; i < numViewElements; i++) {
+ if (!viewElements[i])
+ continue;
+ if (dynamic_cast<cVeMessage*>(viewElements[i]))
+ {
+ veMessage = dynamic_cast<cVeMessage*>(viewElements[i]);
+ }
+ else if (dynamic_cast<cVeDrScraperContent*>(viewElements[i]))
+ {
+ veScraperContent = dynamic_cast<cVeDrScraperContent*>(viewElements[i]);
+ }
+ else if (dynamic_cast<cVeCustomTokens*>(viewElements[i]))
+ {
+ veCustomTokens = dynamic_cast<cVeCustomTokens*>(viewElements[i]);
+ }
+ else if (dynamic_cast<cVeDrRecTitle*>(viewElements[i]))
+ {
+ veRecTitle = dynamic_cast<cVeDrRecTitle*>(viewElements[i]);
+ }
+ else if (dynamic_cast<cVeDrRecInfo*>(viewElements[i]))
+ {
+ veRecInfo = dynamic_cast<cVeDrRecInfo*>(viewElements[i]);
+ }
+ else if (dynamic_cast<cVeDrCurrentTime*>(viewElements[i]))
+ {
+ veCurrentTime = dynamic_cast<cVeDrCurrentTime*>(viewElements[i]);
+ }
+ else if (dynamic_cast<cVeDrTotalTime*>(viewElements[i]))
+ {
+ veTotalTime = dynamic_cast<cVeDrTotalTime*>(viewElements[i]);
+ }
+ else if (dynamic_cast<cVeDrEndTime*>(viewElements[i]))
+ {
+ veEndTime = dynamic_cast<cVeDrEndTime*>(viewElements[i]);
+ }
+ else if (dynamic_cast<cVeDrProgressBar*>(viewElements[i]))
+ {
+ veProgressbar = dynamic_cast<cVeDrProgressBar*>(viewElements[i]);
+ }
+ else if (dynamic_cast<cVeDrCutMarks*>(viewElements[i]))
+ {
+ veCutMarks = dynamic_cast<cVeDrCutMarks*>(viewElements[i]);
+ }
+ else if (dynamic_cast<cVeDrProgressModeonly*>(viewElements[i]))
+ {
+ veProgressModeOnly = dynamic_cast<cVeDrProgressModeonly*>(viewElements[i]);
+ }
+ else if (dynamic_cast<cVeDrControlIcons*>(viewElements[i]) && (i == (int)eVeDisplayReplay::controlicons))
+ {
+ veControlIcons = dynamic_cast<cVeDrControlIcons*>(viewElements[i]);
+ }
+ else if (dynamic_cast<cVeDrControlIcons*>(viewElements[i]) && i == (int)eVeDisplayReplay::controliconsmodeonly)
+ {
+ veControlIconsModeOnly = dynamic_cast<cVeDrControlIcons*>(viewElements[i]);
+ }
+ else if (dynamic_cast<cVeDrJump*>(viewElements[i]))
+ {
+ veJump = dynamic_cast<cVeDrJump*>(viewElements[i]);
+ }
+ else if (dynamic_cast<cVeDrOnPause*>(viewElements[i]) && i == (int)eVeDisplayReplay::onpause)
+ {
+ veOnPause = dynamic_cast<cVeDrOnPause*>(viewElements[i]);
+ veOnPause->SetDetached();
+ veOnPause->UnsetWaitOnWakeup();
+ }
+ else if (dynamic_cast<cVeDrOnPause*>(viewElements[i]) && i == (int)eVeDisplayReplay::onpausemodeonly)
+ {
+ veOnPauseModeOnly = dynamic_cast<cVeDrOnPause*>(viewElements[i]);
+ veOnPauseModeOnly->SetDetached();
+ veOnPauseModeOnly->UnsetWaitOnWakeup();
+ }
+ }
+}
+
+void cViewReplay::ClearVariables(void) {
+ cView::ClearVariables();
+ modeOnly = false;
+ lastFlush = 0;
+ message = false;
+ reclength = -1;
+ timeShiftActive = false;
+ timeShiftFramesTotal = -1;
+ timeShiftLength = -1;
+ timeShiftDuration = "";
+ if (veCustomTokens)
+ veCustomTokens->Reset();
+ if (veEndTime)
+ veEndTime->Set(cString(""));
+ if (veCutMarks)
+ veCutMarks->Reset();
+}
+
+void cViewReplay::SetTimeShift(int framesTotal, int timeShiftLength) {
+ timeShiftActive = true;
+ timeShiftFramesTotal = framesTotal;
+ this->timeShiftLength = timeShiftLength;
+ int mins = (timeShiftLength / 60) % 60;
+ int hours = (timeShiftLength / 3600) % 24;
+ timeShiftDuration = cString::sprintf("%d:%02d", hours, mins);
+}
+
+void cViewReplay::SetRecording(const cRecording *recording) {
+ if (veRecTitle) {
+ veRecTitle->Set(recording);
+ }
+ if (veRecInfo) {
+ veRecInfo->Set(recording);
+ }
+ if (veScraperContent) {
+ veScraperContent->Set(recording);
+ }
+}
+
+void cViewReplay::SetTitle(const char *title) {
+ if (veRecTitle) {
+ veRecTitle->Set(title);
+ }
+}
+
+void cViewReplay::SetCurrent(const char *current) {
+ if (veCurrentTime)
+ veCurrentTime->Set(current);
+ Render((int)eVeDisplayReplay::currenttime);
+ //good place to refresh these viewelements
+ //since SetCurrent is called every second
+ Render((int)eVeDisplayReplay::datetime);
+ Render((int)eVeDisplayReplay::time);
+ Render((int)eVeDisplayChannel::customtokens);
+}
+
+void cViewReplay::SetTotal(const char *total) {
+ if (veTotalTime)
+ veTotalTime->Set(total, timeShiftActive, *timeShiftDuration);
+ Render((int)eVeDisplayReplay::totaltime);
+}
+
+void cViewReplay::SetEndTime(int current, int total) {
+ if (!veEndTime)
+ return;
+ int totalLength = total;
+ int recordingLength = reclength;
+ if (timeShiftActive && timeShiftFramesTotal > 0) {
+ totalLength = timeShiftFramesTotal;
+ recordingLength = timeShiftLength;
+ }
+ double rest = (double)(totalLength - current) / (double)totalLength;
+ time_t end = time(0) + rest*recordingLength;
+ veEndTime->Set(TimeString(end));
+ Render((int)eVeDisplayReplay::endtime);
+}
+
+void cViewReplay::SetProgressbar(int current, int total) {
+ if (veProgressbar)
+ veProgressbar->Set(current, total, timeShiftActive, timeShiftFramesTotal);
+ Render((int)eVeDisplayReplay::progressbar);
+}
+
+void cViewReplay::SetMarks(const cMarks *marks, int current, int total) {
+ if (veCutMarks)
+ veCutMarks->Set(marks, current, total, timeShiftActive, timeShiftFramesTotal);
+ Render((int)eVeDisplayReplay::cutmarks);
+}
+
+void cViewReplay::SetControlIcons(bool play, bool forward, int speed) {
+ if (!modeOnly) {
+ if (veControlIcons)
+ veControlIcons->Set(play, forward, speed);
+ Render((int)eVeDisplayReplay::controlicons);
+ } else {
+ if (veControlIconsModeOnly)
+ veControlIconsModeOnly->Set(play, forward, speed);
+ Render((int)eVeDisplayReplay::controliconsmodeonly);
+ }
+
+}
+
+void cViewReplay::SetJump(const char *jump) {
+ if (veJump) {
+ if (!jump)
+ veJump->Clear();
+ else
+ veJump->Set(jump);
+ }
+ Render((int)eVeDisplayReplay::jump);
+}
+
+void cViewReplay::SetMessage(eMessageType type, const char *text) {
+ if (veMessage) {
+ if (text)
+ veMessage->Set(type, text);
+ else
+ veMessage->Clear();
+ }
+ Render((int)eVeDisplayReplay::message);
+}
+
+void cViewReplay::StartOnPause(const char *recfilename) {
+ cVeDrOnPause *onPause = (!modeOnly) ? veOnPause : veOnPauseModeOnly;
+ if (!onPause)
+ return;
+ onPause->Set(recfilename);
+ onPause->Parse(true);
+}
+
+void cViewReplay::ClearOnPause(void) {
+ cVeDrOnPause *onPause = (!modeOnly) ? veOnPause : veOnPauseModeOnly;
+ if (!onPause)
+ return;
+ onPause->Close();
+}
+
+void cViewReplay::Flush(void) {
+ if (init) {
+ sdOsd.LockFlush();
+ if (!modeOnly) {
+ Render((int)eVeDisplayReplay::background);
+ Render((int)eVeDisplayReplay::rectitle);
+ Render((int)eVeDisplayReplay::recinfo);
+ Render((int)eVeDisplayReplay::scrapercontent);
+ } else {
+ Render((int)eVeDisplayReplay::backgroundmodeonly);
+ }
+ }
+
+ if (modeOnly) {
+ SetProgressModeOnly();
+ }
+
+ cView::Flush();
+}
+
+void cViewReplay::SetProgressModeOnly(void) {
+ if (!veProgressModeOnly)
+ return;
+ time_t now = time(0);
+ if (now == lastFlush) {
+ return;
+ }
+ lastFlush = now;
+
+ cControl *control = cControl::Control();
+ if (!control)
+ return;
+ double fps = control->FramesPerSecond();
+ int current = 0;
+ int total = 0;
+ if (!control->GetIndex(current, total))
+ return;
+ veProgressModeOnly->Set(fps, current, total);
+ if (veProgressModeOnly->Parse())
+ veProgressModeOnly->Render();
+} \ No newline at end of file