summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlordjaxom <lordjaxom>2004-12-19 22:03:02 +0000
committerlordjaxom <lordjaxom>2004-12-19 22:03:02 +0000
commit9aeb43d010d2452890d2c04832f1dfda8d963c4d (patch)
tree4907fb636d40fc14a8f4d53ce33540afab3119cb
parentac920774dee48c0a85b3c6fc8c6785c1a5dd8f6d (diff)
downloadvdr-plugin-text2skin-9aeb43d010d2452890d2c04832f1dfda8d963c4d.tar.gz
vdr-plugin-text2skin-9aeb43d010d2452890d2c04832f1dfda8d963c4d.tar.bz2
Initial revision
-rw-r--r--Makefile4
-rw-r--r--bitmap.c2
-rw-r--r--bitmap.h2
-rw-r--r--cache.c2
-rw-r--r--cache.h2
-rw-r--r--common.c77
-rw-r--r--common.h3
-rw-r--r--display.c129
-rw-r--r--display.h2
-rw-r--r--file.c2
-rw-r--r--file.h2
-rw-r--r--font.c2
-rw-r--r--font.h2
-rw-r--r--graphtft/font.c2
-rw-r--r--graphtft/font.h2
-rw-r--r--i18n.c2
-rw-r--r--i18n.h2
-rw-r--r--loader.c2
-rw-r--r--loader.h2
-rw-r--r--marquee.c92
-rw-r--r--marquee.h44
-rw-r--r--menu.c2
-rw-r--r--menu.h2
-rw-r--r--render.c64
-rw-r--r--render.h9
-rw-r--r--screen.c2
-rw-r--r--screen.h2
-rw-r--r--scroller.c17
-rw-r--r--scroller.h47
-rw-r--r--setup.c2
-rw-r--r--setup.h2
-rw-r--r--status.c2
-rw-r--r--status.h2
-rw-r--r--text2skin.c2
-rw-r--r--text2skin.h2
-rw-r--r--theme.c2
-rw-r--r--theme.h2
-rw-r--r--xml/display.c2
-rw-r--r--xml/display.h2
-rw-r--r--xml/function.c2
-rw-r--r--xml/function.h2
-rw-r--r--xml/object.c6
-rw-r--r--xml/object.h5
-rw-r--r--xml/parser.c8
-rw-r--r--xml/parser.h2
-rw-r--r--xml/skin.c2
-rw-r--r--xml/skin.h2
-rw-r--r--xml/string.c31
-rw-r--r--xml/string.h70
-rw-r--r--xml/type.c2
-rw-r--r--xml/type.h2
-rw-r--r--xml/xml.c2
-rw-r--r--xml/xml.h2
53 files changed, 486 insertions, 196 deletions
diff --git a/Makefile b/Makefile
index c8bf7ed..133e266 100644
--- a/Makefile
+++ b/Makefile
@@ -13,7 +13,7 @@ HAVE_FREETYPE=1
# DO NOT EDIT BELOW THIS LINE UNLESS YOU KNOW WHAT YOU'RE DOING
# -------------------------------------------------------------
#
-# $Id: Makefile,v 1.9 2004/12/12 20:26:25 lordjaxom Exp $
+# $Id: Makefile,v 1.1 2004/12/19 22:03:06 lordjaxom Exp $
#
# The official name of this plugin.
@@ -55,7 +55,7 @@ PACKAGE = vdr-$(ARCHIVE)
OBJS = $(PLUGIN).o loader.o display.o render.o common.o bitmap.o \
file.o i18n.o theme.o cache.o setup.o status.o scroller.o screen.o \
- menu.o font.o quantize.o \
+ menu.o font.o quantize.o marquee.o \
\
xml/skin.o xml/parser.o xml/string.o xml/object.o xml/function.o \
xml/type.o xml/display.o xml/xml.o
diff --git a/bitmap.c b/bitmap.c
index 227151e..55dedba 100644
--- a/bitmap.c
+++ b/bitmap.c
@@ -1,5 +1,5 @@
/*
- * $Id: bitmap.c,v 1.6 2004/12/14 20:02:31 lordjaxom Exp $
+ * $Id: bitmap.c,v 1.1 2004/12/19 22:03:08 lordjaxom Exp $
*/
#include "bitmap.h"
diff --git a/bitmap.h b/bitmap.h
index 9bfa984..9d95203 100644
--- a/bitmap.h
+++ b/bitmap.h
@@ -1,5 +1,5 @@
/*
- * $Id: bitmap.h,v 1.4 2004/12/14 13:13:10 lordjaxom Exp $
+ * $Id: bitmap.h,v 1.1 2004/12/19 22:03:09 lordjaxom Exp $
*/
#ifndef VDR_TEXT2SKIN_BITMAP_H
diff --git a/cache.c b/cache.c
index 0c2cfaf..eaab829 100644
--- a/cache.c
+++ b/cache.c
@@ -1,5 +1,5 @@
/*
- * $Id: cache.c,v 1.4 2004/12/14 20:02:31 lordjaxom Exp $
+ * $Id: cache.c,v 1.1 2004/12/19 22:03:09 lordjaxom Exp $
*/
#include "cache.h"
diff --git a/cache.h b/cache.h
index 3d26055..5c62d64 100644
--- a/cache.h
+++ b/cache.h
@@ -1,5 +1,5 @@
/*
- * $Id: cache.h,v 1.3 2004/12/14 20:02:31 lordjaxom Exp $
+ * $Id: cache.h,v 1.1 2004/12/19 22:03:09 lordjaxom Exp $
*/
#ifndef VDR_TEXT2SKIN_CACHE_HPP
diff --git a/common.c b/common.c
index cac3fab..e589235 100644
--- a/common.c
+++ b/common.c
@@ -1,5 +1,5 @@
/*
- * $Id: common.c,v 1.5 2004/12/17 19:56:16 lordjaxom Exp $
+ * $Id: common.c,v 1.1 2004/12/19 22:03:09 lordjaxom Exp $
*/
#include "common.h"
@@ -89,7 +89,8 @@ const char *ChannelBouquet(const cChannel *Channel, int Number) {
#endif
}
*/
-cxType TimeType(time_t Time, const std::string &Format) {
+cxType TimeType(time_t Time, const std::string &Format)
+{
static char result[1000];
struct tm tm_r, *tm;
tm = localtime_r(&Time, &tm_r);
@@ -101,10 +102,78 @@ cxType TimeType(time_t Time, const std::string &Format) {
} else
return Time;
}
- return false;
+ return cxType::False;
+}
+
+cxType DurationType(uint Index, const std::string &Format)
+{
+ static char result[1000];
+ if (Index > 0) {
+ if (Format.length() > 0) {
+ const char *ptr = Format.c_str();
+ char *res = result;
+ enum { normal, format } state = normal;
+ while (*ptr && res < result + sizeof(result)) {
+ int n = 0;
+ int f = (Index % FRAMESPERSEC) + 1;
+ int s = (Index / FRAMESPERSEC);
+ int m = s / 60 % 60;
+ int h = s / 3600;
+ s %= 60;
+ switch (state) {
+ case normal:
+ if (*ptr == '%')
+ state = format;
+ else
+ *(res++) = *ptr;
+ break;
+
+ case format:
+ switch (*ptr) {
+ case 'H':
+ n = snprintf(res, sizeof(result) - (res - result), "%02d", h);
+ break;
+
+ case 'k':
+ n = snprintf(res, sizeof(result) - (res - result), "% 2d", h);
+ break;
+
+ case 'M':
+ n = snprintf(res, sizeof(result) - (res - result), "%02d", m);
+ break;
+
+ case 'm':
+ n = snprintf(res, sizeof(result) - (res - result), "%d", m + (h * 60));
+ break;
+
+ case 'S':
+ n = snprintf(res, sizeof(result) - (res - result), "%02d", s);
+ break;
+
+ case 'f':
+ n = snprintf(res, sizeof(result) - (res - result), "%d", f);
+ break;
+
+ case '%':
+ n = 1;
+ *res = '%';
+ break;
+ }
+ res += n;
+ state = normal;
+ break;
+ }
+ ++ptr;
+ }
+ return result;
+ } else
+ return (int)Index;
+ }
+ return cxType::False;
}
-bool ParseVar(const char *Text, const char *Name, std::string &Value) {
+bool ParseVar(const char *Text, const char *Name, std::string &Value)
+{
const char *ptr1, *ptr2;
char *str;
bool res = false;
diff --git a/common.h b/common.h
index 52d1ad4..a0c55bf 100644
--- a/common.h
+++ b/common.h
@@ -1,5 +1,5 @@
/*
- * $Id: common.h,v 1.5 2004/12/14 20:02:31 lordjaxom Exp $
+ * $Id: common.h,v 1.1 2004/12/19 22:03:09 lordjaxom Exp $
*/
#ifndef VDR_TEXT2SKIN_COMMON_H
@@ -36,6 +36,7 @@ const char *ChannelShortName(const cChannel *Channel, int Number);
//const char *ChannelBouquet(const cChannel *Channel, int Number);
cxType TimeType(time_t Time, const std::string &Format);
+cxType DurationType(uint Index, const std::string &Format);
bool ParseVar(const char *Text, const char *Name, std::string &Value);
bool ParseVar(const char *Text, const char *Name, tColor *Value);
diff --git a/display.c b/display.c
index 6753cb5..b4334df 100644
--- a/display.c
+++ b/display.c
@@ -1,5 +1,5 @@
/*
- * $Id: display.c,v 1.10 2004/12/17 19:56:16 lordjaxom Exp $
+ * $Id: display.c,v 1.1 2004/12/19 22:03:12 lordjaxom Exp $
*/
#include "render.h"
@@ -127,33 +127,33 @@ cxType cText2SkinDisplayChannel::GetTokenData(const txToken &Token)
case tPresentStartDateTime:
return mPresent != NULL
- ? (cxType)TimeType(mPresent->StartTime(), Token.Attrib)
+ ? (cxType)TimeType(mPresent->StartTime(), Token.Attrib.Text)
: (cxType)false;
case tPresentVPSDateTime:
return mPresent != NULL
- ? (cxType)TimeType(mPresent->Vps(), Token.Attrib)
+ ? (cxType)TimeType(mPresent->Vps(), Token.Attrib.Text)
: (cxType)false;
- case tPresentEndDateTime:
- return mPresent != NULL
- ? (cxType)TimeType(mPresent->EndTime(), Token.Attrib)
+ case tPresentEndDateTime: return mPresent != NULL
+ ? (cxType)TimeType(mPresent->EndTime(), Token.Attrib.Text)
: (cxType)false;
case tPresentProgress:
return mPresent != NULL
- ? (cxType)TimeType(time(NULL) - mPresent->StartTime(), Token.Attrib)
+ ? (cxType)DurationType((time(NULL) - mPresent->StartTime()) * FRAMESPERSEC,
+ Token.Attrib.Text)
: (cxType)false;
case tPresentDuration:
return mPresent != NULL
- ? (cxType)TimeType(mPresent->Duration(), Token.Attrib)
+ ? (cxType)DurationType(mPresent->Duration() * FRAMESPERSEC, Token.Attrib.Text)
: (cxType)false;
case tPresentRemaining:
return mPresent != NULL
- ? (cxType)TimeType(mPresent->Duration() - (time(NULL) - mPresent->StartTime()),
- Token.Attrib)
+ ? (cxType)DurationType((mPresent->Duration() - (time(NULL) - mPresent->StartTime()))
+ * FRAMESPERSEC, Token.Attrib.Text)
: (cxType)false;
case tPresentTitle:
@@ -173,22 +173,22 @@ cxType cText2SkinDisplayChannel::GetTokenData(const txToken &Token)
case tFollowingStartDateTime:
return mFollowing != NULL
- ? (cxType)TimeType(mFollowing->StartTime(), Token.Attrib)
+ ? (cxType)TimeType(mFollowing->StartTime(), Token.Attrib.Text)
: (cxType)false;
case tFollowingVPSDateTime:
return mFollowing != NULL
- ? (cxType)TimeType(mFollowing->Vps(), Token.Attrib)
+ ? (cxType)TimeType(mFollowing->Vps(), Token.Attrib.Text)
: (cxType)false;
case tFollowingEndDateTime:
return mFollowing != NULL
- ? (cxType)TimeType(mFollowing->EndTime(), Token.Attrib)
+ ? (cxType)TimeType(mFollowing->EndTime(), Token.Attrib.Text)
: (cxType)false;
case tFollowingDuration:
return mFollowing != NULL
- ? (cxType)TimeType(mFollowing->Duration(), Token.Attrib)
+ ? (cxType)DurationType(mFollowing->Duration() * FRAMESPERSEC, Token.Attrib.Text)
: (cxType)false;
case tFollowingTitle:
@@ -281,10 +281,9 @@ cxType cText2SkinDisplayChannel::GetTokenData(const txToken &Token)
case tButtonBlue:
return mButtonBlue;
- default: break;
+ default:
+ return cText2SkinRender::GetTokenData(Token);
}
-
- return cText2SkinRender::GetTokenData(Token);
}
// --- cText2SkinDisplayVolume ------------------------------------------------
@@ -324,10 +323,9 @@ cxType cText2SkinDisplayVolume::GetTokenData(const txToken &Token) {
case tIsMute:
return mMute;
- default: break;
+ default:
+ return cText2SkinRender::GetTokenData(Token);
}
-
- return cText2SkinRender::GetTokenData(Token);
}
// --- cText2SkinDisplayReplay ------------------------------------------------
@@ -369,6 +367,7 @@ void cText2SkinDisplayReplay::SetTitle(const char *Title)
void cText2SkinDisplayReplay::SetMode(bool Play, bool Forward, int Speed)
{
+ Dprintf("SetMode(%d, %d, %d)\n", Play, Forward, Speed);
UpdateLock();
if (!mStateInfo || mPlay != Play || mForward != Forward || mSpeed != Speed) {
mStateInfo = true;
@@ -472,10 +471,10 @@ cxType cText2SkinDisplayReplay::GetTokenData(const txToken &Token)
return mTitle;
case tReplayPositionIndex:
- return TimeType(mCurrent, Token.Attrib);
+ return DurationType(mCurrent, Token.Attrib.Text);
case tReplayDurationIndex:
- return TimeType(mTotal, Token.Attrib);
+ return DurationType(mTotal, Token.Attrib.Text);
case tReplayPosition:
return mPosition;
@@ -484,7 +483,7 @@ cxType cText2SkinDisplayReplay::GetTokenData(const txToken &Token)
return mDuration;
case tReplayRemaining:
- return TimeType(mTotal - mCurrent, Token.Attrib);
+ return DurationType(mTotal - mCurrent, Token.Attrib.Text);
case tReplayPrompt:
return mPrompt;
@@ -497,32 +496,32 @@ cxType cText2SkinDisplayReplay::GetTokenData(const txToken &Token)
case tIsFastForward:
if (mStateInfo && mSpeed != -1 && mPlay && mForward) {
- return Token.Attrib.length() > 0
- ? (cxType)(mSpeed == atoi(Token.Attrib.c_str()))
+ return Token.Attrib.Type == aNumber
+ ? (cxType)(mSpeed == Token.Attrib.Number)
: (cxType)true;
}
return false;
case tIsFastRewind:
if (mStateInfo && mSpeed != -1 && mPlay && !mForward) {
- return Token.Attrib.length() > 0
- ? (cxType)(mSpeed == atoi(Token.Attrib.c_str()))
+ return Token.Attrib.Type == aNumber
+ ? (cxType)(mSpeed == Token.Attrib.Number)
: (cxType)true;
}
return false;
case tIsSlowForward:
if (mStateInfo && mSpeed != -1 && !mPlay && mForward) {
- return Token.Attrib.length() > 0
- ? (cxType)(mSpeed == atoi(Token.Attrib.c_str()))
+ return Token.Attrib.Type == aNumber
+ ? (cxType)(mSpeed == Token.Attrib.Number)
: (cxType)true;
}
return false;
case tIsSlowRewind:
if (mStateInfo && mSpeed != -1 && !mPlay && !mForward) {
- return Token.Attrib.length() > 0
- ? (cxType)(mSpeed == atoi(Token.Attrib.c_str()))
+ return Token.Attrib.Type == aNumber
+ ? (cxType)(mSpeed == Token.Attrib.Number)
: (cxType)true;
}
return false;
@@ -565,23 +564,25 @@ cxType cText2SkinDisplayReplay::GetTokenData(const txToken &Token)
case tButtonBlue:
return mButtonBlue;
- default: break;
+ default:
+ return cText2SkinRender::GetTokenData(Token);
}
-
- return cText2SkinRender::GetTokenData(Token);
}
// --- cText2SkinDisplayMessage -----------------------------------------------
cText2SkinDisplayMessage::cText2SkinDisplayMessage(cText2SkinLoader *Loader):
cText2SkinRender(Loader, cxDisplay::message),
- mText("") {
+ mText("")
+{
}
-cText2SkinDisplayMessage::~cText2SkinDisplayMessage() {
+cText2SkinDisplayMessage::~cText2SkinDisplayMessage()
+{
}
-void cText2SkinDisplayMessage::SetMessage(eMessageType Type, const char *Text) {
+void cText2SkinDisplayMessage::SetMessage(eMessageType Type, const char *Text)
+{
UpdateLock();
if (Text == NULL) Text = "";
if (mType != Type || mText != Text) {
@@ -592,7 +593,8 @@ void cText2SkinDisplayMessage::SetMessage(eMessageType Type, const char *Text) {
UpdateUnlock();
}
-cxType cText2SkinDisplayMessage::GetTokenData(const txToken &Token) {
+cxType cText2SkinDisplayMessage::GetTokenData(const txToken &Token)
+{
switch (Token.Type) {
case tMessage:
return mText;
@@ -617,10 +619,9 @@ cxType cText2SkinDisplayMessage::GetTokenData(const txToken &Token) {
? (cxType)mText
: (cxType)false;
- default: break;
+ default:
+ return cText2SkinRender::GetTokenData(Token);
}
-
- return cText2SkinRender::GetTokenData(Token);
}
// --- cText2SkinDisplayMenu --------------------------------------------------
@@ -703,7 +704,8 @@ void cText2SkinDisplayMenu::SetButtons(const char *Red, const char *Green, const
UpdateUnlock();
}
-void cText2SkinDisplayMenu::SetMessage(eMessageType Type, const char *Text) {
+void cText2SkinDisplayMenu::SetMessage(eMessageType Type, const char *Text)
+{
UpdateLock();
if (Text == NULL) Text = "";
if (mMessageType != Type || mMessageText != Text) {
@@ -714,7 +716,8 @@ void cText2SkinDisplayMenu::SetMessage(eMessageType Type, const char *Text) {
UpdateUnlock();
}
-void cText2SkinDisplayMenu::SetItem(const char *Text, int Index, bool Current, bool Selectable) {
+void cText2SkinDisplayMenu::SetItem(const char *Text, int Index, bool Current, bool Selectable)
+{
UpdateLock();
if (Text == NULL)
return;
@@ -748,7 +751,8 @@ void cText2SkinDisplayMenu::SetItem(const char *Text, int Index, bool Current, b
UpdateUnlock();
}
-void cText2SkinDisplayMenu::SetEvent(const cEvent *Event) {
+void cText2SkinDisplayMenu::SetEvent(const cEvent *Event)
+{
UpdateLock();
if (mEvent != Event) {
mEvent = Event;
@@ -758,7 +762,8 @@ void cText2SkinDisplayMenu::SetEvent(const cEvent *Event) {
UpdateUnlock();
}
-void cText2SkinDisplayMenu::SetRecording(const cRecording *Recording) {
+void cText2SkinDisplayMenu::SetRecording(const cRecording *Recording)
+{
UpdateLock();
// yet unused
if (mRecording != Recording) {
@@ -769,7 +774,8 @@ void cText2SkinDisplayMenu::SetRecording(const cRecording *Recording) {
UpdateUnlock();
}
-void cText2SkinDisplayMenu::SetText(const char *Text, bool /*FixedFont*/) {
+void cText2SkinDisplayMenu::SetText(const char *Text, bool /*FixedFont*/)
+{
UpdateLock();
if (Text == NULL) Text = "";
if (mText != Text) {
@@ -779,20 +785,23 @@ void cText2SkinDisplayMenu::SetText(const char *Text, bool /*FixedFont*/) {
UpdateUnlock();
}
-void cText2SkinDisplayMenu::SetTabs(int Tab1, int Tab2, int Tab3, int Tab4, int Tab5) {
+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) {
+void cText2SkinDisplayMenu::Scroll(bool Up, bool Page)
+{
UpdateLock();
cText2SkinRender::Scroll(Up, Page);
SetDirty();
UpdateUnlock();
}
-cxType cText2SkinDisplayMenu::GetTokenData(const txToken &Token) {
+cxType cText2SkinDisplayMenu::GetTokenData(const txToken &Token)
+{
switch (Token.Type) {
case tMenuItem:
case tMenuGroup:
@@ -880,27 +889,34 @@ cxType cText2SkinDisplayMenu::GetTokenData(const txToken &Token) {
case tPresentStartDateTime:
return mEvent != NULL
- ? (cxType)TimeType(mEvent->StartTime(), Token.Attrib)
+ ? (cxType)TimeType(mEvent->StartTime(), Token.Attrib.Text)
: (cxType)false;
case tPresentVPSDateTime:
return mEvent != NULL
- ? (cxType)TimeType(mEvent->Vps(), Token.Attrib)
+ ? (cxType)TimeType(mEvent->Vps(), Token.Attrib.Text)
: (cxType)false;
case tPresentEndDateTime:
return mEvent != NULL
- ? (cxType)TimeType(mEvent->EndTime(), Token.Attrib)
+ ? (cxType)TimeType(mEvent->EndTime(), Token.Attrib.Text)
: (cxType)false;
case tPresentProgress:
return mEvent != NULL
- ? (cxType)TimeType(time(NULL) - mEvent->StartTime(), Token.Attrib)
+ ? (cxType)DurationType((time(NULL) - mEvent->StartTime()) * FRAMESPERSEC,
+ Token.Attrib.Text)
: (cxType)false;
case tPresentDuration:
return mEvent != NULL
- ? (cxType)TimeType(mEvent->Duration(), Token.Attrib)
+ ? (cxType)DurationType(mEvent->Duration() * FRAMESPERSEC, Token.Attrib.Text)
+ : (cxType)false;
+
+ case tPresentRemaining:
+ return mEvent != NULL
+ ? (cxType)DurationType((mEvent->Duration() - (time(NULL) - mEvent->StartTime()))
+ * FRAMESPERSEC, Token.Attrib.Text)
: (cxType)false;
case tPresentTitle:
@@ -930,8 +946,7 @@ cxType cText2SkinDisplayMenu::GetTokenData(const txToken &Token) {
case tMenuText:
return mText;
- default: break;
+ default:
+ return cText2SkinRender::GetTokenData(Token);
}
-
- return cText2SkinRender::GetTokenData(Token);
}
diff --git a/display.h b/display.h
index 6e03373..dcf6e4e 100644
--- a/display.h
+++ b/display.h
@@ -1,5 +1,5 @@
/*
- * $Id: display.h,v 1.8 2004/12/17 19:56:16 lordjaxom Exp $
+ * $Id: display.h,v 1.1 2004/12/19 22:03:13 lordjaxom Exp $
*/
#ifndef VDR_TEXT2SKIN_SKIN_H
diff --git a/file.c b/file.c
index 4da0668..534f464 100644
--- a/file.c
+++ b/file.c
@@ -1,5 +1,5 @@
/*
- * $Id: file.c,v 1.1.1.1 2004/11/19 16:45:31 lordjaxom Exp $
+ * $Id: file.c,v 1.1 2004/12/19 22:03:13 lordjaxom Exp $
*/
#include "file.h"
diff --git a/file.h b/file.h
index 7f9a692..0962377 100644
--- a/file.h
+++ b/file.h
@@ -1,5 +1,5 @@
/*
- * $Id: file.h,v 1.1.1.1 2004/11/19 16:45:31 lordjaxom Exp $
+ * $Id: file.h,v 1.1 2004/12/19 22:03:13 lordjaxom Exp $
*/
#ifndef VDR_TEXT2SKIN_FILE_H
diff --git a/font.c b/font.c
index ff26fea..4a77395 100644
--- a/font.c
+++ b/font.c
@@ -1,5 +1,5 @@
/*
- * $Id: font.c,v 1.6 2004/12/14 20:02:31 lordjaxom Exp $
+ * $Id: font.c,v 1.1 2004/12/19 22:03:13 lordjaxom Exp $
*/
#include "font.h"
diff --git a/font.h b/font.h
index 160076c..f1a818a 100644
--- a/font.h
+++ b/font.h
@@ -1,5 +1,5 @@
/*
- * $Id: font.h,v 1.5 2004/12/08 17:23:41 lordjaxom Exp $
+ * $Id: font.h,v 1.1 2004/12/19 22:03:13 lordjaxom Exp $
*/
#ifndef VDR_TEXT2SKIN_FONT_H
diff --git a/graphtft/font.c b/graphtft/font.c
index 54b6083..cd21471 100644
--- a/graphtft/font.c
+++ b/graphtft/font.c
@@ -1,5 +1,5 @@
/*
- * $Id: font.c,v 1.6 2004/12/14 20:02:31 lordjaxom Exp $
+ * $Id: font.c,v 1.1 2004/12/19 22:03:24 lordjaxom Exp $
*
* Taken from GraphTFT
*/
diff --git a/graphtft/font.h b/graphtft/font.h
index 8969287..2d2eee1 100644
--- a/graphtft/font.h
+++ b/graphtft/font.h
@@ -1,5 +1,5 @@
/*
- * $Id: font.h,v 1.5 2004/12/14 20:02:31 lordjaxom Exp $
+ * $Id: font.h,v 1.1 2004/12/19 22:03:24 lordjaxom Exp $
*
* Taken from GraphTFT
*/
diff --git a/i18n.c b/i18n.c
index b5612ed..4a909e8 100644
--- a/i18n.c
+++ b/i18n.c
@@ -1,5 +1,5 @@
/*
- * $Id: i18n.c,v 1.1.1.1 2004/11/19 16:45:31 lordjaxom Exp $
+ * $Id: i18n.c,v 1.1 2004/12/19 22:03:14 lordjaxom Exp $
*/
#include "i18n.h"
diff --git a/i18n.h b/i18n.h
index 4156007..d988e6b 100644
--- a/i18n.h
+++ b/i18n.h
@@ -1,5 +1,5 @@
/*
- * $Id: i18n.h,v 1.1.1.1 2004/11/19 16:45:31 lordjaxom Exp $
+ * $Id: i18n.h,v 1.1 2004/12/19 22:03:14 lordjaxom Exp $
*/
#ifndef VDR_TEXT2SKIN_I18N_H
diff --git a/loader.c b/loader.c
index 6d5db49..92389e1 100644
--- a/loader.c
+++ b/loader.c
@@ -1,5 +1,5 @@
/*
- * $Id: loader.c,v 1.6 2004/12/14 20:02:31 lordjaxom Exp $
+ * $Id: loader.c,v 1.1 2004/12/19 22:03:14 lordjaxom Exp $
*/
#include "loader.h"
diff --git a/loader.h b/loader.h
index 159f7fe..a7aa10e 100644
--- a/loader.h
+++ b/loader.h
@@ -1,5 +1,5 @@
/*
- * $Id: loader.h,v 1.1.1.1 2004/11/19 16:45:31 lordjaxom Exp $
+ * $Id: loader.h,v 1.1 2004/12/19 22:03:14 lordjaxom Exp $
*/
#ifndef VDR_TEXT2SKIN_LOADER_H
diff --git a/marquee.c b/marquee.c
new file mode 100644
index 0000000..0397718
--- /dev/null
+++ b/marquee.c
@@ -0,0 +1,92 @@
+/*
+ * $Id: marquee.c,v 1.1 2004/12/19 22:03:14 lordjaxom Exp $
+ */
+
+#include "marquee.h"
+#include "screen.h"
+#include <vdr/tools.h>
+
+cText2SkinMarquee::cText2SkinMarquee(const cText2SkinMarquee &Src):
+ mScreen(Src.mScreen),
+ mFont(Src.mFont),
+ mLeft(Src.mLeft),
+ mTop(Src.mTop),
+ mWidth(Src.mWidth),
+ mHeight(Src.mHeight),
+ mText(Src.mText),
+ mScrolling(Src.mScrolling),
+ mOffset(Src.mOffset),
+ mDirection(Src.mDirection),
+ mColorFg(Src.mColorFg),
+ mColorBg(Src.mColorBg),
+ mNextTime(Src.mNextTime)
+{
+}
+
+cText2SkinMarquee::cText2SkinMarquee(cText2SkinScreen *Screen, int Left, int Top, int Width,
+ int Height, const std::string &Text, const cFont *Font,
+ tColor ColorFg, tColor ColorBg, int &UpdateIn)
+{
+ Set(Screen, Left, Top, Width, Height, Text, Font, ColorFg, ColorBg, UpdateIn);
+}
+
+void cText2SkinMarquee::Set(cText2SkinScreen *Screen, int Left, int Top, int Width, int Height,
+ const std::string &Text, const cFont *Font, tColor ColorFg,
+ tColor ColorBg, int &UpdateIn)
+{
+ mScreen = Screen;
+ mFont = Font;
+ mLeft = Left;
+ mTop = Top;
+ mWidth = Width;
+ mHeight = Height;
+ mText = Text;
+ mColorFg = ColorFg;
+ mColorBg = ColorBg;
+ mOffset = 0;
+ mDirection = 1;
+ mNextTime = 0;
+ mScrolling = mFont->Width(mText.c_str()) > mWidth;
+ DrawText(UpdateIn);
+}
+
+void cText2SkinMarquee::DrawText(int &mUpdateIn)
+{
+ uint now = time_ms();
+ if (!mScrolling || (mNextTime > 0 && now < mNextTime)) {
+ mScreen->DrawText(mLeft, mTop, mText.c_str() + mOffset, mColorFg, mColorBg, mFont, mWidth,
+ mHeight);
+ if (mScrolling) {
+ uint updatein = mNextTime - now;
+ if (mUpdateIn == 0 || (uint)mUpdateIn > updatein)
+ mUpdateIn = updatein;
+ }
+ return;
+ }
+
+ int nextupdate = 250;
+ if (mDirection > 0) {
+ if (mFont->Width(mText.c_str() + mOffset) <= mWidth) {
+ --mDirection;
+ nextupdate = 1500;
+ }
+ else
+ ++mOffset;
+ }
+ else {
+ if (mOffset <= 0) {
+ ++mDirection;
+ nextupdate = 1500;
+ }
+ else
+ --mOffset;
+ }
+
+ mNextTime = now + nextupdate;
+
+ mScreen->DrawText(mLeft, mTop, mText.c_str() + mOffset, mColorFg, mColorBg, mFont, mWidth,
+ mHeight);
+
+ if (mUpdateIn == 0 || mUpdateIn > nextupdate)
+ mUpdateIn = nextupdate;
+}
diff --git a/marquee.h b/marquee.h
new file mode 100644
index 0000000..c989e47
--- /dev/null
+++ b/marquee.h
@@ -0,0 +1,44 @@
+/*
+ * $Id: marquee.h,v 1.1 2004/12/19 22:03:14 lordjaxom Exp $
+ */
+
+#ifndef VDR_TEXT2SKIN_MARQUEE_H
+#define VDR_TEXT2SKIN_MARQUEE_H
+
+#include <vdr/osd.h>
+#include <string>
+
+class cFont;
+class cText2SkinScreen;
+
+class cText2SkinMarquee {
+private:
+ cText2SkinScreen *mScreen;
+ const cFont *mFont;
+ int mLeft;
+ int mTop;
+ int mWidth;
+ int mHeight;
+ std::string mText;
+ bool mScrolling;
+ int mOffset;
+ int mDirection;
+ tColor mColorFg;
+ tColor mColorBg;
+ uint mNextTime;
+
+ cText2SkinMarquee(void) {} // disallow direct construction
+
+public:
+ cText2SkinMarquee(const cText2SkinMarquee &Src);
+ cText2SkinMarquee(cText2SkinScreen *Screen, int Left, int Top, int Width, int Height,
+ const std::string &Text, const cFont *Font, tColor ColorFg, tColor ColorBg,
+ int &UpdateIn);
+
+ void Set(cText2SkinScreen *Screen, int Left, int Top, int Width, int Height,
+ const std::string &Text, const cFont *Font, tColor ColorFg, tColor ColorBg,
+ int &UpdateIn);
+ void DrawText(int &UpdateIn);
+};
+
+#endif // VDR_TEXT2SKIN_MARQUEE_H
diff --git a/menu.c b/menu.c
index 167b9b9..6bc478d 100644
--- a/menu.c
+++ b/menu.c
@@ -1,5 +1,5 @@
/*
- * $Id: menu.c,v 1.1.1.1 2004/11/19 16:45:31 lordjaxom Exp $
+ * $Id: menu.c,v 1.1 2004/12/19 22:03:14 lordjaxom Exp $
*/
#include "menu.h"
diff --git a/menu.h b/menu.h
index 5b4ffa1..5cd1563 100644
--- a/menu.h
+++ b/menu.h
@@ -1,5 +1,5 @@
/*
- * $Id: menu.h,v 1.1.1.1 2004/11/19 16:45:31 lordjaxom Exp $
+ * $Id: menu.h,v 1.1 2004/12/19 22:03:14 lordjaxom Exp $
*/
#ifndef VDR_TEXT2SKIN_MENU_H
diff --git a/render.c b/render.c
index ba84bc4..1c938d2 100644
--- a/render.c
+++ b/render.c
@@ -1,5 +1,5 @@
/*
- * $Id: render.c,v 1.11 2004/12/17 19:56:16 lordjaxom Exp $
+ * $Id: render.c,v 1.1 2004/12/19 22:03:16 lordjaxom Exp $
*/
#include "render.h"
@@ -10,6 +10,7 @@
#include "status.h"
#include "screen.h"
#include "scroller.h"
+#include "marquee.h"
#include "xml/display.h"
#include <vdr/channels.h>
#include <vdr/epg.h>
@@ -105,6 +106,7 @@ cText2SkinRender::~cText2SkinRender()
Cancel(3);
}
delete mScroller;
+ mMarquees.clear();
delete mScreen;
//cText2SkinBitmap::ResetCache();
mRender = NULL;
@@ -156,6 +158,11 @@ void cText2SkinRender::DrawObject(const cxObject *Object)
Object->Align());
break;
+ case cxObject::marquee:
+ DrawMarquee(Object->Pos(), Object->Size(), Object->Fg(), Object->Text(), Object->Font(),
+ Object->Align(), Object->Index());
+ break;
+
case cxObject::rectangle:
DrawRectangle(Object->Pos(), Object->Size(), Object->Fg());
break;
@@ -274,6 +281,19 @@ void cText2SkinRender::DrawText(const txPoint &Pos, const txSize &Size, const tC
mScreen->DrawText(Pos.x, Pos.y, Text.c_str(), Fg ? *Fg : 0, 0, Font, Size.w, Size.h, Align);
}
+void cText2SkinRender::DrawMarquee(const txPoint &Pos, const txSize &Size, const tColor *Fg,
+ const std::string &Text, const cFont *Font, int Align,
+ uint Index)
+{
+ Dprintf("DrawMarquee %d -> %s\n", Index, Text.c_str());
+ if (Index >= mMarquees.size()) {
+ cText2SkinMarquee marquee(mScreen, Pos.x, Pos.y, Size.w, Size.h, Text, Font, Fg ? *Fg : 0,
+ clrTransparent, mUpdateIn);
+ mMarquees.push_back(marquee);
+ } else
+ mMarquees[Index].DrawText(mUpdateIn);
+}
+
void cText2SkinRender::DrawRectangle(const txPoint &Pos, const txSize &Size, const tColor *Fg)
{
mScreen->DrawRectangle(Pos.x, Pos.y, Pos.x + Size.w - 1, Pos.y + Size.h - 1, Fg ? *Fg : 0);
@@ -447,27 +467,25 @@ cxType cText2SkinRender::GetToken(const txToken &Token)
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) {
- 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());
+ if (Token.Attrib.Type == aClean) {
+ std::string str = res.String();
+ int pos = -1;
+
+ 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 (mRender->mTokenCache[Token] = res);
@@ -478,7 +496,7 @@ cxType cText2SkinRender::GetToken(const txToken &Token)
cxType cText2SkinRender::GetTokenData(const txToken &Token)
{
switch (Token.Type) {
- case tDateTime: return TimeType(time(NULL), Token.Attrib);
+ case tDateTime: return TimeType(time(NULL), Token.Attrib.Text);
case tCanScrollUp: return mScroller != NULL && mScroller->CanScrollUp();
@@ -488,5 +506,5 @@ cxType cText2SkinRender::GetTokenData(const txToken &Token)
default: break;
}
- return false;
+ return cxType::False;
}
diff --git a/render.h b/render.h
index 6b3727a..ab8a37f 100644
--- a/render.h
+++ b/render.h
@@ -1,5 +1,5 @@
/*
- * $Id: render.h,v 1.9 2004/12/17 19:56:16 lordjaxom Exp $
+ * $Id: render.h,v 1.1 2004/12/19 22:03:17 lordjaxom Exp $
*/
#ifndef VDR_TEXT2SKIN_RENDER_H
@@ -7,6 +7,7 @@
#include "common.h"
#include "scroller.h"
+#include "marquee.h"
#include "xml/skin.h"
#include "xml/type.h"
#include <vdr/osd.h>
@@ -32,6 +33,7 @@ class cText2SkinRender: public cThread {
private:
typedef std::map<txToken,cxType> tTokenCache;
+ typedef std::vector<cText2SkinMarquee> tMarquees;
static cText2SkinRender *mRender;
@@ -41,6 +43,7 @@ private:
cText2SkinTheme *mTheme;
cText2SkinScreen *mScreen;
cText2SkinScroller *mScroller;
+ tMarquees mMarquees;
tTokenCache mTokenCache;
std::string mBasePath;
@@ -71,6 +74,8 @@ protected:
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);
+ void DrawMarquee(const txPoint &Pos, const txSize &Size, const tColor *Fg,
+ const std::string &Text, const cFont *Font, int Align, uint Index);
void DrawRectangle(const txPoint &Pos, const txSize &Size,
const tColor *Fg);
void DrawEllipse(const txPoint &Pos, const txSize &Size, const tColor *Fg, int Arc);
@@ -99,7 +104,7 @@ protected:
void Flush(bool Force = false);
void SetDirty(void) { mDirty = true; }
void Scroll(bool Up, bool Page) { if (mScroller) mScroller->Scroll(Up, Page); }
- void Clear(void) { DELETENULL(mScroller); }
+ void Clear(void) { DELETENULL(mScroller); mMarquees.clear(); }
public:
cText2SkinRender(cText2SkinLoader *Loader, cxDisplay::eType Section,
diff --git a/screen.c b/screen.c
index a45cb4a..a4434ee 100644
--- a/screen.c
+++ b/screen.c
@@ -1,5 +1,5 @@
/*
- * $Id: screen.c,v 1.2 2004/12/06 15:01:02 lordjaxom Exp $
+ * $Id: screen.c,v 1.1 2004/12/19 22:03:18 lordjaxom Exp $
*/
#include "screen.h"
diff --git a/screen.h b/screen.h
index 4a95b57..d57ce9b 100644
--- a/screen.h
+++ b/screen.h
@@ -1,5 +1,5 @@
/*
- * $Id: screen.h,v 1.3 2004/12/17 19:56:16 lordjaxom Exp $
+ * $Id: screen.h,v 1.1 2004/12/19 22:03:18 lordjaxom Exp $
*/
#ifndef VDR_TEXT2SKIN_SCREEN_H
diff --git a/scroller.c b/scroller.c
index 9a057cc..9275b46 100644
--- a/scroller.c
+++ b/scroller.c
@@ -1,22 +1,15 @@
/*
- * $Id: scroller.c,v 1.3 2004/12/08 17:13:26 lordjaxom Exp $
+ * $Id: scroller.c,v 1.1 2004/12/19 22:03:18 lordjaxom Exp $
*/
#include "scroller.h"
#include "screen.h"
#include <vdr/tools.h>
-cText2SkinScroller::cText2SkinScroller(void) {
- mScreen = NULL;
- mLeft = mTop = mWidth = mHeight = 0;
- mFont = NULL;
- mColorFg = 0;
- mColorBg = 0;
- mOffset = 0;
- mShown = 0;
-}
-
-cText2SkinScroller::cText2SkinScroller(cText2SkinScreen *Screen, int Left, int Top, int Width, int Height, const char *Text, const cFont *Font, tColor ColorFg, tColor ColorBg) {
+cText2SkinScroller::cText2SkinScroller(cText2SkinScreen *Screen, int Left, int Top, int Width,
+ int Height, const char *Text, const cFont *Font,
+ tColor ColorFg, tColor ColorBg)
+{
Set(Screen, Left, Top, Width, Height, Text, Font, ColorFg, ColorBg);
}
diff --git a/scroller.h b/scroller.h
index 01be018..22bd837 100644
--- a/scroller.h
+++ b/scroller.h
@@ -1,5 +1,5 @@
/*
- * $Id: scroller.h,v 1.2 2004/12/17 19:56:16 lordjaxom Exp $
+ * $Id: scroller.h,v 1.1 2004/12/19 22:03:18 lordjaxom Exp $
*/
#ifndef VDR_TEXT2SKIN_SCROLLER_H
@@ -12,36 +12,37 @@ class cText2SkinScreen;
class cText2SkinScroller {
private:
- cText2SkinScreen *mScreen;
- const cFont *mFont;
- int mLeft;
+ cText2SkinScreen *mScreen;
+ const cFont *mFont;
+ int mLeft;
int mTop;
int mWidth;
int mHeight;
- int mOffset;
+ int mOffset;
int mShown;
- tColor mColorFg;
+ tColor mColorFg;
tColor mColorBg;
- cTextWrapper mWrapper;
+ cTextWrapper mWrapper;
public:
- cText2SkinScroller(void);
- cText2SkinScroller(cText2SkinScreen *Screen, int Left, int Top, int Width, int Height, const char *Text, const cFont *Font, tColor ColorFg, tColor ColorBg);
+ cText2SkinScroller(cText2SkinScreen *Screen, int Left, int Top, int Width, int Height,
+ const char *Text, const cFont *Font, tColor ColorFg, tColor ColorBg);
- void Set(cText2SkinScreen *Screen, int Left, int Top, int Width, int Height, const char *Text, const cFont *Font, tColor ColorFg, tColor ColorBg);
- void DrawText(void);
- void Reset(void);
- int Left(void) { return mLeft; }
- int Top(void) { return mTop; }
- int Width(void) { return mWidth; }
- int Height(void) { return mHeight; }
- int Total(void) { return mWrapper.Lines(); }
- int Offset(void) { return mOffset; }
- int Shown(void) { return mShown; }
- 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);
+ void Set(cText2SkinScreen *Screen, int Left, int Top, int Width, int Height, const char *Text,
+ const cFont *Font, tColor ColorFg, tColor ColorBg);
+ void DrawText(void);
+ void Reset(void);
+ int Left(void) { return mLeft; }
+ int Top(void) { return mTop; }
+ int Width(void) { return mWidth; }
+ int Height(void) { return mHeight; }
+ int Total(void) { return mWrapper.Lines(); }
+ int Offset(void) { return mOffset; }
+ int Shown(void) { return mShown; }
+ 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);
};
#endif // VDR_TEXT2SKIN_SCROLLER_H
diff --git a/setup.c b/setup.c
index 7a8a9e8..575bda6 100644
--- a/setup.c
+++ b/setup.c
@@ -1,5 +1,5 @@
/*
- * $Id: setup.c,v 1.1.1.1 2004/11/19 16:45:31 lordjaxom Exp $
+ * $Id: setup.c,v 1.1 2004/12/19 22:03:19 lordjaxom Exp $
*/
#include "setup.h"
diff --git a/setup.h b/setup.h
index 935873a..bf9e8e1 100644
--- a/setup.h
+++ b/setup.h
@@ -1,5 +1,5 @@
/*
- * $Id: setup.h,v 1.1.1.1 2004/11/19 16:45:31 lordjaxom Exp $
+ * $Id: setup.h,v 1.1 2004/12/19 22:03:19 lordjaxom Exp $
*/
#ifndef VDR_TEXT2SKIN_SETUP_H
diff --git a/status.c b/status.c
index 7bbb749..08e5c88 100644
--- a/status.c
+++ b/status.c
@@ -1,5 +1,5 @@
/*
- * $Id: status.c,v 1.3 2004/12/08 18:47:37 lordjaxom Exp $
+ * $Id: status.c,v 1.1 2004/12/19 22:03:19 lordjaxom Exp $
*/
#include "status.h"
diff --git a/status.h b/status.h
index ccdbf85..56a09fc 100644
--- a/status.h
+++ b/status.h
@@ -1,5 +1,5 @@
/*
- * $Id: status.h,v 1.2 2004/12/08 17:13:26 lordjaxom Exp $
+ * $Id: status.h,v 1.1 2004/12/19 22:03:19 lordjaxom Exp $
*/
#ifndef VDR_TEXT2SKIN_STATUS_H
diff --git a/text2skin.c b/text2skin.c
index adee8ea..822ace0 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.5 2004/12/17 19:56:16 lordjaxom Exp $
+ * $Id: text2skin.c,v 1.1 2004/12/19 22:03:19 lordjaxom Exp $
*/
#include "text2skin.h"
diff --git a/text2skin.h b/text2skin.h
index 9391e5b..b40ea54 100644
--- a/text2skin.h
+++ b/text2skin.h
@@ -1,5 +1,5 @@
/*
- * $Id: text2skin.h,v 1.2 2004/12/08 17:13:26 lordjaxom Exp $
+ * $Id: text2skin.h,v 1.1 2004/12/19 22:03:19 lordjaxom Exp $
*/
#ifndef VDR_TEXT2SKIN_H
diff --git a/theme.c b/theme.c
index 376d468..cf473e8 100644
--- a/theme.c
+++ b/theme.c
@@ -1,5 +1,5 @@
/*
- * $Id: theme.c,v 1.1.1.1 2004/11/19 16:45:31 lordjaxom Exp $
+ * $Id: theme.c,v 1.1 2004/12/19 22:03:19 lordjaxom Exp $
*/
#include "theme.h"
#include <vdr/osd.h>
diff --git a/theme.h b/theme.h
index 17ed782..0982118 100644
--- a/theme.h
+++ b/theme.h
@@ -1,5 +1,5 @@
/*
- * $Id: theme.h,v 1.2 2004/12/17 19:56:16 lordjaxom Exp $
+ * $Id: theme.h,v 1.1 2004/12/19 22:03:19 lordjaxom Exp $
*/
#ifndef VDR_TEXT2SKIN_THEME_H
diff --git a/xml/display.c b/xml/display.c
index 4790b2d..058b7df 100644
--- a/xml/display.c
+++ b/xml/display.c
@@ -1,5 +1,5 @@
/*
- * $Id: display.c,v 1.3 2004/12/08 17:13:26 lordjaxom Exp $
+ * $Id: display.c,v 1.1 2004/12/19 22:03:25 lordjaxom Exp $
*/
#include "xml/display.h"
diff --git a/xml/display.h b/xml/display.h
index 6c233b2..b57f734 100644
--- a/xml/display.h
+++ b/xml/display.h
@@ -1,5 +1,5 @@
/*
- * $Id: display.h,v 1.3 2004/12/08 17:13:26 lordjaxom Exp $
+ * $Id: display.h,v 1.1 2004/12/19 22:03:25 lordjaxom Exp $
*/
#ifndef VDR_TEXT2SKIN_DISPLAY_H
diff --git a/xml/function.c b/xml/function.c
index 66bae48..ca06922 100644
--- a/xml/function.c
+++ b/xml/function.c
@@ -1,5 +1,5 @@
/*
- * $Id: function.c,v 1.8 2004/12/17 19:56:16 lordjaxom Exp $
+ * $Id: function.c,v 1.1 2004/12/19 22:03:26 lordjaxom Exp $
*/
#include "xml/function.h"
diff --git a/xml/function.h b/xml/function.h
index abd1199..a67163b 100644
--- a/xml/function.h
+++ b/xml/function.h
@@ -1,5 +1,5 @@
/*
- * $Id: function.h,v 1.5 2004/12/12 20:26:25 lordjaxom Exp $
+ * $Id: function.h,v 1.1 2004/12/19 22:03:26 lordjaxom Exp $
*/
#ifndef VDR_TEXT2SKIN_XML_FUNCTION_H
diff --git a/xml/object.c b/xml/object.c
index 940e5a9..b1da0b9 100644
--- a/xml/object.c
+++ b/xml/object.c
@@ -1,5 +1,5 @@
/*
- * $Id: object.c,v 1.6 2004/12/17 19:56:16 lordjaxom Exp $
+ * $Id: object.c,v 1.1 2004/12/19 22:03:27 lordjaxom Exp $
*/
#include "xml/object.h"
@@ -7,8 +7,8 @@
#include "font.h"
static const std::string ObjectNames[] =
- { "image", "text", "rectangle", "ellipse", "slope", "progress", "scrolltext", "scrollbar",
- "block", "list", "item" };
+ { "image", "text", "marquee", "rectangle", "ellipse", "slope", "progress", "scrolltext",
+ "scrollbar", "block", "list", "item" };
cxObject::cxObject(cxDisplay *parent):
mType((eType)__COUNT_OBJECT__),
diff --git a/xml/object.h b/xml/object.h
index 41a626a..4778b83 100644
--- a/xml/object.h
+++ b/xml/object.h
@@ -1,5 +1,5 @@
/*
- * $Id: object.h,v 1.5 2004/12/14 20:02:31 lordjaxom Exp $
+ * $Id: object.h,v 1.1 2004/12/19 22:03:27 lordjaxom Exp $
*/
#ifndef VDR_TEXT2SKIN_XML_OBJECT_H
@@ -48,6 +48,7 @@ public:
enum eType {
image,
text,
+ marquee,
rectangle,
ellipse,
slope,
@@ -80,6 +81,7 @@ private:
cxString mTotal;
std::string mFontFace;
int mFontSize;
+ uint mIndex;
cxObjects *mObjects; // used for block objects such as <list>
cxDisplay *mDisplay;
cxSkin *mSkin;
@@ -106,6 +108,7 @@ public:
std::string Text(void) const { return mText.Evaluate(); }
int Current(void) const { return mCurrent.Evaluate(); }
int Total(void) const { return mTotal.Evaluate(); }
+ uint Index(void) const { return mIndex; }
cxDisplay *Display(void) const { return mDisplay; }
cxSkin *Skin(void) const { return mSkin; }
diff --git a/xml/parser.c b/xml/parser.c
index 62cc69c..71c9453 100644
--- a/xml/parser.c
+++ b/xml/parser.c
@@ -1,5 +1,5 @@
/*
- * $Id: parser.c,v 1.7 2004/12/14 20:02:31 lordjaxom Exp $
+ * $Id: parser.c,v 1.1 2004/12/19 22:03:27 lordjaxom Exp $
*/
#include "xml/parser.h"
@@ -84,6 +84,7 @@ static cxSkin *skin = NULL;
static cxDisplay *display = NULL;
static cxObject *parent = NULL;
static cxObject *object = NULL;
+static uint mindex = 0;
bool xStartElem(const std::string &name, std::map<std::string,std::string> &attrs) {
//Dprintf("start element: %s\n", name.c_str());
@@ -146,10 +147,13 @@ bool xStartElem(const std::string &name, std::map<std::string,std::string> &attr
ATTRIB_MAN_FUNC ("path", object->mPath.Parse);
}
else if (name == "text"
+ || name == "marquee"
|| name == "scrolltext") {
ATTRIB_OPT_STRING("color", object->mFg);
ATTRIB_OPT_FUNC ("align", object->ParseAlignment);
ATTRIB_OPT_FUNC ("font", object->ParseFontFace);
+
+ object->mIndex = mindex++;
}
else if (name == "rectangle") {
ATTRIB_OPT_STRING("color", object->mFg);
@@ -197,6 +201,7 @@ bool xCharData(const std::string &text) {
if (end - start + 1 > 0) {
//Dprintf("context: %s\n", context[context.size() - 1].c_str());
if (context[context.size() - 1] == "text"
+ || context[context.size() - 1] == "marquee"
|| context[context.size() - 1] == "scrolltext") {
if (!object->mText.Parse(text.substr(start, end - start + 1)))
return false;
@@ -212,6 +217,7 @@ bool xEndElem(const std::string &name) {
if (name == "display") {
skin->mDisplays[display->Type()] = display;
display = NULL;
+ mindex = 0;
}
else if (object != NULL || parent != NULL) {
if (object == NULL) {
diff --git a/xml/parser.h b/xml/parser.h
index 60fe30c..5f37118 100644
--- a/xml/parser.h
+++ b/xml/parser.h
@@ -1,5 +1,5 @@
/*
- * $Id: parser.h,v 1.1.1.1 2004/11/19 16:45:31 lordjaxom Exp $
+ * $Id: parser.h,v 1.1 2004/12/19 22:03:28 lordjaxom Exp $
*/
#ifndef VDR_TEXT2SKIN_PARSER_H
diff --git a/xml/skin.c b/xml/skin.c
index 0cc753b..fb38950 100644
--- a/xml/skin.c
+++ b/xml/skin.c
@@ -1,5 +1,5 @@
/*
- * $Id: skin.c,v 1.2 2004/12/08 17:13:26 lordjaxom Exp $
+ * $Id: skin.c,v 1.1 2004/12/19 22:03:28 lordjaxom Exp $
*/
#include "xml/skin.h"
diff --git a/xml/skin.h b/xml/skin.h
index 40e25e7..8aae5f1 100644
--- a/xml/skin.h
+++ b/xml/skin.h
@@ -1,5 +1,5 @@
/*
- * $Id: skin.h,v 1.3 2004/12/08 17:13:26 lordjaxom Exp $
+ * $Id: skin.h,v 1.1 2004/12/19 22:03:28 lordjaxom Exp $
*/
#ifndef VDR_TEXT2SKIN_XML_SKIN_H
diff --git a/xml/string.c b/xml/string.c
index 5b573eb..742439e 100644
--- a/xml/string.c
+++ b/xml/string.c
@@ -1,5 +1,5 @@
/*
- * $Id: string.c,v 1.8 2004/12/17 19:56:16 lordjaxom Exp $
+ * $Id: string.c,v 1.1 2004/12/19 22:03:25 lordjaxom Exp $
*/
#include "xml/string.h"
@@ -40,8 +40,8 @@ static const char *Tokens[__COUNT_TOKEN__] = {
std::string txToken::Token(const txToken &Token) {
std::string result = (std::string)"{" + Tokens[Token.Type];
- if (Token.Attrib.length() > 0)
- result += ":" + Token.Attrib;
+ //if (Token.Attrib.length() > 0)
+ // result += ":" + Token.Attrib;
result += "}";
return result;
@@ -92,20 +92,31 @@ bool cxString::Parse(const std::string &Text) {
}
int pos = -1;
- txToken &lastToken = mTokens[mTokens.size() - 1];
- Dprintf("assigning attrib: %.*s\n", ptr-last, last);
- lastToken.Attrib.assign(last, ptr - last);
- while ((pos = lastToken.Attrib.find('\\', pos + 1)) != -1) {
- switch (lastToken.Attrib[pos + 1]) {
+ std::string attr;
+ attr.assign(last, ptr - last);
+ while ((pos = attr.find('\\', pos + 1)) != -1) {
+ switch (attr[pos + 1]) {
case 'n':
- lastToken.Attrib.replace(pos, 2, "\n");
+ attr.replace(pos, 2, "\n");
break;
default:
- lastToken.Attrib.erase(pos, 1);
+ attr.erase(pos, 1);
}
}
+ txToken &lastToken = mTokens[mTokens.size() - 1];
+ if (attr == "clean")
+ lastToken.Attrib = aClean;
+ else {
+ char *end;
+ int n = strtol(attr.c_str(), &end, 10);
+ if (end != attr.c_str() && end == '\0')
+ lastToken.Attrib = n;
+ else
+ lastToken.Attrib = attr;
+ }
+
inAttrib = false;
inToken = false;
} else {
diff --git a/xml/string.h b/xml/string.h
index 8e29db8..00e5fab 100644
--- a/xml/string.h
+++ b/xml/string.h
@@ -1,5 +1,5 @@
/*
- * $Id: string.h,v 1.8 2004/12/17 19:56:16 lordjaxom Exp $
+ * $Id: string.h,v 1.1 2004/12/19 22:03:28 lordjaxom Exp $
*/
#ifndef VDR_TEXT2SKIN_XML_STRING_H
@@ -96,15 +96,52 @@ enum exToken {
#define __COUNT_TOKEN__ (tCanScrollDown + 1)
};
+enum exAttrib {
+ aNone,
+ aNumber,
+ aString,
+ aClean
+
+#define __COUNT_ATTRIB__ (aClean + 1)
+};
+
+struct txAttrib {
+ exAttrib Type;
+ std::string Text;
+ int Number;
+
+ txAttrib(const std::string &a): Type(aString), Text(a) {}
+ txAttrib(int n): Type(aNumber), Number(0) {}
+ txAttrib(exAttrib t): Type(t), Text(""), Number(0) {}
+ txAttrib(void): Type(aNone) {}
+
+ friend bool operator== (const txAttrib &A, const txAttrib &B);
+ friend bool operator< (const txAttrib &A, const txAttrib &B);
+};
+
+inline bool operator== (const txAttrib &A, const txAttrib &B)
+{
+ return A.Type == B.Type
+ && A.Text == B.Text;
+}
+
+inline bool operator< (const txAttrib &A, const txAttrib &B)
+{
+ return A.Type == B.Type
+ ? A.Text < B.Text
+ : A.Type < B.Type;
+}
+
struct txToken {
- exToken Type;
- uint Offset;
- std::string Attrib;
- int Index;
- int Tab;
+ exToken Type;
+ uint Offset;
+ txAttrib Attrib;
+ int Index;
+ int Tab;
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) {}
+ 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);
@@ -113,18 +150,13 @@ struct txToken {
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;
+ return A.Type == B.Type
+ ? A.Attrib == B.Attrib
+ ? A.Index == B.Index
+ ? A.Tab < B.Tab
+ : A.Index < B.Index
+ : A.Attrib < B.Attrib
+ : A.Type < B.Type;
}
class cxString {
diff --git a/xml/type.c b/xml/type.c
index 2c5bc0f..90d1487 100644
--- a/xml/type.c
+++ b/xml/type.c
@@ -1,5 +1,5 @@
/*
- * $Id: type.c,v 1.4 2004/12/17 19:56:16 lordjaxom Exp $
+ * $Id: type.c,v 1.1 2004/12/19 22:03:28 lordjaxom Exp $
*/
#include "xml/type.h"
diff --git a/xml/type.h b/xml/type.h
index 7aa47d1..74e0a70 100644
--- a/xml/type.h
+++ b/xml/type.h
@@ -1,5 +1,5 @@
/*
- * $Id: type.h,v 1.6 2004/12/17 19:56:16 lordjaxom Exp $
+ * $Id: type.h,v 1.1 2004/12/19 22:03:28 lordjaxom Exp $
*/
#ifndef VDR_TEXT2SKIN_XML_TYPE_H
diff --git a/xml/xml.c b/xml/xml.c
index 2a239af..a91f5d6 100644
--- a/xml/xml.c
+++ b/xml/xml.c
@@ -1,5 +1,5 @@
/*
- * $Id: xml.c,v 1.3 2004/12/12 20:26:25 lordjaxom Exp $
+ * $Id: xml.c,v 1.1 2004/12/19 22:03:49 lordjaxom Exp $
* This module was kindly provided by Clemens Kirchgatterer
*/
diff --git a/xml/xml.h b/xml/xml.h
index 9abc641..ae42d45 100644
--- a/xml/xml.h
+++ b/xml/xml.h
@@ -1,5 +1,5 @@
/*
- * $Id: xml.h,v 1.1.1.1 2004/11/19 16:45:31 lordjaxom Exp $
+ * $Id: xml.h,v 1.1 2004/12/19 22:03:49 lordjaxom Exp $
* This module was kindly provided by Clemens Kirchgatterer
*/