Compare commits

...

58 Commits

Author SHA1 Message Date
kamel5 79a95914f0 Version 1.2.18 2022-02-09 13:55:34 +01:00
kamel5 2f64512710 Cosmetic changes 2021-12-22 13:26:56 +01:00
kamel5 d11d09ca6e Merge branch 'pbiering/skindesigner-extend-detection-recording-isHD-isUHD' 2021-12-22 12:22:31 +01:00
Peter Bieringer 9690f6d8a0 remove debug lines 2021-12-20 19:13:00 +01:00
Peter Bieringer 5e5e5c4fbc extend detection of isHD and isUHD in case of stored EPG info (event) is missing any information regarding video (e.g. if EPG is missing on a channel) 2021-12-20 18:42:58 +01:00
kamel5 5b61c36484 Fix compiler error 2021-06-07 11:37:40 +02:00
kamel5 7d269ffd85 Version 1.2.17 2021-05-31 16:05:10 +02:00
kamel5 c6c89529a6 Update Skin estuary4vdr 2021-05-31 15:56:29 +02:00
kamel5 da79cb71b4 Update Skin estuary4vdr to display errors in recording info 2021-05-30 14:15:04 +02:00
kamel5 8aeb848044 Add token errors for recordings (VDR >= 2.5.4) 2021-05-30 14:15:00 +02:00
kamel5 b55994a8a6 Fix display of the background in the display channel
If you enter the display channel in Zapcockpit mode with the right or
left button and exit with OK, the background of the display channel was
not displayed.
2021-05-30 11:42:02 +02:00
kamel5 b47f544ad5 Fix incorrect display of posters and banners in the recording menu
When using the narrow recording menu, the posters and banners were
displayed incorrectly
2021-05-29 15:51:27 +02:00
kamel5 4a89d28f03 Fix display of events in channel display
When switching to a channel without EPG, the display of the current and
following program was not updated.
2021-05-27 11:53:17 +02:00
kamel5 7c47c8e225 Version 1.2.16 2021-05-21 12:10:40 +02:00
kamel5 ebd99e119c Fix update timer in the main menu
The timers in the open main menu were not updated when a timer recording
was started or stopped
2021-05-21 11:46:20 +02:00
kamel5 3c7e014dcc Fix a device is currently recording
The token indicating whether a device is currently recording was not
updated correctly
2021-05-21 11:46:16 +02:00
kamel5 b977e3582a Fix display of recording sign in display channel
The display of the instant timer has been corrected in the display
channel so that all events contained in the timer that have a tmFull
or tmPartial flag are marked with the recording symbol.
2021-05-21 11:46:11 +02:00
kamel5 9b63e8327f Fix Fehler: Aufruf des überladenen »min(int&, int&)« ist nicht eindeutig 2021-05-15 14:57:16 +02:00
kamel5 a7fc762b3d Update timerliste in main menu
The display of the instant timers has been corrected in the main menu so
that they are displayed as in the timer list.
2021-05-10 15:48:52 +02:00
kamel5 596c86c780 Merge branch 'pbiering/vdrstatus-displaymenu' 2021-05-06 10:55:25 +02:00
kamel5 d6f5e6808b Delete asterisk 2021-05-06 10:54:12 +02:00
Peter Bieringer 0259d38d2f fix/update changelog 2021-05-05 19:56:26 +02:00
Peter Bieringer 0b2666f62d remove comment 2021-05-05 18:51:01 +02:00
Peter Bieringer d4b1765aaf fix vdrstatus in displaymenu 2021-05-05 18:03:13 +02:00
Peter Bieringer 3aae0169b4 expose vdrstatus to displaymenu 2021-05-05 17:39:40 +02:00
kamel5 0159d536d0 Merge branch 'pbiering/vdrHasTimers' 2021-05-05 11:33:10 +02:00
kamel5 ccba1c23fd Revert "update version"
This reverts commit fce870a315.
2021-05-05 11:32:00 +02:00
kamel5 6583c93a6f Revert "update version token"
This reverts commit 64658a1f56.
2021-05-05 11:31:37 +02:00
Peter Bieringer 2d7a9ab3a3 Merge branch 'vdrHasTimers' of gitlab.com:pbiering/skindesigner into vdrHasTimers 2021-05-04 19:22:45 +02:00
Peter Bieringer 4daec64480 add {vdrHasTimers} to vdrstatus - can be used in skins for e.g. REC/SCHED/FREE (in combination with {vdrIsRecording}) 2021-05-04 19:20:29 +02:00
Peter Bieringer 64658a1f56 update version token 2021-05-04 19:19:30 +02:00
Peter Bieringer fce870a315 update version 2021-05-04 19:19:30 +02:00
kamel5 09925e6113 Fix Incorrect detection of a recording that is currently running
To set timeShiftActive correctly, it is not sufficient to compare the
name of the recording and the timer in cGlobalTimers::IsRecording()
if no short text is available. Therefore, the start time of both is now
also compared.
2021-05-04 14:38:52 +02:00
kamel5 4b2861e030 Merge branch 'pbiering/recIsInUse-vdrIsRecording' 2021-05-04 13:58:03 +02:00
Peter Bieringer 39c1062353 add {vdrHasTimers} to vdrstatus - can be used in skins for e.g. REC/SCHED/FREE (in combination with {vdrIsRecording}) 2021-05-04 07:33:08 +02:00
Peter Bieringer 589749731f update version token 2021-05-03 10:59:08 +02:00
Peter Bieringer 1c9fd38cc7 update version 2021-05-03 10:58:55 +02:00
Peter Bieringer 0ca96e8b3a add additional vdrstatus exposing "vdrIsRecordingsHandlersActive" and "vdrIsRecording" - can be used in skins for e.g. IDLE/BUSY REC/FREE 2021-05-03 10:53:55 +02:00
Peter Bieringer 700798ba21 add additional recording flag "isInUse" - can be used in skins for e.g. records in cutting/copy(queue) 2021-05-03 07:01:04 +02:00
kamel5 0aeb15d03a Merge branch 'pbiering/code-optimization' into develop 2021-04-25 11:14:40 +02:00
kamel5 22b24eb455 Update skin estuary4vdr displaychannel.xml
Fix incorrect display of weather info in Displaychannel.
2021-04-08 17:02:44 +02:00
kamel5 f5a29826cb Update skin estuary4vdr displaymenudefault.xml
Fix incorrect display of list entrys separated by tab in Displaymenu.
2021-04-08 17:02:34 +02:00
kamel5 50879fa931 Fix segfault with mpv plugin (thx to @lnj at vdr-portal.de)
This fix prevents a segfault when using the mpv plugin because there are
no cutmarks.
2021-03-28 12:26:24 +02:00
kamel5 894b5865cd Merge branch 'pbiering/fix-rsvg' 2021-03-23 15:57:20 +01:00
Peter Bieringer fda2a4ec74 fix issue introduced with 85df1e7f980f0f7092523e5ac9ed4ff6db51d82e: (process:24445): librsvg-CRITICAL **: 16:03:34.427: rsvg_handle_read_stream_sync: assertion 'is_input_stream(stream)' failed 2021-03-20 16:37:56 +01:00
Peter Bieringer 4821574437 remove of duplicate code by introducing macros by https://gitlab.com/Mike838 from https://gitlab.com/kamel5/skindesigner/-/issues/1#note_508426185 2021-03-20 16:06:45 +01:00
kamel5 dc617b52fa Version 1.2.15 2021-03-15 14:15:07 +01:00
kamel5 cef6ca78a2 Fix cutting marks wasn't updated 2021-03-15 14:10:18 +01:00
kamel5 85df1e7f98 Eliminate warnings 2021-03-11 13:21:45 +01:00
kamel5 3334263a96 Merge branch 'pbiering/skindesigner-fix-tuner-device-mapping' 2021-03-11 12:52:48 +01:00
Peter Bieringer 4d3fa0bc71 fix tuner device mapping in case tuners are not starting as first device (e.g. NetCeiver mcli) 2021-03-11 12:52:08 +01:00
Peter Bieringer cbce894c0c Merge remote-tracking branch 'upstream/master' 2021-03-11 08:16:55 +01:00
kamel5 9a0eac1c4f Update italian tanslation in metrixhd (thx to @fiveten_59 at vdr-portal.de) 2021-03-07 19:27:18 +01:00
kamel5 5f7337b50c Update italian tanslation in estuary4vdr (thx to @fiveten_59 at vdr-portal.de) 2021-03-07 14:45:49 +01:00
Peter Bieringer 105fe893a2 Merge remote-tracking branch 'upstream/master' 2021-03-01 07:25:50 +01:00
Peter Bieringer 764f657620 Merge branch 'fix-Wstringop-overflow' 2021-02-06 12:55:42 +01:00
Peter Bieringer 4bebeda1b0 fix 3x Wstringop-overflow compiler warnings 2021-02-06 09:36:17 +01:00
Peter Bieringer 7d63e95471 add TODO token 2021-02-06 08:12:45 +01:00
36 changed files with 1548 additions and 1178 deletions

32
HISTORY
View File

@ -497,3 +497,35 @@ Version 1.2.14
- [kamel5] Revert "Disabled timeshift display for non timeshift recordings"
- [kamel5] Add a different display mode to timeshift for currently active timer recordings
Version 1.2.15
- [kamel5] Update Update italian tanslation in metrixhd and estuary4vdr
- [pbiering] fix tuner device mapping in case tuners are not starting as first device
- [kamel5] Fix cutting marks wasn't updated
Version 1.2.16
- [pbiering] add additional recording flag {isInUse} - can be used in skins for e.g. records in cutting/copy(queue)
- [pbiering] add additional <vdrstatus> exposing {vdrIsRecordingsHandlersActive} and {vdrIsRecording} - can be used in skins for e.g. IDLE/BUSY REC/FREE
- [kamel5] Fix Incorrect detection of a recording that is currently running
- [kamel5] Fix segfault with mpv plugin (thx to @lnj at vdr-portal.de)
- [kamel5] Update skin estuary4vdr
- [pbiering] add {vdrHasTimers} to <vdrstatus> - can be used in skins for e.g. REC/SCHED/FREE (in combination with {vdrIsRecording})
- [pbiering] add <vdrstatus> also to displaymenu.xml to be able to display in header
- [kamel5] Fix display of recording sign in display channel
- [kamel5] Fix a device is currently recording
- [kamel5] Fix update timer in the main menu
Version 1.2.17
- [kamel5] Fix display of events in channel display
- [kamel5] Fix incorrect display of posters and banners in the recording menu
- [kamel5] Fix display of the background in the display channel
- [kamel5] Add token errors for recordings (VDR >= 2.5.4)
- [kamel5] Update Skin estuary4vdr to display errors in recording info
- [kamel5] Update Skin estuary4vdr
Version 1.2.18
- [pbiering] extend detection of isHD and isUHD in case of stored EPG info (event) is missing any information regarding video (e.g. if EPG is missing on a channel)
- [kamel5] Fix compiler error

View File

@ -726,15 +726,15 @@ bool cNumericExpr::IsNumericExpression(const char *e) {
}
bool cNumericExpr::PercentValue(const char *e) {
if (!e)
return e;
const char *hit = strchr(e, '%');
if (!hit)
return false;
char buffer[20] = "";
if (strlen(e) > 20)
return false;
strncpy(buffer, e, strlen(e)-1);
buffer[strlen(e)-1] = '\0';
int val = atoi(buffer);
int val;
int r = sscanf(e, "%d%%", &val); // use sscanf to retrieve %-value to avoid -Wstringop-overflow
if (r != 1)
return false; // sscanf parsing problem
bool ok = false;
if (horizontal && container->Width() > 0) {
value = container->Width() * val / 100;
@ -747,22 +747,22 @@ bool cNumericExpr::PercentValue(const char *e) {
}
char *cNumericExpr::ReplacePercentValue(char *e) {
if (!e)
return e;
const char *hit = strchr(e, '%');
if (!hit)
return e;
char buffer[20] = "";
if (strlen(e) > 20)
return e;
strncpy(buffer, e, strlen(e)-1);
buffer[strlen(e)-1] = '\0';
int val = atoi(buffer);
int val;
int r = sscanf(e, "%d%%", &val); // use sscanf to retrieve %-value to avoid -Wstringop-overflow
if (r != 1)
return e; // sscanf parsing problem
double percentVal = (double)val/100.0f;
char replacement[50] = "";
if (horizontal) {
sprintf(replacement, "%.5f*{areawidth}", percentVal);
snprintf(replacement, sizeof(replacement), "%.5f*{areawidth}", percentVal);
} else {
sprintf(replacement, "%.5f*{areaheight}", percentVal);
snprintf(replacement, sizeof(replacement), "%.5f*{areaheight}", percentVal);
}
int len = strlen(replacement) + 1;
@ -774,16 +774,19 @@ char *cNumericExpr::ReplacePercentValue(char *e) {
}
char *cNumericExpr::ReplaceToken(char *e, const char* token, int val) {
if (!e)
return e;
char *tokenStart = strstr(e, token);
if (!tokenStart) {
return e;
}
char buffer[20] = "";
sprintf(buffer, "%d", val);
snprintf(buffer, sizeof(buffer), "%d", val);
size_t newSize = strlen(e) - strlen(token) + strlen(buffer) + 1;
char *replaced = (char*)malloc(newSize);
memset(replaced, 0, newSize);
size_t beginning = strlen(e) - strlen(tokenStart);
if (beginning >= newSize) beginning = newSize - 1; // will never happen but avoid -Wstringop-overflow
if (beginning > 0)
strncpy(replaced, e, beginning);
strcat(replaced, buffer);

View File

@ -62,6 +62,7 @@ enum class eVeDisplayMenu {
header,
datetime,
time,
vdrstatus,
sortmode,
colorbuttons,
message,
@ -79,6 +80,7 @@ enum class eVeDisplayMenuMain {
systemmemory,
temperatures,
vdrstatistics,
vdrstatus,
lastrecordings,
customtokens,
count
@ -735,6 +737,13 @@ enum class eDMVdrstatisticsIT {
count = 0
};
enum class eDMVdrstatusIT {
vdrIsRecordingsHandlersActive,
vdrIsRecording,
vdrHasTimers,
count
};
enum class eDMTemperaturesST {
count = 0
};
@ -1176,6 +1185,8 @@ enum class eLeMenuRecordingsIT {
isUHD,
isRadio,
isRecording,
isInUse,
errors,
count
};
@ -1226,6 +1237,8 @@ enum class eCeMenuRecordingsIT {
isUHD,
isRadio,
isRecording,
isInUse,
errors,
count
};
@ -1341,6 +1354,8 @@ enum class eDmDetailedHeaderRecIT {
isUHD,
isRadio,
isRecording,
isInUse,
errors,
count
};
@ -1453,6 +1468,8 @@ enum class eDmDetailedRecIT {
isUHD,
isRadio,
isRecording,
isInUse,
errors,
count
};
@ -1514,6 +1531,7 @@ enum class eDRRecInfoIT {
isHD,
isUHD,
isRecording,
isInUse,
isWideScreen,
count
};

View File

@ -1332,7 +1332,7 @@ int cFuncLoop::FuncWidth(void) {
eOverflowType overflow = (eOverflowType)GetValue((int)eLoopAttribs::overflow);
if (overflow == eOverflowType::cut) {
int maxItems = GetValue((int)eLoopAttribs::maxitems);
numLoops = min(numLoops, maxItems);
numLoops = std::min(numLoops, maxItems);
}
if (numLoops > 0)
return numLoops * columnWidth;
@ -1357,7 +1357,7 @@ int cFuncLoop::FuncHeight(void) {
eOverflowType overflow = (eOverflowType)GetValue((int)eLoopAttribs::overflow);
if (overflow == eOverflowType::cut) {
int maxItems = GetValue((int)eLoopAttribs::maxitems);
numLoops = min(numLoops, maxItems);
numLoops = std::min(numLoops, maxItems);
} else if (overflow == eOverflowType::wrap) {
int loopWidth = Width();
if (loopWidth <= 0)

File diff suppressed because it is too large Load Diff

View File

@ -608,6 +608,8 @@ void cViewDetailRec::SetTokenContainer(void) {
tokenContainer->DefineIntToken("{isUHD}", (int)eDmDetailedRecIT::isUHD);
tokenContainer->DefineIntToken("{isRadio}", (int)eDmDetailedRecIT::isRadio);
tokenContainer->DefineIntToken("{isRecording}", (int)eDmDetailedRecIT::isRecording);
tokenContainer->DefineIntToken("{isInUse}", (int)eDmDetailedRecIT::isInUse);
tokenContainer->DefineIntToken("{errors}", (int)eDmDetailedRecIT::errors);
tokenContainer->DefineIntToken("{ismovie}", (int)eScraperIT::ismovie);
tokenContainer->DefineIntToken("{moviebudget}", (int)eScraperIT::moviebudget);
tokenContainer->DefineIntToken("{movierevenue}", (int)eScraperIT::movierevenue);
@ -672,6 +674,12 @@ bool cViewDetailRec::Parse(bool forced) {
tokenContainer->AddStringToken((int)eDmDetailedRecST::shorttext, info->ShortText());
tokenContainer->AddStringToken((int)eDmDetailedRecST::description, info->Description());
tokenContainer->AddIntToken((int)eDmDetailedRecIT::framesPerSecond, info->FramesPerSecond());
int errors = -1;
// ENABLE_ERRORS is only used in VDR-2.5.4 if the coresponding patch is installed, so it can be ignored in other versions
#if (defined (APIVERSNUM) && (APIVERSNUM >= 20505)) || defined (ENABLE_ERRORS)
errors = info->Errors();
#endif
tokenContainer->AddIntToken((int)eDmDetailedRecIT::errors, errors);
const cEvent *event = info->GetEvent();
if (event) {
cString recDate = event->GetDateString();
@ -697,10 +705,11 @@ bool cViewDetailRec::Parse(bool forced) {
tokenContainer->AddIntToken((int)eDmDetailedRecIT::durationevent, duration);
tokenContainer->AddIntToken((int)eDmDetailedRecIT::durationeventhours, duration / 60);
tokenContainer->AddStringToken((int)eDmDetailedRecST::durationeventminutes, *cString::sprintf("%.2d", duration%60));
tokenContainer->AddIntToken((int)eDmDetailedRecIT::isHD, RecordingIsHD(event)); // detect HD from 'info'
tokenContainer->AddIntToken((int)eDmDetailedRecIT::isUHD, RecordingIsUHD(event)); // detect UHD from 'info'
tokenContainer->AddIntToken((int)eDmDetailedRecIT::isHD, RecordingIsHD(event, tChannelID::InvalidID)); // detect HD from 'info', no fallback to channelID
tokenContainer->AddIntToken((int)eDmDetailedRecIT::isUHD, RecordingIsUHD(event, tChannelID::InvalidID)); // detect UHD from 'info', no fallback to channelID
tokenContainer->AddIntToken((int)eDmDetailedRecIT::isRadio, RecordingIsRadio(event, info->FramesPerSecond())); // detect Radio from 'info' and FPS
tokenContainer->AddIntToken((int)eDmDetailedRecIT::isRecording, recording->IsInUse() & ruTimer);
tokenContainer->AddIntToken((int)eDmDetailedRecIT::isInUse, recording->IsInUse());
}
}
SetRecInfos();

View File

@ -261,9 +261,6 @@ void cViewChannel::SetEvents(const cEvent *present, const cEvent *following) {
if (veProgressBar)
veProgressBar->Set(present);
if (!present && !following)
return;
if (veEpgInfo)
veEpgInfo->Set(present, following);
@ -426,6 +423,7 @@ void cViewChannel::ClearExtended(void) {
Clear((int)eVeDisplayChannel::channellistdetail);
SetDirty((int)eVeDisplayChannel::channellistback);
initExtended = true;
init = true;
ShowBasic();
}
//exit from channellist info to channel list
@ -439,6 +437,7 @@ void cViewChannel::ClearExtended(void) {
Clear((int)eVeDisplayChannel::grouplistback);
SetDirty((int)eVeDisplayChannel::grouplistback);
initExtended = true;
init = true;
ShowBasic();
}
//exit from group channel list to group list
@ -463,6 +462,7 @@ void cViewChannel::ClearExtended(void) {
SetDirty((int)eVeDisplayChannel::grouplistback);
SetDirty((int)eVeDisplayChannel::groupchannellistdetail);
initExtended = true;
init = true;
ShowBasic();
}
//exit from channel info to channel or group list

View File

@ -108,6 +108,7 @@ void cViewMenu::SetViewElements(void) {
viewElementNames.insert(pair<string, int>("header", (int)eVeDisplayMenu::header));
viewElementNames.insert(pair<string, int>("datetime", (int)eVeDisplayMenu::datetime));
viewElementNames.insert(pair<string, int>("time", (int)eVeDisplayMenu::time));
viewElementNames.insert(pair<string, int>("vdrstatus", (int)eVeDisplayMenu::vdrstatus));
viewElementNames.insert(pair<string, int>("colorbuttons", (int)eVeDisplayMenu::colorbuttons));
viewElementNames.insert(pair<string, int>("message", (int)eVeDisplayMenu::message));
viewElementNames.insert(pair<string, int>("scrollbar", (int)eVeDisplayMenu::scrollbar));
@ -629,6 +630,7 @@ cSubView::cSubView(const char *name) {
header = NULL;
datetime = NULL;
time = NULL;
vdrstatus = NULL;
message = NULL;
sortmode = NULL;
colorbuttons = NULL;
@ -693,6 +695,10 @@ void cSubView::SetViewElement(eVeDisplayMenu ve, cViewElement *viewElement) {
if (!time)
time = dynamic_cast<cVeTime*>(viewElement);
break;
case eVeDisplayMenu::vdrstatus:
if (!vdrstatus)
vdrstatus = dynamic_cast<cVeDmVdrstatus*>(viewElement);
break;
case eVeDisplayMenu::message:
if (!message)
message = dynamic_cast<cVeMessage*>(viewElement);
@ -735,6 +741,10 @@ void cSubView::SetViewElementHorizontal(eVeDisplayMenu ve, cViewElement *viewEle
if (!time)
time = dynamic_cast<cVeTime*>(viewElement);
break;
case eVeDisplayMenu::vdrstatus:
if (!vdrstatus)
vdrstatus = dynamic_cast<cVeDmVdrstatus*>(viewElement);
break;
case eVeDisplayMenu::message:
if (!message)
message = dynamic_cast<cVeMessage*>(viewElement);
@ -866,6 +876,7 @@ void cSubView::Clear(void) {
if (background) background->Hide();
if (datetime) datetime->Hide();
if (time) time->Hide();
if (vdrstatus) vdrstatus->Hide();
if (header) header->Hide();
if (colorbuttons) colorbuttons->Hide();
if (scrollbar) scrollbar->Hide();
@ -902,6 +913,11 @@ void cSubView::DrawDynamicVEs(void) {
time->Render();
}
}
if (vdrstatus) {
vdrstatus->Show();
if (vdrstatus->Parse())
vdrstatus->Render();
}
}
void cSubView::DrawList(void) {
@ -949,6 +965,11 @@ void cSubView::SetViewElementObjects(void) {
else if (viewElements[(int)eVeDisplayMenu::time])
time = dynamic_cast<cVeTime*>(viewElements[(int)eVeDisplayMenu::time]);
if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenu::vdrstatus])
vdrstatus = dynamic_cast<cVeDmVdrstatus*>(viewElementsHorizontal[(int)eVeDisplayMenu::vdrstatus]);
else if (viewElements[(int)eVeDisplayMenu::vdrstatus])
vdrstatus = dynamic_cast<cVeDmVdrstatus*>(viewElements[(int)eVeDisplayMenu::vdrstatus]);
if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenu::message])
message = dynamic_cast<cVeMessage*>(viewElementsHorizontal[(int)eVeDisplayMenu::message]);
else if (viewElements[(int)eVeDisplayMenu::message])
@ -986,6 +1007,7 @@ void cSubView::SetViewElements(void) {
viewElementNames.insert(pair<string, int>("background", (int)eVeDisplayMenu::background));
viewElementNames.insert(pair<string, int>("header", (int)eVeDisplayMenu::header));
viewElementNames.insert(pair<string, int>("datetime", (int)eVeDisplayMenu::datetime));
viewElementNames.insert(pair<string, int>("vdrstatus", (int)eVeDisplayMenu::vdrstatus));
viewElementNames.insert(pair<string, int>("time", (int)eVeDisplayMenu::time));
viewElementNames.insert(pair<string, int>("colorbuttons", (int)eVeDisplayMenu::colorbuttons));
viewElementNames.insert(pair<string, int>("message", (int)eVeDisplayMenu::message));
@ -1059,6 +1081,7 @@ cViewMenuMain::cViewMenuMain(const char *name) : cSubView(name) {
load = NULL;
memory = NULL;
vdrstats = NULL;
vdrstatus = NULL;
temperatures = NULL;
currentSchedule = NULL;
lastRecordings = NULL;
@ -1084,6 +1107,7 @@ void cViewMenuMain::SetViewElements(void) {
viewElementNames.insert(pair<string, int>("systemload", (int)eVeDisplayMenuMain::systemload));
viewElementNames.insert(pair<string, int>("systemmemory", (int)eVeDisplayMenuMain::systemmemory));
viewElementNames.insert(pair<string, int>("vdrstatistics", (int)eVeDisplayMenuMain::vdrstatistics));
viewElementNames.insert(pair<string, int>("vdrstatus", (int)eVeDisplayMenuMain::vdrstatus));
viewElementNames.insert(pair<string, int>("temperatures", (int)eVeDisplayMenuMain::temperatures));
viewElementNames.insert(pair<string, int>("lastrecordings", (int)eVeDisplayMenuMain::lastrecordings));
viewElementNames.insert(pair<string, int>("customtokens", (int)eVeDisplayMenuMain::customtokens));
@ -1133,6 +1157,11 @@ void cViewMenuMain::SetViewElementObjects(void) {
else if (viewElements[(int)eVeDisplayMenuMain::vdrstatistics])
vdrstats = dynamic_cast<cVeDmVdrstatistics*>(viewElements[(int)eVeDisplayMenuMain::vdrstatistics]);
if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenuMain::vdrstatus])
vdrstatus = dynamic_cast<cVeDmVdrstatus*>(viewElementsHorizontal[(int)eVeDisplayMenuMain::vdrstatus]);
else if (viewElements[(int)eVeDisplayMenuMain::vdrstatus])
vdrstatus = dynamic_cast<cVeDmVdrstatus*>(viewElements[(int)eVeDisplayMenuMain::vdrstatus]);
if (orientation == eOrientation::horizontal && viewElementsHorizontal[(int)eVeDisplayMenuMain::temperatures])
temperatures = dynamic_cast<cVeDmTemperatures*>(viewElementsHorizontal[(int)eVeDisplayMenuMain::temperatures]);
else if (viewElements[(int)eVeDisplayMenuMain::temperatures])
@ -1154,6 +1183,7 @@ void cViewMenuMain::SetViewElementObjects(void) {
if (load) load->SetDetached();
if (memory) memory->SetDetached();
if (vdrstats) vdrstats->SetDetached();
if (vdrstatus) vdrstatus->SetDetached();
if (temperatures) temperatures->SetDetached();
if (timers) timers->SetDetached();
if (currentSchedule) currentSchedule->SetDetached();
@ -1190,6 +1220,10 @@ void cViewMenuMain::Clear(void) {
vdrstats->Reset();
vdrstats->Hide();
}
if (vdrstatus) {
vdrstatus->Hide();
}
if (temperatures) {
temperatures->Reset();
@ -1235,11 +1269,6 @@ void cViewMenuMain::DrawStaticVEs(void) {
if (discusage->Parse())
discusage->Render();
}
if (timers) {
timers->Show();
if (timers->Parse())
timers->Render();
}
if (currentSchedule) {
currentSchedule->Show();
if (currentSchedule->Parse())
@ -1263,6 +1292,11 @@ void cViewMenuMain::DrawDynamicVEs(void) {
lastDrawDynamic = now;
}
if (timers) {
timers->Show();
if (timers->Parse())
timers->Render();
}
if (devices) {
devices->Show();
if (devices->Parse())
@ -1283,6 +1317,11 @@ void cViewMenuMain::DrawDynamicVEs(void) {
if (vdrstats->Parse())
vdrstats->Render();
}
if (vdrstatus) {
vdrstatus->Show();
if (vdrstatus->Parse())
vdrstatus->Render();
}
if (temperatures) {
temperatures->Show();
if (temperatures->Parse())
@ -1608,6 +1647,11 @@ void cViewMenuDetail::DrawDynamicVEs(void) {
if (time->Parse())
time->Render();
}
if (vdrstatus) {
vdrstatus->Show();
if (vdrstatus->Parse())
vdrstatus->Render();
}
}
void cViewMenuDetail::DrawDetailedView(void) {

View File

@ -120,6 +120,7 @@ protected:
cVeDmHeader *header;
cVeDateTime *datetime;
cVeTime *time;
cVeDmVdrstatus *vdrstatus;
cVeMessage *message;
cVeDmSortmode *sortmode;
cVeDmColorbuttons *colorbuttons;
@ -188,6 +189,7 @@ private:
cVeDmSystemload *load;
cVeDmSystemmemory *memory;
cVeDmVdrstatistics *vdrstats;
cVeDmVdrstatus *vdrstatus;
cVeDmTemperatures *temperatures;
cVeDmCurrentschedule *currentSchedule;
cVeDmLastrecordings *lastRecordings;
@ -322,4 +324,4 @@ public:
void SetTransparency(int transparency, bool forceDetached = false);
};
#endif //__VIEWDISPLAYMENU_H
#endif //__VIEWDISPLAYMENU_H

View File

@ -165,8 +165,6 @@ void cViewReplay::ClearVariables(void) {
veTimeshiftTimes->Set(cString(""), cString(""), cString(""));
if (veEndTime)
veEndTime->Set(cString(""));
if (veCutMarks)
veCutMarks->Reset();
timersLoaded = false;
globalTimers.ClearTimers();
}
@ -179,9 +177,9 @@ void cViewReplay::GetGlobalTimers(void) {
}
void cViewReplay::SetTimeShiftValues(int current, int total) {
timeShiftActive = NoRec;
if (!recording)
return;
timeShiftActive = NoRec;
#if APIVERSNUM >= 20101
int usage = recording->IsInUse();
if (usage & ruTimer)
@ -315,8 +313,9 @@ void cViewReplay::SetProgressbar(int current, int total) {
}
void cViewReplay::SetMarks(const cMarks *marks, int current, int total) {
if (veCutMarks)
veCutMarks->Set(marks, current, total, timeShiftActive, timeShiftFramesTotal);
if (!veCutMarks)
return;
veCutMarks->Set(marks, current, total, timeShiftActive, timeShiftFramesTotal);
Render((int)eVeDisplayReplay::cutmarks);
}

View File

@ -147,6 +147,8 @@ cViewElement *cViewElement::CreateViewElement(const char *name, const char *view
e = new cVeDmTemperatures();
else if (!strcmp(name, "vdrstatistics"))
e = new cVeDmVdrstatistics();
else if (!strcmp(name, "vdrstatus"))
e = new cVeDmVdrstatus();
else if (!strcmp(name, "lastrecordings"))
e = new cVeDmLastrecordings();
else if (!strcmp(name, "detailheaderepg"))
@ -585,77 +587,118 @@ void cViewElement::StopAnimation(void) {
/******************************************************************
* helper function (did not find any other common place)
******************************************************************/
bool RecordingIsHD(const cEvent* event) {
bool RecordingIsHD(const cEvent* event, const tChannelID channelID) {
// detect HD from 'info'
bool isHD = false;
cComponents *Components = (cComponents *)event->Components();
if (Components) {
// detect HD (see also ETSI EN 300 468)
// Stream: 1 = MPEG2-Video, 2 = MPEG2 Audio, 3 = Untertitel, 4 = AC3-Audio, 5 = H.264-Video, 6 = HEAAC-Audio, 7 = DTS/DTS HD audio, 8 = SRM/CPCM data, 9 = HEVC Video, AC4 Audio
// Stream == Video(1|5): 01 = 05 = 4:3, 02 = 03 = 06 = 07 = 16:9, 04 = 08 = >16:9, 09 = 0D = HD 4:3, 0A = 0B = 0E = 0F = HD 16:9, 0C = 10 = HD >16:9
int type = -1;
tComponent *Component;
int type = -1;
if (event) {
cComponents *Components = (cComponents *)event->Components();
if (Components) {
// detect HD (see also ETSI EN 300 468)
// Stream: 1 = MPEG2-Video, 2 = MPEG2 Audio, 3 = Untertitel, 4 = AC3-Audio, 5 = H.264-Video, 6 = HEAAC-Audio, 7 = DTS/DTS HD audio, 8 = SRM/CPCM data, 9 = HEVC Video, AC4 Audio
// Stream == Video(1|5): 01 = 05 = 4:3, 02 = 03 = 06 = 07 = 16:9, 04 = 08 = >16:9, 09 = 0D = HD 4:3, 0A = 0B = 0E = 0F = HD 16:9, 0C = 10 = HD >16:9
// #1: HVEC (stream content: 9)
Component = Components->GetComponent(0, 9, 0); // recording info: "X 9 <type>"
if (Component) {
isHD = true; // HVEC is always HD, type 4|5|6|7 would be even UHD (see below dedicated detection function)
} else {
// #2: H.264 (stream content: 5)
Component = Components->GetComponent(0, 5, 0); // recording info: "X 5 <type>"
if (Component) {
type = Component->type;
} else {
// #3: MPEG2 (stream content: 1)
Component = Components->GetComponent(0, 1, 0); // recording info: "X 1 <type>"
if (Component) {
type = Component->type;
};
};
};
tComponent *Component;
// #1: HVEC (stream content: 9)
Component = Components->GetComponent(0, 9, 0); // recording info: "X 9 <type>"
if (Component) {
isHD = true; // HVEC is always HD, type 4|5|6|7 would be even UHD (see below dedicated detection function)
} else {
// #2: H.264 (stream content: 5)
Component = Components->GetComponent(0, 5, 0); // recording info: "X 5 <type>"
if (Component) {
type = Component->type;
} else {
// #3: MPEG2 (stream content: 1)
Component = Components->GetComponent(0, 1, 0); // recording info: "X 1 <type>"
if (Component) {
type = Component->type;
};
};
};
switch (type) {
case 0x09:
case 0x0A:
case 0x0B:
case 0x0C:
case 0x0D:
case 0x0E:
case 0x0F:
case 0x10:
isHD = true;
};
switch (type) {
case 0x09:
case 0x0A:
case 0x0B:
case 0x0C:
case 0x0D:
case 0x0E:
case 0x0F:
case 0x10:
isHD = true;
};
};
};
if ((isHD == false) && (type == -1) && (!(channelID == tChannelID::InvalidID))) {
// fallback to retrieve via channel (in case of EPG issues)
#if defined (APIVERSNUM) && (APIVERSNUM >= 20301)
LOCK_CHANNELS_READ;
const cChannel *channel = Channels->GetByChannelID(channelID);
#else
const cChannel *channel = Channels.GetByChannelID(channelID);
#endif
if (channel) {
switch (channel->Vtype()) {
case 0x1b: // H.264
case 0x24: // H.265
isHD = true;
break;
};
};
};
return isHD;
};
bool RecordingIsUHD(const cEvent* event) {
bool RecordingIsUHD(const cEvent* event, const tChannelID channelID) {
// detect UHD from 'info'
bool isUHD = false;
cComponents *Components = (cComponents *)event->Components();
if (Components) {
// detect UHD (see also ETSI EN 300 468)
// Stream: 9 = HEVC Video, AC4 Audio
// Stream == Video(9): 00|01|02|03 = HD, 04|05|06|07 = UHD
int type = -1;
tComponent *Component;
int type = -1;
if (event) {
cComponents *Components = (cComponents *)event->Components();
if (Components) {
// detect UHD (see also ETSI EN 300 468)
// Stream: 9 = HEVC Video, AC4 Audio
// Stream == Video(9): 00|01|02|03 = HD, 04|05|06|07 = UHD
// HVEC (stream content: 9)
Component = Components->GetComponent(0, 9, 0); // recording info: "X 9 <type>"
if (Component) {
type = Component->type;
};
tComponent *Component;
// HVEC (stream content: 9)
Component = Components->GetComponent(0, 9, 0); // recording info: "X 9 <type>"
if (Component) {
type = Component->type;
};
switch (type) {
case 0x04:
case 0x05:
case 0x06:
case 0x07:
isUHD = true;
};
switch (type) {
case 0x04:
case 0x05:
case 0x06:
case 0x07:
isUHD = true;
};
};
};
if ((isUHD == false) && (type == -1) && (!(channelID == tChannelID::InvalidID))) {
// fallback to retrieve via channel (in case of EPG issues)
#if defined (APIVERSNUM) && (APIVERSNUM >= 20301)
LOCK_CHANNELS_READ;
const cChannel *channel = Channels->GetByChannelID(channelID);
#else
const cChannel *channel = Channels.GetByChannelID(channelID);
#endif
if (channel) {
switch (channel->Vtype()) {
case 0x24: // H.265
isUHD = true;
break;
};
};
};
return isUHD;
};
@ -667,50 +710,50 @@ bool RecordingIsRadio(const cEvent* event, const double FramesPerSecond) {
cComponents *Components = (cComponents *)event->Components();
if (Components) {
// Stream: 1 = MPEG2-Video, 2 = MPEG2 Audio, 3 = Untertitel, 4 = AC3-Audio, 5 = H.264-Video, 6 = HEAAC-Audio, 7 = DTS/DTS HD audio, 8 = SRM/CPCM data, 9 = HEVC Video, AC4 Audio
// Stream: 1 = MPEG2-Video, 2 = MPEG2 Audio, 3 = Untertitel, 4 = AC3-Audio, 5 = H.264-Video, 6 = HEAAC-Audio, 7 = DTS/DTS HD audio, 8 = SRM/CPCM data, 9 = HEVC Video, AC4 Audio
tComponent *Component;
tComponent *Component;
Component = Components->GetComponent(0, 2, 0); // recording info: "X 2 <type>"
if (Component) {
hasAudio = true;
};
Component = Components->GetComponent(0, 2, 0); // recording info: "X 2 <type>"
if (Component) {
hasAudio = true;
};
Component = Components->GetComponent(0, 4, 0); // recording info: "X 4 <type>"
if (Component) {
hasAudio = true;
};
Component = Components->GetComponent(0, 4, 0); // recording info: "X 4 <type>"
if (Component) {
hasAudio = true;
};
Component = Components->GetComponent(0, 6, 0); // recording info: "X 6 <type>"
if (Component) {
hasAudio = true;
};
Component = Components->GetComponent(0, 6, 0); // recording info: "X 6 <type>"
if (Component) {
hasAudio = true;
};
Component = Components->GetComponent(0, 7, 0); // recording info: "X 7 <type>"
if (Component) {
hasAudio = true;
};
Component = Components->GetComponent(0, 7, 0); // recording info: "X 7 <type>"
if (Component) {
hasAudio = true;
};
Component = Components->GetComponent(0, 1, 0); // recording info: "X 1 <type>"
if (Component) {
hasVideo = true;
};
Component = Components->GetComponent(0, 1, 0); // recording info: "X 1 <type>"
if (Component) {
hasVideo = true;
};
Component = Components->GetComponent(0, 5, 0); // recording info: "X 5 <type>"
if (Component) {
hasVideo = true;
};
Component = Components->GetComponent(0, 5, 0); // recording info: "X 5 <type>"
if (Component) {
hasVideo = true;
};
Component = Components->GetComponent(0, 9, 0); // recording info: "X 9 <type>"
if (Component) {
hasVideo = true;
};
Component = Components->GetComponent(0, 9, 0); // recording info: "X 9 <type>"
if (Component) {
hasVideo = true;
};
};
if ((hasAudio == true) && (hasVideo == false)) {
if (FramesPerSecond < 24) { // workaround for issue of missing "X 1" on some SD channels (e.g. RTL)
isRadio = true;
};
if (FramesPerSecond < 24) { // workaround for issue of missing "X 1" on some SD channels (e.g. RTL)
isRadio = true;
};
};
return isRadio;

View File

@ -113,8 +113,8 @@ public:
/******************************************************************
* helper function (did not find any other common place)
******************************************************************/
bool RecordingIsHD(const cEvent* event);
bool RecordingIsUHD(const cEvent* event);
bool RecordingIsHD(const cEvent* event, const tChannelID channelID);
bool RecordingIsUHD(const cEvent* event, const tChannelID channelID);
bool RecordingIsRadio(const cEvent* event, const double FramesPerSecond);
#endif //__VIEWELEMENT_H

View File

@ -160,12 +160,12 @@ bool cVeMessage::Parse(bool forced) {
* cVeDevices
******************************************************************/
cVeDevices::cVeDevices(void) {
lastRefresh = 0;
initial = true;
devicesIndex = -1;
lastSignalStrength = NULL;
lastSignalQuality = NULL;
recDevices = NULL;
lastRecDevices = NULL;
}
cVeDevices::~cVeDevices(void) {
@ -176,6 +176,8 @@ cVeDevices::~cVeDevices(void) {
lastSignalQuality = NULL;
delete[] recDevices;
recDevices = NULL;
delete[] lastRecDevices;
lastRecDevices = NULL;
mutexDevices.Unlock();
}
@ -193,11 +195,13 @@ void cVeDevices::Init(void) {
lastSignalStrength = new int[numDevices];
lastSignalQuality = new int[numDevices];
recDevices = new bool[numDevices];
lastRecDevices = new bool[numDevices];
mutexDevices.Lock();
for (int i=0; i<numDevices; i++) {
lastSignalStrength[i] = 0;
lastSignalQuality[i] = 0;
recDevices[i] = false;
lastRecDevices[i] = false;
}
mutexDevices.Unlock();
}
@ -205,7 +209,6 @@ void cVeDevices::Init(void) {
void cVeDevices::Close(void) {
devices.clear();
initial = true;
lastRefresh = 0;
numDevices = 0;
mutexDevices.Lock();
delete[] lastSignalStrength;
@ -214,6 +217,8 @@ void cVeDevices::Close(void) {
lastSignalQuality = NULL;
delete[] recDevices;
recDevices = NULL;
delete[] lastRecDevices;
lastRecDevices = NULL;
mutexDevices.Unlock();
cViewElement::Close();
}
@ -243,17 +248,17 @@ void cVeDevices::SetTokenContainer(void) {
bool cVeDevices::Parse(bool forced) {
if (!cViewElement::Parse(forced))
return false;
bool changed = false;
if (initial) {
Init();
initial = false;
changed = true;
} else {
//in light modus content is static
if (light)
return false;
//check if drawing is necessary
if (cTimeMs::Now() - lastRefresh < 500)
return false;
bool changed = false;
for (int i = 0; i < numDevices; i++) {
const cDevice *device = cDevice::GetDevice(devices[i]);
if (!device || !device->NumProvidedSystems()) {
@ -272,22 +277,15 @@ bool cVeDevices::Parse(bool forced) {
if ((signalStrength != lastSigStr) || (signalQuality != lastSigQual)) {
changed = true;
break;
}
}
if (!changed) {
return false;
}
}
}
//check device which currently displays live tv
int deviceLiveTV = -1;
cDevice *primaryDevice = cDevice::PrimaryDevice();
if (primaryDevice) {
if (!primaryDevice->Replaying() || primaryDevice->Transferring())
deviceLiveTV = cDevice::ActualDevice()->DeviceNumber();
else
deviceLiveTV = primaryDevice->DeviceNumber();
// reset recording devices
for (int i = 0; i < numDevices; i++) {
recDevices[i] = false;
}
// check currently recording devices
// BLOCK for LOCK_TIMERS_READ scope !!
{
@ -305,12 +303,40 @@ bool cVeDevices::Parse(bool forced) {
const cDevice *recDevice = RecordControl->Device();
if (recDevice) {
mutexDevices.Lock();
if (recDevices)
recDevices[recDevice->DeviceNumber()] = true;
if (recDevices) {
int d = recDevice->DeviceNumber();
for (int i = 0; i < numDevices; i++) {
if (devices[i] == d) {
recDevices[i] = true;
break;
}
}
}
mutexDevices.Unlock();
}
}
}
} // LOCK_TIMERS_READ
for (int i = 0; i < numDevices; i++) {
if (recDevices[i] != lastRecDevices[i]) {
lastRecDevices[i] = recDevices[i];
changed = true;
}
}
if (!changed) {
return false;
}
//check device which currently displays live tv
int deviceLiveTV = -1;
cDevice *primaryDevice = cDevice::PrimaryDevice();
if (primaryDevice) {
if (!primaryDevice->Replaying() || primaryDevice->Transferring())
deviceLiveTV = cDevice::ActualDevice()->DeviceNumber();
else
deviceLiveTV = primaryDevice->DeviceNumber();
}
//create loop container
@ -347,14 +373,8 @@ bool cVeDevices::Parse(bool forced) {
}
tokenContainer->AddLoopToken(devicesIndex, i, (int)eDevicesLT::signalstrength, *cString::sprintf("%d", signalStrength));
tokenContainer->AddLoopToken(devicesIndex, i, (int)eDevicesLT::signalquality, *cString::sprintf("%d", signalQuality));
tokenContainer->AddLoopToken(devicesIndex, i, (int)eDevicesLT::livetv, i == deviceLiveTV ? "1" : "0");
bool isRecording = false;
mutexDevices.Lock();
if (recDevices && recDevices[i])
isRecording = true;
mutexDevices.Unlock();
tokenContainer->AddLoopToken(devicesIndex, i, (int)eDevicesLT::recording, isRecording ? "1" : "0");
tokenContainer->AddLoopToken(devicesIndex, i, (int)eDevicesLT::livetv, devices[i] == deviceLiveTV ? "1" : "0");
tokenContainer->AddLoopToken(devicesIndex, i, (int)eDevicesLT::recording, (recDevices && recDevices[i]) ? "1" : "0");
const cChannel *channel = device->GetCurrentlyTunedTransponder();
const cSource *source = (channel) ? Sources.Get(channel->Source()) : NULL;
@ -380,7 +400,6 @@ bool cVeDevices::Parse(bool forced) {
}
SetDirty();
lastRefresh = cTimeMs::Now();
return true;
}
/******************************************************************

View File

@ -51,7 +51,6 @@ public:
class cVeDevices : public cViewElement {
private:
bool light;
time_t lastRefresh;
vector<int> devices;
bool initial;
int devicesIndex;
@ -60,6 +59,7 @@ private:
int* lastSignalStrength;
int* lastSignalQuality;
bool* recDevices;
bool* lastRecDevices;
void Init(void);
public:
cVeDevices(void);
@ -107,4 +107,4 @@ public:
void Set(int current, int total, bool mute);
bool Parse(bool forced = false);
};
#endif //__VIEWELEMENTSCOMMON_H
#endif //__VIEWELEMENTSCOMMON_H

View File

@ -112,6 +112,8 @@ const char *cVeDcChannelGroup::GetChannelSep(const cChannel *c, bool prev) {
******************************************************************/
cVeDcEpgInfo::cVeDcEpgInfo(void) {
globalTimers = NULL;
current = NULL;
next = NULL;
}
cVeDcEpgInfo::~cVeDcEpgInfo(void) {
@ -141,50 +143,74 @@ void cVeDcEpgInfo::SetTokenContainer(void) {
InheritTokenContainer();
}
void cVeDcEpgInfo::Set(const cEvent *p, const cEvent *f) {
bool cVeDcEpgInfo::Parse(bool force) {
if (!cViewElement::Parse(force))
return false;
tokenContainer->Clear();
if (p) {
tokenContainer->AddStringToken((int)eDCEpgInfoST::currenttitle, p->Title());
tokenContainer->AddStringToken((int)eDCEpgInfoST::currentsubtitle, p->ShortText());
tokenContainer->AddStringToken((int)eDCEpgInfoST::currentstart, *p->GetTimeString());
tokenContainer->AddStringToken((int)eDCEpgInfoST::currentstop, *p->GetEndTimeString());
tokenContainer->AddIntToken((int)eDCEpgInfoIT::currentduration, p->Duration() / 60);
tokenContainer->AddIntToken((int)eDCEpgInfoIT::currentdurationhours, p->Duration() / 3600);
tokenContainer->AddIntToken((int)eDCEpgInfoIT::currentdurationminutes, (p->Duration() / 60) % 60);
tokenContainer->AddIntToken((int)eDCEpgInfoIT::currentelapsed, (int)round((time(NULL) - p->StartTime())/60));
tokenContainer->AddIntToken((int)eDCEpgInfoIT::currentremaining, (int)round((p->EndTime() - time(NULL))/60));
tokenContainer->AddIntToken((int)eDCEpgInfoIT::currentrecording, EventHasTimer(p));
tokenContainer->AddIntToken((int)eDCEpgInfoIT::hasVPS, (bool)p->Vps());
if (current) {
tokenContainer->AddStringToken((int)eDCEpgInfoST::currenttitle, current->Title());
tokenContainer->AddStringToken((int)eDCEpgInfoST::currentsubtitle, current->ShortText());
tokenContainer->AddStringToken((int)eDCEpgInfoST::currentstart, *current->GetTimeString());
tokenContainer->AddStringToken((int)eDCEpgInfoST::currentstop, *current->GetEndTimeString());
tokenContainer->AddIntToken((int)eDCEpgInfoIT::currentduration, current->Duration() / 60);
tokenContainer->AddIntToken((int)eDCEpgInfoIT::currentdurationhours, current->Duration() / 3600);
tokenContainer->AddIntToken((int)eDCEpgInfoIT::currentdurationminutes, (current->Duration() / 60) % 60);
tokenContainer->AddIntToken((int)eDCEpgInfoIT::currentelapsed, (int)round((time(NULL) - current->StartTime())/60));
tokenContainer->AddIntToken((int)eDCEpgInfoIT::currentremaining, (int)round((current->EndTime() - time(NULL))/60));
tokenContainer->AddIntToken((int)eDCEpgInfoIT::currentrecording, EventHasTimer(current));
tokenContainer->AddIntToken((int)eDCEpgInfoIT::hasVPS, (bool)current->Vps());
}
if (f) {
tokenContainer->AddStringToken((int)eDCEpgInfoST::nexttitle, f->Title());
tokenContainer->AddStringToken((int)eDCEpgInfoST::nextsubtitle, f->ShortText());
tokenContainer->AddStringToken((int)eDCEpgInfoST::nextstart, *f->GetTimeString());
tokenContainer->AddStringToken((int)eDCEpgInfoST::nextstop, *f->GetEndTimeString());
tokenContainer->AddIntToken((int)eDCEpgInfoIT::nextduration, f->Duration() / 60);
tokenContainer->AddIntToken((int)eDCEpgInfoIT::nextdurationhours, f->Duration() / 3600);
tokenContainer->AddIntToken((int)eDCEpgInfoIT::nextdurationminutes, (f->Duration() / 60) % 60);
tokenContainer->AddIntToken((int)eDCEpgInfoIT::nextrecording, EventHasTimer(f));
tokenContainer->AddIntToken((int)eDCEpgInfoIT::hasVPS, (bool)f->Vps());
if (next) {
tokenContainer->AddStringToken((int)eDCEpgInfoST::nexttitle, next->Title());
tokenContainer->AddStringToken((int)eDCEpgInfoST::nextsubtitle, next->ShortText());
tokenContainer->AddStringToken((int)eDCEpgInfoST::nextstart, *next->GetTimeString());
tokenContainer->AddStringToken((int)eDCEpgInfoST::nextstop, *next->GetEndTimeString());
tokenContainer->AddIntToken((int)eDCEpgInfoIT::nextduration, next->Duration() / 60);
tokenContainer->AddIntToken((int)eDCEpgInfoIT::nextdurationhours, next->Duration() / 3600);
tokenContainer->AddIntToken((int)eDCEpgInfoIT::nextdurationminutes, (next->Duration() / 60) % 60);
tokenContainer->AddIntToken((int)eDCEpgInfoIT::nextrecording, EventHasTimer(next));
tokenContainer->AddIntToken((int)eDCEpgInfoIT::hasVPS, (bool)next->Vps());
}
SetDirty();
return true;
}
void cVeDcEpgInfo::Close(void) {
current = NULL;
next = NULL;
tokenContainer->Clear();
cViewElement::Close();
}
bool cVeDcEpgInfo::EventHasTimer(const cEvent *e) {
if (!e) return false;
bool hasTimer = e->HasTimer();
eTimerMatch TimerMatch = tmNone;
const cTimers *timers;
#if defined (APIVERSNUM) && (APIVERSNUM >= 20301)
{
LOCK_TIMERS_READ;
timers = Timers;
}
#else
timers = &Timers;
#endif
const cTimer *Timer = timers->GetMatch(e, &TimerMatch);
if (Timer && Timer->HasFlags(tfActive)) {
if (TimerMatch == tmFull)
return true;
if (TimerMatch == tmPartial) {
const char *fileName = Timer->File();
if (fileName && *fileName == '@')
return true;
}
}
bool hasTimer = false;
for (int i = 0; i < globalTimers->Size() && !hasTimer; i++)
if (const cTimer *Timer = globalTimers->At(i))
if (Timer->Channel() && (Timer->Channel()->GetChannelID() == e->ChannelID()))
if (const cEvent *timerEvent = Timer->Event())
if (e->EventID() == timerEvent->EventID())
hasTimer = true;
return hasTimer;
}
@ -204,6 +230,7 @@ void cVeDcProgressBar::Close(void) {
currentLast = -1;
startTime = -1;
duration = -1;
tokenContainer->Clear();
cViewElement::Close();
}
@ -593,7 +620,8 @@ void cVeDcScraperContent::SetTokenContainer(void) {
void cVeDcScraperContent::Set(const cEvent *e) {
tokenContainer->Clear();
SetPosterBanner(tokenContainer, e, NULL);
if (e)
SetPosterBanner(tokenContainer, e, NULL);
SetDirty();
}

View File

@ -34,6 +34,8 @@ public:
******************************************************************/
class cVeDcEpgInfo : public cViewElement {
private:
const cEvent *current;
const cEvent *next;
cGlobalTimers *globalTimers;
bool EventHasTimer(const cEvent *e);
public:
@ -41,8 +43,9 @@ public:
virtual ~cVeDcEpgInfo(void);
void SetGlobalTimers(cGlobalTimers *globalTimers) { this->globalTimers = globalTimers; };
void SetTokenContainer(void);
void Set(const cEvent *p, const cEvent *f);
void Set(const cEvent *p, const cEvent *f) { this->current = p; this->next = f; };
void Close(void);
bool Parse(bool forced = false);
};
/******************************************************************
* cVeDcProgressBar

View File

@ -391,7 +391,8 @@ bool cVeDmTimers::Parse(bool forced) {
tokenContainer->AddLoopToken(timerIndex, i, (int)eDMTimersLT::isremotetimer, globalTimers.IsRemoteTimer(i) ? "1" : "0");
tokenContainer->AddLoopToken(timerIndex, i, (int)eDMTimersLT::remotehost, globalTimers.RemoteHost(i));
const cEvent *event = Timer->Event();
if (event) {
const char *fileName = Timer->File();
if (event && fileName && !(*fileName == '@')) {
tokenContainer->AddLoopToken(timerIndex, i, (int)eDMTimersLT::title, event->Title());
} else {
const char *File = Setup.FoldersInTimerMenu ? NULL : strrchr(Timer->File(), FOLDERDELIMCHAR);
@ -867,6 +868,41 @@ bool cVeDmVdrstatistics::Parse(bool forced) {
return true;
}
/******************************************************************
* cVeDmVdrstatus
******************************************************************/
cVeDmVdrstatus::cVeDmVdrstatus(void) {
}
cVeDmVdrstatus::~cVeDmVdrstatus(void) {
}
void cVeDmVdrstatus::Close(void) {
cViewElement::Close();
}
void cVeDmVdrstatus::SetTokenContainer(void) {
tokenContainer = new skindesignerapi::cTokenContainer();
tokenContainer->DefineIntToken("{vdrIsRecordingsHandlersActive}", (int)eDMVdrstatusIT::vdrIsRecordingsHandlersActive);
tokenContainer->DefineIntToken("{vdrIsRecording}", (int)eDMVdrstatusIT::vdrIsRecording);
tokenContainer->DefineIntToken("{vdrHasTimers}", (int)eDMVdrstatusIT::vdrHasTimers);
InheritTokenContainer();
}
bool cVeDmVdrstatus::Parse(bool forced) {
if (!cViewElement::Parse(forced))
return false;
cGlobalTimers globalTimers;
globalTimers.LoadTimers();
tokenContainer->Clear();
tokenContainer->AddIntToken((int)eDMVdrstatusIT::vdrIsRecordingsHandlersActive, RecordingsHandler.Active());
tokenContainer->AddIntToken((int)eDMVdrstatusIT::vdrIsRecording, cRecordControls::Active());
tokenContainer->AddIntToken((int)eDMVdrstatusIT::vdrHasTimers, (globalTimers.Size() > 0));
SetDirty();
return true;
}
/******************************************************************
* cVeDmLastrecordings
******************************************************************/
cVeDmLastrecordings::cVeDmLastrecordings(void) {
@ -934,7 +970,7 @@ bool cVeDmLastrecordings::Parse(bool forced) {
int MAX_RECORDINGS = 10;
int availableRecordings = orderedRecs.size();
int numRecordings = min(MAX_RECORDINGS, availableRecordings);
int numRecordings = std::min(MAX_RECORDINGS, availableRecordings);
if (!numRecordings)
return true;
@ -1171,6 +1207,8 @@ void cVeDmDetailheaderRec::SetTokenContainer(void) {
tokenContainer->DefineIntToken("{isUHD}", (int)eDmDetailedHeaderRecIT::isUHD);
tokenContainer->DefineIntToken("{isRadio}", (int)eDmDetailedHeaderRecIT::isRadio);
tokenContainer->DefineIntToken("{isRecording}", (int)eDmDetailedHeaderRecIT::isRecording);
tokenContainer->DefineIntToken("{isInUse}", (int)eDmDetailedHeaderRecIT::isInUse);
tokenContainer->DefineIntToken("{errors}", (int)eDmDetailedHeaderRecIT::errors);
InheritTokenContainer();
}
@ -1191,7 +1229,14 @@ bool cVeDmDetailheaderRec::Parse(bool forced) {
tokenContainer->AddStringToken((int)eDmDetailedHeaderRecST::epgname, info->Title());
tokenContainer->AddStringToken((int)eDmDetailedHeaderRecST::shorttext, info->ShortText());
tokenContainer->AddIntToken((int)eDmDetailedHeaderRecIT::framesPerSecond, info->FramesPerSecond());
int errors = -1;
// ENABLE_ERRORS is only used in VDR-2.5.4 if the coresponding patch is installed, so it can be ignored in other versions
#if (defined (APIVERSNUM) && (APIVERSNUM >= 20505)) || defined (ENABLE_ERRORS)
errors = info->Errors();
#endif
tokenContainer->AddIntToken((int)eDmDetailedHeaderRecIT::errors, errors);
const cEvent *event = info->GetEvent();
tChannelID channelID = tChannelID::InvalidID;
if (event) {
cString recDate = event->GetDateString();
cString recTime = event->GetTimeString();
@ -1216,17 +1261,17 @@ bool cVeDmDetailheaderRec::Parse(bool forced) {
tokenContainer->AddIntToken((int)eDmDetailedHeaderRecIT::durationevent, duration);
tokenContainer->AddIntToken((int)eDmDetailedHeaderRecIT::durationeventhours, duration / 60);
tokenContainer->AddStringToken((int)eDmDetailedHeaderRecST::durationeventminutes, *cString::sprintf("%.2d", duration%60));
tokenContainer->AddIntToken((int)eDmDetailedHeaderRecIT::isHD, RecordingIsHD(event)); // detect HD from 'info'
tokenContainer->AddIntToken((int)eDmDetailedHeaderRecIT::isUHD, RecordingIsUHD(event)); // detect UHD from 'info'
tokenContainer->AddIntToken((int)eDmDetailedHeaderRecIT::isRadio, RecordingIsRadio(event, info->FramesPerSecond())); // detect Radio from 'info' and FPS
tokenContainer->AddIntToken((int)eDmDetailedHeaderRecIT::isRecording, recording->IsInUse() & ruTimer);
tokenContainer->AddIntToken((int)eDmDetailedHeaderRecIT::isInUse, recording->IsInUse());
}
if (info->ChannelName() && (strlen(info->ChannelName()) > 0)) {
tokenContainer->AddStringToken((int)eDmDetailedHeaderRecST::recchannelname, info->ChannelName());
tokenContainer->AddStringToken((int)eDmDetailedHeaderRecST::recchannelid, info->ChannelID().ToString());
tokenContainer->AddIntToken((int)eDmDetailedHeaderRecIT::recchannelnumber, 0); // cannot be provided, for backward compatibility only
} else {
if (info->ChannelName() && (strlen(info->ChannelName()) > 0)) {
tokenContainer->AddStringToken((int)eDmDetailedHeaderRecST::recchannelname, info->ChannelName());
tokenContainer->AddStringToken((int)eDmDetailedHeaderRecST::recchannelid, info->ChannelID().ToString());
tokenContainer->AddIntToken((int)eDmDetailedHeaderRecIT::recchannelnumber, 0); // cannot be provided, for backward compatibility only
channelID = info->ChannelID();
} else {
#if defined (APIVERSNUM) && (APIVERSNUM >= 20301)
LOCK_CHANNELS_READ;
const cChannel *channel = Channels->GetByChannelID(info->ChannelID());
@ -1234,11 +1279,15 @@ bool cVeDmDetailheaderRec::Parse(bool forced) {
const cChannel *channel = Channels.GetByChannelID(info->ChannelID());
#endif
if (channel) {
tokenContainer->AddStringToken((int)eDmDetailedHeaderRecST::recchannelname, channel->Name());
tokenContainer->AddStringToken((int)eDmDetailedHeaderRecST::recchannelid, *channel->GetChannelID().ToString());
tokenContainer->AddIntToken((int)eDmDetailedHeaderRecIT::recchannelnumber, channel->Number());
}
}
tokenContainer->AddStringToken((int)eDmDetailedHeaderRecST::recchannelname, channel->Name());
tokenContainer->AddStringToken((int)eDmDetailedHeaderRecST::recchannelid, *channel->GetChannelID().ToString());
tokenContainer->AddIntToken((int)eDmDetailedHeaderRecIT::recchannelnumber, channel->Number());
channelID = channel->GetChannelID();
}
}
tokenContainer->AddIntToken((int)eDmDetailedHeaderRecIT::isHD, RecordingIsHD(event, channelID)); // detect HD from 'info'
tokenContainer->AddIntToken((int)eDmDetailedHeaderRecIT::isUHD, RecordingIsUHD(event, channelID)); // detect UHD from 'info'
}
string recImage = "";
string path = recording->FileName() ? recording->FileName() : "";
@ -1338,6 +1387,3 @@ bool cVeDmTablabels::Parse(bool forced) {
}
return true;
}

View File

@ -178,6 +178,18 @@ public:
bool Parse(bool forced = false);
};
/******************************************************************
* cVeDmVdrstatus
******************************************************************/
class cVeDmVdrstatus : public cViewElement {
public:
cVeDmVdrstatus(void);
virtual ~cVeDmVdrstatus(void);
void Close(void);
void SetTokenContainer(void);
bool Parse(bool forced = false);
};
/******************************************************************
* cVeDmLastrecordings
******************************************************************/
@ -253,4 +265,4 @@ public:
void SetActiveTab(int activeTab) { SetDirty(); this->activeTab = activeTab; };
bool Parse(bool forced = false);
};
#endif //__VIEWELEMENTSDM_H
#endif //__VIEWELEMENTSDM_H

View File

@ -120,6 +120,7 @@ void cVeDrRecInfo::SetTokenContainer(void) {
tokenContainer->DefineIntToken("{isHD}", (int)eDRRecInfoIT::isHD);
tokenContainer->DefineIntToken("{isUHD}", (int)eDRRecInfoIT::isUHD);
tokenContainer->DefineIntToken("{isRecording}", (int)eDRRecInfoIT::isRecording);
tokenContainer->DefineIntToken("{isInUse}", (int)eDRRecInfoIT::isInUse);
tokenContainer->DefineIntToken("{isWideScreen}", (int)eDRRecInfoIT::isWideScreen);
InheritTokenContainer();
}
@ -150,6 +151,7 @@ bool cVeDrRecInfo::Parse(bool force) {
tokenContainer->AddIntToken((int)eDRRecInfoIT::isHD, isHD);
tokenContainer->AddIntToken((int)eDRRecInfoIT::isUHD, isUHD);
tokenContainer->AddIntToken((int)eDRRecInfoIT::isRecording, recording->IsInUse() & ruTimer);
tokenContainer->AddIntToken((int)eDRRecInfoIT::isInUse, recording->IsInUse());
tokenContainer->AddIntToken((int)eDRRecInfoIT::isWideScreen, isWideScreen);
tokenContainer->AddStringToken((int)eDRRecInfoST::resolution, resName.c_str());
tokenContainer->AddStringToken((int)eDRRecInfoST::aspect, aspectName.c_str());
@ -375,6 +377,7 @@ bool cVeDrProgressBar::Parse(bool force) {
tokenContainer->AddIntToken((int)eDRProgressbarIT::timeshifttotal, timeshiftTotal);
SetDirty();
changed = false;
return true;
}
@ -383,13 +386,16 @@ bool cVeDrProgressBar::Parse(bool force) {
******************************************************************/
cVeDrCutMarks::cVeDrCutMarks(void) {
cutmarksIndex = -1;
lastMarks = NULL;
changed = true;
marks = NULL;
current = -1;
total = -1;
numMarksLast = 0;
timeShiftActive = NoRec;
Reset();
timeshiftTotal = -1;
}
cVeDrCutMarks::~cVeDrCutMarks(void) {
delete[] lastMarks;
}
void cVeDrCutMarks::SetTokenContainer(void) {
@ -406,31 +412,22 @@ void cVeDrCutMarks::SetTokenContainer(void) {
}
void cVeDrCutMarks::Set(const cMarks *marks, int current, int total, eRecType_t timeShiftActive, int timeshiftTotal) {
int numMarks = marks->Count();
if (!(this->current != current || this->total != total || this->marks != marks || numMarksLast != numMarks))
return;
this->marks = marks;
numMarksLast = numMarks;
this->current = current;
this->total = total;
this->timeShiftActive = timeShiftActive;
this->timeshiftTotal = timeshiftTotal;
}
void cVeDrCutMarks::Reset(void) {
marks = NULL;
current = -1;
total = -1;
numMarksLast = 0;
delete[] lastMarks;
lastMarks = NULL;
markActive = -1;
timeShiftActive = NoRec;
timeshiftTotal = -1;
changed = true;
}
bool cVeDrCutMarks::Parse(bool force) {
if (!cViewElement::Parse(force))
if (!cViewElement::Parse(force) || !changed)
return false;
if (!marks || !MarksChanged()) {
return false;
}
tokenContainer->Clear();
tokenContainer->AddIntToken((int)eDRCutmarksIT::timeshift, timeShiftActive);
int numMarks = marks->Count();
@ -459,61 +456,10 @@ bool cVeDrCutMarks::Parse(bool force) {
isStartMark = !isStartMark;
}
SetDirty();
changed = false;
return true;
}
bool cVeDrCutMarks::MarksChanged(void) {
bool redraw = false;
//if mark was active, we redraw always
if (markActive >= 0) {
markActive = -1;
redraw = true;
}
//check if current position in recording hits mark exactly
for (const cMark *m = marks->First(); m; m = marks->Next(m)) {
if (m->Position() == current) {
markActive = current;
redraw = true;
break;
}
}
if (redraw)
return true;
//if number of marks has changed, redraw
int numMarks = marks->Count();
if (numMarks != numMarksLast) {
RememberMarks();
return true;
}
if (!lastMarks)
return false;
//if position has changed, redraw
int i=0;
for (const cMark *m = marks->First(); m; m = marks->Next(m)) {
if (m->Position() != lastMarks[i]) {
RememberMarks();
return true;
}
i++;
}
return false;
}
void cVeDrCutMarks::RememberMarks(void) {
if (!marks)
return;
numMarksLast = marks->Count();
if (numMarksLast < 1)
return;
delete[] lastMarks;
lastMarks = new int[numMarksLast];
int i=0;
for (const cMark *m = marks->First(); m; m = marks->Next(m)) {
lastMarks[i] = m->Position();
i++;
}
}
/******************************************************************
* cVeDrControlIcons
******************************************************************/

View File

@ -140,16 +140,12 @@ private:
eRecType_t timeShiftActive;
int timeshiftTotal;
int numMarksLast;
int *lastMarks;
int markActive;
bool MarksChanged(void);
void RememberMarks(void);
bool changed;
public:
cVeDrCutMarks(void);
virtual ~cVeDrCutMarks(void);
void SetTokenContainer(void);
void Set(const cMarks *marks, int current, int total, eRecType_t timeShiftActive = NoRec, int timeshiftTotal = 0);
void Reset(void);
bool Parse(bool forced = false);
};

View File

@ -45,7 +45,8 @@ void cSDDisplayReplay::SetMode(bool Play, bool Forward, int Speed) {
void cSDDisplayReplay::SetProgress(int Current, int Total) {
if (ok) {
view->SetProgressbar(Current, Total);
view->SetMarks(marks, Current, Total);
if (marks)
view->SetMarks(marks, Current, Total);
view->SetTimeshiftTimes(Current, Total);
view->SetEndTime(Current, Total);
view->DelayOnPause();

View File

@ -2,7 +2,7 @@
<!ENTITY % functions SYSTEM "functions.dtd">
<!ELEMENT displaymenu (background,header,datetime,time*,message,sortmode*,colorbuttons,scrollbar*,
<!ELEMENT displaymenu (background,header,datetime,time*,vdrstatus*,message,sortmode*,colorbuttons,scrollbar*,
menudefault,menumain*,menusetup*,menuschedules*,
menutimers*,menuchannels*,menurecordings*,
menudetailedepg,menudetailedrecording,
@ -218,6 +218,20 @@
condition CDATA #IMPLIED
>
<!ELEMENT vdrstatus (areacontainer|area|areascroll)*>
<!ATTLIST vdrstatus
delay CDATA #IMPLIED
orientation CDATA #IMPLIED
fadetime CDATA #IMPLIED
shifttime CDATA #IMPLIED
shifttype CDATA #IMPLIED
shiftmode CDATA #IMPLIED
startx CDATA #IMPLIED
starty CDATA #IMPLIED
debug CDATA #IMPLIED
condition CDATA #IMPLIED
>
<!ELEMENT currentschedule (areacontainer|area|areascroll)*>
<!ATTLIST currentschedule
delay CDATA #IMPLIED
@ -316,7 +330,7 @@
>
<!ELEMENT menumain (background | header | datetime | time | colorbuttons | scrollbar | sortmode | timers |
discusage | devices | systemload | systemmemory | vdrstatistics | temperatures | currentschedule |
discusage | devices | systemload | systemmemory | vdrstatistics | vdrstatus | temperatures | currentschedule |
currentweather | lastrecordings | customtokens | menuitems)*>
<!ATTLIST menumain
x CDATA #REQUIRED
@ -501,4 +515,4 @@
debug (true|false) #IMPLIED
>
%functions;
%functions;

View File

@ -177,14 +177,18 @@ bool cGlobalTimers::IsRecording(const cRecording *rec) {
if (!rec || !rec->Name())
return false;
std::string recName = rec->Name();
time_t recstart = rec->Start();
int size = Size();
for (int i=0; i<size; i++) {
const cTimer *t = At(i);
const char *timerFile = t->File();
if (!t->Matches() || !timerFile)
continue;
if (recName.find(timerFile) != std::string::npos)
return true;
if (recName.find(timerFile) != std::string::npos) {
time_t timerstart = t->StartTime();
if (recstart == timerstart)
return true;
}
}
return false;
}

View File

@ -178,14 +178,22 @@ cImageImporterSVG::cImageImporterSVG() {
cImageImporterSVG::~cImageImporterSVG() {
if (handle) {
rsvg_handle_close(handle, NULL); // deprecated since version 2.46
#if LIBRSVG_CHECK_VERSION (2, 46, 0)
// rsvg_handle_close is deprecated since version 2.46 and looks like even not required if used with rsvg_handle_new_from_file
#else
rsvg_handle_close(handle, NULL);
#endif
g_object_unref(handle);
}
}
bool cImageImporterSVG::LoadImage(const char *path) {
if (handle) {
rsvg_handle_close(handle, NULL); // deprecated since version 2.46
#if LIBRSVG_CHECK_VERSION (2, 46, 0)
// rsvg_handle_close is deprecated since version 2.46 and looks like even not required if used with rsvg_handle_new_from_file
#else
rsvg_handle_close(handle, NULL);
#endif
g_object_unref(handle);
}
@ -521,3 +529,5 @@ void cSVGTemplate::ReplaceTokens(string &line, size_t tokenStart, size_t tokenEn
std::replace( svgAlpha.begin(), svgAlpha.end(), ',', '.');
line.replace(hitAlpha, hitAlphaEnd - hitAlpha + 2, svgAlpha);
}
// vim: ts=4 sw=4 et

View File

@ -20,8 +20,7 @@
#error "VDR-2.2.0 API version or greater is required!"
#endif
static const char *VERSION = "1.2.14";
static const char *VERSION = "1.2.18";
static const char *DESCRIPTION = trNOOP("Skin Designer");
class cPluginSkinDesigner : public cPlugin, public skindesignerapi::SkindesignerAPI {

View File

@ -23,14 +23,14 @@
<trans lang="de_DE">Wiederholungen</trans>
<trans lang="fi_FI">Uusinnat</trans>
<trans lang="hu_HU">Ismétlés</trans>
<trans lang="it_IT">Riavvii</trans>
<trans lang="it_IT">Repliche</trans>
</token>
<token name="tr(rerunsof)">
<trans lang="en_EN">Reruns of</trans>
<trans lang="de_DE">Wiederholungen von</trans>
<trans lang="fi_FI">Uusinnat:</trans>
<trans lang="hu_HU">Ismétlés:</trans>
<trans lang="it_IT">Riavvi di</trans>
<trans lang="it_IT">Repliche:</trans>
</token>
<token name="tr(actors)">
<trans lang="en_EN">Actors</trans>
@ -156,7 +156,7 @@
<trans lang="de_DE">Nur für Erwachsene</trans>
<trans lang="fi_FI">Vain aikuisille</trans>
<trans lang="hu_HU">Felnőtt</trans>
<trans lang="it_IT">Adulti</trans>
<trans lang="it_IT">Adulto</trans>
</token>
<token name="tr(releasedate)">
<trans lang="en_EN">Release Date</trans>
@ -170,7 +170,7 @@
<trans lang="de_DE">Laufzeit</trans>
<trans lang="fi_FI">Kesto</trans>
<trans lang="hu_HU">Hossz</trans>
<trans lang="it_IT">Runtime</trans>
<trans lang="it_IT">Durata</trans>
</token>
<token name="tr(popularity)">
<trans lang="en_EN">Popularity</trans>
@ -212,7 +212,7 @@
<trans lang="de_DE">Länge der Aufnahme</trans>
<trans lang="fi_FI">Tallenteen pituus</trans>
<trans lang="hu_HU">Felvétel hossza</trans>
<trans lang="it_IT">Lnghezza registrazzione</trans>
<trans lang="it_IT">Lunghezza registrazione</trans>
</token>
<token name="tr(reclengthcutted)">
<trans lang="en_EN">Cutted Recording Length</trans>
@ -235,6 +235,13 @@
<trans lang="hu_HU">Formátum</trans>
<trans lang="it_IT">Formato</trans>
</token>
<token name="tr(errors)">
<trans lang="en_EN">Errors</trans>
<trans lang="de_DE">Fehler</trans>
<trans lang="fi_FI">Virhe</trans>
<trans lang="hu_HU">Hiba</trans>
<trans lang="it_IT">Errore</trans>
</token>
<token name="tr(searchtimer)">
<trans lang="en_EN">Searchtimer</trans>
<trans lang="de_DE">Suchtimer</trans>
@ -268,42 +275,42 @@
<trans lang="de_DE">Ende</trans>
<trans lang="fi_FI">Loppu</trans>
<trans lang="hu_HU">vég</trans>
<trans lang="it_IT">Fine</trans>
<trans lang="it_IT">fine</trans>
</token>
<token name="tr(activetimers)">
<trans lang="en_EN">active timers</trans>
<trans lang="de_DE">aktive Timer</trans>
<trans lang="fi_FI">aktiivista ajastinta</trans>
<trans lang="hu_HU">aktív időzítők</trans>
<trans lang="it_IT">Timer attivi</trans>
<trans lang="it_IT">timer attivi</trans>
</token>
<token name="tr(activetimer)">
<trans lang="en_EN">active timer</trans>
<trans lang="de_DE">aktiver Timer</trans>
<trans lang="fi_FI">aktiivinen ajastin</trans>
<trans lang="hu_HU">aktív időzítő</trans>
<trans lang="it_IT">Timer attivo</trans>
<trans lang="it_IT">timer attivo</trans>
</token>
<token name="tr(lastrecs)">
<trans lang="en_EN">last recordings</trans>
<trans lang="de_DE">Neueste Aufnahmen</trans>
<trans lang="fi_FI">Uusimmat tallenteet</trans>
<trans lang="hu_HU">utolsó felvételek</trans>
<trans lang="it_IT">Ultime registrazioni</trans>
<trans lang="it_IT">ultime registrazioni</trans>
</token>
<token name="tr(sysinfo)">
<trans lang="en_EN">system information</trans>
<trans lang="de_DE">System Informationen</trans>
<trans lang="fi_FI">Järjestelmätiedot</trans>
<trans lang="hu_HU">rendszer információ</trans>
<trans lang="it_IT">Info di sistema</trans>
<trans lang="it_IT">info di sistema</trans>
</token>
<token name="tr(disc)">
<trans lang="en_EN">disc</trans>
<trans lang="de_DE">HDD</trans>
<trans lang="fi_FI">levy</trans>
<trans lang="hu_HU">Lemez</trans>
<trans lang="it_IT">Disco</trans>
<trans lang="it_IT">disco</trans>
</token>
<token name="tr(free)">
<trans lang="en_EN">free</trans>
@ -394,7 +401,7 @@
<trans lang="de_DE">Windgeschwindigkeit</trans>
<trans lang="fi_FI">Tuulen nopeus</trans>
<trans lang="hu_HU">Szélsebesség</trans>
<trans lang="it_IT">Velcità vento</trans>
<trans lang="it_IT">Velocità vento</trans>
</token>
<token name="tr(cloudcover)">
<trans lang="en_EN">Cloud Cover</trans>
@ -485,7 +492,7 @@
<trans lang="de_DE">Unterstützte Plugins</trans>
<trans lang="fi_FI">Tuetut laajennokset</trans>
<trans lang="hu_HU">Támogatott Beépülő Modulok</trans>
<trans lang="it_IT">Plugin supportati</trans>
<trans lang="it_IT">Plugins supportati</trans>
</token>
<token name="tr(usedfonts)">
<trans lang="en_EN">Used Fonts</trans>

View File

@ -18,7 +18,7 @@
<parameter type="bool" name="scrollepg" displaytext="{tr(scrollepgtext)}">1</parameter>
<parameter type="separator" name="sepzapcockpit" displaytext="{tr(sepzapcockpit)}"/>
<parameter type="int" name="fadetimezapcockpit" displaytext="{tr(fadetimezapcockpit)}">0</parameter>
<parameter type="int" name="shifttimezapcockpit" displaytext="{tr(shifttimezapcockpit)}">200</parameter>
<parameter type="int" name="shifttimezapcockpit" displaytext="{tr(shifttimezapcockpit)}">0</parameter>
<parameter type="separator" name="sepzapcockpitdetail" displaytext="{tr(sepzapcockpitdetail)}"/>
<parameter type="int" name="zapdetaildatetimefs" min="0" max="100" displaytext="{tr(zapdetaildatetimefs)}">80</parameter>
<parameter type="int" name="zapdetailheaderfs" min="0" max="100" displaytext="{tr(zapdetailheaderfs)}">80</parameter>
@ -227,7 +227,7 @@
<trans lang="de_DE">Aufzeichnungsmenü</trans>
<trans lang="fi_FI">Tallennevalikko</trans>
<trans lang="hu_HU">Felvételek Menü</trans>
<trans lang="it_IT">Menù timer</trans>
<trans lang="it_IT">Menù registrazioni</trans>
</token>
<token name="tr(subdetailmenu)">
<trans lang="en_EN">Detailed Views (EPG, Rec, text)</trans>
@ -292,37 +292,41 @@
<trans lang="de_DE">Einblendzeit der Kanalanzeige in ms. Ist dieser Wert auf einen Wert > 0 gesetzt, werden alle OSD Elemente ausser dem VDR Menu ein- und ausgeblendet.</trans>
<trans lang="fi_FI">Häivytyksen kesto millisekunteina. Nollasta eriävä arvo aktivoi valikkojen häivytyksen.</trans>
<trans lang="hu_HU">A csatorna kijelzés elhalványulás ms-ben. Ha ez az érték be van beállítva, hogy az érték > 0, az összes OSD elemek mellett a VDR menüt és elhalványulnak.</trans>
<trans lang="it_IT">Tempo di dissolvenza della visualizzazione del canale in ms. Se questo è settato ad un valore maggiore di 0 tutti gli elementi OSD dietro al menù Vdr si dissolvono in entrata ed uscita</trans>
<trans lang="it_IT">Tempo di dissolvenza della visualizzazione del canale in ms. Settato > di 0 tutti gli elementi OSD dietro al menù Vdr si dissolvono in entrata ed uscita</trans>
</token>
<token name="tr(shifttext)">
<trans lang="en_EN">Shift time [ms]</trans>
<trans lang="de_DE">Einfahrzeit [ms]</trans>
<trans lang="fi_FI">Liukuman kesto [ms]</trans>
<trans lang="hu_HU">Késleltetés ideje [ms]</trans>
<trans lang="it_IT">Tempo di dissolvenza [ms]</trans>
<trans lang="it_IT">Tempo di cambio [ms]</trans>
</token>
<token name="tr(helpshift)">
<trans lang="en_EN">Shift time in ms. If this is set to a value larger 0 all OSD elements beside the VDR menu are shifted in and out from the bottom of the screen. If fadetime is also set to a value larger 0, still shifting is performed.</trans>
<trans lang="de_DE">Einfahrzeit in ms. Ist dieser Wert auf einen Wert > 0 gesetzt, werden alle OSD Elemente ausser dem VDR Menu vom unteren Rand des Bildschirms herein- und herausgefahren. Falls fadetime ebenfalls auf einen Wert größer 0 gesetzt ist, wird das OSD trotzdem herein- und herausgefahren.</trans>
<trans lang="fi_FI">Liukuman kesto millisekunteina. Nollasta eriävä arvo aktivoi valikkojen transitioefektit riippumatta häivytyksen kestosta.</trans>
<trans lang="hu_HU">Késleltetés idő ms-ben. Ha ez be van állítva, hogy az érték > 0, az összes OSD elemek mellett a VDR menü eltolódik, és ki a képernyő alján. Ha fadetime is ennek az értéke nagyobb 0, mindig eltolásával végezzük.</trans>
<trans lang="it_IT">Tempo di cambio in ms. Se questo è settato ad un valore maggiore di 0 tutti gli elementi OSD dietro al menù Vdr cambiano dalla parte bassa dello schermo. Se il tempo di cambio fosse settato anche ad un valore maggiore di zero, comunque il cambio viene effettuato</trans>
<trans lang="it_IT">Tempo di cambio in ms. Settato > di 0 tutti gli elementi OSD di lato al menù Vdr cambiano dalla parte bassa dello schermo. Se il tempo di cambio fosse settato anche ad un valore > di zero, comunque il cambio viene effettuato</trans>
</token>
<token name="tr(listfadetimetext)">
<trans lang="en_EN">Fade time menus [ms]</trans>
<trans lang="de_DE">Überblendungszeit Menüs [ms]</trans>
<trans lang="it_IT">Menù tempo di dissolvenza [ms]</trans>
</token>
<token name="tr(listshifttimetext)">
<trans lang="en_EN">Shift time menus [ms]</trans>
<trans lang="de_DE">Übergangszeit Menüelemente [ms]</trans>
<trans lang="it_IT">Menù Tempo di cambio [ms]</trans>
</token>
<token name="tr(helplistfadetime)">
<trans lang="en_EN">Fade time of menu elements when scrolling through the menus. If set to 0, this effect is disabled.</trans>
<trans lang="de_DE">Überblendungszeit der Menüelemente beim Bewegen durch die Menüs. Steht dieser Wert auf 0, ist dieser Effekt deaktiviert.</trans>
<trans lang="it_IT">Tempo dissolvenza elementi del menù scorrendo i menù. Settato a 0, questo effetto è disabilitato</trans>
</token>
<token name="tr(helplistshifttime)">
<trans lang="en_EN">Shift time of menu elements when scrolling through the menus. If set to 0, this effect is disabled.</trans>
<trans lang="de_DE">Übergangszeit der Menüelemente beim Bewegen durch die Menüs. Steht dieser Wert auf 0, ist dieser Effekt deaktiviert.</trans>
<trans lang="it_IT">Tempo cambio elementi del menù scorrendo i menù. Settato a 0, questo effetto è disabilitato</trans>
</token>
<!-- displaychannel -->
<token name="tr(epgtextposy)">
@ -426,10 +430,12 @@
<token name="tr(zapclnumchannels)">
<trans lang="en_EN">Number of items in channels list</trans>
<trans lang="de_DE">Anzahl der Elemente in Kanalliste</trans>
<trans lang="it_IT">Numero voci nella lista canali</trans>
</token>
<token name="tr(zapglnumgroups)">
<trans lang="en_EN">Number of items in channel group list</trans>
<trans lang="de_DE">Anzahl der Elemente in Kanalgruppenliste</trans>
<trans lang="it_IT">Numero voci nella lista gruppo canali</trans>
</token>
<token name="tr(zapclpresenttimefs)">
<trans lang="en_EN">Font size remaining time present event</trans>
@ -494,7 +500,7 @@
<trans lang="en_EN">Font size description</trans>
<trans lang="de_DE">Schriftgröße Beschreibung</trans>
<trans lang="fi_FI">Kirjasintyypin koko kuvaukselle</trans>
<trans lang="it_IT">Dimensione carattere testo breve</trans>
<trans lang="it_IT">Dimensione carattere descrizione</trans>
</token>
<token name="tr(zapcldetaildatetimefs)">
<trans lang="en_EN">Font size time in channel list detail view</trans>
@ -548,13 +554,13 @@
<trans lang="en_EN">Height channel hints (% of screen height)</trans>
<trans lang="de_DE">Höhe Kanal Hinweise (% der Bildschirmhöhe)</trans>
<trans lang="fi_FI">Korkeus (% näytön korkeudesta)</trans>
<trans lang="it_IT">Altezza suggerimenti canale (% della altezza del video)</trans>
<trans lang="it_IT">Altezza suggerimenti canale (in % altezza dello schermo)</trans>
</token>
<token name="tr(zapchannelhintswidth)">
<trans lang="en_EN">Width channel hints (% of screen width)</trans>
<trans lang="de_DE">Breite Kanal Hinweise (% der Bildschirmbreite)</trans>
<trans lang="fi_FI">Leveys (% näytön leveydestä)</trans>
<trans lang="it_IT">Larghezza suggerimenti canale (% della larghezza del video)</trans>
<trans lang="it_IT">Larghezza suggerimenti canale (in % larghezza dello schermo)</trans>
</token>
<!-- recording display -->
<token name="tr(replaytitlesize)">
@ -606,7 +612,7 @@
<trans lang="de_DE">Schriftgröße Header</trans>
<trans lang="fi_FI">Kirjasintyypin koko otsikkopalkille</trans>
<trans lang="hu_HU">Betűméret fejléc</trans>
<trans lang="it_IT">Dimensione del font del header</trans>
<trans lang="it_IT">Dimensione del font dell'intestazione</trans>
</token>
<token name="tr(headerdatefontsize)">
<trans lang="en_EN">Font size date</trans>
@ -656,7 +662,7 @@
<trans lang="de_DE">Nummerierung der Listenelemente anzeigen</trans>
<trans lang="fi_FI">Näytä numeroinnit valikkoriveillä</trans>
<trans lang="hu_HU">A listaelemek kijelzőszámozása</trans>
<trans lang="it_IT">Visualizzazione degli elementi della lista</trans>
<trans lang="it_IT">Visualizzazione numerica degli elementi della lista</trans>
</token>
<token name="tr(numitemsmain)">
<trans lang="en_EN">Number of main menu items</trans>
@ -734,7 +740,7 @@
<trans lang="de_DE">Schriftgröße Titel</trans>
<trans lang="fi_FI">Kirjasintyypin koko nimikkeelle</trans>
<trans lang="hu_HU">Betűméret cím</trans>
<trans lang="it_IT">Posizione verticale del titolo EPG</trans>
<trans lang="it_IT">Dimensione font del titolo</trans>
</token>
<token name="tr(schedulessizecurrenttext)">
<trans lang="en_EN">Font size text</trans>
@ -877,11 +883,12 @@
<trans lang="de_DE">Anzahl Menüelemente</trans>
<trans lang="fi_FI">Valikkorivien lukumäärä</trans>
<trans lang="hu_HU">menüpontok száma</trans>
<trans lang="it_IT">Numero delle voci</trans>
<trans lang="it_IT">Numero delle voci del menù</trans>
</token>
<token name="tr(recusethumbs)">
<trans lang="en_EN">Show posters</trans>
<trans lang="de_DE">Poster anzeigen</trans>
<trans lang="it_IT">Mostra poster</trans>
</token>
<token name="tr(recposydate)">
<trans lang="en_EN">Vertical position date</trans>
@ -909,7 +916,7 @@
<trans lang="de_DE">Schriftgröße Titel</trans>
<trans lang="fi_FI">Kirjasintyypin koko nimikkeelle</trans>
<trans lang="hu_HU">Betűméret cím</trans>
<trans lang="it_IT">Posizione verticale del titolo</trans>
<trans lang="it_IT">Dimensione font del titolo</trans>
</token>
<token name="tr(recposyfoldertitle)">
<trans lang="en_EN">Vertical position folder name</trans>
@ -949,6 +956,7 @@
<token name="tr(sizewidesmall)">
<trans lang="en_EN">Font size small wide menu</trans>
<trans lang="de_DE">Schriftgröße Klein breites Menü</trans>
<trans lang="it_IT">Dimensione font del menù piccolo</trans>
</token>
<token name="tr(showcurrent)">
<trans lang="en_EN">Show info for selected list element</trans>

View File

@ -16,10 +16,10 @@
</datetime>
<time>
<area x="80%" y="80%" width="14%" height="15%" layer="2">
<area x="80%" y="79%" width="14%" height="15%" layer="2">
<drawtext x="0" align="right" valign="center" fontsize="60%" font="{digital}" color="{fontdefault}" text="{hour}:{printf('%02d', min)}" />
</area>
<area x="94%" y="80%" width="5%" height="15%" layer="2">
<area x="94%" y="79%" width="5%" height="15%" layer="2">
<drawtext name="clock" x="0" align="right" valign="center" fontsize="60%" font="{digital}" color="clrTransparent" text="1" />
<drawtext name="clocksec" x="0" y="{areaheight}/2 + {height(clock)}/2 - {height(clocksec)} - 5" fontsize="45%" font="{digital}" color="{fontdefault}" text=":{printf('%02d', sec)}" />
</area>
@ -37,13 +37,12 @@
<epginfo>
<!-- current schedule -->
<area x="67%" y="76%" width="13%" height="10%" layer="2">
<drawtext align="right" valign="center" fontsize="{areaheight}*{startstopfontsize}/100" font="{bold}" color="{fontactive}" text="{currentstart} - {currentstop}" />
<drawtext condition="empty{currentsubtitle}" align="right" valign="center" fontsize="{areaheight}*{startstopfontsize}/100" font="{bold}" color="{fontactive}" text="{currentstart} - {currentstop}" />
<drawtext condition="isset{currentsubtitle}" align="right" y="{areaheight}*{epgtextposy}/100" fontsize="{areaheight}*{startstopfontsize}/100" font="{bold}" color="{fontactive}" text="{currentstart} - {currentstop}" />
</area>
<areascroll condition="{scrollepg}++empty{currentsubtitle}" scrollelement="title" mode="forthandback" orientation="horizontal" delay="1000" scrollspeed="fast" x="20%" y="76%" width="47%" height="10%" layer="2">
<drawtext name="title" x="0" valign="center" fontsize="{areaheight}*{epgtextfontsizelarge}/100" width="100%" font="{regular}" color="{fontdefault}" text="{currenttitle}" />
</areascroll>
<areascroll condition="{scrollepg}++isset{currentsubtitle}" scrollelement="title" mode="forthandback" orientation="horizontal" delay="1000" scrollspeed="fast" x="20%" y="76%" width="47%" height="10%" layer="2">
<drawtext name="title" x="0" y="{areaheight}*{epgtextposy}/100" fontsize="{areaheight}*{epgtextfontsize}/100" width="100%" font="{regular}" color="{fontdefault}" text="{currenttitle}" />
<areascroll condition="{scrollepg}" scrollelement="title" mode="forthandback" orientation="horizontal" delay="1000" scrollspeed="fast" x="20%" y="76%" width="47%" height="10%" layer="2">
<drawtext condition="empty{currentsubtitle}" name="title" x="0" valign="center" fontsize="{areaheight}*{epgtextfontsizelarge}/100" width="100%" font="{regular}" color="{fontdefault}" text="{currenttitle}" />
<drawtext condition="isset{currentsubtitle}" name="title" x="0" y="{areaheight}*{epgtextposy}/100" fontsize="{areaheight}*{epgtextfontsize}/100" width="100%" font="{regular}" color="{fontdefault}" text="{currenttitle}" />
</areascroll>
<areascroll condition="{scrollepg}++isset{currentsubtitle}" scrollelement="subtitle" mode="forthandback" orientation="horizontal" delay="1000" scrollspeed="fast" x="20%" y="76%" width="50%" height="10%" layer="3">
<drawtext name="subtitle" x="0" y="{areaheight}*{epgsubtextposy}/100" fontsize="{areaheight}*{epgsubtextfontsize}/100" width="100%" font="{regular}" color="{fontdefault}" text="{currentsubtitle}" />
@ -53,6 +52,13 @@
<drawtext condition="isset{currentsubtitle}" x="0" y="{areaheight}*{epgsubtextposy}/100" fontsize="{areaheight}*{epgsubtextfontsize}/100" width="{areawidth} - {width(startstop)} - 10" font="{regular}" color="{fontdefault}" text="{currentsubtitle}" />
<drawtext condition="empty{currentsubtitle}" x="0" valign="center" fontsize="{areaheight}*{epgtextfontsizelarge}/100" width="{areawidth} - {width(startstop)} - 10" font="{regular}" color="{fontdefault}" text="{currenttitle}" />
</area>
<!-- time remaining -->
<area x="70%" y="82%" width="10%" height="4%" layer="2">
<drawtext condition="isset{currentsubtitle}" align="right" y="0" fontsize="75%" font="{regular}" color="{fontactive}" text="+{currentremaining} min" />
<drawtext condition="empty{currentsubtitle}" align="right" y="25%" fontsize="75%" font="{regular}" color="{fontactive}" text="+{currentremaining} min" />
</area>
<!-- next schedule -->
<area x="20%" y="88%" width="60%" height="10%" layer="2">
<drawtext name="startstop" align="right" valign="center" fontsize="{areaheight}*{startstopfontsize}/100" font="{bold}" color="{fontdefault}" text="{nextstart} - {nextstop}" />
@ -71,10 +77,6 @@
<drawrectangle condition="{permashift}" x="{elapsed}/{duration}*{areawidth} - {livebuffer}/{duration}*{areawidth}" y="0" width="{livebuffer}/{duration}*{areawidth}" height="100%" color="{progressbartimeshift}" />
<drawrectangle condition="{permashift}" x="0" y="{areaheight}*0.2" width="{areawidth}*{elapsed}/{duration} - 1" height="{areaheight}*0.6" color="{progressbar}" />
</area>
<!-- time remaining -->
<area x="70%" y="83%" width="10%" height="3%" layer="2">
<drawtext align="right" y="0" fontsize="100%" font="{regular}" color="{fontactive}" text="+{currentremaining} min" />
</area>
</progressbar>
<statusinfo>
@ -136,7 +138,7 @@
</channelgroup>
<currentweather>
<area x="80%" y="76%" width="19%" height="5%" layer="2">
<area x="80%" y="91%" width="17%" height="4%" layer="2">
<drawtext name="temperature" align="right" y="0" fontsize="100%" font="{regular}" color="{fontdefault}" text="{temperature}°C" />
<drawimage imagetype="icon" path="{icon}" x="{posx(temperature)} - {areaheight}" valign="center" width="0.8*{areaheight}" height="0.8*{areaheight}"/>
</area>

View File

@ -23,10 +23,13 @@
<drawrectangle x="0" y="{areaheight}-1" width="100%" height="1" color="{menubackline}" />
</area>
<!-- Separators -->
<area x="1%" condition="{separator}" width="98%" layer="3">
<drawtext align="center" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="98%" color="{fontactive}" text="{column1}" />
<area x="1%" condition="{separator} ++ not{setup} ++ not{neutrinoepg} ++ not{systeminfo} ++ not{column2set}" width="98%" layer="3">
<drawtext valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="98%" color="{fontactive}" text="{column1}" />
</area>
<!-- Setup Menus -->
<area x="1%" condition="{separator} ++ {setup}" width="98%" layer="3">
<drawtext align="center" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="98%" color="{fontactive}" text="{column1}" />
</area>
<areacontainer condition="not{separator} ++ {setup}">
<area condition="{column2set}" x="1%" width="69%" layer="3">
<drawtext condition="not{current}" x="0" width="99%" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" color="{fontdefault}" text="{column1}" />
@ -42,6 +45,9 @@
</area>
</areacontainer>
<!-- Neutrino EPG Plugin -->
<area x="1%" condition="{separator} ++ {neutrinoepg}" width="98%" layer="3">
<drawtext align="center" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="98%" color="{fontactive}" text="{column1}" />
</area>
<areacontainer condition="not{separator} ++ {neutrinoepg}">
<area condition="not{current}++{column5set}" x="1%" width="100%" layer="4">
<drawtext x="{column2x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{column2width}" color="{fontdefault}" text="{column2}" />
@ -81,10 +87,14 @@
</area>
</areacontainer>
<!-- Systeminfo Plugin -->
<area x="1%" condition="{separator} ++ {systeminfo}" width="98%" layer="3">
<drawtext align="center" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="98%" color="{fontactive}" text="{column1}" />
</area>
<areacontainer condition="not{separator} ++ {systeminfo}">
<area condition="not{current}" x="1%" width="100%" layer="4">
<drawtext x="{column1x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{column1width}" color="{fontdefault}" text="{column1}" />
<drawtext x="{column2x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{column2width}" color="{fontdefault}" text="{column2}" />
<drawtext condition="not{column3set} ++ not{column3pb}" x="{column2x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{areawidth}-{column2x}-5" color="{fontdefault}" text="{column2}" />
<drawtext condition="{column3set} || {column3pb}" x="{column2x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{column2width}" color="{fontdefault}" text="{column2}" />
<drawtext condition="not{column3pb}" x="{column3x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{column3width}" color="{fontdefault}" text="{column3}" />
<drawrectangle condition="{column3pb}" x="{column3x}" y="{areaheight}*0.2" width="{column3width}" height="{areaheight}*0.6" color="{progressbar}" />
<drawrectangle condition="{column3pb}" x="{column3x}+1" y="{areaheight}*0.2+1" width="{column3width}-2" height="{areaheight}*0.6-2" color="{progressbarback}" />
@ -92,7 +102,8 @@
</area>
<area condition="{current}" x="1%" width="100%" layer="4">
<drawtext x="{column1x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{column1width}" color="{fontmenuactive}" text="{column1}" />
<drawtext x="{column2x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{column2width}" color="{fontmenuactive}" text="{column2}" />
<drawtext condition="not{column3set} ++ not{column3pb}" x="{column2x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{areawidth}-{column2x}-2" color="{fontmenuactive}" text="{column2}" />
<drawtext condition="{column3set} || {column3pb}" x="{column2x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{column2width}" color="{fontmenuactive}" text="{column2}" />
<drawtext condition="not{column3pb}" x="{column3x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{column3width}" color="{fontdefault}" text="{column3}" />
<drawrectangle condition="{column3pb}" x="{column3x}" y="{areaheight}*0.2" width="{column3width}" height="{areaheight}*0.6" color="{progressbar}" />
<drawrectangle condition="{column3pb}" x="{column3x}+1" y="{areaheight}*0.2+1" width="{column3width}-2" height="{areaheight}*0.6-2" color="{progressbarback}" />
@ -100,20 +111,32 @@
</area>
</areacontainer>
<!-- Default Menus -->
<areacontainer condition="not{separator} ++ not{setup} ++ not{neutrinoepg} ++ not{systeminfo}">
<areascroll scrollelement="column1" mode="forthandback" orientation="horizontal" delay="1000" scrollspeed="medium" x="1%" width="{column1width}" layer="3">
<drawtext condition="not{current}" x="{column1x}" width="{column1width}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" color="{fontdefault}" text="{column1}" />
<areacontainer condition="not{separator} ++ not{setup} ++ not{neutrinoepg} ++ not{systeminfo} || {column2set} ++ not{setup} ++ not{neutrinoepg} ++ not{systeminfo}">
<areascroll condition="{column2set}" scrollelement="column1" mode="forthandback" orientation="horizontal" delay="1000" scrollspeed="medium" x="1%" width="{column1width}" layer="3">
<drawtext condition="not{current} ++ not{separator}" x="{column1x}" width="{column1width}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" color="{fontdefault}" text="{column1}" />
<drawtext condition="not{current} ++ {separator}" x="{column1x}" width="{column1width}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" color="{fontactive}" text="{column1}" />
<drawtext condition="{current}" name="column1" x="{column1x}" width="{column1width}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" color="{fontmenuactive}" text="{column1}" />
</areascroll>
<area condition="not{current}" x="1%" width="100%" layer="4">
<drawtext condition="{column2set}" x="{column2x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{column2width}" color="{fontdefault}" text="{column2}" />
<drawtext condition="{column3set}" x="{column3x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{column3width}" color="{fontdefault}" text="{column3}" />
<drawtext condition="{column4set}" x="{column4x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{column4width}" color="{fontdefault}" text="{column4}" />
<drawtext condition="{column5set}" x="{column5x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{column5width}" color="{fontdefault}" text="{column5}" />
<drawtext condition="{column6set}" x="{column6x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{column6width}" color="{fontdefault}" text="{column6}" />
<drawtext condition="not{column2set} ++ not{separator}" x="{column1x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{areawidth}-{column1x}" color="{fontdefault}" text="{column1}" />
<drawtext condition="not{column2set} ++ {separator}" x="{column1x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{areawidth}-{column1x}" color="{fontactive}" text="{column1}" />
<drawtext condition="{column2set} ++ {column3set} ++ not{separator}" x="{column2x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{column2width}" color="{fontdefault}" text="{column2}" />
<drawtext condition="{column2set} ++ {column3set} ++ {separator}" x="{column2x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{column2width}" color="{fontactive}" text="{column2}" />
<drawtext condition="{column2set} ++ not{column3set} ++ not{separator}" x="{column2x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{areawidth}-{column2x}" color="{fontdefault}" text="{column2}" />
<drawtext condition="{column2set} ++ not{column3set} ++ {separator}" x="{column2x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{areawidth}-{column2x}" color="{fontactive}" text="{column2}" />
<drawtext condition="{column3set} ++ not{separator}" x="{column3x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{column3width}" color="{fontdefault}" text="{column3}" />
<drawtext condition="{column3set} ++ {separator}" x="{column3x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{column3width}" color="{fontactive}" text="{column3}" />
<drawtext condition="{column4set} ++ not{separator}" x="{column4x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{column4width}" color="{fontdefault}" text="{column4}" />
<drawtext condition="{column4set} ++ {separator}" x="{column4x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{column4width}" color="{fontactive}" text="{column4}" />
<drawtext condition="{column5set} ++ not{separator}" x="{column5x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{column5width}" color="{fontdefault}" text="{column5}" />
<drawtext condition="{column5set} ++ {separator}" x="{column5x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{column5width}" color="{fontactive}" text="{column5}" />
<drawtext condition="{column6set} ++ not{separator}" x="{column6x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{column6width}" color="{fontdefault}" text="{column6}" />
<drawtext condition="{column6set} ++ {separator}" x="{column6x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{column6width}" color="{fontactive}" text="{column6}" />
</area>
<area condition="{current}" x="1%" width="100%" layer="4">
<drawtext condition="{column2set}" x="{column2x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{column2width}" color="{fontmenuactive}" text="{column2}" />
<drawtext condition="not{column2set}" x="{column1x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{areawidth}-{column1x}" color="{fontmenuactive}" text="{column1}" />
<drawtext condition="{column2set} ++ {column3set}" x="{column2x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{column2width}" color="{fontmenuactive}" text="{column2}" />
<drawtext condition="{column2set} ++ not{column3set}" x="{column2x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{areawidth}-{column2x}" color="{fontmenuactive}" text="{column2}" />
<drawtext condition="{column3set}" x="{column3x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{column3width}" color="{fontmenuactive}" text="{column3}" />
<drawtext condition="{column4set}" x="{column4x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{column4width}" color="{fontmenuactive}" text="{column4}" />
<drawtext condition="{column5set}" x="{column5x}" valign="center" font="{regular}" fontsize="{areaheight}*{defaultitemfontsize}/100" width="{column5width}" color="{fontmenuactive}" text="{column5}" />

View File

@ -47,7 +47,8 @@
<drawtext name="line4" x="0" y="{posy(line3)} + {height(line3)} + 10" width="96%" font="{regular}" fontsize="{areaheight}*{detailtextsize}/100" color="{fontdefault}" text="{tr(reclengthcutted)}: {recordinglengthcutted}" />
<drawtext name="line5" x="0" y="{posy(line4)} + {height(line4)} + 10" width="96%" font="{regular}" fontsize="{areaheight}*{detailtextsize}/100" color="{fontdefault}" text="{tr(bitrate)}: {recordingbitrate}" />
<drawtext name="line6" x="0" y="{posy(line5)} + {height(line5)} + 10" width="96%" font="{regular}" fontsize="{areaheight}*{detailtextsize}/100" color="{fontdefault}" text="{tr(format)}: {recordingformat}" />
<drawtext x="0" y="{posy(line6)} + {height(line6)} + 10" width="96%" font="{regular}" fontsize="{areaheight}*{detailtextsize}/100" color="{fontdefault}" text="{tr(searchtimer)}: {searchtimer}" />
<drawtext condition="gt({errors}, -1)" name="line7" x="0" y="{posy(line6)} + {height(line6)} + 10" width="96%" font="{regular}" fontsize="{areaheight}*{detailtextsize}/100" color="{fontdefault}" text="{tr(errors)}: {errors}" />
<drawtext x="0" y="{posy(line6)} + 2 * {height(line6)} + 20" width="96%" font="{regular}" fontsize="{areaheight}*{detailtextsize}/100" color="{fontdefault}" text="{tr(searchtimer)}: {searchtimer}" />
</tab>
<!-- TAB ACTORS -->

19
skins/metrixhd/globals.xml Normal file → Executable file
View File

@ -89,14 +89,14 @@
<trans lang="de_DE">Wiederholungen</trans>
<trans lang="fi_FI">Uusinnat</trans>
<trans lang="hu_HU">Ismétlés</trans>
<trans lang="it_IT">Riavvii</trans>
<trans lang="it_IT">Repliche</trans>
</token>
<token name="tr(rerunsof)">
<trans lang="en_EN">Reruns of</trans>
<trans lang="de_DE">Wiederholungen von</trans>
<trans lang="fi_FI">Uusinnat:</trans>
<trans lang="hu_HU">Ismétlés:</trans>
<trans lang="it_IT">Riavvi di</trans>
<trans lang="it_IT">Repliche di</trans>
</token>
<token name="tr(actors)">
<trans lang="en_EN">Actors</trans>
@ -215,14 +215,14 @@
<trans lang="de_DE">Einnahmen</trans>
<trans lang="fi_FI">Tuotto</trans>
<trans lang="hu_HU">Bevétel</trans>
<trans lang="it_IT">Incassi</trans>
<trans lang="it_IT">Incasso</trans>
</token>
<token name="tr(adult)">
<trans lang="en_EN">Adult</trans>
<trans lang="de_DE">Nur für Erwachsene</trans>
<trans lang="fi_FI">Vain aikuisille</trans>
<trans lang="hu_HU">Felnőtt</trans>
<trans lang="it_IT">Adulti</trans>
<trans lang="it_IT">Adulto</trans>
</token>
<token name="tr(releasedate)">
<trans lang="en_EN">Release Date</trans>
@ -236,7 +236,7 @@
<trans lang="de_DE">Laufzeit</trans>
<trans lang="fi_FI">Kesto</trans>
<trans lang="hu_HU">Hossz</trans>
<trans lang="it_IT">Runtime</trans>
<trans lang="it_IT">Durata</trans>
</token>
<token name="tr(popularity)">
<trans lang="en_EN">Popularity</trans>
@ -278,7 +278,7 @@
<trans lang="de_DE">Länge der Aufnahme</trans>
<trans lang="fi_FI">Tallenteen pituus</trans>
<trans lang="hu_HU">Felvétel hossza</trans>
<trans lang="it_IT">Lnghezza registrazzione</trans>
<trans lang="it_IT">Lunghezza registrazione</trans>
</token>
<token name="tr(reclengthcutted)">
<trans lang="en_EN">Cutted Recording Length</trans>
@ -383,7 +383,7 @@
<trans lang="de_DE">Windgeschwindigkeit</trans>
<trans lang="fi_FI">Tuulen nopeus</trans>
<trans lang="hu_HU">Szélsebesség</trans>
<trans lang="it_IT">Velcità vento</trans>
<trans lang="it_IT">Velocità vento</trans>
</token>
<token name="tr(cloudcover)">
<trans lang="en_EN">Cloud Cover</trans>
@ -465,22 +465,27 @@
<token name="tr(lastrecs)">
<trans lang="en_EN">last recordings</trans>
<trans lang="de_DE">Neueste Aufnahmen</trans>
<trans lang="it_IT">ultime registrazioni</trans>
</token>
<token name="tr(sysinfo)">
<trans lang="en_EN">system information</trans>
<trans lang="de_DE">System Informationen</trans>
<trans lang="it_IT">info di sistema</trans>
</token>
<token name="tr(load)">
<trans lang="en_EN">System load:</trans>
<trans lang="de_DE">Systemlast:</trans>
<trans lang="it_IT">Utilizzo del sistema</trans>
</token>
<token name="tr(vdrcpu)">
<trans lang="en_EN">VDR CPU</trans>
<trans lang="de_DE">VDR CPU</trans>
<trans lang="it_IT">VDR CPU</trans>
</token>
<token name="tr(new)">
<trans lang="en_EN">new</trans>
<trans lang="de_DE">neu</trans>
<trans lang="it_IT">nuovo</trans>
</token>
</translations>
<fonts>

View File

@ -40,79 +40,98 @@
<token name="tr(sepmainmenu)">
<trans lang="en_EN">Main Menu</trans>
<trans lang="de_DE">Hauptmenü</trans>
<trans lang="it_IT">Menù principale</trans>
</token>
<token name="tr(mainmenusmall)">
<trans lang="en_EN">Small Main Menu</trans>
<trans lang="de_DE">Schmales Hauptmenü</trans>
<trans lang="it_IT">Menù principale piccolo</trans>
</token>
<token name="tr(fadecurrenttext)">
<trans lang="en_EN">Fade time of current element [ms]</trans>
<trans lang="de_DE">Einblendzeit des aktiven Elements [ms]</trans>
<trans lang="it_IT">Tempo di dissolvenza dell'elemento attuale</trans>
</token>
<token name="tr(helpfadecurrent)">
<trans lang="en_EN">Fade time in ms. If this is set to a value larger 0 the current OSD element fade in and out.</trans>
<trans lang="de_DE">Einblendzeit in ms. Ist dieser Wert auf einen Wert > 0 gesetzt, wird das aktive OSD Element ein- und ausgeblendet</trans>
<trans lang="it_IT">Tempo di dissolvenza in ms. Settato a valore > 0 l'attuale OSD si dissolve in entrata e uscita</trans>
</token>
<token name="tr(helpshowinformation)">
<trans lang="en_EN">Show information about timers, newest recordings, system load... 'oldstyle' showes the wide timer element but lacks some other infos.</trans>
<trans lang="de_DE">Zeige Informationen über Timer, neuste Aufnahmen, Systemlast... 'oldstyle' zeigt dabei des breite Timer-Element, nutzt dafür aber nicht alle Infos.</trans>
<trans lang="it_IT">Mostra info su timers, nuove registrazioni, carico sistema... 'oldstyle mostra l'elemento timer ampio ma mancano altre info </trans>
</token>
<token name="tr(helpshowscrollbar)">
<trans lang="en_EN">Show Scrollbar in Main Menu. Auto hides the scrollbar if its not needed.</trans>
<trans lang="de_DE">Zeige die Scroll-Leiste im Hauptmenü. Auto versteckt die Leiste, wenn sie nicht benötigt wird.</trans>
<trans lang="it_IT">Mostra barra scorrimento in menù principale. Auto disabilita la barra se non necessaria</trans>
</token>
<token name="tr(helpshowweather)">
<trans lang="en_EN">Off, main menu only or main menu and channelinfo</trans>
<trans lang="de_DE">Aus, nur Hauptmenü oder Haputmenü und Kanalinformationen</trans>
<trans lang="it_IT">Spento, solo menù principale o menù princ. e info canale</trans>
</token>
<token name="tr(infolistitemsmaxtext)">
<trans lang="en_EN">Number of Information lists items (max)</trans>
<trans lang="de_DE">Elemente in den Info-Listen (max)</trans>
<trans lang="it_IT">Numero voci lista Informazioni (max)</trans>
</token>
<token name="tr(chlistitemsmaxtext)">
<trans lang="en_EN">Number of Channel list items (max)</trans>
<trans lang="de_DE">Elemente in der Kanalliste (max)</trans>
<trans lang="it_IT">Numero voci lista canali (max)</trans>
</token>
<token name="tr(listitemsmaxtext)">
<trans lang="en_EN">Number of list items (max)</trans>
<trans lang="de_DE">Elemente in andern Listen (max)</trans>
<trans lang="it_IT">Numero voci lista (max)</trans>
</token>
<token name="tr(menuitemsmaxtext)">
<trans lang="en_EN">Number of Main Menu items (max)</trans>
<trans lang="de_DE">Elemente im Hauptmenü (max)</trans>
<trans lang="it_IT">Numero voci Menù principale (max)</trans>
</token>
<token name="tr(menu)">
<trans lang="en_EN">main menu</trans>
<trans lang="de_DE">im Hauptmenü</trans>
<trans lang="it_IT">menù principale</trans>
</token>
<token name="tr(no)">
<trans lang="en_EN">no</trans>
<trans lang="de_DE">nein</trans>
<trans lang="it_IT">no</trans>
</token>
<token name="tr(yes)">
<trans lang="en_EN">yes</trans>
<trans lang="de_DE">ja</trans>
<trans lang="it_IT">si</trans>
</token>
<token name="tr(auto)">
<trans lang="en_EN">automatic</trans>
<trans lang="de_DE">automatisch</trans>
<trans lang="it_IT">automatico</trans>
</token>
<token name="tr(oldstyle)">
<trans lang="en_EN">oldsytle</trans>
<trans lang="de_DE">oldstyle</trans>
<trans lang="it_IT">oldstyle</trans>
</token>
<token name="tr(showscrollbar)">
<trans lang="en_EN">Show Scrollbar</trans>
<trans lang="de_DE">Zeige Scrollbar</trans>
<trans lang="it_IT">Mostra barra scorrimento</trans>
</token>
<token name="tr(showweather)">
<trans lang="en_EN">Show Weather info</trans>
<trans lang="de_DE">Wetter Info anzeigen</trans>
<trans lang="it_IT">Mostra info Meteo</trans>
</token>
<token name="tr(showinformation)">
<trans lang="en_EN">Show Information in main menu</trans>
<trans lang="de_DE">Zeige Informationen im Hauptmenü</trans>
<trans lang="it_IT">Mostra info nel menù principale</trans>
</token>
<!-- displaychannel / zapcockpit -->
<token name="tr(sepzapcockpit)">
@ -142,18 +161,19 @@
<token name="tr(doitsimple)">
<trans lang="en_EN">Disable text scolling</trans>
<trans lang="de_DE">Text-Scrolling abschalten</trans>
<trans lang="it_IT">Disabilita scorrimento testo</trans>
</token>
<token name="tr(zapchannelhintsheight)">
<trans lang="en_EN">Height channel hints (% of screen height)</trans>
<trans lang="de_DE">Höhe Kanal Hinweise (% der Bildschirmhöhe)</trans>
<trans lang="fi_FI">Korkeus (% näytön korkeudesta)</trans>
<trans lang="it_IT">Altezza suggerimenti canale (% della altezza del video)</trans>
<trans lang="it_IT">Altezza suggerimenti canale (in % altezza dello schermo)</trans>
</token>
<token name="tr(zapchannelhintswidth)">
<trans lang="en_EN">Width channel hints (% of screen width)</trans>
<trans lang="de_DE">Breite Kanal Hinweise (% der Bildschirmbreite)</trans>
<trans lang="fi_FI">Leveys (% näytön leveydestä)</trans>
<trans lang="it_IT">Larghezza suggerimenti canale (% della larghezza del video)</trans>
<trans lang="it_IT">Larghezza suggerimenti canale (in % larghezza dello schermo)</trans>
</token>
<!-- metrixhd -->
<token name="tr(fadetext)">
@ -166,7 +186,7 @@
<trans lang="en_EN">Fade time in ms. If this is set to a value larger 0 all OSD elements beside the VDR menu fade in and out.</trans>
<trans lang="de_DE">Einblendzeit in ms. Ist dieser Wert auf einen Wert > 0 gesetzt, werden alle OSD Elemente ausser dem VDR Menu ein- und ausgeblendet</trans>
<trans lang="fi_FI">Häivytyksen kesto millisekunteina. Nollasta eriävä arvo aktivoi häivytyksen.</trans>
<trans lang="it_IT">Tempo di dissolvenza in ms. Se settato su un valore maggiore di 0 tutti gli elementi OSD accanto al menu di VDR si dissolvono in entrata ed uscita.</trans>
<trans lang="it_IT">Tempo di dissolvenza in ms. Settato > di 0 tutti gli elementi OSD accanto al menu di VDR si dissolvono in entrata ed uscita.</trans>
</token>
<token name="tr(shifttimechanneltext)">
<trans lang="en_EN">Shift time Channel Display [ms]</trans>
@ -178,7 +198,7 @@
<trans lang="en_EN">Shifting time in ms. If this is set to a value larger 0 all OSD elements beside the VDR menu are shifted in and out from the bottom of the screen. If fadetime is also set to a value larger 0, still shifting is performed</trans>
<trans lang="de_DE">Einfahrzeit in ms. Ist dieser Wert auf einen Wert > 0 gesetzt, werden alle OSD Elemente ausser dem VDR Menu vom unteren Rand des Bildschirms herein- und herausgefahren. Falls fadetime ebenfalls auf einen Wert größer 0 gesetzt ist, wird das OSD trotzdem herein- und herausgefahren.</trans>
<trans lang="fi_FI">Liukuman kesto millisekunteina. Nollasta eriävä arvo aktivoi valikkojen transitioefektit riippumatta häivytyksen kestosta.</trans>
<trans lang="it_IT">Tempi cambio canale in ms. Se settato su un valore maggiore di 0 tutti gli elementi OSD accanto al menu di VDR vengono spostati in e out dal basso dello schermo. Lo spostamento è effettuato anche con tempo di dissolvenza maggiore di 0</trans>
<trans lang="it_IT">Tempi cambio canale in ms. Settato su un valore > di 0 tutti gli elementi OSD accanto al menu di VDR vengono spostati in e out dal basso dello schermo. Lo spostamento è effettuato anche con tempo di dissolvenza > di 0</trans>
</token>
<token name="tr(shifttimedatetimetext)">
<trans lang="en_EN">Shift time Channel Date, Time, Weather [ms]</trans>
@ -190,7 +210,7 @@
<trans lang="en_EN">Shifting time of OSD Elements date, time and weather when switching in ms. If set to 0, the elements are shown immediately.</trans>
<trans lang="de_DE">Einfahrzeit der OSD Elemente Datum, Zeit und Wetter während des Umschaltens in ms. Steht dieser Wert auf 0, werden die Elemente sofort angezeigt.</trans>
<trans lang="fi_FI">Liukuman kesto millisekunteina. Nollasta eriävä arvo aktivoi päivämäärän, kellonajan ja säätietojen transitioefektit.</trans>
<trans lang="it_IT">Tempi di cambio degli elemti OSD, Canale, Data, Tempo, Previsioni espressi in ms. Se impostato a0 gli elementi sono mostrati immediatamente.</trans>
<trans lang="it_IT">Tempi di cambio degli elemti OSD, Canale, Data, Tempo, Previsioni espressi in ms. Settato a 0 gli elementi sono mostrati immediatamente.</trans>
</token>
<token name="tr(shifttimetimerstext)">
<trans lang="en_EN">Shift time Timers Main Menu [ms]</trans>
@ -202,23 +222,27 @@
<trans lang="en_EN">Shifting time of timers display in main menu in ms. If set to 0, the timers are shown immediately.</trans>
<trans lang="de_DE">Einfahrzeit der Timer im Hauptmenü in ms. Steht dieser Wert auf 0, werden die Timer sofort angezeigt.</trans>
<trans lang="fi_FI">Liukuman kesto millisekunteina. Nollasta eriävä arvo aktivoi transitioefektit päävalikon ajastimille.</trans>
<trans lang="it_IT">Tempi di cambio del display dei Timer nel menù principale in ms. Se impostati a 0, i timers sono mostrati immediatamente.</trans>
<trans lang="it_IT">Tempi di cambio del display dei Timer nel menù principale in ms. Impostati a 0, i timers sono mostrati immediatamente.</trans>
</token>
<token name="tr(listfadetimetext)">
<trans lang="en_EN">Fade time menus [ms]</trans>
<trans lang="de_DE">Überblendungszeit Menüs [ms]</trans>
<trans lang="it_IT">Menù tempo dissolvenza [ms]</trans>
</token>
<token name="tr(listshifttimetext)">
<trans lang="en_EN">Shift time menus [ms]</trans>
<trans lang="de_DE">Übergangszeit Menüelemente [ms]</trans>
<trans lang="it_IT">Menù tempo cambio [ms]</trans>
</token>
<token name="tr(helplistfadetime)">
<trans lang="en_EN">Fade time of menu elements when scrolling through the menus. If set to 0, this effect is disabled.</trans>
<trans lang="de_DE">Überblendungszeit der Menüelemente beim Bewegen durch die Menüs. Steht dieser Wert auf 0, ist dieser Effekt deaktiviert.</trans>
<trans lang="it_IT">Tempo dissolvenza menù elementi scorrendo i menù. Settato a 0, questo effetto è disabilitato</trans>
</token>
<token name="tr(helplistshifttime)">
<trans lang="en_EN">Shift time of menu elements when scrolling through the menus. If set to 0, this effect is disabled.</trans>
<trans lang="de_DE">Übergangszeit der Menüelemente beim Bewegen durch die Menüs. Steht dieser Wert auf 0, ist dieser Effekt deaktiviert.</trans>
<trans lang="it_IT">Tempo cambio menù elementi scorrendo i menù. Settato a 0, questo effetto è disabilitato</trans>
</token>
<token name="tr(showdevices)">
<trans lang="en_EN">Show DVB device info</trans>
@ -230,7 +254,7 @@
<trans lang="en_EN">If set to true, information about usage of each available DVB device is displayed during channel switching and in the main menu</trans>
<trans lang="de_DE">Falls diese Option aktiviert ist, werden beim Umschalten und im Hauptmenü Informationen über alle verfügbaren DVB Devices ausgegeben.</trans>
<trans lang="fi_FI">Näytetään DVB-laitteiden käyttötiedot päävalikossa ja kanavanvaihdossa.</trans>
<trans lang="it_IT">Se settata su true, sono mostrate info riguardo l'uso di ciascun device DVB durante i cambi canale e nel menù principale.</trans>
<trans lang="it_IT">Settata su true, sono mostrate info riguardo l'uso di ciascun device DVB durante i cambi canale e nel menù principale.</trans>
</token>
<token name="tr(mainmenuorientation)">
<trans lang="en_EN">Orientation of main menu</trans>
@ -242,7 +266,7 @@
<trans lang="en_EN">Orientation of main menu. If orientation is set to horizontal, only the current list element is displayed. If set to vertical, 8 elements are shown in the list.</trans>
<trans lang="de_DE">Ausrichtung des Hauptmenüs. Falls die Ausrichtung auf horizontal gesetzt ist, wird nur das aktuelle Listenelement ausgegeben. Ist die Ausrichtung vertikal, werden 8 Listenelemente angezeigt.</trans>
<trans lang="fi_FI">Päävalikon orientaatio. Vaakasuuntainen: näytetään ainoastaan aktiivinen listaelementti. Pystysuuntainen: näytetään 8 elementtiä listana.</trans>
<trans lang="it_IT">Orientamento menù principale. Se l'orientamento è su orizzontale, è mostrato solo l'attuale lista degli elementi. Se settata su verticale, nella lista sono mostrati 8 elementi.</trans>
<trans lang="it_IT">Orientamento menù principale. Settato su orizzontale, è mostrato solo l'attuale lista degli elementi. Se settata su verticale, nella lista sono mostrati 8 elementi.</trans>
</token>
<token name="tr(recmenuorientation)">
<trans lang="en_EN">Orientation of recordings menu</trans>
@ -259,6 +283,7 @@
<token name="tr(setupmenuorientation)">
<trans lang="en_EN">Orientation of setup menu</trans>
<trans lang="de_DE">Ausrichtung des Einstellungsmenüs</trans>
<trans lang="it_IT">Orientamento Menù setup</trans>
</token>
<token name="tr(horizontal)">
<trans lang="en_EN">horizontal menu</trans>

View File

@ -55,6 +55,15 @@
-->
<time>
</time>
<!-- Available Variables vdrstatus
{vdrIsRecordingsHandlersActive} true if active RecordingsHandlers (cut,copy,move) aka "busy"
{vdrIsRecording} true if active recording
{vdrHasTimers} true if numtimers > 0
-->
<vdrstatus>
</vdrstatus>
<!-- Available Variables sortmode:
{sortnumber} true if menu is sorted by number
{sortname} true if menu is sorted alphabetical

View File

@ -33,6 +33,7 @@
{isHD} true if recording is HD/UHD (from EPG info)
{isUHD} true if recording is UHD (from EPG info)
{isRadio} true if recording is AudioOnly (from EPG info)
{errors} recording errors (-1 if not available)
-->
<detailheader>
</detailheader>
@ -57,6 +58,7 @@
{isHD} true if recording is HD/UHD (from EPG info)
{isUHD} true if recording is HD (from EPG info)
{isRadio} true if recording is AudioOnly (from EPG info)
{errors} recording errors (-1 if not available)
{recordingsize} size of recording (automatically in GB / MB)
{recordingsizecutted} size of cutted recording (automatically in GB / MB)

View File

@ -91,6 +91,14 @@
<vdrstatistics>
</vdrstatistics>
<!-- Available Variables vdrstatus
{vdrIsRecordingsHandlersActive} true if active RecordingsHandlers (cut,copy,move) aka "busy"
{vdrIsRecording} true if active recording
{vdrHasTimers} true if numtimers > 0
-->
<vdrstatus>
</vdrstatus>
<!-- Available Variables tempreatures:
{cputemp} current cpu temperature in °C
{gputemp} current gpu temperature in °C

View File

@ -39,6 +39,7 @@
{isHD} true if recording is HD/UHD (from EPG info)
{isUHD} true if recording is UHD (from EPG info)
{isRadio} true if recording is AudioOnly (from EPG info)
{errors} recording errors (-1 if not available)
-->
<listelement>
</listelement>
@ -84,6 +85,7 @@
{isHD} true if recording is HD/UHD (from EPG info)
{isUHD} true if recording is UHD (from EPG info)
{isRadio} true if recording is AudioOnly (from EPG info)
{errors} recording errors (-1 if not available)
-->
<currentelement delay="500" fadetime="0">
</currentelement>