diff options
author | Andreas Mair <amair.sob@googlemail.com> | 2007-02-19 12:42:15 +0100 |
---|---|---|
committer | Andreas Mair <amair.sob@googlemail.com> | 2007-02-19 12:42:15 +0100 |
commit | b1fa489fdbd06712add00390966defbe9a96232a (patch) | |
tree | a5d1efbbfe4f22e12bea081454502828682be134 | |
parent | 2ced4d35c533969fdb0ee6fa963a2fef26c50b79 (diff) | |
download | vdr-plugin-skinenigmang-b1fa489fdbd06712add00390966defbe9a96232a.tar.gz vdr-plugin-skinenigmang-b1fa489fdbd06712add00390966defbe9a96232a.tar.bz2 |
2007-02-19: Version 0.0.2v0.0.2
- Fixed problems in replay OSD when not using small font (Reported by several people).
- Only display reruns of current event in EPG info if there are more than two reruns.
- New setup option to enable/disable trying a single 8bpp OSD area.
- Completed French translation (Submitted by Patrice Staudt).
- Completed Finnish translation (Patch by rofafor @vdr-portal.de).
- Changed defines: HAVE_EPGSEARCH to SKINENIGMA_HAVE_EPGSEARCH and NO_MENULOGO to SKINENIGMA_NO_MENULOGO (Patch by rofafor @vdr-portal.de).
- Fixed crash if loading channel logos by channel id (Reported by zulu @vdr-portal.de).
- Fixed gcc warning (Reported by zulu @vdr-portal.de).
- Renamed theme WomansLike to WomenLike.
- Some smaller fixes.
-rw-r--r-- | HISTORY | 13 | ||||
-rw-r--r-- | Makefile | 16 | ||||
-rw-r--r-- | README | 20 | ||||
-rw-r--r-- | config.c | 7 | ||||
-rw-r--r-- | config.h | 1 | ||||
-rw-r--r-- | enigma.c | 113 | ||||
-rw-r--r-- | i18n.c | 84 | ||||
-rw-r--r-- | skinenigmang.c | 7 | ||||
-rw-r--r-- | symbols/small/eventparttimer.xpm.old | 27 | ||||
-rw-r--r-- | themes/EnigmaNG-WomenLike.theme (renamed from themes/EnigmaNG-WomansLike.theme) | 2 |
10 files changed, 164 insertions, 126 deletions
@@ -1,6 +1,17 @@ VDR Skin 'EnigmaNG' Revision History ------------------------------------------ -2007-02-14: Version 0.0.1 +2007-02-19: Version 0.0.2 +- Fixed problems in replay OSD when not using small font (Reported by several people). +- Only display reruns of current event in EPG info if there are more than two reruns. +- New setup option to enable/disable trying a single 8bpp OSD area. +- Completed French translation (Submitted by Patrice Staudt). +- Completed Finnish translation (Patch by rofafor @vdr-portal.de). +- Changed defines: HAVE_EPGSEARCH to SKINENIGMA_HAVE_EPGSEARCH and NO_MENULOGO to SKINENIGMA_NO_MENULOGO (Patch by rofafor @vdr-portal.de). +- Fixed crash if loading channel logos by channel id (Reported by zulu @vdr-portal.de). +- Fixed gcc warning (Reported by zulu @vdr-portal.de). +- Renamed theme WomansLike to WomenLike. +- Some smaller fixes. +2007-02-14: Version 0.0.1 - Initial release. @@ -1,15 +1,15 @@ # # Makefile for a Video Disk Recorder plugin # -# $Id$ +# $Id: Makefile,v 1.2 2007/02/15 13:37:17 amair Exp $ # If you are using the epgsearch plugin and want to see the number of # timer conflicts in the main menu's info area. -#HAVE_EPGSEARCH = 1 +#SKINENIGMA_HAVE_EPGSEARCH = 1 # This turns usage of logos in the main menu complete. This might also # improve the performance of the menus. EXPERIMENTAL!!! -#NO_MENULOGO = 1 +#SKINENIGMA_NO_MENULOGO = 1 # Debugging on/off #SKINENIGMA_DEBUG = 1 @@ -58,16 +58,16 @@ INCLUDES += -I$(VDRDIR)/include DEFINES += -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"$(PLUGIN)"' -ifdef HAVE_EPGSEARCH -DEFINES += -DHAVE_EPGSEARCH +ifdef SKINENIGMA_HAVE_EPGSEARCH +DEFINES += -DSKINENIGMA_HAVE_EPGSEARCH endif ifdef SKINENIGMA_DEBUG DEFINES += -DDEBUG endif -ifdef NO_MENULOGO -DEFINES += -DNO_MENULOGO +ifdef SKINENIGMA_NO_MENULOGO +DEFINES += -DSKINENIGMA_NO_MENULOGO endif ### The object files (add further files here): @@ -103,7 +103,7 @@ dist: clean @-rm -rf $(TMPDIR)/$(ARCHIVE) @mkdir $(TMPDIR)/$(ARCHIVE) @cp -a * $(TMPDIR)/$(ARCHIVE) - @tar czf $(PACKAGE).tgz -C $(TMPDIR) $(ARCHIVE) + @tar czf $(PACKAGE).tgz --exclude CVS -C $(TMPDIR) $(ARCHIVE) @-rm -rf $(TMPDIR)/$(ARCHIVE) @echo Distribution package created as $(PACKAGE).tgz @@ -2,9 +2,9 @@ This is the "EnigmaNG" skin for the Video Disk Recorder (VDR). Written by: Andreas Mair (andreas AT vdr - developer DOT org) -Project's homepage: http://andreas.vdr-developer.org +Project's homepage: http://andreas.vdr-developer.org/enigmang -Latest version available at: http://andreas.vdr-developer.org +Latest version available at: http://andreas.vdr-developer.org/enigmang See the file COPYING for license information. @@ -29,11 +29,11 @@ Compile time configuration There are some configuration items you need to set before running "make plugins" in "Make.config": -HAVE_EPGSEARCH = 1 +SKINENIGMA_HAVE_EPGSEARCH = 1 If you are using the epgsearch plugin and want to see the number of timer conflicts in the main menu's info area. -NO_MENULOGO = 1 +SKINENIGMA_NO_MENULOGO = 1 This turns usage of logos in the main menu complete. This might also improve the performance of the menus. EXPERIMENTAL!!! @@ -53,6 +53,8 @@ Installation > cd /put/your/path/here/VDR/PLUGINS/src > tar -xzf /put/your/path/here/vdr-skinenigmang-X.Y.Z.tgz > ln -s skinenigmang-X.Y.Z skinenigmang +OR (for CVS checkout): +> ln -s EnigmaNG skinenigmang > cd skinenigmang > cp -df themes/*.theme /path/to/vdrconf/themes/ @@ -68,10 +70,13 @@ Update That's the same procedure as "Installation" but you have to remove some things before: +- Link to old sources > cd /put/your/path/here/VDR/PLUGINS/src > rm -f skinenigmang -> rm -rf /path/to/vdrconf/plugins/skinenigmang +- Old themes (only if you didn't change/add them!) +> cd /path/to/vdrconf/themes/ +> rm -f EnigmaNG-*.theme Usage ----- @@ -108,7 +113,7 @@ Setup Options - Show info area in main menu This info area is shown in the main menu and it will show the current/next - timers and the number of timer conflicts (if HAVE_EPGSEARCH has been defined). + timers and the number of timer conflicts (if SKINENIGMA_HAVE_EPGSEARCH has been defined). - Show marker in lists If enabled a small circle is drawn in front of the selected item in lists. @@ -124,6 +129,7 @@ Setup Options Here you can choose if the channel logo should be searched by the channel's name (e.g. "YLETV2" -> "YLETV2.xpm") or by the channel's unique id (e.g. "T-8438-4097-33.xpm"). + NOTE: the available logo packs are named by channel name only! - Channel logo cache size The number of logos/symbols to keep in the cache. @@ -169,5 +175,5 @@ Credits WineRed: http://www.vdr-portal.de/board/thread.php?threadid=59416 AppleGreen: http://www.vdr-portal.de/board/thread.php?threadid=59427 -- skiller2k @vdr-portal.de for Comedy Central logo. +- skiller2k1 @vdr-portal.de for Comedy Central logo. http://www.vdr-portal.de/board/thread.php?postid=567887#post567887 @@ -11,9 +11,10 @@ cEnigmaConfig EnigmaConfig; -cEnigmaConfig::cEnigmaConfig() : showAuxInfo(1), showLogo(1), showVps(1), showListSymbols(1), - showSymbols(1), showProgressbar(1), cacheSize(50), - useChannelId(0), showInfo(1), showRemaining(0), showMarker(1) +cEnigmaConfig::cEnigmaConfig() : showAuxInfo(1), showLogo(1), showVps(1), showSymbols(1), + showListSymbols(1), showProgressbar(1), cacheSize(50), + useChannelId(0), showInfo(1), showRemaining(0), showMarker(1), + singleArea(1) { memset(logoDir, 0, sizeof(logoDir)); } @@ -28,6 +28,7 @@ public: int showInfo; int showRemaining; int showMarker; + int singleArea; }; extern cEnigmaConfig EnigmaConfig; @@ -29,7 +29,7 @@ #include <vdr/themes.h> #include <vdr/plugin.h> -#ifdef HAVE_EPGSEARCH +#ifdef SKINENIGMA_HAVE_EPGSEARCH #include "../epgsearch/services.h" #endif @@ -295,7 +295,7 @@ cSkinEnigmaDisplayChannel::cSkinEnigmaDisplayChannel(bool WithInfo) // create osd osd = cOsdProvider::NewOsd(Setup.OSDLeft, Setup.OSDTop + Setup.OSDHeight - yBottomBottom); tArea Areas[] = { {0, 0, xBottomRight - 1, yBottomBottom - 1, fShowLogo ? 8 : 4} }; - if (osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea) == oeOk)) { + if (EnigmaConfig.singleArea && osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea) == oeOk)) { osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea)); // clear all osd->DrawRectangle(0, 0, osd->Width(), osd->Height(), clrTransparent); @@ -309,8 +309,10 @@ cSkinEnigmaDisplayChannel::cSkinEnigmaDisplayChannel(bool WithInfo) eOsdError rc = osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)); if (rc == oeOk) osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea)); - else + else { error("cSkinEnigmaDisplayChannel: CanHandleAreas() returned %d\n", rc); + return; + } } else { tArea Areas[] = { {xTitleLeft, yTitleTop, xTitleRight - 1, yTitleDecoBottom - 1, 2}, {xEventNowLeft, yEventNowTop, xEventNowRight - 1, yEventNextBottom - 1, 4}, @@ -319,8 +321,10 @@ cSkinEnigmaDisplayChannel::cSkinEnigmaDisplayChannel(bool WithInfo) eOsdError rc = osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)); if (rc == oeOk) osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea)); - else + else { error("cSkinEnigmaDisplayChannel: CanHandleAreas() returned %d\n", rc); + return; + } } } } @@ -517,27 +521,31 @@ void cSkinEnigmaDisplayChannel::SetChannel(const cChannel *Channel, int Number) // draw logo area osd->DrawRectangle(xLogoLeft, yLogoTop, xLogoRight - 1, yLogoBottom - 1, Theme.Color(clrLogoBg)); osd->DrawRectangle(xLogoDecoLeft, yLogoTop, xLogoDecoRight - 1, yLogoBottom - 1, Theme.Color(clrLogoBg)); - const char *logoname = EnigmaConfig.useChannelId ? *Channel->GetChannelID().ToString() : Channel->Name(); - char *filename = (char *)malloc(strlen(logoname) + 20 /* should be enough for folder */); - if (filename == NULL) return; - strcpy(filename, "hqlogos/"); - strcat(filename, logoname); - bool fFoundLogo = false; - if (!(fFoundLogo = EnigmaLogoCache.Load(filename))) { - strcpy(filename, "logos/"); + char *strChannelID = EnigmaConfig.useChannelId ? strdup(*Channel->GetChannelID().ToString()) : NULL; + const char *logoname = EnigmaConfig.useChannelId ? strChannelID : Channel->Name(); + if (logoname) { + char *filename = (char *)malloc(strlen(logoname) + 20 /* should be enough for folder */); + if (filename == NULL) return; + strcpy(filename, "hqlogos/"); strcat(filename, logoname); + bool fFoundLogo = false; if (!(fFoundLogo = EnigmaLogoCache.Load(filename))) { - fFoundLogo = EnigmaLogoCache.Load("hqlogos/no_logo"); //TODO? different default logo for channel/group? + strcpy(filename, "logos/"); + strcat(filename, logoname); + if (!(fFoundLogo = EnigmaLogoCache.Load(filename))) { + fFoundLogo = EnigmaLogoCache.Load("hqlogos/no_logo"); //TODO? different default logo for channel/group? + } } - } - free(filename); + free(filename); - if (fFoundLogo) { - osd->DrawBitmap(xLogoLeft + (xLogoRight - xLogoLeft - ChannelLogoWidth) / 2, - yLogoTop + (yLogoBottom - yLogoTop - ChannelLogoHeight) / 2, - EnigmaLogoCache.Get(), EnigmaLogoCache.Get().Color(1), - Theme.Color(clrLogoBg), true); + if (fFoundLogo) { + osd->DrawBitmap(xLogoLeft + (xLogoRight - xLogoLeft - ChannelLogoWidth) / 2, + yLogoTop + (yLogoBottom - yLogoTop - ChannelLogoHeight) / 2, + EnigmaLogoCache.Get(), EnigmaLogoCache.Get().Color(1), + Theme.Color(clrLogoBg), true); + } } + free(strChannelID); } if (Channel->GroupSep()) @@ -736,7 +744,7 @@ cSkinEnigmaDisplayMenu::cSkinEnigmaDisplayMenu(void) osd = NULL; strTitle = NULL; isMainMenu = true; -#ifdef NO_MENULOGO +#ifdef SKINENIGMA_NO_MENULOGO fShowLogo = false; #else fShowLogo = EnigmaConfig.showSymbols; @@ -790,13 +798,14 @@ cSkinEnigmaDisplayMenu::cSkinEnigmaDisplayMenu(void) osd = cOsdProvider::NewOsd(Setup.OSDLeft, Setup.OSDTop); tArea Areas[] = { {xTitleLeft, yTitleTop, xMessageRight - 1, yButtonsBottom - 1, 8} }; - if (osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk) { + if (EnigmaConfig.singleArea && osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk) { osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea)); } else { //TODO? single body area (-> no symbols in event/recording info) tArea Areas[] = { {xTitleLeft, yTitleTop, xTitleRight - 1, yTitleDecoBottom - 1, 4}, //title area {xBodyLeft, yBodyTop, xBodyRight - 1, yLogoBottom - 1, 2}, //body area (beside date/logo area) -#ifdef NO_MENULOGO - {xDateLeft, yDateTop, xDateRight - 1, yDateBottom - 1, 2}, //date +#ifdef SKINENIGMA_NO_MENULOGO + {xDateLeft, yDateTop, xDateRight - 1, yBodyTop - 1, 2}, //date + {xDateLeft, yBodyTop, xDateRight - 1, yDateBottom - 1, 2}, //date/body #else {xDateLeft, yDateTop, xDateRight - 1, yInfoTop - 1, 4}, //date/logo area #endif @@ -813,7 +822,7 @@ cSkinEnigmaDisplayMenu::cSkinEnigmaDisplayMenu(void) return; } -#ifndef NO_MENULOGO +#ifndef SKINENIGMA_NO_MENULOGO // set colors for info area osd->GetBitmap(4)->Reset(); osd->GetBitmap(4)->SetColor(0, Theme.Color(clrTransparent)); @@ -848,7 +857,7 @@ void cSkinEnigmaDisplayMenu::SetupAreas(void) int w = xInfoRight - x; int yMaxHeight = yInfoBottom; -#ifdef HAVE_EPGSEARCH +#ifdef SKINENIGMA_HAVE_EPGSEARCH cPlugin *p = cPluginManager::GetPlugin("epgsearch"); if (p) { Epgsearch_lastconflictinfo_v1_0 *serviceData = new Epgsearch_lastconflictinfo_v1_0; @@ -875,7 +884,7 @@ void cSkinEnigmaDisplayMenu::SetupAreas(void) delete serviceData; } } -#endif //HAVE_EPGSEARCH +#endif //SKINENIGMA_HAVE_EPGSEARCH if (Timers.GetNextActiveTimer()) { // Show next active timers @@ -988,7 +997,7 @@ void cSkinEnigmaDisplayMenu::SetTitle(const char *Title) if (strTitle == NULL || strncmp(tr("VDR"), strTitle, strlen(tr("VDR"))) == 0) { isMainMenu = true; -#ifdef NO_MENULOGO +#ifdef SKINENIGMA_NO_MENULOGO fShowLogo = false; #else fShowLogo = EnigmaConfig.showSymbols; @@ -1262,7 +1271,7 @@ void cSkinEnigmaDisplayMenu::SetItem(const char *Text, int Index, bool Current, //set editable width SetEditableWidth(xItemRight - Tab(1)); -#ifndef NO_MENULOGO +#ifndef SKINENIGMA_NO_MENULOGO // debug("SetItem: (%s) %d %d %d\n", Text, Index, Current, Selectable); if (Current && isMainMenu && fShowLogo && Text) { char *ItemText, *ItemText2; @@ -1436,7 +1445,7 @@ void cSkinEnigmaDisplayMenu::SetEvent(const cEvent *Event) isMainMenu = false; fShowInfo = false; -#ifdef NO_MENULOGO +#ifdef SKINENIGMA_NO_MENULOGO fShowLogo = false; #else fShowLogo = EnigmaConfig.showSymbols; @@ -1501,7 +1510,7 @@ void cSkinEnigmaDisplayMenu::SetEvent(const cEvent *Event) stringstream sstrInfo; for (int i = 0; i < Components->NumComponents(); i++) { const tComponent *p = Components->Component(i); - if ((p->stream == 2) && p->language) { + if (p && (p->stream == 2) && p->language) { if (p->description) { sstrInfo << p->description << " (" << p->language << "), "; @@ -1554,7 +1563,7 @@ void cSkinEnigmaDisplayMenu::SetEvent(const cEvent *Event) } string stringReruns; -#ifdef HAVE_EPGSEARCH +#ifdef SKINENIGMA_HAVE_EPGSEARCH // try to find a rerun of the show using epgsearch-service if (!isempty(Event->Title())) { stringstream sstrReruns; @@ -1567,7 +1576,7 @@ void cSkinEnigmaDisplayMenu::SetEvent(const cEvent *Event) data.useDescription = false; if (cPluginManager::CallFirstService("Epgsearch-searchresults-v1.0", &data)) { cList<Epgsearch_searchresults_v1_0::cServiceSearchResult>* list = data.pResultList; - if (list) { + if (list && (list->Count() > 1)) { //TODO: current event is shown as rerun sstrReruns << tr("RERUNS OF THIS SHOW") << ':' << endl; int i = 0; @@ -1586,7 +1595,7 @@ void cSkinEnigmaDisplayMenu::SetEvent(const cEvent *Event) } stringReruns = sstrReruns.str(); } -#endif // HAVE_EPGSEARCH +#endif // SKINENIGMA_HAVE_EPGSEARCH const char *strFirst = NULL; const char *strSecond = NULL; @@ -1609,10 +1618,10 @@ void cSkinEnigmaDisplayMenu::SetEvent(const cEvent *Event) mytext, smlfont, Theme.Color(clrMenuTxtFg), Theme.Color(clrBackground)); SetScrollbar(); -// free(mytext); + free(mytext); } -#ifndef NO_MENULOGO +#ifndef SKINENIGMA_NO_MENULOGO if (fShowLogo) { // draw logo osd->DrawRectangle(xDateLeft + SmallGap, yDateTop, xDateRight - 1, yDateBottom - SmallGap - 1, Theme.Color(clrLogoBg)); @@ -1635,7 +1644,7 @@ void cSkinEnigmaDisplayMenu::SetRecording(const cRecording *Recording) isMainMenu = false; fShowInfo = false; -#ifdef NO_MENULOGO +#ifdef SKINENIGMA_NO_MENULOGO fShowLogo = false; #else fShowLogo = EnigmaConfig.showSymbols; @@ -1740,7 +1749,7 @@ void cSkinEnigmaDisplayMenu::SetRecording(const cRecording *Recording) free(mytext); } -#ifndef NO_MENULOGO +#ifndef SKINENIGMA_NO_MENULOGO if (fShowLogo) { // draw logo osd->DrawRectangle(xDateLeft + SmallGap, yDateTop, xDateRight - 1, yDateBottom - SmallGap - 1, Theme.Color(clrLogoBg)); @@ -1860,6 +1869,8 @@ cSkinEnigmaDisplayReplay::cSkinEnigmaDisplayReplay(bool ModeOnly) nJumpWidth = 0; lineHeight = cFont::GetFont(fontOsd)->Height(); + int logoWidth = LogoWidth; + logoWidth += (logoWidth % 2 ? 1 : 0); xTitleLeft = 0; xTitleRight = Setup.OSDWidth; yTitleTop = 0; @@ -1867,7 +1878,7 @@ cSkinEnigmaDisplayReplay::cSkinEnigmaDisplayReplay(bool ModeOnly) yTitleDecoTop = yTitleBottom + TitleDecoGap; yTitleDecoBottom = yTitleDecoTop + TitleDecoHeight; xLogoLeft = xTitleLeft; - xLogoRight = xLogoLeft + LogoWidth; + xLogoRight = xLogoLeft + logoWidth; yLogoTop = yTitleDecoBottom + TitleDecoGap2; yLogoBottom = yLogoTop + LogoHeight; xTimeLeft = xLogoRight + LogoDecoGap2; @@ -1891,7 +1902,7 @@ cSkinEnigmaDisplayReplay::cSkinEnigmaDisplayReplay(bool ModeOnly) // create osd osd = cOsdProvider::NewOsd(Setup.OSDLeft, Setup.OSDTop + Setup.OSDHeight - yBottomBottom); tArea Areas[] = { {xTitleLeft, yTitleTop, xBottomRight - 1, yBottomBottom - 1, 8} }; - if (osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk) { + if (EnigmaConfig.singleArea && osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk) { osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea)); } else { tArea Areas[] = { {xTitleLeft, yTitleTop, xTitleRight - 1, yTitleDecoBottom - 1, 2}, @@ -1902,8 +1913,10 @@ cSkinEnigmaDisplayReplay::cSkinEnigmaDisplayReplay(bool ModeOnly) int rc = osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)); if (rc == oeOk) osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea)); - else + else { error("cSkinEnigmaDisplayReplay: CanHandleAreas() returned %d\n", rc); + return; + } } // clear all osd->DrawRectangle(0, 0, osd->Width(), osd->Height(), clrTransparent); @@ -2159,7 +2172,7 @@ cSkinEnigmaDisplayVolume::cSkinEnigmaDisplayVolume() // create osd osd = cOsdProvider::NewOsd(Setup.OSDLeft, Setup.OSDTop + Setup.OSDHeight - yBottomBottom); tArea Areas[] = { {xLogoLeft, yLogoTop, xTitleRight - 1, yBottomBottom - 1, 8} }; - if (osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk) { + if (EnigmaConfig.singleArea && osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk) { osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea)); } else { tArea Areas[] = { {xLogoLeft, yLogoTop, xLogoRight + LogoDecoGap + LogoDecoWidth - 1, yLogoBottom - 1, 4}, @@ -2168,8 +2181,10 @@ cSkinEnigmaDisplayVolume::cSkinEnigmaDisplayVolume() int rc = osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)); if (rc == oeOk) osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea)); - else + else { error("cSkinEnigmaDisplayVolume: CanHandleAreas() returned %d (%d, %d)\n", rc, oeWrongAlignment, oeOutOfMemory); + return; + } // set colors osd->GetBitmap(1)->Reset(); osd->GetBitmap(1)->SetColor(0, Theme.Color(clrTransparent)); @@ -2319,7 +2334,7 @@ cSkinEnigmaDisplayTracks::cSkinEnigmaDisplayTracks(const char *Title, int NumTra // create osd osd = cOsdProvider::NewOsd(Setup.OSDLeft, Setup.OSDTop + Setup.OSDHeight - yBottomBottom); tArea Areas[] = { {xTitleLeft, yTitleTop, xBottomRight - 1, yBottomBottom - 1, 8} }; - if (osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk) { + if (EnigmaConfig.singleArea && osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk) { osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea)); } else { tArea Areas[] = { {xTitleLeft, yTitleTop, xTitleRight - 1, yTitleDecoBottom- 1, 2}, @@ -2330,8 +2345,10 @@ cSkinEnigmaDisplayTracks::cSkinEnigmaDisplayTracks(const char *Title, int NumTra int rc = osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)); if (rc == oeOk) osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea)); - else + else { error("cSkinEnigmaDisplayTracks: CanHandleAreas() returned %d\n", rc); + return; + } } // clear all osd->DrawRectangle(0, 0, osd->Width(), osd->Height(), clrTransparent); @@ -2476,7 +2493,7 @@ cSkinEnigmaDisplayMessage::cSkinEnigmaDisplayMessage() // create osd osd = cOsdProvider::NewOsd(Setup.OSDLeft, Setup.OSDTop + Setup.OSDHeight - yBottomBottom); tArea Areas[] = { {xLogoLeft, yLogoTop, xBottomRight - 1, yBottomBottom - 1, 8} }; - if (osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk) { + if (EnigmaConfig.singleArea && osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk) { osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea)); } else { tArea Areas[] = { {xLogoLeft, yLogoTop, xLogoRight + LogoDecoGap + LogoDecoWidth - 1, yLogoBottom - 1, 4}, @@ -2484,8 +2501,10 @@ cSkinEnigmaDisplayMessage::cSkinEnigmaDisplayMessage() int rc = osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)); if (rc == oeOk) osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea)); - else + else { error("cSkinEnigmaDisplayMessage: CanHandleAreas() returned %d\n", rc); + return; + } } // clear all osd->DrawRectangle(0, 0, osd->Width(), osd->Height(), clrTransparent); @@ -410,9 +410,9 @@ const tI18nPhrase Phrases[] = { "", // Italiano "", // Nederlands "", // Português - "", // Français + "Afficher le temps écoulé/restant", // Français "", // Norsk - "", // suomi (Finnish) + "Näytä tapahtuman aika", // suomi (Finnish) "", // Polski "", // Español "", // ÅëëçíéêÜ (Greek) @@ -432,9 +432,9 @@ const tI18nPhrase Phrases[] = { "", // Italiano "", // Nederlands "", // Português - "", // Français + "restant", // Français "", // Norsk - "", // suomi (Finnish) + "jäljellä oleva", // suomi (Finnish) "", // Polski "", // Español "", // ÅëëçíéêÜ (Greek) @@ -454,9 +454,9 @@ const tI18nPhrase Phrases[] = { "", // Italiano "", // Nederlands "", // Português - "", // Français + "écoulé", // Français "", // Norsk - "", // suomi (Finnish) + "kulunut", // suomi (Finnish) "", // Polski "", // Español "", // ÅëëçíéêÜ (Greek) @@ -476,9 +476,9 @@ const tI18nPhrase Phrases[] = { "", // Italiano "", // Nederlands "", // Português - "", // Français + "Surface d'infos dans le menu principale", // Français "", // Norsk - "", // suomi (Finnish) + "Näytä infoalue päävalikossa", // suomi (Finnish) "", // Polski "", // Español "", // ÅëëçíéêÜ (Greek) @@ -498,9 +498,9 @@ const tI18nPhrase Phrases[] = { "", // Italiano "", // Nederlands "", // Português - "", // Français + "Symbole dans les listes", // Français "", // Norsk - "", // suomi (Finnish) + "Näytä valintasymboli", // suomi (Finnish) "", // Polski "", // Español "", // ÅëëçíéêÜ (Greek) @@ -564,9 +564,9 @@ const tI18nPhrase Phrases[] = { "", // Italiano "", // Nederlands "", // Português - "", // Français + "Afficher le VPS", // Français "", // Norsk - "", // suomi (Finnish) + "Näytä VPS-tieto", // suomi (Finnish) "", // Polski "", // Español "", // ÅëëçíéêÜ (Greek) @@ -586,9 +586,9 @@ const tI18nPhrase Phrases[] = { "", // Italiano "", // Nederlands "", // Português - "", // Français + "ATTENTION", // Français "", // Norsk - "", // suomi (Finnish) + "VAROITUS", // suomi (Finnish) "", // Polski "", // Español "", // ÅëëçíéêÜ (Greek) @@ -608,9 +608,9 @@ const tI18nPhrase Phrases[] = { "", // Italiano "", // Nederlands "", // Português - "", // Français + "Conflit de programmation", // Français "", // Norsk - "", // suomi (Finnish) + "Päällekkäinen ajastin", // suomi (Finnish) "", // Polski "", // Español "", // ÅëëçíéêÜ (Greek) @@ -630,9 +630,9 @@ const tI18nPhrase Phrases[] = { "", // Italiano "", // Nederlands "", // Português - "", // Français + "Conflits de programmation", // Français "", // Norsk - "", // suomi (Finnish) + "Päällekkäisiä ajastimia", // suomi (Finnish) "", // Polski "", // Español "", // ÅëëçíéêÜ (Greek) @@ -652,9 +652,9 @@ const tI18nPhrase Phrases[] = { "", // Italiano "", // Nederlands "", // Português - "", // Français + "PROGRAMMATION", // Français "", // Norsk - "", // suomi (Finnish) + "AJASTIMET", // suomi (Finnish) "", // Polski "", // Español "", // ÅëëçíéêÜ (Greek) @@ -674,9 +674,9 @@ const tI18nPhrase Phrases[] = { "", // Italiano "", // Nederlands "", // Português - "", // Français + "REPETITION", // Français "", // Norsk - "", // suomi (Finnish) + "TOISTUVAT TAPAHTUMAT", // suomi (Finnish) "", // Polski "", // Español "", // ÅëëçíéêÜ (Greek) @@ -696,9 +696,9 @@ const tI18nPhrase Phrases[] = { "", // Italiano "", // Nederlands "", // Português - "", // Français + "*** Chaînes non valable ***", // Français "", // Norsk - "", // suomi (Finnish) + "*** Virheellinen kanava ***", // suomi (Finnish) "", // Polski "", // Español "", // ÅëëçíéêÜ (Greek) @@ -718,9 +718,9 @@ const tI18nPhrase Phrases[] = { "", // Italiano "", // Nederlands "", // Português - "", // Français + "Taille", // Français "", // Norsk - "", // suomi (Finnish) + "Koko", // suomi (Finnish) "", // Polski "", // Español "", // ÅëëçíéêÜ (Greek) @@ -739,10 +739,10 @@ const tI18nPhrase Phrases[] = { "", // Slovenski "", // Italiano "", // Nederlands - "", // Português + "Muet", // Português "", // Français "", // Norsk - "", // suomi (Finnish) + "Mykistetty", // suomi (Finnish) "", // Polski "", // Español "", // ÅëëçíéêÜ (Greek) @@ -762,9 +762,9 @@ const tI18nPhrase Phrases[] = { "", // Italiano "", // Nederlands "", // Português - "", // Français + "Volume", // Français "", // Norsk - "", // suomi (Finnish) + "Äänenvoimakkuus", // suomi (Finnish) "", // Polski "", // Español "", // ÅëëçíéêÜ (Greek) @@ -784,9 +784,31 @@ const tI18nPhrase Phrases[] = { "", // Italiano "", // Nederlands "", // Português + "Symbole dans les listes", // Français + "", // Norsk + "Näytä tapahtumien symbolit",// suomi (Finnish) + "", // Polski + "", // Español + "", // ÅëëçíéêÜ (Greek) + "", // Svenska + "", // Românã + "", // Magyar + "", // Català + "", // ÀãááÚØÙ (Russian) + "", // Hrvatski + "", // Eesti + "", // Dansk + "", // Èesky (Czech) + }, + {"One area (if possible)", // English + "Ein Bildbereich (wenn möglich)", // Deutsch + "", // Slovenski + "", // Italiano + "", // Nederlands + "", // Português "", // Français "", // Norsk - "", // suomi (Finnish) + "Pyri käyttämään yhtä kuva-aluetta",// suomi (Finnish) "", // Polski "", // Español "", // ÅëëçíéêÜ (Greek) diff --git a/skinenigmang.c b/skinenigmang.c index e2a6728..f4a1a25 100644 --- a/skinenigmang.c +++ b/skinenigmang.c @@ -18,7 +18,7 @@ #error "VDR-1.4.0 API version or greater is required!" #endif -static const char VERSION[] = "0.0.1"; +static const char VERSION[] = "0.0.2"; static const char DESCRIPTION[] = "EnigmaNG skin"; class cPluginSkinEnigma : public cPlugin { @@ -139,6 +139,8 @@ bool cPluginSkinEnigma::SetupParse(const char *Name, const char *Value) { // parse your own setup parameters and store their values. debug("cPluginSkinEnigma::SetupParse()\n"); + if (!strcasecmp(Name, "TrySingleArea")) + EnigmaConfig.singleArea = atoi(Value); if (!strcasecmp(Name, "ShowAuxInfo")) EnigmaConfig.showAuxInfo = atoi(Value); else if (!strcasecmp(Name, "ShowProgressBar")) @@ -201,6 +203,8 @@ void cPluginSkinEnigmaSetup::Setup(void) Clear(); + Add(new cMenuEditBoolItem(tr("One area (if possible)"), &data.singleArea, + tr("no"), tr("yes"))); Add(new cMenuEditBoolItem(tr("Show auxiliary information"), &data.showAuxInfo, tr("top"), tr("bottom"))); Add(new cMenuEditBoolItem(tr("Show remaining/elapsed time"), &data.showRemaining, @@ -237,6 +241,7 @@ void cPluginSkinEnigmaSetup::Store(void) // store setup data debug("cPluginSkinEnigmaSetup::Store()\n"); EnigmaConfig = data; + SetupStore("TrySingleArea", EnigmaConfig.singleArea); SetupStore("ShowAuxInfo", EnigmaConfig.showAuxInfo); SetupStore("ShowRemaining", EnigmaConfig.showRemaining); SetupStore("ShowProgressBar", EnigmaConfig.showProgressbar); diff --git a/symbols/small/eventparttimer.xpm.old b/symbols/small/eventparttimer.xpm.old deleted file mode 100644 index d9df70e..0000000 --- a/symbols/small/eventparttimer.xpm.old +++ /dev/null @@ -1,27 +0,0 @@ -/* XPM */ -static const char *const eventparttimer_xpm[] = { -"14 22 2 1", -". c #FFFFFF", -"+ c #000000", -"..............", -"..............", -"..............", -"..............", -"..............", -"......++......", -"..++..++..++..", -"..++.....+++..", -"........++....", -".......++.....", -".++...++++.++.", -".++...++++.++.", -"..............", -"..............", -"..++......++..", -"..++..++..++..", -"......++......", -"..............", -"..............", -"..............", -"..............", -".............."}; diff --git a/themes/EnigmaNG-WomansLike.theme b/themes/EnigmaNG-WomenLike.theme index 4eabbbc..c7309a7 100644 --- a/themes/EnigmaNG-WomansLike.theme +++ b/themes/EnigmaNG-WomenLike.theme @@ -1,4 +1,4 @@ -Description = WomansLike +Description = WomenLike clrBackground = E5DADEFA clrAltBackground = E5E6BFE3 clrTitleBg = E5BC41B2 |