[vdr-plugin-skinelchi] 01/06: New upstream version 0.3.0

Tobias Grimm tiber-guest at moszumanska.debian.org
Mon Jan 8 23:34:19 UTC 2018


This is an automated email from the git hooks/post-receive script.

tiber-guest pushed a commit to branch master
in repository vdr-plugin-skinelchi.

commit 42c3ed179f965a988b18a4ca2f6d700b3dcc6418
Author: Tobias Grimm <git at e-tobi.net>
Date:   Tue Jan 9 00:03:02 2018 +0100

    New upstream version 0.3.0
---
 50-skinelchi.conf                          |  8 +++
 DisplayChannel.c                           | 73 +++++++++++++++++++-----
 DisplayChannel.h                           | 12 ++--
 DisplayMenu.c                              | 92 ++++++++++--------------------
 DisplayReplay.c                            | 10 ++--
 DisplayTracks.c                            |  3 +-
 DisplayVolume.c                            |  2 -
 HISTORY                                    | 11 ++++
 Makefile                                   | 14 +++--
 README                                     |  9 +--
 config.c                                   |  2 +
 config.h                                   |  4 ++
 patches/vdr-1.6.0-eit_new_streamtypes.diff | 11 ----
 po/de_DE.po                                | 15 +++--
 po/fr_FR.po                                | 18 ++++--
 po/it_IT.po                                | 18 ++++--
 setup.c                                    |  4 +-
 skinelchi.c                                | 22 +++----
 symbols/1080/Csignal.xpm                   | 51 +++++++++++++++++
 symbols/576/signal.xpm                     | 43 ++++++++++++++
 symbols/720/Bsignal.xpm                    | 45 +++++++++++++++
 vdrstatus.c                                |  8 ---
 vdrstatus.h                                |  4 --
 videostatus.c                              | 59 -------------------
 24 files changed, 328 insertions(+), 210 deletions(-)

diff --git a/50-skinelchi.conf b/50-skinelchi.conf
new file mode 100644
index 0000000..3b176b4
--- /dev/null
+++ b/50-skinelchi.conf
@@ -0,0 +1,8 @@
+[skinelchi]
+# optional path to channel log directory
+#  default: <configdir>/plugins/skinelchi
+#--logos=<logodir>
+
+# optional path to EPG images (needs ImageMagick compiled in)
+#  default: /video0/epgimages
+#--icache=<DIR>
diff --git a/DisplayChannel.c b/DisplayChannel.c
index aa75b7c..fafc872 100644
--- a/DisplayChannel.c
+++ b/DisplayChannel.c
@@ -41,6 +41,7 @@
 #include "symbols/576/ar169.xpm"
 #include "symbols/576/ar2211.xpm"
 #include "symbols/576/arHD.xpm"
+#include "symbols/576/signal.xpm"
 
 #include "symbols/720/Baudio.xpm"
 #include "symbols/720/Bdolbydigital.xpm"
@@ -57,6 +58,7 @@
 #include "symbols/720/Bar169.xpm"
 #include "symbols/720/Bar2211.xpm"
 #include "symbols/720/BarHD.xpm"
+#include "symbols/720/Bsignal.xpm"
 
 #include "symbols/1080/Caudio.xpm"
 #include "symbols/1080/Cdolbydigital.xpm"
@@ -73,6 +75,7 @@
 #include "symbols/1080/Car169.xpm"
 #include "symbols/1080/Car2211.xpm"
 #include "symbols/1080/CarHD.xpm"
+#include "symbols/1080/Csignal.xpm"
 
 cBitmap cSkinElchiDisplayChannel::bmAVps(vps_xpm);
 cBitmap cSkinElchiDisplayChannel::bmATeletext(teletext_xpm);
@@ -89,6 +92,7 @@ cBitmap cSkinElchiDisplayChannel::bmAARLG169(arLG169_xpm);
 cBitmap cSkinElchiDisplayChannel::bmAAR169(ar169_xpm);
 cBitmap cSkinElchiDisplayChannel::bmAAR2211(ar2211_xpm);
 cBitmap cSkinElchiDisplayChannel::bmAARHD(arHD_xpm);
+cBitmap cSkinElchiDisplayChannel::bmASignal(signal_xpm);
 
 cBitmap cSkinElchiDisplayChannel::bmBVps(Bvps_xpm);
 cBitmap cSkinElchiDisplayChannel::bmBTeletext(Bteletext_xpm);
@@ -105,6 +109,7 @@ cBitmap cSkinElchiDisplayChannel::bmBARLG169(BarLG169_xpm);
 cBitmap cSkinElchiDisplayChannel::bmBAR169(Bar169_xpm);
 cBitmap cSkinElchiDisplayChannel::bmBAR2211(Bar2211_xpm);
 cBitmap cSkinElchiDisplayChannel::bmBARHD(BarHD_xpm);
+cBitmap cSkinElchiDisplayChannel::bmBSignal(Bsignal_xpm);
 
 cBitmap cSkinElchiDisplayChannel::bmCVps(Cvps_xpm);
 cBitmap cSkinElchiDisplayChannel::bmCTeletext(Cteletext_xpm);
@@ -121,12 +126,9 @@ cBitmap cSkinElchiDisplayChannel::bmCARLG169(CarLG169_xpm);
 cBitmap cSkinElchiDisplayChannel::bmCAR169(Car169_xpm);
 cBitmap cSkinElchiDisplayChannel::bmCAR2211(Car2211_xpm);
 cBitmap cSkinElchiDisplayChannel::bmCARHD(CarHD_xpm);
+cBitmap cSkinElchiDisplayChannel::bmCSignal(Csignal_xpm);
 
-#if VDRVERSNUM < 10700
-#define STRVIDEOSIZE " 000x000"
-#else
 #define STRVIDEOSIZE " 0000x0000"
-#endif
 
 extern cSkinElchiStatus *ElchiStatus;
 
@@ -144,6 +146,8 @@ cSkinElchiDisplayChannel::cSkinElchiDisplayChannel(bool WithInfo)
    old_ar = ar_unknown;
    old_width = -1;
    old_height = -1;
+   LastSignalStrength = -1;
+   LastSignalQuality = -1; 
    showMessage = changed = false;
    showVolume = false;
    volumechange = ElchiStatus->GetVolumeChange();
@@ -168,11 +172,10 @@ cSkinElchiDisplayChannel::cSkinElchiDisplayChannel(bool WithInfo)
    OSDHeight = 576;
    int OSDWidth = 720;
    double OSDAspect = 4.0/3.0;
-#if VDRVERSNUM >= 10708   
+
    cDevice::PrimaryDevice()->GetOsdSize(OSDWidth, OSDHeight, OSDAspect);
-#endif
 
-   DSYSLOG("skinelchi: OSDsize Channel %dx%d left=%d/%d top=%d/%d width=%d/%d heigth=%d/%d",
+   isyslog("skinelchi: OSDsize Channel %dx%d left=%d/%d top=%d/%d width=%d/%d heigth=%d/%d",
            OSDWidth, OSDHeight, OSDsize.left, Setup.OSDLeft, OSDsize.top, Setup.OSDTop, OSDsize.width, Setup.OSDWidth, OSDsize.height, Setup.OSDHeight);
 
    if (OSDHeight >= 1080) {
@@ -193,6 +196,7 @@ cSkinElchiDisplayChannel::cSkinElchiDisplayChannel(bool WithInfo)
       bmAR169        = &bmCAR169;
       bmAR2211       = &bmCAR2211;
       bmARHD         = &bmCARHD;
+      bmSignal       = &bmCSignal;
       Gap            = 9;
       SymbolGap      = 6;
       ScrollWidth    = 9;
@@ -214,6 +218,7 @@ cSkinElchiDisplayChannel::cSkinElchiDisplayChannel(bool WithInfo)
       bmAR169        = &bmBAR169;
       bmAR2211       = &bmBAR2211;
       bmARHD         = &bmBARHD;
+      bmSignal       = &bmBSignal;
       Gap            = 6;
       SymbolGap      = 4;
       ScrollWidth    = 6;
@@ -235,6 +240,7 @@ cSkinElchiDisplayChannel::cSkinElchiDisplayChannel(bool WithInfo)
       bmAR169        = &bmAAR169;
       bmAR2211       = &bmAAR2211;
       bmARHD         = &bmAARHD;
+      bmSignal       = &bmASignal;
       Gap            = 5;
       SymbolGap      = 3;
       ScrollWidth    = 5;
@@ -362,7 +368,14 @@ cSkinElchiDisplayChannel::cSkinElchiDisplayChannel(bool WithInfo)
       RecordingScroll = NULL;
    } // end with/without Info
 
-   AudioScroll = new cCharScroll(x7, y1 + lineOffset, x10 - x7, smallfont->Height(), osd,
+   // x10: max x (osdwidth-lh/2)
+   // x8: osdWidth - lh
+   // x6: Ende Datum/Uhrzeit
+   // x7 = x6 + lh/2
+   // x9: Begin bmVPS - SymbolGap
+   x9a = x9 + SymbolGap + bmAR43->Width() + SymbolGap + bmVps->Width() + SymbolGap + bmTeletext->Width() + SymbolGap + bmAudio->Width();
+
+   AudioScroll = new cCharScroll(x7, y1 + lineOffset, ElchiConfig.showSignalBars ? x9a - x7 : x10 - x7, smallfont->Height(), osd,
                          Theme.Color(clrChannelSymbolOn), bg, taRight|taTop);
 
    int DestWidth = x9 - x3;
@@ -578,6 +591,9 @@ void cSkinElchiDisplayChannel::SetChannel(const cChannel *Channel, int ChannelNu
    DSYSLOG("skinelchi: cSkinElchiDisplayChannel::SetChannel(%d,%d)", Channel ? Channel->Number():0, ChannelNumber)
 
    changed = true;
+   // force signal redraw
+   LastSignalStrength = -1; 
+   LastSignalQuality = -1; 
 
    int x = x10;
    if (!Channel) {
@@ -665,12 +681,13 @@ void cSkinElchiDisplayChannel::SetChannel(const cChannel *Channel, int ChannelNu
          else
          {
             cString filename = NULL;
+#if APIVERSNUM < 20301
             if (!osd->GetBitmap(1) && ElchiConfig.useHQlogo && OSDHeight <= 576)
                filename = CheckLogoFile(Channel, cString::sprintf("%s/hqlogos", ElchiConfig.GetLogoBaseDir()));
-            
+#endif
             if (!(const char *)filename)
                filename = CheckLogoFile(Channel, cString::sprintf("%s/logos/%d", ElchiConfig.GetLogoBaseDir(), (OSDHeight >= 1080 ? 1080 : (OSDHeight >= 720) ? 720 : 576)));
-            
+
             if (ElchiConfig.LogoMessages) {
                if (NULL != (const char *)filename)
                   isyslog("skinelchi: loading logo \"%s\"", *filename);
@@ -715,12 +732,13 @@ void cSkinElchiDisplayChannel::SetEvents(const cEvent *Present, const cEvent *Fo
 
       if (Present) {
          ///isyslog("SetEvents: present, hastimer=%d, IsRunning=%d", Present->HasTimer(),Present->IsRunning());
-#if VDRVERSNUM < 10733
-         int TimerMatch = tmNone;
-#else
          eTimerMatch TimerMatch = tmNone;
-#endif
+#if APIVERSNUM >= 20301
+         LOCK_TIMERS_READ
+         const cTimer * Timer = Timers->GetMatch(Present, &TimerMatch);
+#else
          const cTimer * Timer = Timers.GetMatch(Present, &TimerMatch);
+#endif
          if (Timer && Timer->Recording()) {
             ///isyslog("SetEvents: present has Timer");
             offsetPresent = bmRecording->Width() + Gap;
@@ -902,6 +920,33 @@ void cSkinElchiDisplayChannel::Flush(void)
          }
       }
 
+      // ----------------- signal info --------------------------------
+      if (ElchiConfig.showSignalBars) {
+         int SignalStrength = cDevice::ActualDevice()->SignalStrength();
+         //isyslog("skinelchi-signalinfo: str=%d lastStr=%d", SignalStrength, LastSignalStrength);
+
+         if (SignalStrength >= 0 && (SignalStrength != LastSignalStrength)) {
+            int s = SignalStrength * bmSignal->Width() / 100;
+            //cString Strength = cString::sprintf("STR: %d%%", SignalStrength);
+            //osd->DrawText(x9a, y1 + lineOffset-slh/2, Strength, Theme.Color(clrChannelDateFg), Theme.Color(clrChannelDateBg), cFont::GetFont(fontSml), x10-x9a, slh/2, taLeft);  
+            osd->DrawBitmap(x10 - bmSignal->Width(), y1 + SymbolGap/2, *bmSignal);
+            osd->DrawRectangle(x10 - bmSignal->Width() + s, y1 + SymbolGap/2, x10 - 1, y1 + SymbolGap/2 + bmSignal->Height() - 1, bg);
+            LastSignalStrength = SignalStrength;
+            changed = true;
+         }
+         int SignalQuality = cDevice::ActualDevice()->SignalQuality();
+         //isyslog("skinelchi-signalqualy: snr=%d lastSnr=%d", SignalQuality, LastSignalQuality);
+         if (SignalQuality >= 6 && (SignalQuality != LastSignalQuality)) {  // every 2nd value is 5, why?
+            int q = SignalQuality * bmSignal->Width() / 100;
+            //cString Quality = cString::sprintf("SNR: %d%%", SignalQuality);
+            //osd->DrawText(x9a, y1 + lineOffset, Quality, Theme.Color(clrChannelDateFg), Theme.Color(clrChannelDateBg), cFont::GetFont(fontSml), x10-x9a, slh/2, taLeft);  
+            osd->DrawBitmap(x10 - bmSignal->Width(), y1 + lh/2 + SymbolGap/2, *bmSignal);
+            osd->DrawRectangle(x10 - bmSignal->Width() + q, y1 + lh/2 + SymbolGap/2, x10 - 1, y1 + lh/2 + SymbolGap/2 + bmSignal->Height() - 1, bg);
+            LastSignalQuality = SignalQuality;
+            changed = true;
+         }
+      }
+
       // ----------------------- audio --------------------------------
       // build audio string (excluding Recording infos)
       cDevice *Device = cDevice::PrimaryDevice();
diff --git a/DisplayChannel.h b/DisplayChannel.h
index 6d49115..20704cc 100644
--- a/DisplayChannel.h
+++ b/DisplayChannel.h
@@ -24,7 +24,7 @@ class cSkinElchiDisplayChannel : public cSkinDisplayChannel
 private:
    cOsd *osd;
    int logox, logoy;
-   int x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11;
+   int x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x9a, x10, x11;
    int y0, y1, y2, y3, y4, y5, y6, y6a, y7, y8, y9;
    bool withInfo, rec, showMessage, showVolume, sleeptimermessage;
    int lh, slh, lhh, lineOffset;
@@ -36,13 +36,13 @@ private:
    bool changed;
    char *date;
    cBitmap *bmVps, *bmTeletext, *bmRadio, *bmAudio, *bmDolbyDigital, *bmEncrypted, *bmRecording, *bmMail,
-                  *bmAR43, *bmARL149, *bmARL169, *bmARLG169, *bmAR169, *bmAR2211, *bmARHD;
+                  *bmAR43, *bmARL149, *bmARL169, *bmARLG169, *bmAR169, *bmAR2211, *bmARHD, *bmSignal;
    static cBitmap bmAVps, bmATeletext, bmARadio, bmAAudio, bmADolbyDigital, bmAEncrypted, bmARecording, bmAMail,
-                  bmAAR43, bmAARL149, bmAARL169, bmAARLG169, bmAAR169, bmAAR2211, bmAARHD;
+                  bmAAR43, bmAARL149, bmAARL169, bmAARLG169, bmAAR169, bmAAR2211, bmAARHD, bmASignal;
    static cBitmap bmBVps, bmBTeletext, bmBRadio, bmBAudio, bmBDolbyDigital, bmBEncrypted, bmBRecording, bmBMail,
-                  bmBAR43, bmBARL149, bmBARL169, bmBARLG169, bmBAR169, bmBAR2211, bmBARHD;
+                  bmBAR43, bmBARL149, bmBARL169, bmBARLG169, bmBAR169, bmBAR2211, bmBARHD, bmBSignal;
    static cBitmap bmCVps, bmCTeletext, bmCRadio, bmCAudio, bmCDolbyDigital, bmCEncrypted, bmCRecording, bmCMail,
-                  bmCAR43, bmCARL149, bmCARL169, bmCARLG169, bmCAR169, bmCAR2211, bmCARHD;
+                  bmCAR43, bmCARL149, bmCARL169, bmCARLG169, bmCAR169, bmCAR2211, bmCARHD, bmCSignal;
    cString audiostring;
    bool AudioChanged;
    bool video;
@@ -50,6 +50,8 @@ private:
    int old_height;
    int OSDHeight;
    eAspectRatio old_ar;
+   int LastSignalStrength;
+   int LastSignalQuality; 
    int setchannel_x;
    cCharScroll *AudioScroll;
    cCharScroll *RecordingScroll;
diff --git a/DisplayMenu.c b/DisplayMenu.c
index b924475..1b49c71 100644
--- a/DisplayMenu.c
+++ b/DisplayMenu.c
@@ -143,9 +143,8 @@ cSkinElchiDisplayMenu::cSkinElchiDisplayMenu(void)
    int OSDHeight = 576;
    int OSDWidth = 720;
    double OSDAspect = 4.0/3.0;
-#if VDRVERSNUM >= 10708   
+
    cDevice::PrimaryDevice()->GetOsdSize(OSDWidth, OSDHeight, OSDAspect);
-#endif
   
    DSYSLOG("skinelchi: OSDsize Menu %dx%d left=%d/%d top=%d/%d width=%d/%d heigth=%d/%d",
            OSDWidth, OSDHeight, OSDsize.left, Setup.OSDLeft, OSDsize.top, Setup.OSDTop, OSDsize.width, Setup.OSDWidth, OSDsize.height, Setup.OSDHeight);
@@ -288,9 +287,12 @@ void cSkinElchiDisplayMenu::Init(areatype ReqAreaType)
          AreaNdx = 0;
          epgimagecolors = 256 - MAX_ELCHI_THEME_COLORS;
          DSYSLOG("skinelchi: setting Area_1_8Bit (%s:%d)",__FILE__,__LINE__)
+#if APIVERSNUM < 20301
+         // might lead to flickering on 2.3.1+
          osd->GetBitmap(0)->Reset();
          for (int i = 0; i < MAX_ELCHI_THEME_COLORS; i++)
             osd->GetBitmap(0)->SetColor(i, ElchiConfig.ThemeColors[i]);
+#endif
       }
       else {
          epgimagesize = 0;
@@ -509,7 +511,12 @@ void cSkinElchiDisplayMenu::Clear2(void)
    osd->DrawRectangle(x0, y2, x8 - 1, y5 - 1, bg);
 
    if (timercheck) {
-      cTimer *nexttimer = Timers.GetNextActiveTimer();
+#if APIVERSNUM >= 20301
+      LOCK_TIMERS_READ
+      const cTimer *nexttimer = Timers->GetNextActiveTimer();
+#else
+      const cTimer *nexttimer = Timers.GetNextActiveTimer();
+#endif
       if (nexttimer) {
          const cFont *font = cFont::GetFont(fontOsd);
          Epgsearch_lastconflictinfo_v1_0 conflictinfo;
@@ -542,7 +549,7 @@ void cSkinElchiDisplayMenu::Clear2(void)
 void cSkinElchiDisplayMenu::DrawTitle(void)
 {
    DSYSLOG("skinelchi: DisplayMenu::DrawTitle (%s)", *title2)
-#if VDRVERSNUM >= 10728
+
    if ((MenuCategory() == mcMain) || (MenuCategory() == mcRecording) || (MenuCategory() == mcTimer)) {
       ostringstream titleline;
       titleline.imbue(std::locale(""));
@@ -557,7 +564,7 @@ void cSkinElchiDisplayMenu::DrawTitle(void)
    }
    else
       TitleScroll->SetText(*title2, cFont::GetFont(fontSml));
-#endif
+
    changed = true;
 }
 
@@ -570,12 +577,9 @@ void cSkinElchiDisplayMenu::SetTitle(const char *Title)
       return;
    }
 
-#if VDRVERSNUM >= 10728
    title2 = Title;
+   cVideoDiskUsage::HasChanged(lastDiskUsageState);
    DrawTitle();
-#else
-   TitleScroll->SetText(Title, cFont::GetFont(fontSml));
-#endif
    changed = true;
 }
 
@@ -763,7 +767,9 @@ void cSkinElchiDisplayMenu::SetItem(const char *Text, int Index, bool Current, b
                   buffer[strlen(s) - 1] = '\0';  // remove the '*' character
                }
                else
-                  if ( (strlen(s) == 3) && ( i == 2 || i == 3 || i == 4)) {
+                  // check if event info symbols
+                  if (strlen(s) == 3 && strchr(" tTR", s[0])
+                      && strchr(" V", s[1]) && strchr(" *", s[2])) {
                      if (s[0] == 'R') isRecording = true;
                      if (s[0] == 'T') hasEventtimer = true;
                      if (s[0] == 't') haspartEventtimer = true;
@@ -771,7 +777,9 @@ void cSkinElchiDisplayMenu::SetItem(const char *Text, int Index, bool Current, b
                      if (s[2] == '*') isRunning = true;
                   }
                   else
-                     if ( (strlen(s) == 4) && ( i == 3 )) { //epgsearch What's on now default
+                     //epgsearch What's on now default
+                     if ( (strlen(s) == 4) && ( i == 3 ) && 
+                        ( strchr("RTt ", s[1])) && ( strchr("V ", s[2])) && ( strchr("* ", s[3]))) {
                         if (s[1] == 'R') isRecording = true;
                         if (s[1] == 'T') hasEventtimer = true;
                         if (s[1] == 't') haspartEventtimer = true;
@@ -957,14 +965,12 @@ void cSkinElchiDisplayMenu::SetEvent(const cEvent *Event)
       osd->DrawText(x2, y, s, Theme.Color(clrMenuEventVpsFg), Theme.Color(clrMenuEventVpsBg), smallfont);
    }
 
-#if VDRVERSNUM >= 10711
    // Parentalrating
    if (ElchiConfig.showEPGDetails == 2 && Event->ParentalRating()) {
       cString buffer = cString::sprintf(" %s ", *Event->GetParentalRatingString());
       int w = font->Width(buffer);
       osd->DrawText(x2 + textwidth - w - lh/2, y, buffer, Theme.Color(clrMenuEventVpsFg), Theme.Color(clrMenuEventVpsBg), smallfont, w);
    }
-#endif
    y += lh;
 
    // Title
@@ -980,7 +986,6 @@ void cSkinElchiDisplayMenu::SetEvent(const cEvent *Event)
       y += ts.Height();
    }
 
-#if VDRVERSNUM >= 10711
    // Content
    if (ElchiConfig.showEPGDetails == 2) {
       ostringstream content;
@@ -998,7 +1003,6 @@ void cSkinElchiDisplayMenu::SetEvent(const cEvent *Event)
          y += ts.Height();
       }
    }
-#endif
 
    // Description
    ostringstream text;
@@ -1011,6 +1015,7 @@ void cSkinElchiDisplayMenu::SetEvent(const cEvent *Event)
    }
 
    if (ElchiConfig.showEPGDetails > 0) {
+      text << endl << tr("Duration") << ": " << (Event->Duration()/60)/60 << ":" << setw(2) << setfill('0') << ((Event->Duration()/60) % 60);
       const cComponents *Components = Event->Components();
       if (Components) {
          ostringstream audio;
@@ -1128,22 +1133,16 @@ void cSkinElchiDisplayMenu::SetRecording(const cRecording *Recording)
    lh = font->Height();
    cTextScroller ts; // cTextScroller missbraucht für 3x cTextWrapper
    char t[32];
-#if VDRVERSNUM >= 10721
    snprintf(t, sizeof(t), "%s  %s", *DateString(Recording->Start()), *TimeString(Recording->Start()));
-#else
-   snprintf(t, sizeof(t), "%s  %s", *DateString(Recording->start), *TimeString(Recording->start));
-#endif
    ts.Set(osd, x2, y, x, y5 - y, t, font, Theme.Color(clrMenuEventTime), bg);
 
    y += ts.Height();
 
-#if VDRVERSNUM >= 10711
    // Parentalrating
    if ((ElchiConfig.showRecDetails == 2) && Info->GetEvent()->ParentalRating()) {
       cString buffer = cString::sprintf(" %s ", *Info->GetEvent()->GetParentalRatingString());
       osd->DrawText(x2, y, buffer, Theme.Color(clrMenuEventVpsFg), Theme.Color(clrMenuEventVpsBg), smallfont);
    }
-#endif
    y += lh;
 
    const char *Title = Info->Title();
@@ -1158,7 +1157,6 @@ void cSkinElchiDisplayMenu::SetRecording(const cRecording *Recording)
       y += ts.Height();
    }
 
-#if VDRVERSNUM >= 10711
    // Content
    if (ElchiConfig.showRecDetails == 2)
    {
@@ -1177,7 +1175,6 @@ void cSkinElchiDisplayMenu::SetRecording(const cRecording *Recording)
          y += ts.Height();
       }
    }
-#endif
    y += lh;
 
    ostringstream text;
@@ -1188,21 +1185,20 @@ void cSkinElchiDisplayMenu::SetRecording(const cRecording *Recording)
 
    if (ElchiConfig.showRecDetails > 0)
    {
-      cChannel *channel = Channels.GetByChannelID(((cRecordingInfo *)Info)->ChannelID());
+#if APIVERSNUM >= 20301
+      LOCK_CHANNELS_READ
+      const cChannel *channel = Channels->GetByChannelID(((cRecordingInfo *)Info)->ChannelID());
+#else
+      const cChannel *channel = Channels.GetByChannelID(((cRecordingInfo *)Info)->ChannelID());
+#endif
       if (channel)
          text << trVDR("Channel") << ": " << channel->Number() << " - " << channel->Name() << endl;
 
       cMarks marks;
 
-#if VDRVERSNUM >= 10703
       bool hasMarks = marks.Load(Recording->FileName(), Recording->FramesPerSecond(), Recording->IsPesRecording()) && marks.Count();
 
       cIndexFile *index = new cIndexFile(Recording->FileName(), false, Recording->IsPesRecording());
-#else
-      bool hasMarks = marks.Load(Recording->FileName()) && marks.Count();
-
-      cIndexFile *index = new cIndexFile(Recording->FileName(), false);
-#endif
       int lastIndex = 0;
 
       int cuttedLength = 0;
@@ -1220,16 +1216,12 @@ void cSkinElchiDisplayMenu::SetRecording(const cRecording *Recording)
       int rc = 0;
 
       do {
-#if VDRVERSNUM >= 10703
          if (Recording->IsPesRecording())
             filename = cString::sprintf("%s/%03d.vdr", Recording->FileName(), ++i);
          else {
             filename = cString::sprintf("%s/%05d.ts", Recording->FileName(), ++i);
             imax = 99999;
          }
-#else
-         filename = cString::sprintf("%s/%03d.vdr", Recording->FileName(), ++i);
-#endif
          rc=stat(filename, &filebuf);
          if (rc == 0)
             filesize[i] = filesize[i-1] + filebuf.st_size;
@@ -1242,22 +1234,13 @@ void cSkinElchiDisplayMenu::SetRecording(const cRecording *Recording)
       recsize = filesize[i-1];
 
       if (hasMarks && index) {
-#if VDRVERSNUM >= 10703
          uint16_t FileNumber;
          off_t FileOffset;
-#else
-         uchar FileNumber;
-         int FileOffset;
-#endif
 
          bool cutin = true;
          cMark *mark = marks.First();
          while (mark) {
-#if VDRVERSNUM >= 10721
             long position = mark->Position();
-#else
-            long position = mark->position;
-#endif
             index->Get(position, &FileNumber, &FileOffset);
             if (cutin) {
                cutinframe = position;
@@ -1281,17 +1264,9 @@ void cSkinElchiDisplayMenu::SetRecording(const cRecording *Recording)
       if (index) {
          lastIndex = index->Last();
 
-#if VDRVERSNUM >= 10703
-         text << tr("Length") << ": " << *IndexToHMSF(lastIndex, false, Recording->FramesPerSecond());
-#else
-         text << tr("Length") << ": " << *IndexToHMSF(lastIndex);
-#endif
+         text << tr("Duration") << ": " << *IndexToHMSF(lastIndex, false, Recording->FramesPerSecond());
          if (hasMarks)
-#if VDRVERSNUM >= 10703
             text << " (" << tr("cutted") << ": " << *IndexToHMSF(cuttedLength, false, Recording->FramesPerSecond()) << ")";
-#else
-            text << " (" << tr("cutted") << ": " << *IndexToHMSF(cuttedLength) << ")";
-#endif
          text << endl;
       }
       delete index;
@@ -1306,18 +1281,10 @@ void cSkinElchiDisplayMenu::SetRecording(const cRecording *Recording)
          else
             text << " (" << tr("cutted") << ": " <<  recsizecutted/MEGABYTE(1) << " MB)";
 
-#if VDRVERSNUM >= 10721
       text << endl << trVDR("Priority") << ": " << Recording->Priority() << ", " << trVDR("Lifetime") << ": " << Recording->Lifetime() << endl;
-#else
-      text << endl << trVDR("Priority") << ": " << Recording->priority << ", " << trVDR("Lifetime") << ": " << Recording->lifetime << endl;
-#endif
 
       if (lastIndex) {
-#if VDRVERSNUM >= 10703
          text << tr("format") << ": " << (Recording->IsPesRecording() ? "PES" : "TS") << ", " << tr("bit rate") << ": ~ " << fixed << setprecision (2) << (float)recsize/lastIndex*Recording->FramesPerSecond()*8/MEGABYTE(1) << " MBit/s (Video + Audio)";
-#else
-         text << tr("bit rate") << ": ~ " << fixed << setprecision (2) << (float)recsize/lastIndex*FRAMESPERSEC*8/MEGABYTE(1) << " MBit/s (Video + Audio)";
-#endif
    }
 
       const cComponents *Components = Info->Components();
@@ -1478,10 +1445,8 @@ void cSkinElchiDisplayMenu::Flush(void)
    const cFont *font = cFont::GetFont(fontOsd);
    lh = font->Height();
 
-#if APIVERSNUM >= 10728
    if (cVideoDiskUsage::HasChanged(lastDiskUsageState))
       DrawTitle();
-#endif
    
    cString newdate = DayDateTime();
    if (!date || strcmp(date, newdate)) {
@@ -1496,11 +1461,14 @@ void cSkinElchiDisplayMenu::Flush(void)
       if (epgimageTimer.TimedOut()) {
          cBitmap *bitmap = epgimageThread->GetNextBitmap();
          if (bitmap) {
+#if APIVERSNUM < 20301
+            // might lead to flickering on 2.3.1+
             if (CurAreaNdx == 0) {
                osd->GetBitmap(0)->Reset();
                for (int i = 0; i < MAX_ELCHI_THEME_COLORS; i++)
                   osd->GetBitmap(0)->SetColor(i, ElchiConfig.ThemeColors[i]);
             }
+#endif
             osd->DrawRectangle(x4, y3, x6 - 1, y4 - 1, Theme.Color(clrBackground));
             osd->DrawBitmap(x6 - bitmap->Width(), y3, *bitmap);
             epgimageThread->ReleaseNextBitmap();
diff --git a/DisplayReplay.c b/DisplayReplay.c
index d1499f4..c3a5986 100644
--- a/DisplayReplay.c
+++ b/DisplayReplay.c
@@ -306,11 +306,7 @@ cBitmap cSkinElchiDisplayReplay::bmCAR169(Car169_xpm);
 cBitmap cSkinElchiDisplayReplay::bmCAR2211(Car2211_xpm);
 cBitmap cSkinElchiDisplayReplay::bmCARHD(CarHD_xpm);
 
-#if VDRVERSNUM < 10700
-#define STRVIDEOSIZE " 000x000"
-#else
 #define STRVIDEOSIZE " 0000x0000"
-#endif
 
 extern cSkinElchiStatus *ElchiStatus;
 
@@ -349,9 +345,8 @@ cSkinElchiDisplayReplay::cSkinElchiDisplayReplay(bool ModeOnly)
    int OSDHeight = 576;
    int OSDWidth = 720;
    double OSDAspect = 4.0/3.0;
-#if VDRVERSNUM >= 10708   
+
    cDevice::PrimaryDevice()->GetOsdSize(OSDWidth, OSDHeight, OSDAspect);
-#endif
 
    DSYSLOG("skinelchi: OSDsize Replay %dx%d left=%d/%d top=%d/%d width=%d/%d heigth=%d/%d",
            OSDWidth, OSDHeight, OSDsize.left, Setup.OSDLeft, OSDsize.top, Setup.OSDTop, OSDsize.width, Setup.OSDWidth, OSDsize.height, Setup.OSDHeight)
@@ -551,6 +546,8 @@ cSkinElchiDisplayReplay::cSkinElchiDisplayReplay(bool ModeOnly)
    tArea Areas[] = { { x0, y0, x1 - 1, y3 - 1, 4 } };
    osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));
 
+#if APIVERSNUM < 20301
+   // might lead to flickering on 2.3.1+
    cBitmap *bitmap = osd->GetBitmap(0);
    if (bitmap) {
       bitmap->Reset();
@@ -580,6 +577,7 @@ clrTransparent
 :19
 */
    }
+#endif
 
    bg = Theme.Color(clrBackground);
    osd->DrawPixel(x3, y3, clrTransparent);
diff --git a/DisplayTracks.c b/DisplayTracks.c
index 89a024e..e8e5cc5 100644
--- a/DisplayTracks.c
+++ b/DisplayTracks.c
@@ -78,9 +78,8 @@ cSkinElchiDisplayTracks::cSkinElchiDisplayTracks(const char *Title, int NumTrack
    int OSDHeight = 576;
    int OSDWidth = 720;
    double OSDAspect = 4.0/3.0;
-#if VDRVERSNUM >= 10708   
+
    cDevice::PrimaryDevice()->GetOsdSize(OSDWidth, OSDHeight, OSDAspect);
-#endif
 
    DSYSLOG("skinelchi: OSDsize Tracks %dx%d left=%d/%d top=%d/%d width=%d/%d heigth=%d/%d",
            OSDWidth, OSDHeight, OSDsize.left, Setup.OSDLeft, OSDsize.top, Setup.OSDTop, OSDsize.width, Setup.OSDWidth, OSDsize.height, Setup.OSDHeight);
diff --git a/DisplayVolume.c b/DisplayVolume.c
index 52bfcd1..04ba0d1 100644
--- a/DisplayVolume.c
+++ b/DisplayVolume.c
@@ -45,11 +45,9 @@ cSkinElchiDisplayVolume::cSkinElchiDisplayVolume(void)
    OSDsize.height = cOsd::OsdHeight();
 
    int OSDHeight = 576;
-#if VDRVERSNUM >= 10708   
    int OSDWidth = 720;
    double OSDAspect = 4.0/3.0;
    cDevice::PrimaryDevice()->GetOsdSize(OSDWidth, OSDHeight, OSDAspect);
-#endif
 
    DSYSLOG("skinelchi: OSDsize Volume %dx%d left=%d/%d top=%d/%d width=%d/%d heigth=%d/%d",
            OSDWidth, OSDHeight, OSDsize.left, Setup.OSDLeft, OSDsize.top, Setup.OSDTop, OSDsize.width, Setup.OSDWidth, OSDsize.height, Setup.OSDHeight);
diff --git a/HISTORY b/HISTORY
index cc4a796..f91ae50 100644
--- a/HISTORY
+++ b/HISTORY
@@ -403,3 +403,14 @@ something maybe only changed if i get feedback
 - added support for VDR 1.7.33+
 - added Makefile support for VDR 1.7.36+
 - get ImageMagick libs and headers from pkg-config (suggested by Copperhead at vdr-portal.de)
+
+2016-03-28 Version 0.3.0 by Christoph Haubrich
+- dropped support for VDR versions before 2.2 - skinElchi now requires VDR 2.2 or higher
+- fixed calling of cVideoDiskUsage::HasChanged() everytime before Title is drawn
+- changed default path for channel logos to <ResourceDir>/skinelchi/logos
+- changed default path for EPG images to <CacheDir>/skinelchi/epgimages
+- fixed wrong symbol conversion in some menus
+- added 50-skinelchi.conf for conf.d mechanism
+- added support for VDR 2.3.1+
+- added duration to EPG details
+- added optional signal quality bars to chanel display
diff --git a/Makefile b/Makefile
index 7f38197..6f5945f 100644
--- a/Makefile
+++ b/Makefile
@@ -52,7 +52,7 @@ ifeq ($(LOCDIR),)
 ### The C++ compiler and options:
 
 CXX      ?= g++
-CXXFLAGS ?= -fPIC -g -O2 -Wall -Woverloaded-virtual
+CXXFLAGS ?= -fPIC -g -O2 -Wall -Woverloaded-virtual -Wno-unused-variable
 
 #CFLAGS += -g -ggdb -O0
 #CXXFLAGS += -g -ggdb -O0 -fPIC -g -Wall -Woverloaded-virtual
@@ -106,9 +106,12 @@ INCLUDES += -I$(VDRDIR)/include
 
 DEFINES += -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
 
+## avoid themes warnings
+CXXFLAGS += -Wno-unused-variable
+
 ifdef SKINELCHI_HAVE_IMAGEMAGICK
 	DEFINES += -DSKINELCHI_HAVE_IMAGEMAGICK
-	INCLUDES += $(shell pkg-config --cflags-only-I ImageMagick++)
+	INCLUDES += $(shell pkg-config --cflags ImageMagick++)
 endif
 
 ifdef SKINELCHI_DEBUG
@@ -195,5 +198,8 @@ clean:
 env:
 	@echo "Configuration:"
 	@echo "  APIVERSION $(APIVERSION)"
-	@echo "  CXX $(CXX)  CXXFLAGS $(CXXFLAGS)"
-	@echo "  VDRDIR $(VDRDIR)  LIBDIR $(LIBDIR)  LOCDIR $(LOCDIR)"
+	@echo "  CXX $(CXX)"
+	@echo "  CXXFLAGS $(CXXFLAGS)"
+	@echo "  VDRDIR $(VDRDIR)"
+	@echo "  LIBDIR $(LIBDIR)"
+	@echo "  LOCDIR $(LOCDIR)"
diff --git a/README b/README
index 93cd29f..e1ccf21 100644
--- a/README
+++ b/README
@@ -71,14 +71,15 @@ to use skinElchi with the default settings and start VDR.
 
 The path to the logo directories is supplied via command line parameter:
   -l <logodir>, --logos=<logodir>  directory with logo directory (and optional hqlogo)
-                                   (default is <configdir>/plugins/skinelchi)
+                                   (default is <ResourceDir>/skinelchi/logos)
 
 If skinElchi was compiled with ImageMagick support an additional option is available 
 for the EPG images:
-  -c <dir>,  --icache=>DIR>         path to EPG images
-                                    (default is /video0/epgimages)
+  -c <dir>,  --icache=<DIR>         path to EPG images
+                                    (default is <CacheDir>/skinelchi/epgimages)
 
-Both parameters can only be set on the command line.
+Both parameters can only be set on the command line or nedd to be set in 50-skinelchi.conf for
+the conf.d mechanism.
 
 
 Important changes compared to previous versions:
diff --git a/config.c b/config.c
index f72d9a1..bd34a54 100644
--- a/config.c
+++ b/config.c
@@ -39,6 +39,7 @@ cSkinElchiConfig::cSkinElchiConfig(void)
    // channel display
    strcpy(logoBaseDir, "");
    showRecInfo = 0;
+   showSignalBars = 1;
    tryChannelDisplay8Bpp = 0;
    useHQlogo = 1;
    LogoSearchNameFirst = 1;
@@ -97,6 +98,7 @@ bool cSkinElchiConfig::SetupParse(const char *Name, const char *Value)
    else if (strcmp(Name, "showRecInfo") == 0)                  showRecInfo = atoi(Value);
    else if (strcmp(Name, "logo") == 0)                         showLogo = atoi(Value); // old value
    else if (strcmp(Name, "showLogo") == 0)                     showLogo = atoi(Value);
+   else if (strcmp(Name, "showSignalBars") == 0)               showSignalBars = atoi(Value);
    else if (strcmp(Name, "tryChannelDisplay8Bpp") == 0)        tryChannelDisplay8Bpp = atoi(Value);
    else if (strcmp(Name, "useHQlogo") == 0)                    useHQlogo = atoi(Value);
    else if (strcmp(Name, "LogoSearchNameFirst") == 0)          LogoSearchNameFirst = atoi(Value);
diff --git a/config.h b/config.h
index 4dd274d..affbbd1 100644
--- a/config.h
+++ b/config.h
@@ -53,6 +53,7 @@ public:
    // channel display
    int showRecInfo;
    int showLogo;
+   int showSignalBars;
    int tryChannelDisplay8Bpp;
    int useHQlogo;
    int LogoSearchNameFirst;
@@ -73,6 +74,8 @@ extern cSkinElchiConfig ElchiConfig;
 
 extern cTheme Theme;
 
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-variable"
 THEME_CLR(Theme, clrBackground,             0x77000066);//  0
 THEME_CLR(Theme, clrButtonRedFg,            clrWhite);  //  1
 THEME_CLR(Theme, clrButtonRedBg,            0xCCCC1111);//  2
@@ -140,5 +143,6 @@ THEME_CLR(Theme, clrReplayProgressMark,     clrBlack);  // 63
 THEME_CLR(Theme, clrReplayProgressCurrent,  0xCCCC1111);// 64
 THEME_CLR(Theme, clrReplaySymbolOn,         clrYellow); // 65
 THEME_CLR(Theme, clrReplaySymbolOff,        0x77777777);// 66
+#pragma GCC diagnostic pop
 
 #endif //__SKINELCHI_CONFIG_H
diff --git a/patches/vdr-1.6.0-eit_new_streamtypes.diff b/patches/vdr-1.6.0-eit_new_streamtypes.diff
deleted file mode 100644
index 657249c..0000000
--- a/patches/vdr-1.6.0-eit_new_streamtypes.diff
+++ /dev/null
@@ -1,11 +0,0 @@
---- eit.c.org	2008-07-09 19:19:07.000000000 +0200
-+++ eit.c	2011-04-03 16:38:38.000000000 +0200
-@@ -219,7 +219,7 @@
-                  SI::ComponentDescriptor *cd = (SI::ComponentDescriptor *)d;
-                  uchar Stream = cd->getStreamContent();
-                  uchar Type = cd->getComponentType();
--                 if (1 <= Stream && Stream <= 3 && Type != 0) { // 1=video, 2=audio, 3=subtitles
-+                 if (1 <= Stream && Stream <= 6 && Type != 0) { // 1=MPEG2-video, 2=MPEG1-audio, 3=subtitles, 4=AC3-audio, 5=H.264-video, 6=HEAAC-audio
-                     if (!Components)
-                        Components = new cComponents;
-                     char buffer[Utf8BufSize(256)];
diff --git a/po/de_DE.po b/po/de_DE.po
index afe1fad..ab2bc32 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -5,13 +5,13 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: VDR 1.6.0\n"
+"Project-Id-Version: VDR 2.0.0\n"
 "Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2013-01-28 19:43+0100\n"
+"POT-Creation-Date: 2016-03-29 18:53+0200\n"
 "PO-Revision-Date: 2007-11-04 15:38+0100\n"
 "Last-Translator: Christoph Haubrich <see README>\n"
 "Language-Team: <vdr at linuxtv.org>\n"
-"Language: \n"
+"Language: de\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -43,6 +43,9 @@ msgstr "Kein Bild"
 msgid "available"
 msgstr "verfügbar"
 
+msgid "Duration"
+msgstr "Dauer"
+
 msgid "Video"
 msgstr "Video"
 
@@ -52,9 +55,6 @@ msgstr "Audio"
 msgid "Subtitle"
 msgstr "Untertitel"
 
-msgid "Length"
-msgstr "Länge"
-
 msgid "cutted"
 msgstr "geschnitten"
 
@@ -177,6 +177,9 @@ msgstr "Aufnahme-Info anzeigen"
 msgid "show channel logos"
 msgstr "Kanal-Logos anzeigen"
 
+msgid "show signal bars"
+msgstr "Signalstärke anzeigen"
+
 msgid "use HQ-logos"
 msgstr "benutze HQ-logos"
 
diff --git a/po/fr_FR.po b/po/fr_FR.po
index 38bc7ca..1d90d57 100644
--- a/po/fr_FR.po
+++ b/po/fr_FR.po
@@ -5,13 +5,13 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: VDR 1.6.0\n"
+"Project-Id-Version: VDR 2.0.0\n"
 "Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2013-01-28 19:43+0100\n"
+"POT-Creation-Date: 2016-03-29 18:53+0200\n"
 "PO-Revision-Date: 2007-11-04 15:38+0100\n"
 "Last-Translator: Patrice Staudt <see README>\n"
 "Language-Team: <vdr at linuxtv.org>\n"
-"Language: \n"
+"Language: fr\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -43,6 +43,9 @@ msgstr "pas d'image"
 msgid "available"
 msgstr "disponible"
 
+msgid "Duration"
+msgstr ""
+
 msgid "Video"
 msgstr "Vidéo"
 
@@ -52,9 +55,6 @@ msgstr "Audio"
 msgid "Subtitle"
 msgstr "Sous-titres"
 
-msgid "Length"
-msgstr "Longueur"
-
 msgid "cutted"
 msgstr "coupé"
 
@@ -178,6 +178,9 @@ msgstr "afficher info d'enregistrement"
 msgid "show channel logos"
 msgstr "Logos chaîne visible"
 
+msgid "show signal bars"
+msgstr ""
+
 msgid "use HQ-logos"
 msgstr "utiliser logos Haute Définition"
 
@@ -210,3 +213,6 @@ msgstr "Canal gauche"
 
 msgid "Right channel"
 msgstr "Canal droit"
+
+#~ msgid "Length"
+#~ msgstr "Longueur"
diff --git a/po/it_IT.po b/po/it_IT.po
index ba9c958..ac9bd12 100644
--- a/po/it_IT.po
+++ b/po/it_IT.po
@@ -5,13 +5,13 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: VDR 1.6.0\n"
+"Project-Id-Version: VDR 2.0.0\n"
 "Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2013-01-28 19:43+0100\n"
+"POT-Creation-Date: 2016-03-29 18:53+0200\n"
 "PO-Revision-Date: 2009-07-01 23:29+0100\n"
 "Last-Translator: Diego Pierotto <vdr-italian at tiscali.it>\n"
 "Language-Team:  <vdr at linuxtv.org>\n"
-"Language: \n"
+"Language: it\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -46,6 +46,9 @@ msgstr "Immagine non"
 msgid "available"
 msgstr "disponibile"
 
+msgid "Duration"
+msgstr ""
+
 msgid "Video"
 msgstr "Video"
 
@@ -55,9 +58,6 @@ msgstr "Audio"
 msgid "Subtitle"
 msgstr "Sottotitoli"
 
-msgid "Length"
-msgstr "Durata"
-
 msgid "cutted"
 msgstr "ridotta"
 
@@ -182,6 +182,9 @@ msgstr "Mostra info registrazione"
 msgid "show channel logos"
 msgstr "Mostra loghi canali"
 
+msgid "show signal bars"
+msgstr ""
+
 msgid "use HQ-logos"
 msgstr "Utilizza loghi HQ"
 
@@ -214,3 +217,6 @@ msgstr "Canale sinistro"
 
 msgid "Right channel"
 msgstr "Canale destro"
+
+#~ msgid "Length"
+#~ msgstr "Durata"
diff --git a/setup.c b/setup.c
index 0c7f39f..312f74d 100644
--- a/setup.c
+++ b/setup.c
@@ -63,7 +63,7 @@ eOSState cMenuEditColorItem::ProcessKey(eKeys Key)
 
    if (state == osUnknown) {
       Key = NORMALKEY(Key);
-      switch (Key) {
+      switch (int(Key)) {
          case kNone: break;
 
          case kLeft|k_Repeat:
@@ -372,6 +372,7 @@ void cSkinElchiSetupChannelDisplay::Setup(void)
 {
    Add(new cMenuEditStraItem(tr("show recording Info"), &tmpconfig->showRecInfo, 3, RecInfoItems));
    Add(new cMenuEditBoolItem(tr("show channel logos"), &tmpconfig->showLogo));
+   Add(new cMenuEditBoolItem(tr("show signal bars"), &tmpconfig->showSignalBars));
    Add(new cMenuEditBoolItem(tr("use one 8bpp area (if possible)"), &tmpconfig->tryChannelDisplay8Bpp));
    Add(new cMenuEditBoolItem(tr("use HQ-logos"), &tmpconfig->useHQlogo));
    Add(new cMenuEditBoolItem(tr("try to load logo first by"), &tmpconfig->LogoSearchNameFirst, tr("Channel ID"), tr("Channel Name")));
@@ -468,6 +469,7 @@ void cSkinElchiSetup::Store(void)
    // channel Display values
    SetupStore("showRecInfo", ElchiConfig.showRecInfo);
    SetupStore("showLogo", ElchiConfig.showLogo);
+   SetupStore("showSignalBars", ElchiConfig.showSignalBars);
    SetupStore("tryChannelDisplay8Bpp", ElchiConfig.tryChannelDisplay8Bpp);
    SetupStore("useHQlogo", ElchiConfig.useHQlogo);
    SetupStore("LogoSearchNameFirst", ElchiConfig.LogoSearchNameFirst);
diff --git a/skinelchi.c b/skinelchi.c
index 3eefb26..ba226f0 100644
--- a/skinelchi.c
+++ b/skinelchi.c
@@ -32,8 +32,8 @@
 #include "videostatus.h"
 //#endif
 
-#if defined(APIVERSNUM) && APIVERSNUM < 10600
-#error THIS VERSION OF THE SKINELCHI-PLUGIN REQUIRES AT LEAST VDR 1.6.0
+#if defined(APIVERSNUM) && APIVERSNUM < 20200
+#error THIS VERSION OF THE SKINELCHI-PLUGIN REQUIRES AT LEAST VDR 2.2.0
 #endif
 
 
@@ -57,7 +57,7 @@
 #include <vdr/themes.h>
 #include <vdr/plugin.h>
 
-static const char *VERSION      = "0.2.8";
+static const char *VERSION      = "0.3.0";
 static const char *DESCRIPTION  = trNOOP("Elchi skin");
 const char *OSDSKIN             = "Elchi";
 
@@ -159,13 +159,14 @@ bool cPluginSkinElchi::Start(void)
 
    // set default logo dir if not supplied by commandline arguments
    if (isempty(ElchiConfig.GetLogoBaseDir()))
-      ElchiConfig.SetLogoBaseDir(cPlugin::ConfigDirectory(PLUGIN_NAME_I18N));
+      ElchiConfig.SetLogoBaseDir(cPlugin::ResourceDirectory(PLUGIN_NAME_I18N));
 
    isyslog("SkinElchi: using channel logo base dir '%s'", ElchiConfig.GetLogoBaseDir());
+   
 #ifdef SKINELCHI_HAVE_IMAGEMAGICK
-   isyslog("SkinElchi: using EPG image dir '%s'", ElchiConfig.GetEpgImageDir());
+   if (isempty(ElchiConfig.GetEpgImageDir()))
+      ElchiConfig.SetEpgImageDir(cString::sprintf("%s/epgimages/", cPlugin::CacheDirectory(PLUGIN_NAME_I18N)));
 #endif
-
    new cSkinElchi;
 
    ElchiStatus = new cSkinElchiStatus;
@@ -217,11 +218,12 @@ const char *cPluginSkinElchi::CommandLineHelp(void)
    DSYSLOG("skinelchi: cPluginSkinElchi::CommandLineHelp is called")
    return
 #ifdef SKINELCHI_HAVE_IMAGEMAGICK
-          "  -c DIR,         --icache=DIR         optional path for epgimages\n"
-          "                                       (default: '/video/epgimages')\n"
+          "  -c <ImageDir>, --icache=<ImageDir>   path to EPG images\n"
+          "                                       (default: '<CacheDir>/skinelchi/epgimages')\n"
 #endif
-          "  -l PathToLogos, --logos=PathToLogos  optional path for XPM channel logos\n"
-          "                                       (default: '<configDir>/skinelchi/logos')\n";
+          "  -l <LogoDir>, --logos=<LogoDir>      path to XPM channel logos\n"
+          "                                       logos are searched for in subfolders 'logos' and 'hqlogos'\n"
+          "                                       (default: '<ResourceDir>/skinelchi')\n";
 }
 
 bool cPluginSkinElchi::ProcessArgs(int argc, char *argv[])
diff --git a/symbols/1080/Csignal.xpm b/symbols/1080/Csignal.xpm
new file mode 100644
index 0000000..1cd9547
--- /dev/null
+++ b/symbols/1080/Csignal.xpm
@@ -0,0 +1,51 @@
+/* XPM */
+static const char *const Csignal_xpm[] = {
+"150 17 31 1",
+" 	c None",
+".	c #EF1D0B",
+"+	c #EF320B",
+"@	c #EE400E",
+"#	c #EE4C12",
+"$	c #EE590C",
+"%	c #EC650D",
+"&	c #ED700D",
+"*	c #13B027",
+"=	c #EC7D0C",
+"-	c #30B925",
+";	c #EB880B",
+">	c #EA9108",
+",	c #4BC024",
+"'	c #EB9912",
+")	c #EBA306",
+"!	c #64C923",
+"~	c #EAAE08",
+"{	c #7ACF25",
+"]	c #EAB90A",
+"^	c #8ED521",
+"/	c #E9C602",
+"(	c #A1DB22",
+"_	c #ADDF20",
+":	c #E9D604",
+"<	c #BDE422",
+"[	c #E8DF10",
+"}	c #CFEA20",
+"|	c #E9EA06",
+"1	c #E5EF0E",
+"2	c #E0EF21",
+".........+++@@@@@###$$$%%%&&&&====;;>>>''))))~~~]]]/////::::[||||||1111111111111111222222}}}}}}<<<<<___(((((^^^^^^{{{{{{{!!!!!!,,,,,,,--------********",
+".........+++@@@@@###$$$%%%&&&&====;;>>>''))))~~~]]]/////::::[||||||1111111111111111222222}}}}}}<<<<<___(((((^^^^^^{{{{{{{!!!!!!,,,,,,,--------********",
+".........+++@@@@@###$$$%%%&&&&====;;>>>''))))~~~]]]/////::::[||||||1111111111111111222222}}}}}}<<<<<___(((((^^^^^^{{{{{{{!!!!!!,,,,,,,--------********",
+".........+++@@@@@###$$$%%%&&&&====;;>>>''))))~~~]]]/////::::[||||||1111111111111111222222}}}}}}<<<<<___(((((^^^^^^{{{{{{{!!!!!!,,,,,,,--------********",
+".........+++@@@@@###$$$%%%&&&&====;;>>>''))))~~~]]]/////::::[||||||1111111111111111222222}}}}}}<<<<<___(((((^^^^^^{{{{{{{!!!!!!,,,,,,,--------********",
+".........+++@@@@@###$$$%%%&&&&====;;>>>''))))~~~]]]/////::::[||||||1111111111111111222222}}}}}}<<<<<___(((((^^^^^^{{{{{{{!!!!!!,,,,,,,--------********",
+".........+++@@@@@###$$$%%%&&&&====;;>>>''))))~~~]]]/////::::[||||||1111111111111111222222}}}}}}<<<<<___(((((^^^^^^{{{{{{{!!!!!!,,,,,,,--------********",
+".........+++@@@@@###$$$%%%&&&&====;;>>>''))))~~~]]]/////::::[||||||1111111111111111222222}}}}}}<<<<<___(((((^^^^^^{{{{{{{!!!!!!,,,,,,,--------********",
+".........+++@@@@@###$$$%%%&&&&====;;>>>''))))~~~]]]/////::::[||||||1111111111111111222222}}}}}}<<<<<___(((((^^^^^^{{{{{{{!!!!!!,,,,,,,--------********",
+".........+++@@@@@###$$$%%%&&&&====;;>>>''))))~~~]]]/////::::[||||||1111111111111111222222}}}}}}<<<<<___(((((^^^^^^{{{{{{{!!!!!!,,,,,,,--------********",
+".........+++@@@@@###$$$%%%&&&&====;;>>>''))))~~~]]]/////::::[||||||1111111111111111222222}}}}}}<<<<<___(((((^^^^^^{{{{{{{!!!!!!,,,,,,,--------********",
+".........+++@@@@@###$$$%%%&&&&====;;>>>''))))~~~]]]/////::::[||||||1111111111111111222222}}}}}}<<<<<___(((((^^^^^^{{{{{{{!!!!!!,,,,,,,--------********",
+".........+++@@@@@###$$$%%%&&&&====;;>>>''))))~~~]]]/////::::[||||||1111111111111111222222}}}}}}<<<<<___(((((^^^^^^{{{{{{{!!!!!!,,,,,,,--------********",
+".........+++@@@@@###$$$%%%&&&&====;;>>>''))))~~~]]]/////::::[||||||1111111111111111222222}}}}}}<<<<<___(((((^^^^^^{{{{{{{!!!!!!,,,,,,,--------********",
+".........+++@@@@@###$$$%%%&&&&====;;>>>''))))~~~]]]/////::::[||||||1111111111111111222222}}}}}}<<<<<___(((((^^^^^^{{{{{{{!!!!!!,,,,,,,--------********",
+".........+++@@@@@###$$$%%%&&&&====;;>>>''))))~~~]]]/////::::[||||||1111111111111111222222}}}}}}<<<<<___(((((^^^^^^{{{{{{{!!!!!!,,,,,,,--------********",
+".........+++@@@@@###$$$%%%&&&&====;;>>>''))))~~~]]]/////::::[||||||1111111111111111222222}}}}}}<<<<<___(((((^^^^^^{{{{{{{!!!!!!,,,,,,,--------********"};
diff --git a/symbols/576/signal.xpm b/symbols/576/signal.xpm
new file mode 100644
index 0000000..a40710c
--- /dev/null
+++ b/symbols/576/signal.xpm
@@ -0,0 +1,43 @@
+/* XPM */
+static const char *const signal_xpm[] = {
+"80 9 31 1",
+" 	c None",
+".	c #F0150C",
+"+	c #EF2A0A",
+"@	c #EE3B0D",
+"#	c #EE4C0D",
+"$	c #ED5D09",
+"%	c #EC650D",
+"&	c #ED700D",
+"*	c #10B027",
+"=	c #EE7C0D",
+"-	c #30B926",
+";	c #EB8814",
+">	c #EB8D05",
+",	c #4CC024",
+"'	c #EC9710",
+")	c #64C923",
+"!	c #E9A507",
+"~	c #7ACF25",
+"{	c #EBB40D",
+"]	c #8ED51F",
+"^	c #E8C500",
+"/	c #A2DC22",
+"(	c #E8CF10",
+"_	c #ADDF23",
+":	c #E9D801",
+"<	c #BFE521",
+"[	c #EBE200",
+"}	c #D0EA25",
+"|	c #EAEC0A",
+"1	c #DFEE20",
+"2	c #E5EF0D",
+"...+++@@@##$$%&&==;>''!!!{{^^(::[[||222222221111}}<<<__///]]]~~~)))),,,-----****",
+"...+++@@@##$$%&&==;>''!!!{{^^(::[[||222222221111}}<<<__///]]]~~~)))),,,-----****",
+"...+++@@@##$$%&&==;>''!!!{{^^(::[[||222222221111}}<<<__///]]]~~~)))),,,-----****",
+"...+++@@@##$$%&&==;>''!!!{{^^(::[[||222222221111}}<<<__///]]]~~~)))),,,-----****",
+"...+++@@@##$$%&&==;>''!!!{{^^(::[[||222222221111}}<<<__///]]]~~~)))),,,-----****",
+"...+++@@@##$$%&&==;>''!!!{{^^(::[[||222222221111}}<<<__///]]]~~~)))),,,-----****",
+"...+++@@@##$$%&&==;>''!!!{{^^(::[[||222222221111}}<<<__///]]]~~~)))),,,-----****",
+"...+++@@@##$$%&&==;>''!!!{{^^(::[[||222222221111}}<<<__///]]]~~~)))),,,-----****",
+"...+++@@@##$$%&&==;>''!!!{{^^(::[[||222222221111}}<<<__///]]]~~~)))),,,-----****"};
diff --git a/symbols/720/Bsignal.xpm b/symbols/720/Bsignal.xpm
new file mode 100644
index 0000000..2ae19e1
--- /dev/null
+++ b/symbols/720/Bsignal.xpm
@@ -0,0 +1,45 @@
+/* XPM */
+static const char *const Bsignal_xpm[] = {
+"100 11 31 1",
+" 	c None",
+".	c #EF1D0A",
+"+	c #EF320B",
+"@	c #EF3F0E",
+"#	c #ED4B11",
+"$	c #ED5908",
+"%	c #ED6C0E",
+"&	c #11B027",
+"*	c #EE790A",
+"=	c #EC800F",
+"-	c #2FB925",
+";	c #EC8B04",
+">	c #4BC024",
+",	c #EB960F",
+"'	c #EAA305",
+")	c #64C924",
+"!	c #E9AD13",
+"~	c #7AD025",
+"{	c #E9B808",
+"]	c #8FD521",
+"^	c #E8C500",
+"/	c #A3DD24",
+"(	c #E9CF00",
+"_	c #AFE11C",
+":	c #EBD907",
+"<	c #BFE520",
+"[	c #E9E113",
+"}	c #CFE924",
+"|	c #E9EB08",
+"1	c #DFEE20",
+"2	c #E5EF0E",
+"......++@@@##$$$%%%**==;;,,'''!{{{^^((::[||||222222222211111}}<<<<__////]]]]~~~~)))))>>>>------&&&&&",
+"......++@@@##$$$%%%**==;;,,'''!{{{^^((::[||||222222222211111}}<<<<__////]]]]~~~~)))))>>>>------&&&&&",
+"......++@@@##$$$%%%**==;;,,'''!{{{^^((::[||||222222222211111}}<<<<__////]]]]~~~~)))))>>>>------&&&&&",
+"......++@@@##$$$%%%**==;;,,'''!{{{^^((::[||||222222222211111}}<<<<__////]]]]~~~~)))))>>>>------&&&&&",
+"......++@@@##$$$%%%**==;;,,'''!{{{^^((::[||||222222222211111}}<<<<__////]]]]~~~~)))))>>>>------&&&&&",
+"......++@@@##$$$%%%**==;;,,'''!{{{^^((::[||||222222222211111}}<<<<__////]]]]~~~~)))))>>>>------&&&&&",
+"......++@@@##$$$%%%**==;;,,'''!{{{^^((::[||||222222222211111}}<<<<__////]]]]~~~~)))))>>>>------&&&&&",
+"......++@@@##$$$%%%**==;;,,'''!{{{^^((::[||||222222222211111}}<<<<__////]]]]~~~~)))))>>>>------&&&&&",
+"......++@@@##$$$%%%**==;;,,'''!{{{^^((::[||||222222222211111}}<<<<__////]]]]~~~~)))))>>>>------&&&&&",
+"......++@@@##$$$%%%**==;;,,'''!{{{^^((::[||||222222222211111}}<<<<__////]]]]~~~~)))))>>>>------&&&&&",
+"......++@@@##$$$%%%**==;;,,'''!{{{^^((::[||||222222222211111}}<<<<__////]]]]~~~~)))))>>>>------&&&&&"};
diff --git a/vdrstatus.c b/vdrstatus.c
index 620b4c2..b7b7833 100644
--- a/vdrstatus.c
+++ b/vdrstatus.c
@@ -45,11 +45,7 @@ cSkinElchiStatus::~cSkinElchiStatus()
    //isyslog("skinelchi ~cSkinElchiStatus()");
 }
 
-#if VDRVERSNUM < 010726
-void cSkinElchiStatus::ChannelSwitch(const cDevice * device, int channelNumber)
-#else
 void cSkinElchiStatus::ChannelSwitch(const cDevice * device, int channelNumber, bool LiveView)
-#endif
 {  // Indicates a channel switch on the given DVB device.
    // If ChannelNumber is 0, this is before the channel is being switched,
    // otherwise ChannelNumber is the number of the channel that has been switched to.
@@ -123,11 +119,7 @@ void cSkinElchiStatus::SetVolume(int volume, bool absolute)
    // absolutely or relative to the current volume.
 
    VolumeChange++;
-#if APIVERSNUM < 10402
-   Volume = volume;//vdr 1.3.22 -> get volume always absolute
-#else
    Volume = absolute ? volume : Volume + volume;
-#endif
 }
 
 
diff --git a/vdrstatus.h b/vdrstatus.h
index b3341f2..5f9badc 100644
--- a/vdrstatus.h
+++ b/vdrstatus.h
@@ -46,11 +46,7 @@ private:
    int Volume;
    int VolumeChange;
 protected:
-#if VDRVERSNUM < 010726
-   virtual void ChannelSwitch(const cDevice *device, int channelNumber);
-#else
    virtual void ChannelSwitch(const cDevice *device, int channelNumber, bool LiveView);
-#endif
    virtual void Recording(const cDevice *Device, const char *Name, const char *FileName, bool On);
    virtual void Replaying(const cControl *Control, const char *Name, const char *FileName, bool On);
    virtual void SetVolume(int Volume, bool Absolute);
diff --git a/videostatus.c b/videostatus.c
index c83d173..96cf177 100644
--- a/videostatus.c
+++ b/videostatus.c
@@ -45,27 +45,10 @@ void cVideoStatus::Stop()
 
 void cVideoStatus::Activate(bool activate)
 {
-#if VDRVERSNUM < 10707
-   if (activate) {
-      bool using_avards = false;
-      avards = cPluginManager::GetPlugin("avards");
-
-      if (avards) {
-         avards_CurrentVideoFormat_v1_0 videoformat;
-         avards->Service(AVARDS_CURRENT_VIDEO_FORMAT_SERVICE_STRING_ID, &videoformat);
-         using_avards = videoformat.Mode != AVARDS_VIDEOMODE_UNKNOWN;
-      }
-      if (!using_avards)
-         Start();
-   }
-   else
-      Stop();
-#endif
 }
 
 bool cVideoStatus::GetVideoInfo(cVideoInfo *videoinfo)
 {
-#if VDRVERSNUM >= 10707
    int Width, Height;
    double VideoAspect;
    cDevice::PrimaryDevice()->GetVideoSize(Width, Height, VideoAspect);
@@ -79,48 +62,6 @@ bool cVideoStatus::GetVideoInfo(cVideoInfo *videoinfo)
                else videoinfo->aspectratio = ar_unknown;
    //isyslog("skinelchi: %d x %d @ %.5f", Width, Height, VideoAspect);
    return true;
-#else
-   if (Running()) {
-      Lock();
-      videoinfo->height      = height;
-      videoinfo->width       = width;
-      videoinfo->aspectratio = aspectratio;
-      Unlock();
-      return true;
-   }
-   else {
-      if (avards) {
-         avards_CurrentVideoFormat_v1_0 videoformat;
-         avards->Service(AVARDS_CURRENT_VIDEO_FORMAT_SERVICE_STRING_ID, &videoformat);
-         //isyslog("skinelchi: cVideoStatus avards %d*%d %X %s", videoformat.Width, videoformat.Height, videoformat.Mode, videoformat.ModeString);
-         videoinfo->width  = videoformat.Width;
-         videoinfo->height = videoformat.Height;
-
-         switch (videoformat.Mode) {
-            case AVARDS_VIDEOMODE_4_3:
-               videoinfo->aspectratio = ar4_3;
-               break;
-            case AVARDS_VIDEOMODE_L14_9:
-               videoinfo->aspectratio = arL14_9;
-               break;
-            case AVARDS_VIDEOMODE_L16_9:
-               videoinfo->aspectratio = arL16_9;
-               break;
-            case AVARDS_VIDEOMODE_LG16_9:
-               videoinfo->aspectratio = arL16_9;
-               break;
-            case AVARDS_VIDEOMODE_16_9:
-               videoinfo->aspectratio = ar16_9;
-               break;
-            default:
-               videoinfo->aspectratio = ar_unknown;
-               break;
-         }
-         return true;
-      }
-   }
-#endif
-   return  false;
 }
 
 void cVideoStatus::Action(void)

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-vdr-dvb/vdr-plugin-skinelchi.git



More information about the pkg-vdr-dvb-changes mailing list