summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlordjaxom <lordjaxom>2004-12-17 19:56:21 +0000
committerlordjaxom <lordjaxom>2004-12-17 19:56:21 +0000
commitac920774dee48c0a85b3c6fc8c6785c1a5dd8f6d (patch)
treed572f41490e8949a5e7323bf94b59c4034438afe
parentb8f29c674cc0ccca207123342c1344bbd0f13796 (diff)
downloadvdr-plugin-text2skin-ac920774dee48c0a85b3c6fc8c6785c1a5dd8f6d.tar.gz
vdr-plugin-text2skin-ac920774dee48c0a85b3c6fc8c6785c1a5dd8f6d.tar.bz2
1.0-pre5v1.0-pre5
-rw-r--r--common.c4
-rw-r--r--display.c436
-rw-r--r--display.h11
-rw-r--r--patches/vdr-1.3.17-dvbplayer-buttons.diff10
-rw-r--r--render.c86
-rw-r--r--render.h50
-rw-r--r--screen.h4
-rw-r--r--scroller.h4
-rw-r--r--text2skin.c4
-rw-r--r--theme.h13
-rw-r--r--xml/function.c5
-rw-r--r--xml/object.c4
-rw-r--r--xml/string.c5
-rw-r--r--xml/string.h25
-rw-r--r--xml/type.c5
-rw-r--r--xml/type.h11
16 files changed, 448 insertions, 229 deletions
diff --git a/common.c b/common.c
index 7a45a02..cac3fab 100644
--- a/common.c
+++ b/common.c
@@ -1,5 +1,5 @@
/*
- * $Id: common.c,v 1.4 2004/12/14 20:02:31 lordjaxom Exp $
+ * $Id: common.c,v 1.5 2004/12/17 19:56:16 lordjaxom Exp $
*/
#include "common.h"
@@ -101,7 +101,7 @@ cxType TimeType(time_t Time, const std::string &Format) {
} else
return Time;
}
- return "";
+ return false;
}
bool ParseVar(const char *Text, const char *Name, std::string &Value) {
diff --git a/display.c b/display.c
index 2a6c25f..6753cb5 100644
--- a/display.c
+++ b/display.c
@@ -1,5 +1,5 @@
/*
- * $Id: display.c,v 1.9 2004/12/14 20:02:31 lordjaxom Exp $
+ * $Id: display.c,v 1.10 2004/12/17 19:56:16 lordjaxom Exp $
*/
#include "render.h"
@@ -19,153 +19,191 @@ cText2SkinDisplayChannel::cText2SkinDisplayChannel(cText2SkinLoader *Loader, boo
mPresent(NULL),
mFollowing(NULL),
mType(mtStatus),
- mText("")
+ mText("") ,
+ mButtonRed(""),
+ mButtonGreen(""),
+ mButtonYellow(""),
+ mButtonBlue("")
{
}
-cText2SkinDisplayChannel::~cText2SkinDisplayChannel()
+cText2SkinDisplayChannel::~cText2SkinDisplayChannel()
{
}
-void cText2SkinDisplayChannel::SetChannel(const cChannel *Channel, int Number)
+void cText2SkinDisplayChannel::SetChannel(const cChannel *Channel, int Number)
{
+ UpdateLock();
if (mChannel != Channel || mNumber != Number) {
mChannel = Channel;
mNumber = Number;
SetDirty();
}
+ UpdateUnlock();
}
-void cText2SkinDisplayChannel::SetEvents(const cEvent *Present, const cEvent *Following)
+void cText2SkinDisplayChannel::SetEvents(const cEvent *Present, const cEvent *Following)
{
+ UpdateLock();
if (mPresent != Present || mFollowing != Following) {
mPresent = Present;
mFollowing = Following;
SetDirty();
}
+ UpdateUnlock();
}
-void cText2SkinDisplayChannel::SetMessage(eMessageType Type, const char *Text)
+void cText2SkinDisplayChannel::SetMessage(eMessageType Type, const char *Text)
{
+ UpdateLock();
if (Text == NULL) Text = "";
if (mType != Type || mText != Text) {
mType = Type;
mText = Text;
SetDirty();
}
+ UpdateUnlock();
}
-void cText2SkinDisplayChannel::SetButtons(const char *Red, const char *Green, const char *Yellow, const char *Blue)
+void cText2SkinDisplayChannel::SetButtons(const char *Red, const char *Green, const char *Yellow, const char *Blue)
{
+ UpdateLock();
Dprintf("SetButtons(%s, %s, %s, %s)\n", Red, Green, Yellow, Blue);
+ if (Red == NULL) Red = "";
+ if (Green == NULL) Green = "";
+ if (Yellow == NULL) Yellow = "";
+ if (Blue == NULL) Blue = "";
+ if (mButtonRed != Red || mButtonGreen != Green || mButtonYellow != Yellow
+ || mButtonBlue != Blue) {
+ mButtonRed = Red;
+ mButtonGreen = Green;
+ mButtonYellow = Yellow;
+ mButtonBlue = Blue;
+ SetDirty();
+ }
+ UpdateUnlock();
}
-cxType cText2SkinDisplayChannel::GetTokenData(const txToken &Token)
+cxType cText2SkinDisplayChannel::GetTokenData(const txToken &Token)
{
switch (Token.Type) {
- case tChannelNumber:
- return mChannel != NULL
- ? (cxType)ChannelNumber(mChannel, mNumber)
+ case tChannelNumber:
+ return mChannel != NULL
+ ? (cxType)ChannelNumber(mChannel, mNumber)
: (cxType)false;
- case tChannelName:
- return mChannel != NULL
- ? (cxType)ChannelName(mChannel, mNumber)
+ case tChannelName:
+ return mChannel != NULL
+ ? (cxType)ChannelName(mChannel, mNumber)
: (cxType)false;
case tChannelShortName:
- return mChannel != NULL
- ? (cxType)ChannelShortName(mChannel, mNumber)
+ return mChannel != NULL
+ ? (cxType)ChannelShortName(mChannel, mNumber)
: (cxType)false;
case tChannelBouquet:
- return mChannel != NULL
+#if VDRVERSNUM < 10315
+ return cxType::False;
+#else
+ return mChannel != NULL
? (cxType)mChannel->Provider()
: (cxType)false;
+#endif
case tChannelPortal:
+#if VDRVERSNUM < 10315
+ return false;
+#else
return mChannel != NULL
? (cxType)mChannel->PortalName()
- : (cxType)false;
+ : (cxType)false;
+#endif
case tChannelSource:
return mChannel != NULL
? (cxType)Sources.Get(mChannel->Source())->Description()
- : (cxType)false;
+ : (cxType)false;
case tPresentStartDateTime:
- return mPresent != NULL
- ? (cxType)TimeType(mPresent->StartTime(), Token.Attrib)
+ return mPresent != NULL
+ ? (cxType)TimeType(mPresent->StartTime(), Token.Attrib)
: (cxType)false;
case tPresentVPSDateTime:
- return mPresent != NULL
- ? (cxType)TimeType(mPresent->Vps(), Token.Attrib)
+ return mPresent != NULL
+ ? (cxType)TimeType(mPresent->Vps(), Token.Attrib)
: (cxType)false;
case tPresentEndDateTime:
- return mPresent != NULL
- ? (cxType)TimeType(mPresent->EndTime(), Token.Attrib)
+ return mPresent != NULL
+ ? (cxType)TimeType(mPresent->EndTime(), Token.Attrib)
: (cxType)false;
case tPresentProgress:
- return mPresent != NULL
- ? (cxType)TimeType(time(NULL) - mPresent->StartTime(), Token.Attrib)
+ return mPresent != NULL
+ ? (cxType)TimeType(time(NULL) - mPresent->StartTime(), Token.Attrib)
: (cxType)false;
case tPresentDuration:
- return mPresent != NULL
- ? (cxType)TimeType(mPresent->Duration(), Token.Attrib)
+ return mPresent != NULL
+ ? (cxType)TimeType(mPresent->Duration(), Token.Attrib)
+ : (cxType)false;
+
+ case tPresentRemaining:
+ return mPresent != NULL
+ ? (cxType)TimeType(mPresent->Duration() - (time(NULL) - mPresent->StartTime()),
+ Token.Attrib)
: (cxType)false;
case tPresentTitle:
- return mPresent != NULL
- ? (cxType)mPresent->Title()
+ return mPresent != NULL
+ ? (cxType)mPresent->Title()
: (cxType)false;
case tPresentShortText:
- return mPresent != NULL
- ? (cxType)mPresent->ShortText()
+ return mPresent != NULL
+ ? (cxType)mPresent->ShortText()
: (cxType)false;
case tPresentDescription:
- return mPresent != NULL
+ return mPresent != NULL
? (cxType)mPresent->Description()
: (cxType)false;
case tFollowingStartDateTime:
- return mFollowing != NULL
- ? (cxType)TimeType(mFollowing->StartTime(), Token.Attrib)
+ return mFollowing != NULL
+ ? (cxType)TimeType(mFollowing->StartTime(), Token.Attrib)
: (cxType)false;
case tFollowingVPSDateTime:
- return mFollowing != NULL
- ? (cxType)TimeType(mFollowing->Vps(), Token.Attrib)
+ return mFollowing != NULL
+ ? (cxType)TimeType(mFollowing->Vps(), Token.Attrib)
: (cxType)false;
case tFollowingEndDateTime:
- return mFollowing != NULL
- ? (cxType)TimeType(mFollowing->EndTime(), Token.Attrib)
+ return mFollowing != NULL
+ ? (cxType)TimeType(mFollowing->EndTime(), Token.Attrib)
: (cxType)false;
case tFollowingDuration:
- return mFollowing != NULL
- ? (cxType)TimeType(mFollowing->Duration(), Token.Attrib)
+ return mFollowing != NULL
+ ? (cxType)TimeType(mFollowing->Duration(), Token.Attrib)
: (cxType)false;
case tFollowingTitle:
- return mFollowing != NULL
- ? (cxType)mFollowing->Title()
+ return mFollowing != NULL
+ ? (cxType)mFollowing->Title()
: (cxType)false;
case tFollowingShortText:
- return mFollowing != NULL
- ? (cxType)mFollowing->ShortText()
+ return mFollowing != NULL
+ ? (cxType)mFollowing->ShortText()
: (cxType)false;
case tFollowingDescription:
- return mFollowing != NULL
- ? (cxType)mFollowing->Description()
+ return mFollowing != NULL
+ ? (cxType)mFollowing->Description()
: (cxType)false;
case tLanguage: {
@@ -212,25 +250,37 @@ cxType cText2SkinDisplayChannel::GetTokenData(const txToken &Token)
return mText;
case tMessageInfo:
- return mType == mtInfo
- ? (cxType)mText
+ return mType == mtInfo
+ ? (cxType)mText
: (cxType)false;
case tMessageWarning:
- return mType == mtWarning
- ? (cxType)mText
+ return mType == mtWarning
+ ? (cxType)mText
: (cxType)false;
case tMessageStatus:
- return mType == mtStatus
- ? (cxType)mText
+ return mType == mtStatus
+ ? (cxType)mText
: (cxType)false;
case tMessageError:
- return mType == mtError
- ? (cxType)mText
+ return mType == mtError
+ ? (cxType)mText
: (cxType)false;
+ case tButtonRed:
+ return mButtonRed;
+
+ case tButtonGreen:
+ return mButtonGreen;
+
+ case tButtonYellow:
+ return mButtonYellow;
+
+ case tButtonBlue:
+ return mButtonBlue;
+
default: break;
}
@@ -243,19 +293,24 @@ cText2SkinDisplayVolume::cText2SkinDisplayVolume(cText2SkinLoader *Loader):
cText2SkinRender(Loader, cxDisplay::volume),
mCurrent(0),
mTotal(0),
- mMute(false) {
+ mMute(false)
+{
}
-cText2SkinDisplayVolume::~cText2SkinDisplayVolume() {
+cText2SkinDisplayVolume::~cText2SkinDisplayVolume()
+{
}
-void cText2SkinDisplayVolume::SetVolume(int Current, int Total, bool Mute) {
+void cText2SkinDisplayVolume::SetVolume(int Current, int Total, bool Mute)
+{
+ UpdateLock();
if (mCurrent != Current || mTotal != Total || mMute != Mute) {
mCurrent = Current;
mTotal = Total;
mMute = Mute;
SetDirty();
}
+ UpdateUnlock();
}
cxType cText2SkinDisplayVolume::GetTokenData(const txToken &Token) {
@@ -289,21 +344,32 @@ cText2SkinDisplayReplay::cText2SkinDisplayReplay(cText2SkinLoader *Loader, bool
mMarks(NULL),
mPrompt(""),
mType(mtStatus),
- mText("") {
+ mText(""),
+ mButtonRed(""),
+ mButtonGreen(""),
+ mButtonYellow(""),
+ mButtonBlue("")
+{
}
-cText2SkinDisplayReplay::~cText2SkinDisplayReplay() {
+cText2SkinDisplayReplay::~cText2SkinDisplayReplay()
+{
}
-void cText2SkinDisplayReplay::SetTitle(const char *Title) {
+void cText2SkinDisplayReplay::SetTitle(const char *Title)
+{
+ UpdateLock();
if (Title == NULL) Title = "";
if (mTitle != Title) {
mTitle = Title;
SetDirty();
}
+ UpdateUnlock();
}
-void cText2SkinDisplayReplay::SetMode(bool Play, bool Forward, int Speed) {
+void cText2SkinDisplayReplay::SetMode(bool Play, bool Forward, int Speed)
+{
+ UpdateLock();
if (!mStateInfo || mPlay != Play || mForward != Forward || mSpeed != Speed) {
mStateInfo = true;
mPlay = Play;
@@ -311,57 +377,96 @@ void cText2SkinDisplayReplay::SetMode(bool Play, bool Forward, int Speed) {
mSpeed = Speed;
SetDirty();
}
+ UpdateUnlock();
}
-void cText2SkinDisplayReplay::SetProgress(int Current, int Total) {
+void cText2SkinDisplayReplay::SetProgress(int Current, int Total)
+{
+ UpdateLock();
if (mCurrent != Current || mTotal != Total) {
mCurrent = Current;
mTotal = Total;
// SetDirty(); TODO: let this cause a display update every frame?
}
+ UpdateUnlock();
}
-void cText2SkinDisplayReplay::SetMarks(const cMarks *Marks) {
+void cText2SkinDisplayReplay::SetMarks(const cMarks *Marks)
+{
+ UpdateLock();
if (mMarks != Marks) {
mMarks = Marks;
SetDirty();
}
+ UpdateUnlock();
}
-void cText2SkinDisplayReplay::SetCurrent(const char *Current) {
+void cText2SkinDisplayReplay::SetCurrent(const char *Current)
+{
+ UpdateLock();
if (Current == NULL) Current = "";
if (mPosition != Current) {
mPosition = Current;
SetDirty();
- }
+ }
+ UpdateUnlock();
}
-void cText2SkinDisplayReplay::SetTotal(const char *Total) {
+void cText2SkinDisplayReplay::SetTotal(const char *Total)
+{
+ UpdateLock();
if (Total == NULL) Total = "";
if (mDuration != Total) {
mDuration = Total;
SetDirty();
- }
+ }
+ UpdateUnlock();
}
-void cText2SkinDisplayReplay::SetJump(const char *Jump) {
+void cText2SkinDisplayReplay::SetJump(const char *Jump)
+{
+ UpdateLock();
if (Jump == NULL) Jump = "";
if (mPrompt != Jump) {
mPrompt = Jump;
SetDirty();
}
+ UpdateUnlock();
}
-void cText2SkinDisplayReplay::SetMessage(eMessageType Type, const char *Text) {
+void cText2SkinDisplayReplay::SetMessage(eMessageType Type, const char *Text)
+{
+ UpdateLock();
if (Text == NULL) Text = "";
if (mType != Type || mText != Text) {
mType = Type;
mText = Text;
SetDirty();
}
+ UpdateUnlock();
+}
+
+void cText2SkinDisplayReplay::SetButtons(const char *Red, const char *Green, const char *Yellow,
+ const char *Blue)
+{
+ UpdateLock();
+ Dprintf("SetButtons(%s, %s, %s, %s)\n", Red, Green, Yellow, Blue);
+ if (Red == NULL) Red = "";
+ if (Green == NULL) Green = "";
+ if (Yellow == NULL) Yellow = "";
+ if (Blue == NULL) Blue = "";
+ if (mButtonRed != Red || mButtonGreen != Green || mButtonYellow != Yellow || mButtonBlue != Blue) {
+ mButtonRed = Red;
+ mButtonGreen = Green;
+ mButtonYellow = Yellow;
+ mButtonBlue = Blue;
+ SetDirty();
+ }
+ UpdateUnlock();
}
-cxType cText2SkinDisplayReplay::GetTokenData(const txToken &Token) {
+cxType cText2SkinDisplayReplay::GetTokenData(const txToken &Token)
+{
switch (Token.Type) {
case tReplayTitle:
return mTitle;
@@ -378,6 +483,9 @@ cxType cText2SkinDisplayReplay::GetTokenData(const txToken &Token) {
case tReplayDuration:
return mDuration;
+ case tReplayRemaining:
+ return TimeType(mTotal - mCurrent, Token.Attrib);
+
case tReplayPrompt:
return mPrompt;
@@ -423,28 +531,40 @@ cxType cText2SkinDisplayReplay::GetTokenData(const txToken &Token) {
return mText;
case tMessageInfo:
- return mType == mtInfo
- ? (cxType)mText
+ return mType == mtInfo
+ ? (cxType)mText
: (cxType)false;
case tMessageWarning:
- return mType == mtWarning
- ? (cxType)mText
+ return mType == mtWarning
+ ? (cxType)mText
: (cxType)false;
case tMessageStatus:
- return mType == mtStatus
- ? (cxType)mText
+ return mType == mtStatus
+ ? (cxType)mText
: (cxType)false;
case tMessageError:
- return mType == mtError
- ? (cxType)mText
+ return mType == mtError
+ ? (cxType)mText
: (cxType)false;
case tReplayMode:
return cText2SkinStatus::ReplayMode();
+ case tButtonRed:
+ return mButtonRed;
+
+ case tButtonGreen:
+ return mButtonGreen;
+
+ case tButtonYellow:
+ return mButtonYellow;
+
+ case tButtonBlue:
+ return mButtonBlue;
+
default: break;
}
@@ -462,12 +582,14 @@ cText2SkinDisplayMessage::~cText2SkinDisplayMessage() {
}
void cText2SkinDisplayMessage::SetMessage(eMessageType Type, const char *Text) {
+ UpdateLock();
if (Text == NULL) Text = "";
if (mType != Type || mText != Text) {
mType = Type;
mText = Text;
SetDirty();
}
+ UpdateUnlock();
}
cxType cText2SkinDisplayMessage::GetTokenData(const txToken &Token) {
@@ -476,24 +598,24 @@ cxType cText2SkinDisplayMessage::GetTokenData(const txToken &Token) {
return mText;
case tMessageInfo:
- return mType == mtInfo
- ? (cxType)mText
- : (cxType)false;
+ return mType == mtInfo
+ ? (cxType)mText
+ : (cxType)false;
case tMessageWarning:
- return mType == mtWarning
- ? (cxType)mText
- : (cxType)false;
+ return mType == mtWarning
+ ? (cxType)mText
+ : (cxType)false;
case tMessageStatus:
- return mType == mtStatus
- ? (cxType)mText
- : (cxType)false;
+ return mType == mtStatus
+ ? (cxType)mText
+ : (cxType)false;
case tMessageError:
- return mType == mtError
- ? (cxType)mText
- : (cxType)false;
+ return mType == mtError
+ ? (cxType)mText
+ : (cxType)false;
default: break;
}
@@ -534,10 +656,13 @@ cText2SkinDisplayMenu::cText2SkinDisplayMenu(cText2SkinLoader *Loader):
}
}
-cText2SkinDisplayMenu::~cText2SkinDisplayMenu() {
+cText2SkinDisplayMenu::~cText2SkinDisplayMenu()
+{
}
-void cText2SkinDisplayMenu::Clear(void) {
+void cText2SkinDisplayMenu::Clear(void)
+{
+ UpdateLock();
mItems.clear();
mCurrentItem = (uint)-1;
mEvent = NULL;
@@ -545,43 +670,54 @@ void cText2SkinDisplayMenu::Clear(void) {
mText = "";
cText2SkinRender::Clear();
SetDirty();
+ UpdateUnlock();
}
-void cText2SkinDisplayMenu::SetTitle(const char *Title) {
+void cText2SkinDisplayMenu::SetTitle(const char *Title)
+{
+ UpdateLock();
if (Title == NULL) Title = "";
if (mTitle != Title) {
mTitle = Title;
SetDirty();
}
+ UpdateUnlock();
}
-void cText2SkinDisplayMenu::SetButtons(const char *Red, const char *Green, const char *Yellow, const char *Blue) {
+void cText2SkinDisplayMenu::SetButtons(const char *Red, const char *Green, const char *Yellow,
+ const char *Blue)
+{
+ UpdateLock();
if (Red == NULL) Red = "";
if (Green == NULL) Green = "";
if (Yellow == NULL) Yellow = "";
if (Blue == NULL) Blue = "";
- if (mButtonRed != Red || mButtonGreen != Green || mButtonYellow != Yellow || mButtonBlue != Blue) {
+ if (mButtonRed != Red || mButtonGreen != Green || mButtonYellow != Yellow
+ || mButtonBlue != Blue) {
mButtonRed = Red;
mButtonGreen = Green;
mButtonYellow = Yellow;
mButtonBlue = Blue;
SetDirty();
}
+ UpdateUnlock();
}
void cText2SkinDisplayMenu::SetMessage(eMessageType Type, const char *Text) {
+ UpdateLock();
if (Text == NULL) Text = "";
if (mMessageType != Type || mMessageText != Text) {
mMessageType = Type;
mMessageText = Text;
SetDirty();
}
+ UpdateUnlock();
}
void cText2SkinDisplayMenu::SetItem(const char *Text, int Index, bool Current, bool Selectable) {
+ UpdateLock();
if (Text == NULL)
return;
- Dprintf("SetItem(%s)\n", Text);
tListItem *item = new tListItem(Text, Selectable);
//item.text = Text;
@@ -609,43 +745,51 @@ void cText2SkinDisplayMenu::SetItem(const char *Text, int Index, bool Current, b
mCurrentItem = Index;
SetDirty();
}
- Dprintf("end SetItem()\n");
+ UpdateUnlock();
}
void cText2SkinDisplayMenu::SetEvent(const cEvent *Event) {
- Dprintf("setEvent %p\n", Event);
+ UpdateLock();
if (mEvent != Event) {
- Dprintf("dirty\n");
mEvent = Event;
if (mEvent != NULL)
SetDirty();
}
+ UpdateUnlock();
}
void cText2SkinDisplayMenu::SetRecording(const cRecording *Recording) {
+ UpdateLock();
// yet unused
if (mRecording != Recording) {
mRecording = Recording;
if (mRecording != NULL)
SetDirty();
}
+ UpdateUnlock();
}
void cText2SkinDisplayMenu::SetText(const char *Text, bool /*FixedFont*/) {
+ UpdateLock();
if (Text == NULL) Text = "";
if (mText != Text) {
mText = Text;
SetDirty();
}
+ UpdateUnlock();
}
void cText2SkinDisplayMenu::SetTabs(int Tab1, int Tab2, int Tab3, int Tab4, int Tab5) {
+ UpdateLock();
cSkinDisplayMenu::SetTabs(Tab1, Tab2, Tab3, Tab4, Tab5);
+ UpdateUnlock();
}
void cText2SkinDisplayMenu::Scroll(bool Up, bool Page) {
+ UpdateLock();
cText2SkinRender::Scroll(Up, Page);
SetDirty();
+ UpdateUnlock();
}
cxType cText2SkinDisplayMenu::GetTokenData(const txToken &Token) {
@@ -667,13 +811,13 @@ cxType cText2SkinDisplayMenu::GetTokenData(const txToken &Token) {
return mTitle;
case tMenuItem:
- return mItems.size() > (uint)Token.Index && mItems[Token.Index].sel
- && mCurrentItem != (uint)Token.Index
+ return mItems.size() > (uint)Token.Index && mItems[Token.Index].sel
+ && mCurrentItem != (uint)Token.Index
? (cxType)mItems[Token.Index].tabs[Token.Tab]
- : (cxType)false;
+ : (cxType)false;
case tIsMenuItem:
- return mItems.size() > (uint)Token.Index && mItems[Token.Index].sel
+ return mItems.size() > (uint)Token.Index && mItems[Token.Index].sel
&& mCurrentItem != (uint)Token.Index;
case tMenuCurrent:
@@ -682,19 +826,19 @@ cxType cText2SkinDisplayMenu::GetTokenData(const txToken &Token) {
? (cxType)mItems[mCurrentItem].text
: (cxType)false;
- return mItems.size() > (uint)Token.Index && mItems[Token.Index].sel
- && mCurrentItem == (uint)Token.Index
+ return mItems.size() > (uint)Token.Index && mItems[Token.Index].sel
+ && mCurrentItem == (uint)Token.Index
? (cxType)mItems[Token.Index].tabs[Token.Tab]
- : (cxType)false;
+ : (cxType)false;
case tIsMenuCurrent:
- return mItems.size() > (uint)Token.Index && mItems[Token.Index].sel
+ return mItems.size() > (uint)Token.Index && mItems[Token.Index].sel
&& mCurrentItem == (uint)Token.Index;
case tMenuGroup:
- return mItems.size() > (uint)Token.Index && !mItems[Token.Index].sel
+ return mItems.size() > (uint)Token.Index && !mItems[Token.Index].sel
? (cxType)mItems[Token.Index].tabs[Token.Tab]
- : (cxType)false;
+ : (cxType)false;
case tIsMenuGroup:
return mItems.size() > (uint)Token.Index && !mItems[Token.Index].sel;
@@ -715,64 +859,64 @@ cxType cText2SkinDisplayMenu::GetTokenData(const txToken &Token) {
return mMessageText;
case tMessageInfo:
- return mMessageType == mtInfo
- ? (cxType)mMessageText
- : (cxType)false;
+ return mMessageType == mtInfo
+ ? (cxType)mMessageText
+ : (cxType)false;
case tMessageWarning:
- return mMessageType == mtWarning
- ? (cxType)mMessageText
- : (cxType)false;
+ return mMessageType == mtWarning
+ ? (cxType)mMessageText
+ : (cxType)false;
case tMessageStatus:
- return mMessageType == mtStatus
- ? (cxType)mMessageText
- : (cxType)false;
+ return mMessageType == mtStatus
+ ? (cxType)mMessageText
+ : (cxType)false;
case tMessageError:
- return mMessageType == mtError
- ? (cxType)mMessageText
- : (cxType)false;
+ return mMessageType == mtError
+ ? (cxType)mMessageText
+ : (cxType)false;
case tPresentStartDateTime:
- return mEvent != NULL
- ? (cxType)TimeType(mEvent->StartTime(), Token.Attrib)
- : (cxType)false;
+ return mEvent != NULL
+ ? (cxType)TimeType(mEvent->StartTime(), Token.Attrib)
+ : (cxType)false;
case tPresentVPSDateTime:
- return mEvent != NULL
- ? (cxType)TimeType(mEvent->Vps(), Token.Attrib)
- : (cxType)false;
+ return mEvent != NULL
+ ? (cxType)TimeType(mEvent->Vps(), Token.Attrib)
+ : (cxType)false;
case tPresentEndDateTime:
return mEvent != NULL
- ? (cxType)TimeType(mEvent->EndTime(), Token.Attrib)
- : (cxType)false;
+ ? (cxType)TimeType(mEvent->EndTime(), Token.Attrib)
+ : (cxType)false;
case tPresentProgress:
- return mEvent != NULL
- ? (cxType)TimeType(time(NULL) - mEvent->StartTime(), Token.Attrib)
- : (cxType)false;
+ return mEvent != NULL
+ ? (cxType)TimeType(time(NULL) - mEvent->StartTime(), Token.Attrib)
+ : (cxType)false;
case tPresentDuration:
- return mEvent != NULL
- ? (cxType)TimeType(mEvent->Duration(), Token.Attrib)
- : (cxType)false;
+ return mEvent != NULL
+ ? (cxType)TimeType(mEvent->Duration(), Token.Attrib)
+ : (cxType)false;
case tPresentTitle:
- return mEvent != NULL
- ? (cxType)mEvent->Title()
- : (cxType)false;
+ return mEvent != NULL
+ ? (cxType)mEvent->Title()
+ : (cxType)false;
case tPresentShortText:
- return mEvent != NULL
- ? (cxType)mEvent->ShortText()
- : (cxType)false;
+ return mEvent != NULL
+ ? (cxType)mEvent->ShortText()
+ : (cxType)false;
case tPresentDescription:
- return mEvent != NULL
- ? (cxType)mEvent->Description()
- : (cxType)false;
+ return mEvent != NULL
+ ? (cxType)mEvent->Description()
+ : (cxType)false;
case tHasVPS:
return mEvent != NULL && mEvent->Vps() != 0;
diff --git a/display.h b/display.h
index 1c540d4..6e03373 100644
--- a/display.h
+++ b/display.h
@@ -1,5 +1,5 @@
/*
- * $Id: display.h,v 1.7 2004/12/14 20:02:31 lordjaxom Exp $
+ * $Id: display.h,v 1.8 2004/12/17 19:56:16 lordjaxom Exp $
*/
#ifndef VDR_TEXT2SKIN_SKIN_H
@@ -23,6 +23,10 @@ private:
const cEvent *mFollowing;
eMessageType mType;
std::string mText;
+ std::string mButtonRed;
+ std::string mButtonGreen;
+ std::string mButtonYellow;
+ std::string mButtonBlue;
protected:
virtual cxType GetTokenData(const txToken &Token);
@@ -71,6 +75,10 @@ private:
std::string mPrompt;
eMessageType mType;
std::string mText;
+ std::string mButtonRed;
+ std::string mButtonGreen;
+ std::string mButtonYellow;
+ std::string mButtonBlue;
protected:
virtual cxType GetTokenData(const txToken &Token);
@@ -87,6 +95,7 @@ public:
virtual void SetTotal(const char *Total);
virtual void SetJump(const char *Jump);
virtual void SetMessage(eMessageType Type, const char *Text);
+ virtual void SetButtons(const char *Red, const char *Green, const char *Yellow, const char *Blue);
virtual void Flush(void) { cText2SkinRender::Flush(); }
};
diff --git a/patches/vdr-1.3.17-dvbplayer-buttons.diff b/patches/vdr-1.3.17-dvbplayer-buttons.diff
new file mode 100644
index 0000000..dc72164
--- /dev/null
+++ b/patches/vdr-1.3.17-dvbplayer-buttons.diff
@@ -0,0 +1,10 @@
+--- menu.c.orig Fri Dec 17 18:31:27 2004
++++ menu.c Fri Dec 17 18:37:18 2004
+@@ -3331,6 +3331,7 @@
+ if (Initial) {
+ if (title)
+ displayReplay->SetTitle(title);
++ displayReplay->SetButtons(tr("Jump"), tr("Skip +60s"), tr("Skip -60s"), tr("Button$Stop"));
+ lastCurrent = lastTotal = -1;
+ }
+ if (Total != lastTotal) {
diff --git a/render.c b/render.c
index 6d1109b..ba84bc4 100644
--- a/render.c
+++ b/render.c
@@ -1,5 +1,5 @@
/*
- * $Id: render.c,v 1.10 2004/12/14 20:02:31 lordjaxom Exp $
+ * $Id: render.c,v 1.11 2004/12/17 19:56:16 lordjaxom Exp $
*/
#include "render.h"
@@ -17,7 +17,8 @@
cText2SkinRender *cText2SkinRender::mRender = NULL;
-cText2SkinRender::cText2SkinRender(cText2SkinLoader *Loader, cxDisplay::eType Display, const std::string &BasePath, bool OffScreen):
+cText2SkinRender::cText2SkinRender(cText2SkinLoader *Loader, cxDisplay::eType Display,
+ const std::string &BasePath, bool OffScreen):
mSkin(Loader->Data()),
mDisplay(mSkin->Get(Display)),
mI18n(Loader->I18n()),
@@ -44,6 +45,9 @@ cText2SkinRender::cText2SkinRender(cText2SkinLoader *Loader, cxDisplay::eType Di
return;
mScreen = new cText2SkinScreen(OffScreen);
+ if (!mScreen->IsOpen())
+ return;
+
mBaseSize = mSkin->BaseSize();
eOsdError res;
@@ -56,9 +60,8 @@ cText2SkinRender::cText2SkinRender(cText2SkinLoader *Loader, cxDisplay::eType Di
areas[i].x2 = mSkin->BaseOffset().x + pos2.x;
areas[i].y2 = mSkin->BaseOffset().y + pos2.y;
areas[i].bpp = mDisplay->Windows()[i].bpp;
- Dprintf("setting area: %d, %d, %d, %d, %d\n",
- areas[i].x1, areas[i].y1, areas[i].x2, areas[i].y2,
- areas[i].bpp);
+ Dprintf("setting area: %d, %d, %d, %d, %d\n", areas[i].x1, areas[i].y1, areas[i].x2,
+ areas[i].y2, areas[i].bpp);
}
res = mScreen->SetAreas(areas, mDisplay->NumWindows());
@@ -87,10 +90,10 @@ cText2SkinRender::cText2SkinRender(cText2SkinLoader *Loader, cxDisplay::eType Di
}
if (!OffScreen) {
- mDoUpdateMutex.Lock();
+ UpdateLock();
Start();
mStarted.Wait(mDoUpdateMutex);
- mDoUpdateMutex.Unlock();
+ UpdateUnlock();
}
}
@@ -110,7 +113,7 @@ cText2SkinRender::~cText2SkinRender()
void cText2SkinRender::Action(void)
{
mActive = true;
- mDoUpdateMutex.Lock();
+ UpdateLock();
mStarted.Broadcast();
while (mActive) {
if (mUpdateIn) mDoUpdate.TimedWait(mDoUpdateMutex, mUpdateIn);
@@ -121,7 +124,7 @@ void cText2SkinRender::Action(void)
mUpdateIn = 0; // has to be re-set within Update();
Update();
}
- mDoUpdateMutex.Unlock();
+ UpdateUnlock();
}
void cText2SkinRender::Update(void)
@@ -149,7 +152,8 @@ void cText2SkinRender::DrawObject(const cxObject *Object)
break;
case cxObject::text:
- DrawText(Object->Pos(), Object->Size(), Object->Fg(), Object->Text(), Object->Font(), Object->Align());
+ DrawText(Object->Pos(), Object->Size(), Object->Fg(), Object->Text(), Object->Font(),
+ Object->Align());
break;
case cxObject::rectangle:
@@ -165,11 +169,14 @@ void cText2SkinRender::DrawObject(const cxObject *Object)
break;
case cxObject::progress:
- DrawProgressbar(Object->Pos(), Object->Size(), Object->Current(), Object->Total(), Object->Bg(), Object->Fg(), Object->Keep(), Object->Mark(), Object->Active(), GetMarks());
+ DrawProgressbar(Object->Pos(), Object->Size(), Object->Current(), Object->Total(),
+ Object->Bg(), Object->Fg(), Object->Keep(), Object->Mark(),
+ Object->Active(), GetMarks());
break;
case cxObject::scrolltext:
- DrawScrolltext(Object->Pos(), Object->Size(), Object->Fg(), Object->Text(), Object->Font(), Object->Align());
+ DrawScrolltext(Object->Pos(), Object->Size(), Object->Fg(), Object->Text(), Object->Font(),
+ Object->Align());
break;
case cxObject::scrollbar:
@@ -244,10 +251,11 @@ void cText2SkinRender::DrawObject(const cxObject *Object)
}
void cText2SkinRender::DrawImage(const txPoint &Pos, const txSize &Size, const tColor *Bg,
- const tColor *Fg, int Alpha, int Colors, const std::string &Path)
+ const tColor *Fg, int Alpha, int Colors, const std::string &Path)
{
cText2SkinBitmap *bmp;
- Dprintf("trying to draw image %s to %dx%d - alpha %d\n", ImagePath(Path).c_str(), Pos.x, Pos.y, Alpha);
+ Dprintf("trying to draw image %s to %dx%d - alpha %d\n", ImagePath(Path).c_str(), Pos.x,
+ Pos.y, Alpha);
if ((bmp = cText2SkinBitmap::Load(ImagePath(Path), Alpha, Size.h > 1 ? Size.h : 0,
Size.w > 1 ? Size.w : 0, Colors)) != NULL) {
@@ -261,7 +269,8 @@ void cText2SkinRender::DrawImage(const txPoint &Pos, const txSize &Size, const t
void cText2SkinRender::DrawText(const txPoint &Pos, const txSize &Size, const tColor *Fg,
const std::string &Text, const cFont *Font, int Align)
{
- //Dprintf("trying to draw text %s to %d,%d size %d,%d, color %x\n", Text.c_str(), Pos.x, Pos.y, Size.w, Size.h, Fg ? *Fg : 0);
+ //Dprintf("trying to draw text %s to %d,%d size %d,%d, color %x\n", Text.c_str(), Pos.x, Pos.y,
+ // Size.w, Size.h, Fg ? *Fg : 0);
mScreen->DrawText(Pos.x, Pos.y, Text.c_str(), Fg ? *Fg : 0, 0, Font, Size.w, Size.h, Align);
}
@@ -282,10 +291,11 @@ void cText2SkinRender::DrawSlope(const txPoint &Pos, const txSize &Size, const t
void cText2SkinRender::DrawProgressbar(const txPoint &Pos, const txSize &Size, int Current,
int Total, const tColor *Bg, const tColor *Fg,
- const tColor *Selected, const tColor *Mark,
- const tColor *Cur, const cMarks *Marks)
+ const tColor *Selected, const tColor *Mark,
+ const tColor *Cur, const cMarks *Marks)
{
- //Dprintf("trying to draw Progressbar, Current = %d, Total = %d, bg = %x, marks = %p\n", Current, Total, Bg ? *Bg : 0, Marks);
+ //Dprintf("trying to draw Progressbar, Current = %d, Total = %d, bg = %x, marks = %p\n",
+ // Current, Total, Bg ? *Bg : 0, Marks);
if (Bg)
DrawRectangle(Pos, Size, Bg);
if (Total == 0)
@@ -301,7 +311,9 @@ void cText2SkinRender::DrawProgressbar(const txPoint &Pos, const txSize &Size, i
txPoint pt(Pos.x + m->position * Size.w / Total, Pos.y);
if (Selected && start) {
const cMark *m2 = Marks->Next(m);
- DrawRectangle(txPoint(pt.x, Pos.y + Size.h / 3), txSize(((m2 ? m2->position : Total) - m->position) * Size.w / Total, Size.h / 3), Selected);
+ DrawRectangle(txPoint(pt.x, Pos.y + Size.h / 3),
+ txSize(((m2 ? m2->position : Total) - m->position)
+ * Size.w / Total, Size.h / 3), Selected);
}
DrawMark(pt, Size, start, m->position == Current, false, Mark, Cur);
start = !start;
@@ -316,7 +328,9 @@ void cText2SkinRender::DrawProgressbar(const txPoint &Pos, const txSize &Size, i
txPoint pt(Pos.x, Pos.y + m->position * Size.h / Total);
if (Selected && start) {
const cMark *m2 = Marks->Next(m);
- DrawRectangle(txPoint(Pos.x + Size.w / 3, pt.y), txSize(Size.w / 3, ((m2 ? m2->position : Total) - m->position) * Size.h / Total), Selected);
+ DrawRectangle(txPoint(Pos.x + Size.w / 3, pt.y),
+ txSize(Size.w / 3, ((m2 ? m2->position : Total) - m->position)
+ * Size.h / Total), Selected);
}
DrawMark(pt, Size, start, m->position == Current, true, Mark, Cur);
start = !start;
@@ -428,21 +442,37 @@ string cText2SkinRender::Translate(const string &Text) {
cxType cText2SkinRender::GetToken(const txToken &Token)
{
if (mRender != NULL) {
+ tTokenCache::iterator it = mRender->mTokenCache.find(Token);
+ if (it != mRender->mTokenCache.end())
+ return (*it).second;
+
cxType res = mRender->GetTokenData(Token);
if (Token.Attrib.length() > 0) {
if (Token.Attrib == "clean") {
std::string str = res.String();
int pos = -1;
-
- if (Token.Type == tMenuCurrent && (pos = str.rfind(' ')) != -1)
- res = str.substr(pos + 1);
- else if (Token.Type == tMenuTitle && (pos = str.find(' ')) != -1)
- res = str.substr(0, pos);
+
+ if (Token.Type == tMenuCurrent) {
+ const char *ptr = str.c_str();
+ char *end;
+ strtoul(ptr, &end, 10);
+ res = skipspace(end);
+ }
+ else if (Token.Type == tMenuTitle) {
+ if ((pos = str.find(" - ")) != -1
+ || (pos = str.find(' ')) != -1) {
+ str.erase(pos);
+ while (str[str.length() - 1] == ' ')
+ str.erase(str.length() - 1);
+ res = str;
+ }
+ Dprintf("MenuTitle result: |%s|\n", res.String().c_str());
+ }
}
}
- return res;
+ return (mRender->mTokenCache[Token] = res);
}
- return false;
+ return cxType::False;
}
cxType cText2SkinRender::GetTokenData(const txToken &Token)
@@ -453,7 +483,7 @@ cxType cText2SkinRender::GetTokenData(const txToken &Token)
case tCanScrollUp: return mScroller != NULL && mScroller->CanScrollUp();
case tCanScrollDown: return mScroller != NULL && mScroller->CanScrollDown();
-
+
//default: return txToken::Token(Token); // return literal token
default: break;
}
diff --git a/render.h b/render.h
index 61f5d60..6b3727a 100644
--- a/render.h
+++ b/render.h
@@ -1,5 +1,5 @@
/*
- * $Id: render.h,v 1.8 2004/12/14 20:02:31 lordjaxom Exp $
+ * $Id: render.h,v 1.9 2004/12/17 19:56:16 lordjaxom Exp $
*/
#ifndef VDR_TEXT2SKIN_RENDER_H
@@ -31,6 +31,8 @@ class cText2SkinRender: public cThread {
friend class VSkinnerScreen;
private:
+ typedef std::map<txToken,cxType> tTokenCache;
+
static cText2SkinRender *mRender;
cxSkin *mSkin;
@@ -39,6 +41,7 @@ private:
cText2SkinTheme *mTheme;
cText2SkinScreen *mScreen;
cText2SkinScroller *mScroller;
+ tTokenCache mTokenCache;
std::string mBasePath;
bool mDirty;
@@ -56,8 +59,8 @@ private:
protected:
// Update thread
- //void Lock(void) { mMutex.Lock(); }
- //void Unlock(void) { mMutex.Unlock(); }
+ void UpdateLock(void) { mDoUpdateMutex.Lock(); }
+ void UpdateUnlock(void) { mDoUpdateMutex.Unlock(); }
virtual void Action(void);
// Drawing operations
@@ -65,24 +68,20 @@ protected:
void DrawBackground(const txPoint &Pos, const txSize &Size, const tColor *Bg, const tColor *Fg,
int Alpha, const std::string &Path);
void DrawImage(const txPoint &Pos, const txSize &Size, const tColor *Bg, const tColor *Fg,
- int Alpha, int Colors, const std::string &Path);
+ int Alpha, int Colors, const std::string &Path);
void DrawText(const txPoint &Pos, const txSize &Size, const tColor *Fg, const std::string &Text,
- const cFont *Font, int Align);
+ const cFont *Font, int Align);
void DrawRectangle(const txPoint &Pos, const txSize &Size,
- const tColor *Fg);
- void DrawEllipse(const txPoint &Pos, const txSize &Size, const tColor *Fg,
- int Arc);
- void DrawSlope(const txPoint &Pos, const txSize &Size, const tColor *Fg,
- int Arc);
- void DrawProgressbar(const txPoint &Pos, const txSize &Size, int Current,
- int Total, const tColor *Fg, const tColor *Bg,
- const tColor *Selected, const tColor *Mark, const tColor *Cur,
- const cMarks *Marks = NULL);
- void DrawMark(const txPoint &Pos, const txSize &Size, bool Start,
- bool Current, bool Horizontal, const tColor *Mark,
- const tColor *Cur);
- void DrawScrolltext(const txPoint &Pos, const txSize &Size,
- const tColor *Fg, const std::string &Text, const cFont *Font, int Align);
+ const tColor *Fg);
+ void DrawEllipse(const txPoint &Pos, const txSize &Size, const tColor *Fg, int Arc);
+ void DrawSlope(const txPoint &Pos, const txSize &Size, const tColor *Fg, int Arc);
+ void DrawProgressbar(const txPoint &Pos, const txSize &Size, int Current, int Total,
+ const tColor *Fg, const tColor *Bg, const tColor *Selected,
+ const tColor *Mark, const tColor *Cur, const cMarks *Marks = NULL);
+ void DrawMark(const txPoint &Pos, const txSize &Size, bool Start, bool Current, bool Horizontal,
+ const tColor *Mark, const tColor *Cur);
+ void DrawScrolltext(const txPoint &Pos, const txSize &Size, const tColor *Fg,
+ const std::string &Text, const cFont *Font, int Align);
void DrawScrollbar(const txPoint &Pos, const txSize &Size, const tColor *Bg, const tColor *Fg);
void Update(void);
@@ -103,8 +102,8 @@ protected:
void Clear(void) { DELETENULL(mScroller); }
public:
- cText2SkinRender(cText2SkinLoader *Loader, cxDisplay::eType Section, const std::string &BasePath = "",
- bool OffScreen = false);
+ cText2SkinRender(cText2SkinLoader *Loader, cxDisplay::eType Section,
+ const std::string &BasePath = "", bool OffScreen = false);
virtual ~cText2SkinRender();
// functions for object classes to obtain dynamic item information
@@ -114,11 +113,14 @@ public:
static cxType GetToken(const txToken &Token);
};
-inline void cText2SkinRender::Flush(bool Force) {
+inline void cText2SkinRender::Flush(bool Force)
+{
if (mDirty || Force) {
- mDoUpdateMutex.Lock();
+ mTokenCache.clear();
+
+ UpdateLock();
mDoUpdate.Broadcast();
- mDoUpdateMutex.Unlock();
+ UpdateUnlock();
mDirty = false;
}
diff --git a/screen.h b/screen.h
index b397785..4a95b57 100644
--- a/screen.h
+++ b/screen.h
@@ -1,5 +1,5 @@
/*
- * $Id: screen.h,v 1.2 2004/12/06 15:01:02 lordjaxom Exp $
+ * $Id: screen.h,v 1.3 2004/12/17 19:56:16 lordjaxom Exp $
*/
#ifndef VDR_TEXT2SKIN_SCREEN_H
@@ -35,6 +35,8 @@ public:
void DrawSlope(int x1, int y1, int x2, int y2, tColor Color, int Type);
void Flush(void);
+
+ bool IsOpen(void) const { return mOsd != NULL; }
};
#endif // VDR_TEXT2SKIN_SCREEN_H
diff --git a/scroller.h b/scroller.h
index dae6cf2..01be018 100644
--- a/scroller.h
+++ b/scroller.h
@@ -1,5 +1,5 @@
/*
- * $Id: scroller.h,v 1.1.1.1 2004/11/19 16:45:31 lordjaxom Exp $
+ * $Id: scroller.h,v 1.2 2004/12/17 19:56:16 lordjaxom Exp $
*/
#ifndef VDR_TEXT2SKIN_SCROLLER_H
@@ -38,9 +38,9 @@ public:
int Total(void) { return mWrapper.Lines(); }
int Offset(void) { return mOffset; }
int Shown(void) { return mShown; }
- bool CanScroll(void) { return CanScrollUp() || CanScrollDown(); }
bool CanScrollUp(void) { return mOffset > 0; }
bool CanScrollDown(void) { return mOffset + mShown < Total(); }
+ bool CanScroll(void) { return CanScrollUp() || CanScrollDown(); }
void Scroll(bool Up, bool Page);
};
diff --git a/text2skin.c b/text2skin.c
index e6b9f7f..adee8ea 100644
--- a/text2skin.c
+++ b/text2skin.c
@@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
- * $Id: text2skin.c,v 1.4 2004/12/12 20:26:25 lordjaxom Exp $
+ * $Id: text2skin.c,v 1.5 2004/12/17 19:56:16 lordjaxom Exp $
*/
#include "text2skin.h"
@@ -12,7 +12,7 @@
#include "i18n.h"
#include "loader.h"
-const char *cText2SkinPlugin::VERSION = "1.0-pre4";
+const char *cText2SkinPlugin::VERSION = "1.0-pre5";
const char *cText2SkinPlugin::SKINVERSION = "1.0";
const char *cText2SkinPlugin::DESCRIPTION = "Loader for text-based skins";
diff --git a/theme.h b/theme.h
index 0d6b167..17ed782 100644
--- a/theme.h
+++ b/theme.h
@@ -1,5 +1,5 @@
/*
- * $Id: theme.h,v 1.1.1.1 2004/11/19 16:45:31 lordjaxom Exp $
+ * $Id: theme.h,v 1.2 2004/12/17 19:56:16 lordjaxom Exp $
*/
#ifndef VDR_TEXT2SKIN_THEME_H
@@ -12,8 +12,10 @@
class cText2SkinTheme: public cText2SkinFile {
private:
- cTheme mTheme;
- std::map<std::string,int> mMap;
+ typedef std::map<std::string,int> tThemeMap;
+
+ cTheme mTheme;
+ tThemeMap mMap;
protected:
bool Parse(const char *Text);
@@ -27,8 +29,9 @@ public:
};
inline tColor cText2SkinTheme::Color(const std::string &Name) {
- if (mMap.find(Name) != mMap.end())
- return mTheme.Color(mMap[Name]);
+ tThemeMap::iterator it = mMap.find(Name);
+ if (it != mMap.end())
+ return mTheme.Color((*it).second);
else
return 0x00000000;
}
diff --git a/xml/function.c b/xml/function.c
index 597bece..66bae48 100644
--- a/xml/function.c
+++ b/xml/function.c
@@ -1,5 +1,5 @@
/*
- * $Id: function.c,v 1.7 2004/12/14 13:13:10 lordjaxom Exp $
+ * $Id: function.c,v 1.8 2004/12/17 19:56:16 lordjaxom Exp $
*/
#include "xml/function.h"
@@ -165,11 +165,9 @@ const std::string &cxFunction::FunFile(const std::string &Param) const
std::string cxFunction::FunPlugin(const std::string &Param) const
{
- Dprintf("FunPlugin: Get(%s)\n", Param.c_str());
cPlugin *p = cPluginManager::GetPlugin(Param.c_str());
if (p) {
const char *entry = p->MainMenuEntry();
- Dprintf("Entry: |%s|\n", entry);
if (entry)
return entry;
}
@@ -200,7 +198,6 @@ std::string cxFunction::Evaluate(void) const
return False;
case fun_eq:
- Dprintf("eq: |%s| <-> |%s|\n", mParams[0]->Evaluate().c_str(), mParams[1]->Evaluate().c_str());
return mParams[0]->Evaluate() == mParams[1]->Evaluate() ? True : False;
case fun_file:
diff --git a/xml/object.c b/xml/object.c
index b0b8dc0..940e5a9 100644
--- a/xml/object.c
+++ b/xml/object.c
@@ -1,5 +1,5 @@
/*
- * $Id: object.c,v 1.5 2004/12/14 20:02:31 lordjaxom Exp $
+ * $Id: object.c,v 1.6 2004/12/17 19:56:16 lordjaxom Exp $
*/
#include "xml/object.h"
@@ -118,11 +118,9 @@ const cFont *cxObject::Font(void) const
{
const cFont *font;
- Dprintf("trying: %s %d\n", (SkinPath() + "/fonts/" + mFontFace).c_str(), mFontSize);
if ((font = cText2SkinFont::Load(SkinPath() + "/fonts", mFontFace, mFontSize)) != NULL)
return font;
- Dprintf("trying: %s %d\n", (SkinPath() + "/" + mSkin->Name() + "/" + mFontFace).c_str(), mFontSize);
if ((font = cText2SkinFont::Load(SkinPath() + "/" + mSkin->Name(), mFontFace, mFontSize)) != NULL)
return font;
diff --git a/xml/string.c b/xml/string.c
index 3748df2..5b573eb 100644
--- a/xml/string.c
+++ b/xml/string.c
@@ -1,5 +1,5 @@
/*
- * $Id: string.c,v 1.7 2004/12/14 13:13:10 lordjaxom Exp $
+ * $Id: string.c,v 1.8 2004/12/17 19:56:16 lordjaxom Exp $
*/
#include "xml/string.h"
@@ -13,6 +13,7 @@ static const char *Tokens[__COUNT_TOKEN__] = {
"ChannelNumber", "ChannelName", "ChannelShortName", "ChannelBouquet", "ChannelPortal",
"ChannelSource", "PresentStartDateTime",
"PresentVPSDateTime", "PresentEndDateTime", "PresentDuration", "PresentProgress",
+ "PresentRemaining",
"PresentTitle", "PresentShortText", "PresentDescription", "FollowingStartDateTime",
"FollowingVPSDateTime", "FollowingEndDateTime", "FollowingDuration",
"FollowingTitle", "FollowingShortText", "FollowingDescription", "Language",
@@ -29,7 +30,7 @@ static const char *Tokens[__COUNT_TOKEN__] = {
// Replay Display
"ReplayTitle", "ReplayPositionIndex", "ReplayDurationIndex", "ReplayPrompt", "IsPlaying",
"IsFastForward", "IsFastRewind", "IsSlowForward", "IsSlowRewind", "IsPausing",
- "ReplayPosition", "ReplayDuration", "ReplayMode",
+ "ReplayPosition", "ReplayDuration", "ReplayRemaining", "ReplayMode",
// Menu Page
"MenuTitle", "MenuGroup", "IsMenuGroup", "MenuItem", "IsMenuItem", "MenuCurrent", "IsMenuCurrent",
diff --git a/xml/string.h b/xml/string.h
index 650e7f7..8e29db8 100644
--- a/xml/string.h
+++ b/xml/string.h
@@ -1,5 +1,5 @@
/*
- * $Id: string.h,v 1.7 2004/12/14 20:02:31 lordjaxom Exp $
+ * $Id: string.h,v 1.8 2004/12/17 19:56:16 lordjaxom Exp $
*/
#ifndef VDR_TEXT2SKIN_XML_STRING_H
@@ -25,6 +25,7 @@ enum exToken {
tPresentEndDateTime,
tPresentDuration,
tPresentProgress,
+ tPresentRemaining,
tPresentTitle,
tPresentShortText,
tPresentDescription,
@@ -52,7 +53,7 @@ enum exToken {
tVolumeTotal,
tIsMute,
- // Message Display
+ // Message Display (also in all other displays)
tMessage,
tMessageStatus,
tMessageInfo,
@@ -72,6 +73,7 @@ enum exToken {
tIsPausing,
tReplayPosition,
tReplayDuration,
+ tReplayRemaining,
tReplayMode,
// Menu Page
@@ -83,6 +85,7 @@ enum exToken {
tMenuCurrent,
tIsMenuCurrent,
tMenuText,
+ // next four also in Channel and Replay display (if supported by vdr/plugin)
tButtonRed,
tButtonGreen,
tButtonYellow,
@@ -103,9 +106,27 @@ struct txToken {
txToken(void): Index(-1), Tab(-1) {}
txToken(exToken t, uint o, const std::string &a): Type(t), Offset(o), Attrib(a), Index(-1), Tab(-1) {}
+ friend bool operator< (const txToken &A, const txToken &B);
+
static std::string Token(const txToken &Token);
};
+inline bool operator< (const txToken &A, const txToken &B)
+{
+ if (A.Type == B.Type) {
+ if (A.Attrib == B.Attrib) {
+ if (A.Index == B.Index)
+ return A.Tab < B.Tab;
+ else
+ return A.Index < B.Index;
+ }
+ else
+ return A.Attrib < B.Attrib;
+ }
+ else
+ return A.Type < B.Type;
+}
+
class cxString {
private:
std::string mText;
diff --git a/xml/type.c b/xml/type.c
index f26a036..2c5bc0f 100644
--- a/xml/type.c
+++ b/xml/type.c
@@ -1,11 +1,14 @@
/*
- * $Id: type.c,v 1.3 2004/12/12 20:26:25 lordjaxom Exp $
+ * $Id: type.c,v 1.4 2004/12/17 19:56:16 lordjaxom Exp $
*/
#include "xml/type.h"
#include "xml/function.h"
#include <stdio.h>
+cxType cxType::False(false);
+cxType cxType::True(true);
+
const std::string &cxType::String(void) {
if (mType == number) {
char *buffer;
diff --git a/xml/type.h b/xml/type.h
index 1776ddf..7aa47d1 100644
--- a/xml/type.h
+++ b/xml/type.h
@@ -1,5 +1,5 @@
/*
- * $Id: type.h,v 1.5 2004/12/14 20:02:31 lordjaxom Exp $
+ * $Id: type.h,v 1.6 2004/12/17 19:56:16 lordjaxom Exp $
*/
#ifndef VDR_TEXT2SKIN_XML_TYPE_H
@@ -22,6 +22,9 @@ private:
int mNumber;
public:
+ static cxType True;
+ static cxType False;
+
cxType(void): mType(boolean), mNumber(0) {}
cxType(const char *String): mType(string), mString(String ?: "") {}
cxType(std::string String): mType(string), mString(String) {}
@@ -30,15 +33,11 @@ public:
cxType(bool Value): mType(boolean), mNumber(Value ? 1 : 0) {}
const std::string &String(void);
- int Number(void) const;
+ int Number(void) const { return mType == number ? mNumber : 0; }
operator std::string () { return String(); }
operator int () { return Number(); }
operator bool () { return Number(); }
};
-inline int cxType::Number(void) const {
- return mType == number ? mNumber : 0;
-}
-
#endif // VDR_TEXT2SKIN_XML_TYPE_H