mirror of
				https://projects.vdr-developer.org/git/vdr-plugin-skindesigner.git
				synced 2023-10-19 15:58:31 +00:00 
			
		
		
		
	Merge branch 'master' of git://projects.vdr-developer.org/vdr-plugin-skindesigner
This commit is contained in:
		
							
								
								
									
										2
									
								
								HISTORY
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								HISTORY
									
									
									
									
									
								
							@@ -45,5 +45,7 @@ Version 0.0.3
 | 
			
		||||
- added tokens for current video and audio bitrate in displaychannel. Thx @rofafor for the original code 
 | 
			
		||||
  in the femon plugin and _Martin_ for extracting the code in skinflatplus
 | 
			
		||||
- changed skin metrixHD to display bitrate infos
 | 
			
		||||
- added "active" Token for cutting marks so that a mark can be displayed in a dedicated way if current position
 | 
			
		||||
  in replay exactly hits the mark
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -46,7 +46,7 @@ void cSDDisplayChannel::SetChannel(const cChannel *Channel, int Number) {
 | 
			
		||||
    cString ChannelID("");
 | 
			
		||||
 | 
			
		||||
    if (Channel) {
 | 
			
		||||
        ChannelName = Channel->Name();
 | 
			
		||||
        ChannelName = Channel->Name() ? Channel->Name() : "";
 | 
			
		||||
        ChannelID = Channel->GetChannelID().ToString();
 | 
			
		||||
        if (!Channel->GroupSep()) {
 | 
			
		||||
            ChannelNumber = cString::sprintf("%d%s", Channel->Number(), Number ? "-" : "");
 | 
			
		||||
@@ -159,6 +159,7 @@ void cSDDisplayChannel::SetMessage(eMessageType Type, const char *Text) {
 | 
			
		||||
    channelView->ClearSignalBackground();
 | 
			
		||||
    channelView->ClearScraperContent();
 | 
			
		||||
    channelView->ClearAudioInfo();
 | 
			
		||||
    channelView->ClearBitrates();
 | 
			
		||||
    channelView->DisplayMessage(Type, Text);
 | 
			
		||||
    groupSep = true;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -5,8 +5,6 @@ cSDDisplayReplay::cSDDisplayReplay(cTemplate *replayTemplate, bool ModeOnly) {
 | 
			
		||||
    doOutput = true;
 | 
			
		||||
    initial = true;
 | 
			
		||||
    modeOnly = ModeOnly;
 | 
			
		||||
    numMarksLast = 0;
 | 
			
		||||
    lastMarks = NULL;
 | 
			
		||||
    if (!replayTemplate) {
 | 
			
		||||
        doOutput = false;
 | 
			
		||||
        esyslog("skindesigner: displayReplay no valid template - aborting");
 | 
			
		||||
@@ -24,9 +22,6 @@ cSDDisplayReplay::~cSDDisplayReplay() {
 | 
			
		||||
    if (!doOutput)
 | 
			
		||||
        return;
 | 
			
		||||
    delete replayView;
 | 
			
		||||
    if (lastMarks) {
 | 
			
		||||
        delete[] lastMarks;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void cSDDisplayReplay::SetRecording(const cRecording *Recording) {
 | 
			
		||||
@@ -47,9 +42,7 @@ void cSDDisplayReplay::SetProgress(int Current, int Total) {
 | 
			
		||||
    if (!doOutput)
 | 
			
		||||
        return;
 | 
			
		||||
    replayView->DrawProgressBar(Current, Total);
 | 
			
		||||
    if (MarksChanged()) {
 | 
			
		||||
        replayView->DrawMarks(marks, Total);
 | 
			
		||||
    }
 | 
			
		||||
    replayView->DrawMarks(marks, Current, Total);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void cSDDisplayReplay::SetCurrent(const char *Current) {
 | 
			
		||||
@@ -87,45 +80,3 @@ void cSDDisplayReplay::Flush(void) {
 | 
			
		||||
        replayView->Flush();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/****************************************************************************************
 | 
			
		||||
* Private Functions
 | 
			
		||||
*****************************************************************************************/
 | 
			
		||||
 | 
			
		||||
bool cSDDisplayReplay::MarksChanged(void) {
 | 
			
		||||
    if (!marks)
 | 
			
		||||
        return false;
 | 
			
		||||
    int numMarks = marks->Count();
 | 
			
		||||
    if (numMarks != numMarksLast) {
 | 
			
		||||
        RememberMarks();
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
    if (!lastMarks)
 | 
			
		||||
        return false;
 | 
			
		||||
    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 cSDDisplayReplay::RememberMarks(void) {
 | 
			
		||||
    if (!marks)
 | 
			
		||||
        return;
 | 
			
		||||
    numMarksLast = marks->Count();
 | 
			
		||||
    if (numMarksLast < 1)
 | 
			
		||||
        return;
 | 
			
		||||
    if (lastMarks) {
 | 
			
		||||
        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++;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -13,10 +13,6 @@ private:
 | 
			
		||||
    bool initial;
 | 
			
		||||
    bool doOutput;
 | 
			
		||||
    bool modeOnly;
 | 
			
		||||
    int numMarksLast;
 | 
			
		||||
    int *lastMarks;
 | 
			
		||||
    bool MarksChanged(void);
 | 
			
		||||
    void RememberMarks(void);
 | 
			
		||||
public:
 | 
			
		||||
    cSDDisplayReplay(cTemplate *replayTemplate, bool ModeOnly);
 | 
			
		||||
    virtual ~cSDDisplayReplay();
 | 
			
		||||
 
 | 
			
		||||
@@ -24,8 +24,10 @@ cGlobalSortedTimers::cGlobalSortedTimers(bool forceRefresh) : cVector<const cTim
 | 
			
		||||
        initial = false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    for (cTimer *Timer = Timers.First(); Timer; Timer = Timers.Next(Timer)) 
 | 
			
		||||
        Append(Timer);
 | 
			
		||||
    for (cTimer *Timer = Timers.First(); Timer; Timer = Timers.Next(Timer)) {
 | 
			
		||||
        if (Timer->HasFlags(tfActive))
 | 
			
		||||
            Append(Timer);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    //if remotetimers plugin is available, take timers also from him
 | 
			
		||||
    if (pRemoteTimers) {
 | 
			
		||||
 
 | 
			
		||||
@@ -266,6 +266,7 @@
 | 
			
		||||
    -->
 | 
			
		||||
    <message>
 | 
			
		||||
        <area x="10%" y="45%" width="80%" height="10%" layer="1">
 | 
			
		||||
            <fill color="{clrTransBlack}" />
 | 
			
		||||
            <drawrectangle condition="{status}" x="20" y="0" width="20" height="100%" color="{clrGreen}" />
 | 
			
		||||
            <drawrectangle condition="{info}" x="20" y="0" width="20" height="100%" color="{clrBlue}" />
 | 
			
		||||
            <drawrectangle condition="{warning}" x="20" y="0" width="20" height="100%" color="{clrYellow}" />
 | 
			
		||||
 
 | 
			
		||||
@@ -130,16 +130,25 @@
 | 
			
		||||
    {marks[position]}           frame of current mark
 | 
			
		||||
    {marks[endposition]}        frame where startmark ends
 | 
			
		||||
    {marks[total]}              total number of frames
 | 
			
		||||
    {marks[active]}             true if current replay position hits exactly the mark
 | 
			
		||||
    {marks[startmark]}          true if mark is start mark
 | 
			
		||||
    -->
 | 
			
		||||
    <cutmarks>
 | 
			
		||||
        <area x="5%" y="89%" width="90%" height="3%" layer="3">
 | 
			
		||||
            <loop name="marks" x="0" y="0" orientation="absolute">
 | 
			
		||||
                <drawrectangle x="{marks[position]}/{marks[total]}*{areawidth}" y="0" width="1" height="100%" color="{clrWhite}" />
 | 
			
		||||
                <drawrectangle condition="{marks[startmark]}" x="{marks[position]}/{marks[total]}*{areawidth}" y="0" width="5" height="1" color="{clrWhite}" />
 | 
			
		||||
                <drawrectangle condition="{marks[startmark]}" x="{marks[position]}/{marks[total]}*{areawidth}" y="{areaheight}-1" width="5" height="1" color="{clrWhite}" />
 | 
			
		||||
                <drawrectangle condition="not{marks[startmark]}" x="{marks[position]}/{marks[total]}*{areawidth} - 5" y="0" width="5" height="1" color="{clrWhite}" />
 | 
			
		||||
                <drawrectangle condition="not{marks[startmark]}" x="{marks[position]}/{marks[total]}*{areawidth} - 5" y="{areaheight}-1" width="5" height="1" color="{clrWhite}" />
 | 
			
		||||
                <!-- draw mark -->
 | 
			
		||||
                <drawrectangle condition="not{marks[active]}" x="{marks[position]}/{marks[total]}*{areawidth}" y="0" width="1" height="100%" color="{clrWhite}" />
 | 
			
		||||
                <drawrectangle condition="not{marks[active]} ++ {marks[startmark]}" x="{marks[position]}/{marks[total]}*{areawidth}" y="0" width="5" height="1" color="{clrWhite}" />
 | 
			
		||||
                <drawrectangle condition="not{marks[active]} ++ {marks[startmark]}" x="{marks[position]}/{marks[total]}*{areawidth}" y="{areaheight}-1" width="5" height="1" color="{clrWhite}" />
 | 
			
		||||
                <drawrectangle condition="not{marks[active]} ++ not{marks[startmark]}" x="{marks[position]}/{marks[total]}*{areawidth} - 5" y="0" width="5" height="1" color="{clrWhite}" />
 | 
			
		||||
                <drawrectangle condition="not{marks[active]} ++ not{marks[startmark]}" x="{marks[position]}/{marks[total]}*{areawidth} - 5" y="{areaheight}-1" width="5" height="1" color="{clrWhite}" />
 | 
			
		||||
                <!-- draw active mark -->
 | 
			
		||||
                <drawrectangle condition="{marks[active]}" x="{marks[position]}/{marks[total]}*{areawidth}" y="0" width="1" height="100%" color="{clrRed}" />
 | 
			
		||||
                <drawrectangle condition="{marks[active]} ++ {marks[startmark]}" x="{marks[position]}/{marks[total]}*{areawidth}" y="0" width="5" height="1" color="{clrRed}" />
 | 
			
		||||
                <drawrectangle condition="{marks[active]} ++ {marks[startmark]}" x="{marks[position]}/{marks[total]}*{areawidth}" y="{areaheight}-1" width="5" height="1" color="{clrRed}" />
 | 
			
		||||
                <drawrectangle condition="{marks[active]} ++ not{marks[startmark]}" x="{marks[position]}/{marks[total]}*{areawidth} - 5" y="0" width="5" height="1" color="{clrRed}" />
 | 
			
		||||
                <drawrectangle condition="{marks[active]} ++ not{marks[startmark]}" x="{marks[position]}/{marks[total]}*{areawidth} - 5" y="{areaheight}-1" width="5" height="1" color="{clrRed}" />
 | 
			
		||||
                <!-- draw bar to next mark if mark is startmark-->                
 | 
			
		||||
                <drawrectangle condition="{marks[startmark]}" x="{marks[position]}/{marks[total]}*{areawidth}" y="30%" width="{marks[endposition]}/{marks[total]}*{areawidth} - {marks[position]}/{marks[total]}*{areawidth}" height="40%" color="{clrWhite}" />
 | 
			
		||||
            </loop>
 | 
			
		||||
        </area>
 | 
			
		||||
@@ -221,6 +230,7 @@
 | 
			
		||||
    -->
 | 
			
		||||
    <message>
 | 
			
		||||
        <area x="10%" y="45%" width="80%" height="10%" layer="1">
 | 
			
		||||
            <fill color="{clrTransBlack}" />
 | 
			
		||||
            <drawrectangle condition="{status}" x="20" y="0" width="20" height="100%" color="{clrGreen}" />
 | 
			
		||||
            <drawrectangle condition="{info}" x="20" y="0" width="20" height="100%" color="{clrBlue}" />
 | 
			
		||||
            <drawrectangle condition="{warning}" x="20" y="0" width="20" height="100%" color="{clrYellow}" />
 | 
			
		||||
 
 | 
			
		||||
@@ -76,6 +76,7 @@
 | 
			
		||||
    {marks[position]}           frame of current mark
 | 
			
		||||
    {marks[endposition]}        frame where startmark ends
 | 
			
		||||
    {marks[total]}              total number of frames
 | 
			
		||||
    {marks[active]}             true if current replay position hits exactly the mark
 | 
			
		||||
    {marks[startmark]}          true if mark is start mark
 | 
			
		||||
    -->
 | 
			
		||||
    <cutmarks>
 | 
			
		||||
 
 | 
			
		||||
@@ -6,11 +6,17 @@
 | 
			
		||||
 | 
			
		||||
cDisplayReplayView::cDisplayReplayView(cTemplateView *tmplView) : cView(tmplView) {
 | 
			
		||||
    lastDate = "";
 | 
			
		||||
    numMarksLast = 0;
 | 
			
		||||
    lastMarks = NULL;
 | 
			
		||||
    markActive = -1;
 | 
			
		||||
    DeleteOsdOnExit();
 | 
			
		||||
    SetFadeTime(tmplView->GetNumericParameter(ptFadeTime));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
cDisplayReplayView::~cDisplayReplayView() {
 | 
			
		||||
    if (lastMarks) {
 | 
			
		||||
        delete[] lastMarks;
 | 
			
		||||
    }
 | 
			
		||||
    CancelSave();
 | 
			
		||||
    FadeOut();
 | 
			
		||||
}
 | 
			
		||||
@@ -189,10 +195,11 @@ void cDisplayReplayView::DrawProgressBar(int current, int total) {
 | 
			
		||||
    DrawViewElement(veRecProgressBar, &stringTokens, &intTokens);    
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void cDisplayReplayView::DrawMarks(const cMarks *marks, int total) {
 | 
			
		||||
void cDisplayReplayView::DrawMarks(const cMarks *marks, int current, int total) {
 | 
			
		||||
    if (!marks)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    if (!MarksChanged(marks, current))
 | 
			
		||||
        return;
 | 
			
		||||
    map < string, string > stringTokens;
 | 
			
		||||
    map < string, int > intTokens;
 | 
			
		||||
    map < string, vector< map< string, string > > > loopTokens;
 | 
			
		||||
@@ -208,6 +215,7 @@ void cDisplayReplayView::DrawMarks(const cMarks *marks, int total) {
 | 
			
		||||
        markVals.insert(pair< string, string >("marks[position]", pos.str()));
 | 
			
		||||
        markVals.insert(pair< string, string >("marks[total]", tot.str()));
 | 
			
		||||
        markVals.insert(pair< string, string >("marks[startmark]", isStartMark ? "1" : "0"));
 | 
			
		||||
        markVals.insert(pair< string, string >("marks[active]", (m->Position() == current) ? "1" : "0"));
 | 
			
		||||
        const cMark *m2 = marks->Next(m);
 | 
			
		||||
        if (m2) { 
 | 
			
		||||
            stringstream posNext;
 | 
			
		||||
@@ -326,6 +334,66 @@ void cDisplayReplayView::DrawMessage(eMessageType type, const char *text) {
 | 
			
		||||
    DrawViewElement(veMessage, &stringTokens, &intTokens);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/****************************************************************************************
 | 
			
		||||
* Private Functions
 | 
			
		||||
*****************************************************************************************/
 | 
			
		||||
 | 
			
		||||
bool cDisplayReplayView::MarksChanged(const cMarks *marks, int current) {
 | 
			
		||||
    if (!marks)
 | 
			
		||||
        return false;
 | 
			
		||||
 | 
			
		||||
    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(marks);
 | 
			
		||||
        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(marks);
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        i++;
 | 
			
		||||
    }
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void cDisplayReplayView::RememberMarks(const cMarks *marks) {
 | 
			
		||||
    if (!marks)
 | 
			
		||||
        return;
 | 
			
		||||
    numMarksLast = marks->Count();
 | 
			
		||||
    if (numMarksLast < 1)
 | 
			
		||||
        return;
 | 
			
		||||
    if (lastMarks) {
 | 
			
		||||
        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++;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void cDisplayReplayView::Action(void) {
 | 
			
		||||
    SetInitFinished();
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,11 @@
 | 
			
		||||
class cDisplayReplayView : public cView {
 | 
			
		||||
private:
 | 
			
		||||
    cString lastDate;
 | 
			
		||||
    int numMarksLast;
 | 
			
		||||
    int *lastMarks;
 | 
			
		||||
    int markActive;
 | 
			
		||||
    bool MarksChanged(const cMarks *marks, int current);
 | 
			
		||||
    void RememberMarks(const cMarks *marks);
 | 
			
		||||
    virtual void Action(void);
 | 
			
		||||
public:
 | 
			
		||||
    cDisplayReplayView(cTemplateView *tmplView);
 | 
			
		||||
@@ -20,7 +25,7 @@ public:
 | 
			
		||||
    void DrawCurrent(const char *current);
 | 
			
		||||
    void DrawTotal(const char *total);
 | 
			
		||||
    void DrawProgressBar(int current, int total);
 | 
			
		||||
    void DrawMarks(const cMarks *marks, int total);
 | 
			
		||||
    void DrawMarks(const cMarks *marks, int current, int total);
 | 
			
		||||
    void DrawControlIcons(bool play, bool forward, int speed, bool modeOnly);
 | 
			
		||||
    void DrawJump(const char *jump);
 | 
			
		||||
    void DrawMessage(eMessageType type, const char *text);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user