File vdr-1.7.36-wareagle.patch of Package vdr
diff -ruN vdr-1.7.36.orig/config.c vdr-1.7.36/config.c
--- vdr-1.7.36.orig/config.c 2013-01-27 12:54:57.743017655 +0100
+++ vdr-1.7.36/config.c 2013-01-27 12:56:24.230017960 +0100
@@ -376,6 +376,7 @@
strcpy(OSDLanguage, ""); // default is taken from environment
strcpy(OSDSkin, "lcars");
strcpy(OSDTheme, "default");
+ WarEagleIcons = 1;
PrimaryDVB = 1;
ShowInfoOnChSwitch = 1;
TimeoutRequChInfo = 1;
@@ -578,6 +579,7 @@
if (!strcasecmp(Name, "OSDLanguage")) { strn0cpy(OSDLanguage, Value, sizeof(OSDLanguage)); I18nSetLocale(OSDLanguage); }
else if (!strcasecmp(Name, "OSDSkin")) Utf8Strn0Cpy(OSDSkin, Value, MaxSkinName);
else if (!strcasecmp(Name, "OSDTheme")) Utf8Strn0Cpy(OSDTheme, Value, MaxThemeName);
+ else if (!strcasecmp(Name, "WarEagleIcons")) WarEagleIcons = atoi(Value);
else if (!strcasecmp(Name, "PrimaryDVB")) PrimaryDVB = atoi(Value);
else if (!strcasecmp(Name, "ShowInfoOnChSwitch")) ShowInfoOnChSwitch = atoi(Value);
else if (!strcasecmp(Name, "TimeoutRequChInfo")) TimeoutRequChInfo = atoi(Value);
@@ -684,6 +686,7 @@
Store("OSDLanguage", OSDLanguage);
Store("OSDSkin", OSDSkin);
Store("OSDTheme", OSDTheme);
+ Store("WarEagleIcons", WarEagleIcons);
Store("PrimaryDVB", PrimaryDVB);
Store("ShowInfoOnChSwitch", ShowInfoOnChSwitch);
Store("TimeoutRequChInfo", TimeoutRequChInfo);
diff -ruN vdr-1.7.36.orig/config.h vdr-1.7.36/config.h
--- vdr-1.7.36.orig/config.h 2013-01-27 12:54:57.743017655 +0100
+++ vdr-1.7.36/config.h 2013-01-27 12:56:24.230017960 +0100
@@ -250,6 +250,7 @@
char OSDLanguage[I18N_MAX_LOCALE_LEN];
char OSDSkin[MaxSkinName];
char OSDTheme[MaxThemeName];
+ int WarEagleIcons;
int PrimaryDVB;
int ShowInfoOnChSwitch;
int TimeoutRequChInfo;
diff -ruN vdr-1.7.36.orig/iconpatch.c vdr-1.7.36/iconpatch.c
--- vdr-1.7.36.orig/iconpatch.c 1970-01-01 01:00:00.000000000 +0100
+++ vdr-1.7.36/iconpatch.c 2013-01-27 12:56:24.231017960 +0100
@@ -0,0 +1,27 @@
+#include "iconpatch.h"
+
+#include <langinfo.h>
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+bool IsLangUtf8(void)
+{
+ char *CodeSet = NULL;
+ if (setlocale(LC_CTYPE, ""))
+ CodeSet = nl_langinfo(CODESET);
+ else {
+ char *LangEnv = getenv("LANG"); // last resort in case locale stuff isn't installed
+ if (LangEnv) {
+ CodeSet = strchr(LangEnv, '.');
+ if (CodeSet)
+ CodeSet++; // skip the dot
+ }
+ }
+
+ if (CodeSet && strcasestr(CodeSet, "UTF-8") != 0)
+ return true;
+
+ return false;
+}
diff -ruN vdr-1.7.36.orig/iconpatch.h vdr-1.7.36/iconpatch.h
--- vdr-1.7.36.orig/iconpatch.h 1970-01-01 01:00:00.000000000 +0100
+++ vdr-1.7.36/iconpatch.h 2013-01-27 12:56:24.231017960 +0100
@@ -0,0 +1,70 @@
+/*
+ * iconpatch.h: Information of iconpatch
+ *
+ * Diese Datei ist die Übersichtsdatei für den Iconpatch.
+ * Hier werden kleine Infos abgelegt.
+ * Der Iconpatch ändert die Dateien:
+ * iconpatch.h
+ * menu.c
+ * recording.c
+ * fontosd.c
+ *
+ */
+
+// Iconpatch-Variablen - Anfang
+#define ICON_NUMBERSIGN "\x23"
+#define ICON_ASTERISK "\x2A"
+#define ICON_GREATER "\x3E"
+#define ICON_EXCLAM "\x21"
+#define ICON_PLUSMINUS "\xB1"
+
+#define ICON_RESUME "\x80"
+#define ICON_DVD "\x81"
+#define ICON_FOLDER "\x82"
+#define ICON_BLANK "\x83"
+#define ICON_CUTTING "\x84"
+#define ICON_MOVE_FILE "\x85"
+#define ICON_MOVE_FOLDER "\x86"
+#define ICON_BAR_START "\x87"
+#define ICON_BAR_FILLED "\x88"
+#define ICON_BAR_CLEAR "\x89"
+#define ICON_BAR_END "\x8A"
+#define ICON_REC "\x8B"
+#define ICON_CLOCK "\x8C"
+#define ICON_TV_CRYPTED "\x8D"
+#define ICON_RADIO "\x8E"
+#define ICON_TV "\x8F"
+#define ICON_NEW "\x90"
+#define ICON_ARROW "\x91"
+#define ICON_RUNNING "\x92"
+#define ICON_VPS "\x93"
+#define ICON_CLOCK_UH "\x94"
+#define ICON_CLOCK_LH "\x95"
+
+// UTF-8 Icons
+#define ICON_RESUME_UTF8 "\uE000"
+#define ICON_DVD_UTF8 "\uE001"
+#define ICON_FOLDER_UTF8 "\uE002"
+#define ICON_BLANK_UTF8 "\uE003"
+#define ICON_CUTTING_UTF8 "\uE004"
+#define ICON_MOVE_FILE_UTF8 "\uE005"
+#define ICON_MOVE_FOLDER_UTF8 "\uE006"
+#define ICON_BAR_START_UTF8 "\uE007"
+#define ICON_BAR_FILLED_UTF8 "\uE008"
+#define ICON_BAR_EMPTY_UTF8 "\uE009"
+#define ICON_BAR_CLOSE_UTF8 "\uE00A"
+#define ICON_REC_UTF8 "\uE00B"
+#define ICON_CLOCK_UTF8 "\uE00C"
+#define ICON_TV_CRYPTED_UTF8 "\uE00D"
+#define ICON_RADIO_UTF8 "\uE00E"
+#define ICON_TV_UTF8 "\uE00F"
+#define ICON_NEW_UTF8 "\uE010"
+#define ICON_ARROW_UTF8 "\uE011"
+#define ICON_RUNNING_UTF8 "\uE012"
+#define ICON_VPS_UTF8 "\uE013"
+#define ICON_CLOCK_UH_UTF8 "\uE014"
+#define ICON_CLOCK_LH_UTF8 "\uE015"
+
+// Iconpatch-Variablen - Ende
+
+bool IsLangUtf8(void);
diff -ruN vdr-1.7.36.orig/Makefile vdr-1.7.36/Makefile
--- vdr-1.7.36.orig/Makefile 2013-01-27 12:54:57.743017655 +0100
+++ vdr-1.7.36/Makefile 2013-01-27 12:57:43.570018239 +0100
@@ -73,6 +73,8 @@
skinclassic.o skinlcars.o skins.o skinsttng.o sourceparams.o sources.o spu.o status.o svdrp.o themes.o thread.o\
timers.o tools.o transfer.o vdr.o videodir.o
+OBJS += iconpatch.o
+
DEFINES += $(CDEFINES)
INCLUDES += $(CINCLUDES)
diff -ruN vdr-1.7.36.orig/menu.c vdr-1.7.36/menu.c
--- vdr-1.7.36.orig/menu.c 2013-01-27 12:54:57.741017655 +0100
+++ vdr-1.7.36/menu.c 2013-01-27 12:56:24.235017960 +0100
@@ -8,6 +8,7 @@
*/
#include "menu.h"
+#include "iconpatch.h"
#include <ctype.h>
#include <limits.h>
#include <math.h>
@@ -316,6 +317,14 @@
if (!channel->GroupSep()) {
if (sortMode == csmProvider)
buffer = cString::sprintf("%d\t%s - %s", channel->Number(), channel->Provider(), channel->Name());
+ else if (Setup.WarEagleIcons) {
+ if (channel->Vpid() == 1 || channel->Vpid() == 0)
+ buffer = cString::sprintf("%d\t%s %-30s", channel->Number(), IsLangUtf8() ? ICON_RADIO_UTF8 : ICON_RADIO, channel->Name());
+ else if (channel->Ca() == 0)
+ buffer = cString::sprintf("%d\t%s %-30s", channel->Number(), IsLangUtf8() ? ICON_TV_UTF8 : ICON_TV, channel->Name());
+ else
+ buffer = cString::sprintf("%d\t%s %-30s", channel->Number(), IsLangUtf8() ? ICON_TV_CRYPTED_UTF8 : ICON_TV_CRYPTED, channel->Name());
+ }
else
buffer = cString::sprintf("%d\t%s", channel->Number(), channel->Name());
}
@@ -1044,8 +1053,8 @@
File++;
else
File = timer->File();
- SetText(cString::sprintf("%c\t%d\t%s%s%s\t%02d:%02d\t%02d:%02d\t%s",
- !(timer->HasFlags(tfActive)) ? ' ' : timer->FirstDay() ? '!' : timer->Recording() ? '#' : '>',
+ SetText(cString::sprintf("%s\t%d\t%s%s%s\t%02d:%02d\t%02d:%02d\t%s",
+ !(timer->HasFlags(tfActive)) ? " " : timer->FirstDay() ? Setup.WarEagleIcons ? IsLangUtf8() ? ICON_ARROW_UTF8 : ICON_ARROW : "!" : timer->Recording() ? Setup.WarEagleIcons ? IsLangUtf8() ? ICON_REC_UTF8 : ICON_REC : "#" : Setup.WarEagleIcons ? IsLangUtf8() ? ICON_CLOCK_UTF8 : ICON_CLOCK : ">",
timer->Channel()->Number(),
*name,
*name && **name ? " " : "",
@@ -1319,7 +1328,12 @@
return r;
}
-static const char *TimerMatchChars = " tT";
+static const char *TimerMatchChars[9] =
+{
+ " ", "t", "T",
+ ICON_BLANK, ICON_CLOCK_UH, ICON_CLOCK,
+ ICON_BLANK_UTF8, ICON_CLOCK_UH_UTF8, ICON_CLOCK_UTF8
+};
bool cMenuScheduleItem::Update(bool Force)
{
@@ -1328,17 +1342,17 @@
Timers.GetMatch(event, &timerMatch);
if (Force || timerMatch != OldTimerMatch) {
cString buffer;
- char t = TimerMatchChars[timerMatch];
- char v = event->Vps() && (event->Vps() - event->StartTime()) ? 'V' : ' ';
- char r = event->SeenWithin(30) && event->IsRunning() ? '*' : ' ';
+ const char *t = Setup.WarEagleIcons ? IsLangUtf8() ? TimerMatchChars[timerMatch+6] : TimerMatchChars[timerMatch+3] : TimerMatchChars[timerMatch];
+ const char *v = event->Vps() && (event->Vps() - event->StartTime()) ? Setup.WarEagleIcons ? IsLangUtf8() ? ICON_VPS_UTF8 : ICON_VPS : "V" : " ";
+ const char *r = event->SeenWithin(30) && event->IsRunning() ? Setup.WarEagleIcons ? IsLangUtf8() ? ICON_RUNNING_UTF8 : ICON_RUNNING : "*" : " ";
const char *csn = channel ? channel->ShortName(true) : NULL;
cString eds = event->GetDateString();
if (channel && withDate)
- buffer = cString::sprintf("%d\t%.*s\t%.*s\t%s\t%c%c%c\t%s", channel->Number(), Utf8SymChars(csn, 999), csn, Utf8SymChars(eds, 6), *eds, *event->GetTimeString(), t, v, r, event->Title());
+ buffer = cString::sprintf("%d\t%.*s\t%.*s\t%s\t%s%s%s\t%s", channel->Number(), Utf8SymChars(csn, 6), csn, Utf8SymChars(eds, 6), *eds, *event->GetTimeString(), t, v, r, event->Title());
else if (channel)
- buffer = cString::sprintf("%d\t%.*s\t%s\t%c%c%c\t%s", channel->Number(), Utf8SymChars(csn, 999), csn, *event->GetTimeString(), t, v, r, event->Title());
+ buffer = cString::sprintf("%d\t%.*s\t%s\t%s%s%s\t%s", channel->Number(), Utf8SymChars(csn, 6), csn, *event->GetTimeString(), t, v, r, event->Title());
else
- buffer = cString::sprintf("%.*s\t%s\t%c%c%c\t%s", Utf8SymChars(eds, 6), *eds, *event->GetTimeString(), t, v, r, event->Title());
+ buffer = cString::sprintf("%.*s\t%s\t%s%s%s\t%s", Utf8SymChars(eds, 6), *eds, *event->GetTimeString(), t, v, r, event->Title());
SetText(buffer);
result = true;
}
@@ -2584,6 +2598,7 @@
Add(new cMenuEditStraItem(tr("Setup.OSD$Skin"), &skinIndex, numSkins, skinDescriptions));
if (themes.NumThemes())
Add(new cMenuEditStraItem(tr("Setup.OSD$Theme"), &themeIndex, themes.NumThemes(), themes.Descriptions()));
+ Add(new cMenuEditBoolItem(tr("Setup.OSD$WarEagle icons"), &data.WarEagleIcons));
Add(new cMenuEditPrcItem( tr("Setup.OSD$Left (%)"), &data.OSDLeftP, 0.0, 0.5));
Add(new cMenuEditPrcItem( tr("Setup.OSD$Top (%)"), &data.OSDTopP, 0.0, 0.5));
Add(new cMenuEditPrcItem( tr("Setup.OSD$Width (%)"), &data.OSDWidthP, 0.5, 1.0));
diff -ruN vdr-1.7.36.orig/recording.c vdr-1.7.36/recording.c
--- vdr-1.7.36.orig/recording.c 2013-01-27 12:54:57.740017655 +0100
+++ vdr-1.7.36/recording.c 2013-01-27 12:56:24.236017960 +0100
@@ -8,6 +8,7 @@
*/
#include "recording.h"
+#include "iconpatch.h"
#include <ctype.h>
#include <dirent.h>
#include <errno.h>
@@ -881,7 +882,7 @@
const char *cRecording::Title(char Delimiter, bool NewIndicator, int Level) const
{
- char New = NewIndicator && IsNew() ? '*' : ' ';
+ const char *New = NewIndicator && IsNew() ? Setup.WarEagleIcons ? IsLangUtf8() ? ICON_NEW_UTF8 : ICON_NEW : "*" : " ";
free(titleBuffer);
titleBuffer = NULL;
if (Level < 0 || Level == HierarchyLevels()) {