From cef6ca78a25e0d80196b5b94bb9435e81a490624 Mon Sep 17 00:00:00 2001 From: kamel5 Date: Mon, 15 Mar 2021 14:10:18 +0100 Subject: [PATCH] Fix cutting marks wasn't updated --- coreengine/viewdisplayreplay.c | 2 - coreengine/viewelementsdisplayreplay.c | 84 +++++--------------------- coreengine/viewelementsdisplayreplay.h | 6 +- 3 files changed, 15 insertions(+), 77 deletions(-) diff --git a/coreengine/viewdisplayreplay.c b/coreengine/viewdisplayreplay.c index 1a84090..cdd2a77 100644 --- a/coreengine/viewdisplayreplay.c +++ b/coreengine/viewdisplayreplay.c @@ -165,8 +165,6 @@ void cViewReplay::ClearVariables(void) { veTimeshiftTimes->Set(cString(""), cString(""), cString("")); if (veEndTime) veEndTime->Set(cString("")); - if (veCutMarks) - veCutMarks->Reset(); timersLoaded = false; globalTimers.ClearTimers(); } diff --git a/coreengine/viewelementsdisplayreplay.c b/coreengine/viewelementsdisplayreplay.c index 2f7b690..09ac47a 100644 --- a/coreengine/viewelementsdisplayreplay.c +++ b/coreengine/viewelementsdisplayreplay.c @@ -375,6 +375,7 @@ bool cVeDrProgressBar::Parse(bool force) { tokenContainer->AddIntToken((int)eDRProgressbarIT::timeshifttotal, timeshiftTotal); SetDirty(); + changed = false; return true; } @@ -383,13 +384,16 @@ bool cVeDrProgressBar::Parse(bool force) { ******************************************************************/ cVeDrCutMarks::cVeDrCutMarks(void) { cutmarksIndex = -1; - lastMarks = NULL; + changed = true; + marks = NULL; + current = -1; + total = -1; + numMarksLast = 0; timeShiftActive = NoRec; - Reset(); + timeshiftTotal = -1; } cVeDrCutMarks::~cVeDrCutMarks(void) { - delete[] lastMarks; } void cVeDrCutMarks::SetTokenContainer(void) { @@ -406,31 +410,22 @@ void cVeDrCutMarks::SetTokenContainer(void) { } void cVeDrCutMarks::Set(const cMarks *marks, int current, int total, eRecType_t timeShiftActive, int timeshiftTotal) { + int numMarks = marks->Count(); + if (!(this->current != current || this->total != total || this->marks != marks || numMarksLast != numMarks)) + return; this->marks = marks; + numMarksLast = numMarks; this->current = current; this->total = total; this->timeShiftActive = timeShiftActive; this->timeshiftTotal = timeshiftTotal; -} -void cVeDrCutMarks::Reset(void) { - marks = NULL; - current = -1; - total = -1; - numMarksLast = 0; - delete[] lastMarks; - lastMarks = NULL; - markActive = -1; - timeShiftActive = NoRec; - timeshiftTotal = -1; + changed = true; } bool cVeDrCutMarks::Parse(bool force) { - if (!cViewElement::Parse(force)) + if (!cViewElement::Parse(force) || !changed) return false; - if (!marks || !MarksChanged()) { - return false; - } tokenContainer->Clear(); tokenContainer->AddIntToken((int)eDRCutmarksIT::timeshift, timeShiftActive); int numMarks = marks->Count(); @@ -459,61 +454,10 @@ bool cVeDrCutMarks::Parse(bool force) { isStartMark = !isStartMark; } SetDirty(); + changed = false; return true; } -bool cVeDrCutMarks::MarksChanged(void) { - bool redraw = false; - //if mark was active, we redraw always - if (markActive >= 0) { - markActive = -1; - redraw = true; - } - //check if current position in recording hits mark exactly - for (const cMark *m = marks->First(); m; m = marks->Next(m)) { - if (m->Position() == current) { - markActive = current; - redraw = true; - break; - } - } - if (redraw) - return true; - //if number of marks has changed, redraw - int numMarks = marks->Count(); - if (numMarks != numMarksLast) { - RememberMarks(); - return true; - } - if (!lastMarks) - return false; - //if position has changed, redraw - int i=0; - for (const cMark *m = marks->First(); m; m = marks->Next(m)) { - if (m->Position() != lastMarks[i]) { - RememberMarks(); - return true; - } - i++; - } - return false; -} - -void cVeDrCutMarks::RememberMarks(void) { - if (!marks) - return; - numMarksLast = marks->Count(); - if (numMarksLast < 1) - return; - delete[] lastMarks; - lastMarks = new int[numMarksLast]; - int i=0; - for (const cMark *m = marks->First(); m; m = marks->Next(m)) { - lastMarks[i] = m->Position(); - i++; - } -} - /****************************************************************** * cVeDrControlIcons ******************************************************************/ diff --git a/coreengine/viewelementsdisplayreplay.h b/coreengine/viewelementsdisplayreplay.h index 27d66ca..94f24cb 100644 --- a/coreengine/viewelementsdisplayreplay.h +++ b/coreengine/viewelementsdisplayreplay.h @@ -140,16 +140,12 @@ private: eRecType_t timeShiftActive; int timeshiftTotal; int numMarksLast; - int *lastMarks; - int markActive; - bool MarksChanged(void); - void RememberMarks(void); + bool changed; public: cVeDrCutMarks(void); virtual ~cVeDrCutMarks(void); void SetTokenContainer(void); void Set(const cMarks *marks, int current, int total, eRecType_t timeShiftActive = NoRec, int timeshiftTotal = 0); - void Reset(void); bool Parse(bool forced = false); };