summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--HISTORY7
-rw-r--r--channelcolumn.c6
-rw-r--r--channelcolumn.h1
-rw-r--r--config.c238
-rw-r--r--config.h66
-rw-r--r--detailview.c31
-rw-r--r--dummygrid.c69
-rw-r--r--epggrid.c98
-rw-r--r--epggrid.h1
-rw-r--r--footer.c6
-rw-r--r--headergrid.c122
-rw-r--r--headergrid.h2
-rw-r--r--imageloader.c9
-rw-r--r--osdmanager.c3
-rwxr-xr-xpo/de_DE.po101
-rw-r--r--setup.c138
-rw-r--r--setup.h5
-rw-r--r--statusheader.c15
-rw-r--r--statusheader.h1
-rw-r--r--themes/tvguide-nOpacitydarkred.theme28
-rw-r--r--timeline.c114
-rw-r--r--timer.c12
-rw-r--r--tvguide.c6
-rw-r--r--tvguideosd.c273
-rw-r--r--tvguideosd.h4
25 files changed, 873 insertions, 483 deletions
diff --git a/HISTORY b/HISTORY
index f7de1d7..9ebfa44 100644
--- a/HISTORY
+++ b/HISTORY
@@ -11,7 +11,7 @@ VDR Plugin 'tvguide' Revision History
- Changed channelheader to display transparent logos properly
- Added "style nOpacity" for backgrounds and theme nOpacity
-Version 0.0.3
+2013-05-13: Version 0.0.3
- Added dummy grids if no EPG information is available for a certain
time
@@ -19,3 +19,8 @@ Version 0.0.3
- Completely rewrote code for scrolling forward and backward in time
- Added status header with epg information of currently selected
schedule and scaled video picture
+
+2013-05-24: Version 0.0.4
+
+- Introduced horizontal display
+- Added Theme DarkRed
diff --git a/channelcolumn.c b/channelcolumn.c
index ef6e555..7537ef2 100644
--- a/channelcolumn.c
+++ b/channelcolumn.c
@@ -105,7 +105,11 @@ void cChannelColumn::drawGrids() {
}
int cChannelColumn::getX() {
- return tvguideConfig.timeColWidth + num*tvguideConfig.colWidth;
+ return tvguideConfig.timeLineWidth + num*tvguideConfig.colWidth;
+}
+
+int cChannelColumn::getY() {
+ return tvguideConfig.statusHeaderHeight + tvguideConfig.timeLineHeight + num*tvguideConfig.rowHeight;
}
cGrid * cChannelColumn::getActive() {
diff --git a/channelcolumn.h b/channelcolumn.h
index 054a8c5..eda8f0f 100644
--- a/channelcolumn.h
+++ b/channelcolumn.h
@@ -26,6 +26,7 @@ public:
bool readGrids();
void drawGrids();
int getX();
+ int getY();
int Start() { return myTime->GetStart(); };
int Stop() { return myTime->GetEnd(); };
const char* Name() { return channel->Name(); };
diff --git a/config.c b/config.c
index f9793ff..7ce265e 100644
--- a/config.c
+++ b/config.c
@@ -5,100 +5,141 @@ enum {
e24Hours
};
+enum {
+ eVertical,
+ eHorizontal
+};
+
+
cTvguideConfig::cTvguideConfig() {
osdWidth = 0;
osdHeight = 0;
+ displayMode = eHorizontal;
colWidth = 0;
+ rowHeight = 0;
channelCols = 5;
+ channelRows = 10;
displayTime = 160;
- minuteHeight = 0;
+ minutePixel = 0;
displayStatusHeader = 1;
statusHeaderPercent = 20;
statusHeaderHeight = 0;
scaleVideo = 1;
- timeColWidth = 120;
- headerHeight = 150;
- footerHeight = 80;
+ decorateVideo = 1;
+ timeLineWidthPercent = 8;
+ timeLineHeightPercent = 4;
+ displayChannelName = 1;
+ channelHeaderWidthPercent = 20;
+ channelHeaderHeightPercent = 15;
+ footerHeight = 80;
stepMinutes = 30;
- bigStepHours = 3;
+ bigStepHours = 3;
hugeStepHours = 24;
- jumpChannels = 5;
+ jumpChannels = 10;
hideChannelLogos = 0;
- logoWidth = 130;
- logoHeight = 100;
+ logoWidthRatio = 13;
+ logoHeightRatio = 10;
logoExtension = 0;
hideEpgImages = 0;
epgImageWidth = 315;
epgImageHeight = 240;
fontIndex = 0;
fontNameDefault = "VDRSymbols Sans:Book";
- fontHeaderSize = 33;
- fontStatusHeaderSize = 27;
- fontStatusHeaderLargeSize = 33;
- fontGridSize = 27;
- fontGridSmallSize = 24;
- fontTimeLineWeekdaySize = 40;
- fontTimeLineDateSize = 33;
- fontTimeLineTimeSize = 0;
- fontTimeLineTimeSizeDef12 = 24;
- fontTimeLineTimeSizeDef24 = 33;
- fontButtonSize = 33;
- fontDetailViewSize = 33;
- fontDetailHeaderSize = 40;
- fontMessageBoxSize = 33;
- fontMessageBoxLargeSize = 40;
- FontHeader = NULL;
- FontGrid = NULL;
- FontGridSmall = NULL;
- FontTimeLineWeekday = NULL;
- FontTimeLineDate = NULL;
- FontTimeLineTime = NULL;
+ FontButtonDelta = 0;
+ FontDetailViewDelta = 0;
+ FontDetailHeaderDelta = 0;
+ FontMessageBoxDelta = 0;
+ FontMessageBoxLargeDelta = 0;
+ FontStatusHeaderDelta = 0;
+ FontStatusHeaderLargeDelta = 0;
+ FontChannelHeaderDelta = 0;
+ FontGridDelta = 0;
+ FontGridSmallDelta = 0;
+ FontTimeLineWeekdayDelta = 0;
+ FontTimeLineDateDelta = 0;
+ FontTimeLineTimeDelta = 0;
+ FontChannelHeaderHorizontalDelta = 0;
+ FontGridHorizontalDelta = 0;
+ FontGridHorizontalSmallDelta = 0;
+ FontTimeLineDateHorizontalDelta = 0;
+ FontTimeLineTimeHorizontalDelta = 0;
+ //Common Fonts
FontButton = NULL;
FontDetailView = NULL;
FontDetailHeader = NULL;
FontMessageBox = NULL;
FontMessageBoxLarge = NULL;
-
+ FontStatusHeader = NULL;
+ FontStatusHeaderLarge = NULL;
+ //Fonts for vertical Display
+ FontChannelHeader = NULL;
+ FontGrid = NULL;
+ FontGridSmall = NULL;
+ FontTimeLineWeekday = NULL;
+ FontTimeLineDate = NULL;
+ FontTimeLineTime = NULL;
+ //Fonts for horizontal Display
+ FontChannelHeaderHorizontal = NULL;
+ FontGridHorizontal = NULL;
+ FontGridHorizontalSmall = NULL;
+ FontTimeLineDateHorizontal = NULL;
+ FontTimeLineTimeHorizontal = NULL;
+
timeFormat = 1;
- themeIndex = 0;
- useBlending = 1;
+ themeIndex = 4;
+ useBlending = 2;
roundedCorners = 0;
}
cTvguideConfig::~cTvguideConfig() {
- delete FontHeader;
+ delete FontButton;
+ delete FontDetailView;
+ delete FontDetailHeader;
+ delete FontMessageBox;
+ delete FontMessageBoxLarge;
delete FontStatusHeader;
delete FontStatusHeaderLarge;
- delete FontGrid;
+ delete FontChannelHeader;
+ delete FontGrid;
delete FontGridSmall;
- delete FontTimeLineWeekday;
+ delete FontTimeLineWeekday;
delete FontTimeLineDate;
delete FontTimeLineTime;
- delete FontButton;
- delete FontDetailView;
- delete FontDetailHeader;
- delete FontMessageBox;
- delete FontMessageBoxLarge;
+ delete FontChannelHeaderHorizontal;
+ delete FontGridHorizontal;
+ delete FontGridHorizontalSmall;
+ delete FontTimeLineDateHorizontal;
+ delete FontTimeLineTimeHorizontal;
}
void cTvguideConfig::setDynamicValues(int width, int height) {
+ SetGeometry(width, height);
+ SetFonts();
+}
+
+void cTvguideConfig::SetGeometry(int width, int height) {
osdWidth = width;
osdHeight = height;
- colWidth = (osdWidth - timeColWidth) / channelCols;
- statusHeaderHeight = (displayStatusHeader)?(statusHeaderPercent * osdHeight / 100):0;
- minuteHeight = (osdHeight - statusHeaderHeight - headerHeight - footerHeight) / displayTime;
-
- if (!fontTimeLineTimeSize) {
- if (timeFormat == e12Hours) {
- fontTimeLineTimeSize = fontTimeLineTimeSizeDef12;
- } else if (timeFormat == e24Hours) {
- fontTimeLineTimeSize = fontTimeLineTimeSizeDef24;
- }
- } else if ((fontTimeLineTimeSize == fontTimeLineTimeSizeDef12) && (timeFormat == e24Hours)) {
- fontTimeLineTimeSize = fontTimeLineTimeSizeDef24;
- } else if ((fontTimeLineTimeSize == fontTimeLineTimeSizeDef24) && (timeFormat == e12Hours)) {
- fontTimeLineTimeSize = fontTimeLineTimeSizeDef12;
- }
+ statusHeaderHeight = (displayStatusHeader)?(statusHeaderPercent * osdHeight / 100):0;
+ channelHeaderWidth = channelHeaderWidthPercent * osdWidth / 100;
+ channelHeaderHeight = channelHeaderHeightPercent * osdHeight / 100;
+ timeLineWidth = timeLineWidthPercent * osdWidth / 100;
+ timeLineHeight = timeLineHeightPercent * osdHeight / 100;
+
+ if (displayMode == eVertical) {
+ colWidth = (osdWidth - timeLineWidth) / channelCols;
+ rowHeight = 0;
+ minutePixel = (osdHeight - statusHeaderHeight - channelHeaderHeight - footerHeight) / displayTime;
+ } else if (displayMode == eHorizontal) {
+ colWidth = 0;
+ rowHeight = (osdHeight - statusHeaderHeight - timeLineHeight - footerHeight) / channelRows;
+ minutePixel = (osdWidth - channelHeaderWidth) / displayTime;
+ }
+
+ numGrids = (displayMode == eVertical)?channelCols:channelRows;
+}
+
+void cTvguideConfig::SetFonts(void){
cString fontname;
if (fontIndex == 0) {
fontname = fontNameDefault;
@@ -111,24 +152,34 @@ void cTvguideConfig::setDynamicValues(int width, int height) {
fontname = fontNameDefault;
}
cFont *test = NULL;
- test = cFont::CreateFont(*fontname, fontHeaderSize);
+ test = cFont::CreateFont(*fontname, 30);
if (!test) {
fontname = DefaultFontSml;
}
delete test;
- FontHeader = cFont::CreateFont(*fontname, fontHeaderSize);
- FontStatusHeader = cFont::CreateFont(*fontname, fontStatusHeaderSize);
- FontStatusHeaderLarge = cFont::CreateFont(*fontname, fontStatusHeaderLargeSize);
- FontGrid = cFont::CreateFont(*fontname, fontGridSize);
- FontGridSmall = cFont::CreateFont(*fontname, fontGridSmallSize);
- FontTimeLineWeekday = cFont::CreateFont(*fontname, fontTimeLineWeekdaySize);
- FontTimeLineDate = cFont::CreateFont(*fontname, fontTimeLineDateSize);
- FontTimeLineTime = cFont::CreateFont(*fontname, fontTimeLineTimeSize);
- FontButton = cFont::CreateFont(*fontname, fontButtonSize);
- FontDetailView = cFont::CreateFont(*fontname, fontDetailViewSize);
- FontDetailHeader = cFont::CreateFont(*fontname, fontDetailHeaderSize);
- FontMessageBox = cFont::CreateFont(*fontname, fontMessageBoxSize);
- FontMessageBoxLarge = cFont::CreateFont(*fontname, fontMessageBoxLargeSize);
+
+ //Common Fonts
+ FontButton = cFont::CreateFont(*fontname, footerHeight/3 + 4 + FontButtonDelta);
+ FontDetailView = cFont::CreateFont(*fontname, osdHeight/30 + FontDetailViewDelta);
+ FontDetailHeader = cFont::CreateFont(*fontname, osdHeight/25 + FontDetailHeaderDelta);
+ FontMessageBox = cFont::CreateFont(*fontname, osdHeight/33 + FontMessageBoxDelta);
+ FontMessageBoxLarge = cFont::CreateFont(*fontname, osdHeight/30 + FontMessageBoxLargeDelta);
+ FontStatusHeader = cFont::CreateFont(*fontname, statusHeaderHeight/6 - 4 + FontStatusHeaderDelta);
+ FontStatusHeaderLarge = cFont::CreateFont(*fontname, statusHeaderHeight/5 + FontStatusHeaderLargeDelta);
+ //Fonts for vertical Display
+ FontChannelHeader = cFont::CreateFont(*fontname, colWidth/10 + FontChannelHeaderDelta);
+ FontGrid = cFont::CreateFont(*fontname, colWidth/12 + FontGridDelta);
+ FontGridSmall = cFont::CreateFont(*fontname, colWidth/12 + FontGridSmallDelta);
+ FontTimeLineWeekday = cFont::CreateFont(*fontname, timeLineWidth/3 + FontTimeLineWeekdayDelta);
+ FontTimeLineDate = cFont::CreateFont(*fontname, timeLineWidth/4 + FontTimeLineDateDelta);
+ FontTimeLineTime = cFont::CreateFont(*fontname, timeLineWidth/4 + FontTimeLineTimeDelta);
+ //Fonts for horizontal Display
+ FontChannelHeaderHorizontal = cFont::CreateFont(*fontname, rowHeight/3 + FontChannelHeaderHorizontalDelta);
+ FontGridHorizontal = cFont::CreateFont(*fontname, rowHeight/3 + 5 + FontGridHorizontalDelta);
+ FontGridHorizontalSmall = cFont::CreateFont(*fontname, rowHeight/4 + FontGridHorizontalSmallDelta);
+ FontTimeLineDateHorizontal = cFont::CreateFont(*fontname, timeLineHeight/2 + 5 + FontTimeLineDateHorizontalDelta);
+ FontTimeLineTimeHorizontal = cFont::CreateFont(*fontname, timeLineHeight/2 + FontTimeLineTimeHorizontalDelta);
+
}
void cTvguideConfig::SetLogoPath(cString path) {
@@ -151,40 +202,51 @@ void cTvguideConfig::loadTheme() {
bool cTvguideConfig::SetupParse(const char *Name, const char *Value) {
if (strcmp(Name, "timeFormat") == 0) timeFormat = atoi(Value);
else if (strcmp(Name, "themeIndex") == 0) themeIndex = atoi(Value);
+ else if (strcmp(Name, "displayMode") == 0) displayMode = atoi(Value);
else if (strcmp(Name, "displayStatusHeader") == 0) displayStatusHeader = atoi(Value);
else if (strcmp(Name, "statusHeaderPercent") == 0) statusHeaderPercent = atoi(Value);
else if (strcmp(Name, "scaleVideo") == 0) scaleVideo = atoi(Value);
+ else if (strcmp(Name, "decorateVideo") == 0) decorateVideo = atoi(Value);
else if (strcmp(Name, "useBlending") == 0) useBlending = atoi(Value);
else if (strcmp(Name, "roundedCorners") == 0) roundedCorners = atoi(Value);
else if (strcmp(Name, "channelCols") == 0) channelCols = atoi(Value);
+ else if (strcmp(Name, "channelRows") == 0) channelRows = atoi(Value);
else if (strcmp(Name, "displayTime") == 0) displayTime = atoi(Value);
else if (strcmp(Name, "hideChannelLogos") == 0) hideChannelLogos = atoi(Value);
else if (strcmp(Name, "logoExtension") == 0) logoExtension = atoi(Value);
- else if (strcmp(Name, "logoWidth") == 0) logoWidth = atoi(Value);
- else if (strcmp(Name, "logoHeight") == 0) logoHeight = atoi(Value);
+ else if (strcmp(Name, "logoWidthRatio") == 0) logoWidthRatio = atoi(Value);
+ else if (strcmp(Name, "logoHeightRatio") == 0) logoHeightRatio = atoi(Value);
else if (strcmp(Name, "bigStepHours") == 0) bigStepHours = atoi(Value);
else if (strcmp(Name, "hugeStepHours") == 0) hugeStepHours = atoi(Value);
else if (strcmp(Name, "jumpChannels") == 0) jumpChannels = atoi(Value);
else if (strcmp(Name, "hideEpgImages") == 0) hideEpgImages = atoi(Value);
else if (strcmp(Name, "epgImageWidth") == 0) epgImageWidth = atoi(Value);
else if (strcmp(Name, "epgImageHeight") == 0) epgImageHeight = atoi(Value);
- else if (strcmp(Name, "timeColWidth") == 0) timeColWidth = atoi(Value);
- else if (strcmp(Name, "headerHeight") == 0) headerHeight = atoi(Value);
+ else if (strcmp(Name, "timeLineWidthPercent") == 0) timeLineWidthPercent = atoi(Value);
+ else if (strcmp(Name, "timeLineHeightPercent") == 0) timeLineHeightPercent = atoi(Value);
+ else if (strcmp(Name, "displayChannelName") == 0) displayChannelName = atoi(Value);
+ else if (strcmp(Name, "channelHeaderWidthPercent") == 0) channelHeaderWidthPercent = atoi(Value);
+ else if (strcmp(Name, "channelHeaderHeightPercent") == 0) channelHeaderHeightPercent = atoi(Value);
else if (strcmp(Name, "footerHeight") == 0) footerHeight = atoi(Value);
- else if (strcmp(Name, "fontIndex") == 0) fontIndex = atoi(Value);
- else if (strcmp(Name, "fontHeaderSize") == 0) fontHeaderSize = atoi(Value);
- else if (strcmp(Name, "fontStatusHeaderSize") == 0) fontStatusHeaderSize = atoi(Value);
- else if (strcmp(Name, "fontStatusHeaderLargeSize") == 0) fontStatusHeaderLargeSize = atoi(Value);
- else if (strcmp(Name, "fontGridSize") == 0) fontGridSize = atoi(Value);
- else if (strcmp(Name, "fontGridSmallSize") == 0) fontGridSmallSize = atoi(Value);
- else if (strcmp(Name, "fontTimeLineWeekdaySize") == 0) fontTimeLineWeekdaySize = atoi(Value);
- else if (strcmp(Name, "fontTimeLineDateSize") == 0) fontTimeLineDateSize = atoi(Value);
- else if (strcmp(Name, "fontTimeLineTimeSize") == 0) fontTimeLineTimeSize = atoi(Value);
- else if (strcmp(Name, "fontButtonSize") == 0) fontButtonSize = atoi(Value);
- else if (strcmp(Name, "fontDetailViewSize") == 0) fontDetailViewSize = atoi(Value);
- else if (strcmp(Name, "fontDetailHeaderSize") == 0) fontDetailHeaderSize = atoi(Value);
- else if (strcmp(Name, "fontMessageBoxSize") == 0) fontMessageBoxSize = atoi(Value);
- else if (strcmp(Name, "fontMessageBoxLargeSize") == 0) fontMessageBoxLargeSize = atoi(Value);
- else return false;
+ else if (strcmp(Name, "fontIndex") == 0) fontIndex = atoi(Value);
+ else if (strcmp(Name, "FontButtonDelta") == 0) FontButtonDelta = atoi(Value);
+ else if (strcmp(Name, "FontDetailViewDelta") == 0) FontDetailViewDelta = atoi(Value);
+ else if (strcmp(Name, "FontDetailHeaderDelta") == 0) FontDetailHeaderDelta = atoi(Value);
+ else if (strcmp(Name, "FontMessageBoxDelta") == 0) FontMessageBoxDelta = atoi(Value);
+ else if (strcmp(Name, "FontMessageBoxLargeDelta") == 0) FontMessageBoxLargeDelta = atoi(Value);
+ else if (strcmp(Name, "FontStatusHeaderDelta") == 0) FontStatusHeaderDelta = atoi(Value);
+ else if (strcmp(Name, "FontStatusHeaderLargeDelta") == 0) FontStatusHeaderLargeDelta = atoi(Value);
+ else if (strcmp(Name, "FontChannelHeaderDelta") == 0) FontChannelHeaderDelta = atoi(Value);
+ else if (strcmp(Name, "FontGridDelta") == 0) FontGridDelta = atoi(Value);
+ else if (strcmp(Name, "FontGridSmallDelta") == 0) FontGridSmallDelta = atoi(Value);
+ else if (strcmp(Name, "FontTimeLineWeekdayDelta") == 0) FontTimeLineWeekdayDelta = atoi(Value);
+ else if (strcmp(Name, "FontTimeLineDateDelta") == 0) FontTimeLineDateDelta = atoi(Value);
+ else if (strcmp(Name, "FontTimeLineTimeDelta") == 0) FontTimeLineTimeDelta = atoi(Value);
+ else if (strcmp(Name, "FontChannelHeaderHorizontalDelta") == 0) FontChannelHeaderHorizontalDelta = atoi(Value);
+ else if (strcmp(Name, "FontGridHorizontalDelta") == 0) FontGridHorizontalDelta = atoi(Value);
+ else if (strcmp(Name, "FontGridHorizontalSmallDelta") == 0) FontGridHorizontalSmallDelta = atoi(Value);
+ else if (strcmp(Name, "FontTimeLineDateHorizontalDelta") == 0) FontTimeLineDateHorizontalDelta = atoi(Value);
+ else if (strcmp(Name, "FontTimeLineTimeHorizontalDelta") == 0) FontTimeLineTimeHorizontalDelta = atoi(Value);
+ else return false;
return true;
}
diff --git a/config.h b/config.h
index 24af8bc..e50b2ac 100644
--- a/config.h
+++ b/config.h
@@ -7,26 +7,40 @@ class cTvguideConfig {
~cTvguideConfig();
void SetLogoPath(cString path);
void SetImagesPath(cString path);
- int osdWidth;
+ void SetGeometry(int width, int height);
+ void SetFonts(void);
+ int osdWidth;
int osdHeight;
+ int displayMode;
int colWidth;
+ int rowHeight;
int channelCols;
+ int channelRows;
+ int numGrids;
int displayTime;
- int minuteHeight;
+ int minutePixel;
int displayStatusHeader;
int statusHeaderPercent;
int statusHeaderHeight;
int scaleVideo;
- int timeColWidth;
- int headerHeight;
+ int decorateVideo;
+ int timeLineWidthPercent;
+ int timeLineHeightPercent;
+ int timeLineWidth;
+ int timeLineHeight;
+ int displayChannelName;
+ int channelHeaderWidthPercent;
+ int channelHeaderHeightPercent;
+ int channelHeaderWidth;
+ int channelHeaderHeight;
int footerHeight;
int stepMinutes;
int bigStepHours;
int hugeStepHours;
int jumpChannels;
int hideChannelLogos;
- int logoWidth;
- int logoHeight;
+ int logoWidthRatio;
+ int logoHeightRatio;
cString logoPath;
int logoExtension;
int hideEpgImages;
@@ -35,29 +49,37 @@ class cTvguideConfig {
cString epgImagePath;
int fontIndex;
const char *fontNameDefault;
- int fontHeaderSize;
- int fontStatusHeaderSize;
- int fontStatusHeaderLargeSize;
- int fontGridSize;
- int fontGridSmallSize;
- int fontTimeLineWeekdaySize;
- int fontTimeLineDateSize;
- int fontTimeLineTimeSize;
- int fontTimeLineTimeSizeDef12;
- int fontTimeLineTimeSizeDef24;
- int fontButtonSize;
- int fontDetailViewSize;
- int fontDetailHeaderSize;
- int fontMessageBoxSize;
- int fontMessageBoxLargeSize;
- const cFont *FontHeader;
+ int FontButtonDelta;
+ int FontDetailViewDelta;
+ int FontDetailHeaderDelta;
+ int FontMessageBoxDelta;
+ int FontMessageBoxLargeDelta;
+ int FontStatusHeaderDelta;
+ int FontStatusHeaderLargeDelta;
+ int FontChannelHeaderDelta;
+ int FontGridDelta;
+ int FontGridSmallDelta;
+ int FontTimeLineWeekdayDelta;
+ int FontTimeLineDateDelta;
+ int FontTimeLineTimeDelta;
+ int FontChannelHeaderHorizontalDelta;
+ int FontGridHorizontalDelta;
+ int FontGridHorizontalSmallDelta;
+ int FontTimeLineDateHorizontalDelta;
+ int FontTimeLineTimeHorizontalDelta;
+ const cFont *FontChannelHeader;
+ const cFont *FontChannelHeaderHorizontal;
const cFont *FontStatusHeader;
const cFont *FontStatusHeaderLarge;
const cFont *FontGrid;
const cFont *FontGridSmall;
+ const cFont *FontGridHorizontal;
+ const cFont *FontGridHorizontalSmall;
const cFont *FontTimeLineWeekday;
const cFont *FontTimeLineDate;
+ const cFont *FontTimeLineDateHorizontal;
const cFont *FontTimeLineTime;
+ const cFont *FontTimeLineTimeHorizontal;
const cFont *FontButton;
const cFont *FontDetailView;
const cFont *FontDetailHeader;
diff --git a/detailview.c b/detailview.c
index a05bf92..81f50df 100644
--- a/detailview.c
+++ b/detailview.c
@@ -7,8 +7,8 @@ cDetailView::cDetailView(cGrid *grid) {
FrameTime = 40; // ms
FadeTime = 500; // ms
borderWidth = 100; //px
- headerHeight = max (80 + tvguideConfig.logoHeight + 3 * tvguideConfig.FontDetailHeader->Height(), // border + logo + 3 Lines
- 80 + tvguideConfig.epgImageHeight);
+ headerHeight = max (40 + 3 * tvguideConfig.FontDetailHeader->Height(), // border + 3 Lines
+ 40 + tvguideConfig.epgImageHeight);
description.Set(event->Description(), tvguideConfig.FontDetailView, tvguideConfig.osdWidth-2*borderWidth - 50 - 40);
contentScrollable = setContentDrawportHeight();
createPixmaps();
@@ -61,19 +61,17 @@ void cDetailView::createPixmaps() {
void cDetailView::drawHeader() {
header->drawBackground();
header->drawBoldBorder();
-
- int lineHeight = tvguideConfig.FontDetailHeader->Height();
- int offset = 30;
+ int logoHeight = header->Height() / 2;
+ int logoWidth = logoHeight * tvguideConfig.logoWidthRatio / tvguideConfig.logoHeightRatio;
+ int lineHeight = tvguideConfig.FontDetailHeader->Height();
cImageLoader imgLoader;
- if (tvguideConfig.hideChannelLogos) {
- header->DrawText(cPoint(20, offset + 10), grid->column->getChannel()->Name(), theme.Color(clrFont), clrTransparent, tvguideConfig.FontDetailHeader);
- offset += lineHeight + 10;
- } else {
- if (imgLoader.LoadLogo(grid->column->getChannel()->Name())) {
+ bool logoDrawn = false;
+ if (!tvguideConfig.hideChannelLogos) {
+ if (imgLoader.LoadLogo(grid->column->getChannel()->Name(), logoWidth, logoHeight)) {
cImage logo = imgLoader.GetImage();
- headerLogo->DrawImage(cPoint(20, 20), logo);
+ headerLogo->DrawImage(cPoint(10, (header->Height() - logoHeight)/2), logo);
+ logoDrawn = true;
}
- offset += tvguideConfig.logoHeight;
}
if (!tvguideConfig.hideEpgImages) {
@@ -85,11 +83,12 @@ void cDetailView::drawHeader() {
header->DrawImage(cPoint(epgImageX, epgImageY), epgImage);
}
}
-
- header->DrawText(cPoint(20, offset), event->Title(), theme.Color(clrFont), clrTransparent, tvguideConfig.FontDetailHeader);
+ int textX = logoDrawn?(20 + logoWidth):20;
+ int textY = (header->Height() - 2*lineHeight)/2;
+ header->DrawText(cPoint(textX, textY), event->Title(), theme.Color(clrFont), clrTransparent, tvguideConfig.FontDetailHeader);
cString datetime = cString::sprintf("%s, %s - %s (%d min)", *event->GetDateString(), *event->GetTimeString(), *event->GetEndTimeString(), event->Duration()/60);
- header->DrawText(cPoint(20, offset + lineHeight), *datetime, theme.Color(clrFont), clrTransparent, tvguideConfig.FontDetailView);
- header->DrawText(cPoint(20, offset + 2 * lineHeight), event->ShortText(), theme.Color(clrFont), clrTransparent, tvguideConfig.FontDetailView);
+ header->DrawText(cPoint(textX, textY + lineHeight), *datetime, theme.Color(clrFont), clrTransparent, tvguideConfig.FontDetailView);
+ header->DrawText(cPoint(textX, textY + 2 * lineHeight), event->ShortText(), theme.Color(clrFont), clrTransparent, tvguideConfig.FontDetailView);
}
void cDetailView::drawContent() {
diff --git a/dummygrid.c b/dummygrid.c
index 123bce1..928b0b5 100644
--- a/dummygrid.c
+++ b/dummygrid.c
@@ -12,39 +12,64 @@ cDummyGrid::~cDummyGrid(void) {
void cDummyGrid::SetViewportHeight() {
int viewportHeightOld = viewportHeight;
- viewportHeight = Duration() / 60 * tvguideConfig.minuteHeight;
+ viewportHeight = Duration() / 60 * tvguideConfig.minutePixel;
if (viewportHeight != viewportHeightOld)
dirty = true;
}
void cDummyGrid::PositionPixmap() {
- int x0 = column->getX();
- int y0 = tvguideConfig.statusHeaderHeight + tvguideConfig.headerHeight;
- if ( column->Start() < StartTime() ) {
- y0 += (StartTime() - column->Start())/60*tvguideConfig.minuteHeight;
- }
- if (!pixmap) {
- pixmap = osdManager.requestPixmap(-1, cRect(x0, y0, tvguideConfig.colWidth, viewportHeight), cRect::Null);
- } else if (dirty) {
- osdManager.releasePixmap(pixmap);
- pixmap = osdManager.requestPixmap(-1, cRect(x0, y0, tvguideConfig.colWidth, viewportHeight), cRect::Null);
- } else {
- pixmap->SetViewPort(cRect(x0, y0, tvguideConfig.colWidth, viewportHeight));
- }
+ int x0, y0;
+ if (tvguideConfig.displayMode == eVertical) {
+ x0 = column->getX();
+ y0 = tvguideConfig.statusHeaderHeight + tvguideConfig.channelHeaderHeight;
+ if ( column->Start() < StartTime() ) {
+ y0 += (StartTime() - column->Start())/60*tvguideConfig.minutePixel;
+ }
+ if (!pixmap) {
+ pixmap = osdManager.requestPixmap(-1, cRect(x0, y0, tvguideConfig.colWidth, viewportHeight));
+ } else if (dirty) {
+ osdManager.releasePixmap(pixmap);
+ pixmap = osdManager.requestPixmap(-1, cRect(x0, y0, tvguideConfig.colWidth, viewportHeight));
+ } else {
+ pixmap->SetViewPort(cRect(x0, y0, tvguideConfig.colWidth, viewportHeight));
+ }
+ } else if (tvguideConfig.displayMode == eHorizontal) {
+ x0 = tvguideConfig.channelHeaderWidth;
+ y0 = column->getY();
+ if ( column->Start() < StartTime() ) {
+ x0 += (StartTime() - column->Start())/60*tvguideConfig.minutePixel;
+ }
+ if (!pixmap) {
+ pixmap = osdManager.requestPixmap(-1, cRect(x0, y0, viewportHeight, tvguideConfig.rowHeight));
+ } else if (dirty) {
+ osdManager.releasePixmap(pixmap);
+ pixmap = osdManager.requestPixmap(-1, cRect(x0, y0, viewportHeight, tvguideConfig.rowHeight));
+ } else {
+ pixmap->SetViewPort(cRect(x0, y0, viewportHeight, tvguideConfig.rowHeight));
+ }
+ }
}
void cDummyGrid::setText() {
- text->Set(*(strText), tvguideConfig.FontGrid, tvguideConfig.colWidth-2*borderWidth);
+ if (tvguideConfig.displayMode == eVertical) {
+ text->Set(*strText, tvguideConfig.FontGrid, tvguideConfig.colWidth-2*borderWidth);
+ }
}
void cDummyGrid::drawText() {
- if (Height()/tvguideConfig.minuteHeight < 6)
- return;
- int textHeight = tvguideConfig.FontGrid->Height();
- int textLines = text->Lines();
- for (int i=0; i<textLines; i++) {
- pixmap->DrawText(cPoint(borderWidth, borderWidth + i*textHeight), text->GetLine(i), theme.Color(clrFont), clrTransparent, tvguideConfig.FontGrid);
- }
+ if (tvguideConfig.displayMode == eVertical) {
+ if (Height()/tvguideConfig.minutePixel < 6)
+ return;
+ int textHeight = tvguideConfig.FontGrid->Height();
+ int textLines = text->Lines();
+ for (int i=0; i<textLines; i++) {
+ pixmap->DrawText(cPoint(borderWidth, borderWidth + i*textHeight), text->GetLine(i), theme.Color(clrFont), clrTransparent, tvguideConfig.FontGrid);
+
+ }
+ } else if (tvguideConfig.displayMode == eHorizontal) {
+ int titleY = (tvguideConfig.rowHeight - tvguideConfig.FontGridHorizontal->Height())/2;
+ pixmap->DrawText(cPoint(borderWidth, titleY), *strText, theme.Color(clrFont), clrTransparent, tvguideConfig.FontGridHorizontal);
+ }
}
cString cDummyGrid::getText(void) {
return strText;
diff --git a/epggrid.c b/epggrid.c
index 67adb1e..711b0e1 100644
--- a/epggrid.c
+++ b/epggrid.c
@@ -24,50 +24,82 @@ void cEpgGrid::SetViewportHeight() {
} else {
viewportHeight = Duration() / 60;
}
- viewportHeight *= tvguideConfig.minuteHeight;
+ viewportHeight *= tvguideConfig.minutePixel;
if (viewportHeight != viewportHeightOld)
dirty = true;
}
void cEpgGrid::PositionPixmap() {
- int x0 = column->getX();
- int y0 = tvguideConfig.statusHeaderHeight + tvguideConfig.headerHeight;
- if ( column->Start() < StartTime() ) {
- y0 += (StartTime() - column->Start())/60*tvguideConfig.minuteHeight;
- }
- if (!pixmap) {
- pixmap = osdManager.requestPixmap(-1, cRect(x0, y0, tvguideConfig.colWidth, viewportHeight),
- cRect(0, 0, tvguideConfig.colWidth, Duration()/60*tvguideConfig.minuteHeight));
- } else {
- pixmap->SetViewPort(cRect(x0, y0, tvguideConfig.colWidth, viewportHeight));
- }
+ int x0, y0;
+ if (tvguideConfig.displayMode == eVertical) {
+ int x0 = column->getX();
+ int y0 = tvguideConfig.statusHeaderHeight + tvguideConfig.channelHeaderHeight;
+ if ( column->Start() < StartTime() ) {
+ y0 += (StartTime() - column->Start())/60*tvguideConfig.minutePixel;
+ }
+ if (!pixmap) {
+ pixmap = osdManager.requestPixmap(-1, cRect(x0, y0, tvguideConfig.colWidth, viewportHeight),
+ cRect(0, 0, tvguideConfig.colWidth, Duration()/60*tvguideConfig.minutePixel));
+ } else {
+ pixmap->SetViewPort(cRect(x0, y0, tvguideConfig.colWidth, viewportHeight));
+ }
+ } else if (tvguideConfig.displayMode == eHorizontal) {
+ int x0 = tvguideConfig.channelHeaderWidth;
+ int y0 = column->getY();
+ if ( column->Start() < StartTime() ) {
+ x0 += (StartTime() - column->Start())/60*tvguideConfig.minutePixel;
+ }
+ if (!pixmap) {
+ pixmap = osdManager.requestPixmap(-1, cRect(x0, y0, viewportHeight, tvguideConfig.rowHeight),
+ cRect(0, 0, Duration()/60*tvguideConfig.minutePixel, tvguideConfig.rowHeight));
+ } else {
+ pixmap->SetViewPort(cRect(x0, y0, viewportHeight, tvguideConfig.rowHeight ));
+ }
+ }
+
}
void cEpgGrid::setText() {
- cString strText;
- strText = cString::sprintf("%s - %s:\n%s", *(event->GetTimeString()), *(event->GetEndTimeString()), event->Title());
- text->Set(*(strText), tvguideConfig.FontGrid, tvguideConfig.colWidth-2*borderWidth);
- extText->Set(event->ShortText(), tvguideConfig.FontGridSmall, tvguideConfig.colWidth-2*borderWidth);
+ if (tvguideConfig.displayMode == eVertical) {
+ cString strText;
+ strText = cString::sprintf("%s - %s:\n%s", *(event->GetTimeString()), *(event->GetEndTimeString()), event->Title());
+ text->Set(*(strText), tvguideConfig.FontGrid, tvguideConfig.colWidth-2*borderWidth);
+ extText->Set(event->ShortText(), tvguideConfig.FontGridSmall, tvguideConfig.colWidth-2*borderWidth);
+ } else if (tvguideConfig.displayMode == eHorizontal) {
+ timeString = cString::sprintf("%s - %s", *(event->GetTimeString()), *(event->GetEndTimeString()));
+ }
}
void cEpgGrid::drawText() {
- if (Height()/tvguideConfig.minuteHeight < 6)
- return;
- int textHeight = tvguideConfig.FontGrid->Height();
- int textLines = text->Lines();
- for (int i=0; i<textLines; i++) {
- pixmap->DrawText(cPoint(borderWidth, borderWidth + i*textHeight), text->GetLine(i), theme.Color(clrFont), clrTransparent, tvguideConfig.FontGrid);
- }
- int extTextLines = extText->Lines();
- int offset = (textLines+1)*textHeight - 0.5*textHeight;
- textHeight = tvguideConfig.FontGridSmall->Height();
- if ((Height()-textHeight-10) > offset) {
- for (int i=0; i<extTextLines; i++) {
- pixmap->DrawText(cPoint(borderWidth, borderWidth + offset + i*textHeight), extText->GetLine(i), theme.Color(clrFont), clrTransparent, tvguideConfig.FontGridSmall);
- }
- }
- if (hasTimer)
- drawRecIcon();
+ if (tvguideConfig.displayMode == eVertical) {
+ if (Height()/tvguideConfig.minutePixel < 6)
+ return;
+ int textHeight = tvguideConfig.FontGrid->Height();
+ int textLines = text->Lines();
+ for (int i=0; i<textLines; i++) {
+ pixmap->DrawText(cPoint(borderWidth, borderWidth + i*textHeight), text->GetLine(i), theme.Color(clrFont), clrTransparent, tvguideConfig.FontGrid);
+ }
+ int extTextLines = extText->Lines();
+ int offset = (textLines+1)*textHeight - 0.5*textHeight;
+ textHeight = tvguideConfig.FontGridSmall->Height();
+ if ((Height()-textHeight-10) > offset) {
+ for (int i=0; i<extTextLines; i++) {
+ pixmap->DrawText(cPoint(borderWidth, borderWidth + offset + i*textHeight), extText->GetLine(i), theme.Color(clrFont), clrTransparent, tvguideConfig.FontGridSmall);
+ }
+ }
+ if (hasTimer)
+ drawRecIcon();
+ } else if (tvguideConfig.displayMode == eHorizontal) {
+ if (Width()/tvguideConfig.minutePixel < 10) {
+ int titleY = (tvguideConfig.rowHeight - tvguideConfig.FontGridHorizontal->Height())/2;
+ pixmap->DrawText(cPoint(borderWidth - 2, titleY), "...", theme.Color(clrFont), clrTransparent, tvguideConfig.FontGridHorizontal);
+ return;
+ }
+ pixmap->DrawText(cPoint(borderWidth, borderWidth), *timeString, theme.Color(clrFont), clrTransparent, tvguideConfig.FontGridHorizontalSmall);
+ cString strTitle = CutText(event->Title(), viewportHeight, tvguideConfig.FontGridHorizontal).c_str();
+ int titleY = tvguideConfig.FontGridHorizontalSmall->Height() + (tvguideConfig.rowHeight - tvguideConfig.FontGridHorizontalSmall->Height() - tvguideConfig.FontGridHorizontal->Height())/2;
+ pixmap->DrawText(cPoint(borderWidth, titleY), *strTitle, theme.Color(clrFont), clrTransparent, tvguideConfig.FontGridHorizontal);
+ }
}
void cEpgGrid::drawRecIcon() {
diff --git a/epggrid.h b/epggrid.h
index aa88b7f..400f0d3 100644
--- a/epggrid.h
+++ b/epggrid.h
@@ -7,6 +7,7 @@ class cEpgGrid : public cGrid {
private:
const cEvent *event;
cTextWrapper *extText;
+ cString timeString;
bool hasTimer;
void drawText();
void drawRecIcon();
diff --git a/footer.c b/footer.c
index 1849e88..4518d67 100644
--- a/footer.c
+++ b/footer.c
@@ -2,13 +2,13 @@
cFooter::cFooter() {
buttonBorder = 20;
- buttonWidth = (tvguideConfig.osdWidth - tvguideConfig.timeColWidth - 5*buttonBorder)/4;
+ buttonWidth = (tvguideConfig.osdWidth - tvguideConfig.timeLineWidth - 5*buttonBorder)/4;
buttonHeight= tvguideConfig.footerHeight - 2*buttonBorder;
buttonY = (tvguideConfig.footerHeight - buttonHeight)/2;
- footer = osdManager.requestPixmap(2, cRect( tvguideConfig.timeColWidth,
+ footer = osdManager.requestPixmap(2, cRect( tvguideConfig.timeLineWidth,
tvguideConfig.osdHeight - tvguideConfig.footerHeight,
- tvguideConfig.osdWidth - tvguideConfig.timeColWidth,
+ tvguideConfig.osdWidth - tvguideConfig.timeLineWidth,
tvguideConfig.footerHeight),
cRect::Null);
footer->Fill(clrTransparent);
diff --git a/headergrid.c b/headergrid.c
index 41a95f4..69d0011 100644
--- a/headergrid.c
+++ b/headergrid.c
@@ -12,20 +12,21 @@ cHeaderGrid::~cHeaderGrid(void) {
void cHeaderGrid::createBackground(int num) {
color = theme.Color(clrHeader);
colorBlending = theme.Color(clrHeaderBlending);
- pixmap = osdManager.requestPixmap(2, cRect( tvguideConfig.timeColWidth + num*tvguideConfig.colWidth,
- tvguideConfig.statusHeaderHeight,
- tvguideConfig.colWidth,
- tvguideConfig.headerHeight)
- , cRect::Null);
- if (!pixmap) {
- return;
- }
- pixmapLogo = osdManager.requestPixmap(3, cRect( tvguideConfig.timeColWidth + num*tvguideConfig.colWidth,
- tvguideConfig.statusHeaderHeight,
- tvguideConfig.colWidth,
- tvguideConfig.headerHeight)
- , cRect::Null);
- if (!pixmapLogo) {
+ int x, y, width, height;
+ if (tvguideConfig.displayMode == eVertical) {
+ x = tvguideConfig.timeLineWidth + num*tvguideConfig.colWidth;
+ y = tvguideConfig.statusHeaderHeight;
+ width = tvguideConfig.colWidth;
+ height = tvguideConfig.channelHeaderHeight;
+ } else if (tvguideConfig.displayMode == eHorizontal) {
+ x = 0;
+ y = tvguideConfig.statusHeaderHeight + tvguideConfig.timeLineHeight + num*tvguideConfig.rowHeight;
+ width = tvguideConfig.channelHeaderWidth;
+ height = tvguideConfig.rowHeight;
+ }
+ pixmap = osdManager.requestPixmap(2, cRect(x, y, width, height));
+ pixmapLogo = osdManager.requestPixmap(3, cRect(x, y, width, height));
+ if ((!pixmap) || (!pixmapLogo)){
return;
}
pixmapLogo->Fill(clrTransparent);
@@ -33,38 +34,93 @@ void cHeaderGrid::createBackground(int num) {
}
void cHeaderGrid::drawChannel(const cChannel *channel) {
+ if (tvguideConfig.displayMode == eVertical) {
+ drawChannelVertical(channel);
+ } else if (tvguideConfig.displayMode == eHorizontal) {
+ drawChannelHorizontal(channel);
+ }
+ drawBorder();
+}
+
+void cHeaderGrid::drawChannelHorizontal(const cChannel *channel) {
+ int logoWidth = Height() * tvguideConfig.logoWidthRatio / tvguideConfig.logoHeightRatio;
+ int logoX = tvguideConfig.displayChannelName?2:(Width()-logoWidth)/2;
+ int textX = 5;
+ int textY = (Height() - tvguideConfig.FontChannelHeaderHorizontal->Height())/2;
+ bool logoFound = false;
+ if (!tvguideConfig.hideChannelLogos) {
+ cImageLoader imgLoader;
+ if (imgLoader.LoadLogo(channel->Name(), logoWidth, Height())) {
+ cImage logo = imgLoader.GetImage();
+ pixmapLogo->DrawImage(cPoint(logoX, 0), logo);
+ logoFound = true;
+ }
+ }
+ bool drawText = false;
+ int textWidthMax = Width() - 10;
+ if (!logoFound) {
+ drawText = true;
+ } else if (tvguideConfig.displayChannelName) {
+ drawText = true;
+ textX += logoWidth;
+ textWidthMax -= logoWidth;
+ }
+ if (drawText) {
+ cString strChannel = cString::sprintf("%d %s", channel->Number(), channel->Name());
+ strChannel = CutText(*strChannel, textWidthMax, tvguideConfig.FontChannelHeaderHorizontal).c_str();
+ pixmap->DrawText(cPoint(textX, textY), *strChannel, theme.Color(clrFontHeader), clrTransparent, tvguideConfig.FontChannelHeaderHorizontal);
+ }
+}
+
+void cHeaderGrid::drawChannelVertical(const cChannel *channel) {
+ int logoWidth = Width()/2 - 15;
+ int logoHeight = logoWidth * tvguideConfig.logoHeightRatio / tvguideConfig.logoWidthRatio;
cTextWrapper tw;
cString headerText = cString::sprintf("%d - %s", channel->Number(), channel->Name());
- tw.Set(*headerText, tvguideConfig.FontHeader, tvguideConfig.colWidth - 8);
+ tw.Set(*headerText, tvguideConfig.FontChannelHeader, tvguideConfig.colWidth - 8);
int lines = tw.Lines();
- int lineHeight = tvguideConfig.FontHeader->Height();
- int yStart = (tvguideConfig.headerHeight - lines*lineHeight)/2 + 8;
- if (!tvguideConfig.hideChannelLogos) {
+ int lineHeight = tvguideConfig.FontChannelHeader->Height();
+ int yStart = (tvguideConfig.channelHeaderHeight - lines*lineHeight)/2 + 8;
+ bool logoFound = false;
+ if (!tvguideConfig.hideChannelLogos) {
cImageLoader imgLoader;
- if (imgLoader.LoadLogo(channel->Name())) {
+ if (imgLoader.LoadLogo(channel->Name(), logoWidth, logoHeight)) {
cImage logo = imgLoader.GetImage();
- int logoX = (tvguideConfig.colWidth - tvguideConfig.logoWidth)/2;
- pixmapLogo->DrawImage(cPoint(logoX, 5), logo);
+ pixmapLogo->DrawImage(cPoint((Width() - logoWidth)/2, 4), logo);
+ logoFound = true;
}
- yStart = tvguideConfig.logoHeight + 8;
}
+ bool drawText = false;
+ if (!logoFound) {
+ drawText = true;
+ } else if (tvguideConfig.displayChannelName) {
+ drawText = true;
+ yStart = logoHeight;
+ }
+ if (!drawText)
+ return;
for (int i=0; i<lines; i++) {
- int textWidth = tvguideConfig.FontHeader->Width(tw.GetLine(i));
+ int textWidth = tvguideConfig.FontChannelHeader->Width(tw.GetLine(i));
int xText = (tvguideConfig.colWidth - textWidth) / 2;
if (xText < 0)
xText = 0;
- pixmap->DrawText(cPoint(xText, yStart + i*lineHeight), tw.GetLine(i), theme.Color(clrFontHeader), clrTransparent, tvguideConfig.FontHeader);
+ pixmap->DrawText(cPoint(xText, yStart + i*lineHeight), tw.GetLine(i), theme.Color(clrFontHeader), clrTransparent, tvguideConfig.FontChannelHeader);
}
- drawBorder();
}
void cHeaderGrid::setPosition(int num) {
- pixmap->SetViewPort(cRect( tvguideConfig.timeColWidth + num*tvguideConfig.colWidth,
- tvguideConfig.statusHeaderHeight,
- tvguideConfig.colWidth,
- tvguideConfig.headerHeight));
- pixmapLogo->SetViewPort(cRect( tvguideConfig.timeColWidth + num*tvguideConfig.colWidth,
- tvguideConfig.statusHeaderHeight,
- tvguideConfig.colWidth,
- tvguideConfig.headerHeight));
+ int x, y, width, height;
+ if (tvguideConfig.displayMode == eVertical) {
+ x = tvguideConfig.timeLineWidth + num*tvguideConfig.colWidth;
+ y = tvguideConfig.statusHeaderHeight;
+ width = tvguideConfig.colWidth;
+ height = tvguideConfig.channelHeaderHeight;
+ } else if (tvguideConfig.displayMode == eHorizontal) {
+ x = 0;
+ y = tvguideConfig.statusHeaderHeight + tvguideConfig.timeLineHeight + num*tvguideConfig.rowHeight;
+ width = tvguideConfig.channelHeaderWidth;
+ height = tvguideConfig.rowHeight;
+ }
+ pixmap->SetViewPort(cRect(x, y, width, height));
+ pixmapLogo->SetViewPort(cRect(x, y, width, height));
}
diff --git a/headergrid.h b/headergrid.h
index 63ee858..eef308b 100644
--- a/headergrid.h
+++ b/headergrid.h
@@ -6,6 +6,8 @@
class cHeaderGrid : public cGrid {
private:
cPixmap *pixmapLogo;
+ void drawChannelHorizontal(const cChannel *channel);
+ void drawChannelVertical(const cChannel *channel);
public:
cHeaderGrid(void);
virtual ~cHeaderGrid(void);
diff --git a/imageloader.c b/imageloader.c
index 3ff196d..37fffb8 100644
--- a/imageloader.c
+++ b/imageloader.c
@@ -13,7 +13,8 @@ cImageLoader::cImageLoader() {
cImageLoader::~cImageLoader() {
}
-bool cImageLoader::LoadLogo(const char *logo, int width = tvguideConfig.logoWidth, int height = tvguideConfig.logoHeight) {
+bool cImageLoader::LoadLogo(const char *logo, int width, int height) {
+
if ((width == 0)||(height==0))
return false;
std::string logoLower = logo;
@@ -26,9 +27,7 @@ bool cImageLoader::LoadLogo(const char *logo, int width = tvguideConfig.logoWidt
}
if (!LoadImage(logoLower.c_str(), tvguideConfig.logoPath, extension))
return false;
- if (height != 0 || width != 0) {
- buffer.sample( Geometry(width, height));
- }
+ buffer.sample( Geometry(width, height));
return true;
}
@@ -46,7 +45,7 @@ bool cImageLoader::LoadEPGImage(int eventID) {
}
bool cImageLoader::DrawBackground(tColor back, tColor blend, int width, int height) {
- if ((width == 0) || (height == 0))
+ if ((width < 1) || (height < 1))
return false;
Color Back = Argb2Color(back);
Color Blend = Argb2Color(blend);
diff --git a/osdmanager.c b/osdmanager.c
index bc9662d..5e12305 100644
--- a/osdmanager.c
+++ b/osdmanager.c
@@ -37,7 +37,8 @@ bool cOsdManager::setOsd() {
void cOsdManager::setBackground() {
if (tvguideConfig.displayStatusHeader && tvguideConfig.scaleVideo) {
- osd->DrawRectangle(0, 0, cOsd::OsdWidth() - tvguideConfig.statusHeaderHeight * 16 / 9, tvguideConfig.statusHeaderHeight, theme.Color(clrBackgroundOSD));
+ int widthStatus = cOsd::OsdWidth() - tvguideConfig.statusHeaderHeight * 16 / 9;
+ osd->DrawRectangle(0, 0, widthStatus, tvguideConfig.statusHeaderHeight, theme.Color(clrBackgroundOSD));
osd->DrawRectangle(0, tvguideConfig.statusHeaderHeight, cOsd::OsdWidth(), cOsd::OsdHeight() - tvguideConfig.statusHeaderHeight, theme.Color(clrBackgroundOSD));
}
else
diff --git a/po/de_DE.po b/po/de_DE.po
index d0d9ef2..2707246 100755
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: vdr-tvguide 0.0.1\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2013-05-20 11:27+0200\n"
+"POT-Creation-Date: 2013-05-24 14:53+0200\n"
"PO-Revision-Date: 2012-08-25 17:49+0200\n"
"Last-Translator: Horst\n"
"Language-Team: \n"
@@ -36,14 +36,20 @@ msgstr "Anzeigeoptionen"
msgid "Fonts and Fontsizes"
msgstr "Schriften und Schriftgrößen"
-msgid "Number of Channels / Columns"
-msgstr "Anzahl der Kanäle bzw. Spalten"
+msgid "Theme"
+msgstr "Theme"
+
+msgid "Use color gradients"
+msgstr "Farbverläufe verwenden"
+
+msgid "Rounded Corners"
+msgstr "Abgerundete Ecken"
msgid "Channels to Jump (Keys Green / Yellow)"
msgstr "Kanalsprung (Tasten Grün / Gelb)"
-msgid "Time to display vertically in minutes"
-msgstr "Vertikal angezeigte Zeit (in Minuten)"
+msgid "Time to display in minutes"
+msgstr "Angezeigte Zeitspanne in Minuten"
msgid "Big Step (Keys 1 / 3) in hours"
msgstr "Großer Sprung (Tasten 1 / 3) in Stunden"
@@ -54,32 +60,41 @@ msgstr "Sehr großer Sprung (Tasten 4 / 6) in Stunden"
msgid "Time Format (12h/24h)"
msgstr "Zeitformat (12h/24h)"
-msgid "Theme"
-msgstr "Theme"
+msgid "Display Mode"
+msgstr "Anzeigemodus"
+
+msgid "Height of Channel Header (Perc. of osd height)"
+msgstr "Höhe des Kanalheaders (% der OSD Höhe)"
+
+msgid "Width of Timeline (Perc. of osd width)"
+msgstr "Breite der Zeitleiste (% der OSD Breite)"
+
+msgid "Number of Channels to display"
+msgstr "Anzahl der angezeigten Kanäle"
+
+msgid "Width of Channel Header (Perc. of osd width)"
+msgstr "Breite des Kanalheaders (% der OSD Breite)"
+
+msgid "Height of Timeline (Perc. of osd height)"
+msgstr "Höhe der Zeitleiste (% der OSD Höhe)"
+
+msgid "Height of Footer"
+msgstr "Höhe des Footers"
msgid "Display status header"
msgstr "Status Header anzeigen"
-msgid "Scale video to upper right corner"
-msgstr "Video in obere rechte Ecke skalieren"
-
msgid "Height of status header (Perc. of osd height)"
msgstr "Höhe des Status Headers (% der OSD Höhe)"
-msgid "Use color gradients"
-msgstr "Farbverläufe verwenden"
-
-msgid "Rounded Corners"
-msgstr "Abgerundete Ecken"
-
-msgid "Width of Timeline"
-msgstr "Breite der Zeitleiste"
+msgid "Scale video to upper right corner"
+msgstr "Video in obere rechte Ecke skalieren"
-msgid "Height of Header"
-msgstr "Höhe des Headers"
+msgid "Rounded corners around video frame"
+msgstr "Abgerundete Ecken um Videofenster"
-msgid "Height of Footer"
-msgstr "Höhe des Footers"
+msgid "Display Channel Names in Header"
+msgstr "Kanalnamen im Header anzeigen"
msgid "Show Channel Logos"
msgstr "Kanallogos anzeigen"
@@ -90,11 +105,11 @@ msgstr "Benutzer Pfad für Kanallogos"
msgid "Logo Extension"
msgstr "Logo Extension"
-msgid "Logo width"
-msgstr "Breite der Logos"
+msgid "Logo width ratio"
+msgstr "Logo Breitenverhältnis"
-msgid "Logo height"
-msgstr "Höhe der Logos"
+msgid "Logo height ratio"
+msgstr "Logo Höhenverhältnis"
msgid "Show EPG Images"
msgstr "EPG Bilder anzeigen"
@@ -111,11 +126,26 @@ msgstr "Höhe der EPG Bilder"
msgid "Font"
msgstr "Schriftart"
+msgid "Status Header Font Size"
+msgstr "Status Header Schriftgröße"
+
msgid "Status Header Large Font Size"
msgstr "Status Header große Schriftgröße"
-msgid "Status Header Font Size"
-msgstr "Status Header Schriftgröße"
+msgid "Detail EPG View Font Size"
+msgstr "Detailierte EPG Ansicht Schriftgröße"
+
+msgid "Detail EPG View Header Font Size"
+msgstr "Detailierte EPG Ansicht Header Schriftgröße"
+
+msgid "Message Font Size"
+msgstr "Nachrichten Schriftgröße"
+
+msgid "Message Large Font Size"
+msgstr "Nachrichten große Schriftgröße"
+
+msgid "Button Font Size"
+msgstr "Button Schriftgröße"
msgid "Channel Header Font Size"
msgstr "Kanal Header Schriftgröße"
@@ -135,21 +165,6 @@ msgstr "Zeitleiste Datum Schriftgröße"
msgid "Timeline Time Font Size"
msgstr "Zeitleiste Zeit Schriftgröße"
-msgid "Button Font Size"
-msgstr "Button Schriftgröße"
-
-msgid "Detail EPG View Font Size"
-msgstr "Detailierte EPG Ansicht Schriftgröße"
-
-msgid "Detail EPG View Header Font Size"
-msgstr "Detailierte EPG Ansicht Header Schriftgröße"
-
-msgid "Message Font Size"
-msgstr "Nachrichten Schriftgröße"
-
-msgid "Message Large Font Size"
-msgstr "Nachrichten große Schriftgröße"
-
msgid "Timer not set! There is already a timer for this item."
msgstr "Timer wurde nicht gesetzt! Es existiert bereits ein Timer für diese Sendung"
diff --git a/setup.c b/setup.c
index 14d860f..93ed35a 100644
--- a/setup.c
+++ b/setup.c
@@ -46,42 +46,53 @@ void cTvguideSetup::Store(void) {
tvguideConfig = tmpTvguideConfig;
SetupStore("themeIndex", tvguideConfig.themeIndex);
+ SetupStore("displayMode", tvguideConfig.displayMode);
SetupStore("displayStatusHeader", tvguideConfig.displayStatusHeader);
SetupStore("statusHeaderPercent", tvguideConfig.statusHeaderPercent);
SetupStore("scaleVideo", tvguideConfig.scaleVideo);
+ SetupStore("decorateVideo", tvguideConfig.decorateVideo);
SetupStore("useBlending", tvguideConfig.useBlending);
SetupStore("roundedCorners", tvguideConfig.roundedCorners);
SetupStore("timeFormat", tvguideConfig.timeFormat);
SetupStore("channelCols", tvguideConfig.channelCols);
+ SetupStore("channelRows", tvguideConfig.channelRows);
SetupStore("displayTime", tvguideConfig.displayTime);
SetupStore("bigStepHours", tvguideConfig.bigStepHours);
SetupStore("hugeStepHours", tvguideConfig.hugeStepHours);
SetupStore("jumpChannels", tvguideConfig.jumpChannels);
SetupStore("hideChannelLogos", tvguideConfig.hideChannelLogos);
SetupStore("logoExtension", tvguideConfig.logoExtension);
- SetupStore("logoWidth", tvguideConfig.logoWidth);
- SetupStore("logoHeight", tvguideConfig.logoHeight);
+ SetupStore("logoWidthRatio", tvguideConfig.logoWidthRatio);
+ SetupStore("logoHeightRatio", tvguideConfig.logoHeightRatio);
SetupStore("hideEpgImages", tvguideConfig.hideEpgImages);
SetupStore("epgImageWidth", tvguideConfig.epgImageWidth);
SetupStore("epgImageHeight", tvguideConfig.epgImageHeight);
SetupStore("epgImageHeight", tvguideConfig.epgImageHeight);
- SetupStore("timeColWidth", tvguideConfig.timeColWidth);
- SetupStore("headerHeight", tvguideConfig.headerHeight);
+ SetupStore("timeLineWidthPercent", tvguideConfig.timeLineWidthPercent);
+ SetupStore("timeLineHeightPercent", tvguideConfig.timeLineHeightPercent);
+ SetupStore("displayChannelName", tvguideConfig.displayChannelName);
+ SetupStore("channelHeaderWidthPercent", tvguideConfig.channelHeaderWidthPercent);
+ SetupStore("channelHeaderHeightPercent", tvguideConfig.channelHeaderHeightPercent);
SetupStore("footerHeight", tvguideConfig.footerHeight);
SetupStore("fontIndex", tvguideConfig.fontIndex);
- SetupStore("fontHeaderSize", tvguideConfig.fontHeaderSize);
- SetupStore("fontStatusHeaderSize", tvguideConfig.fontStatusHeaderSize);
- SetupStore("fontStatusHeaderLargeSize", tvguideConfig.fontStatusHeaderLargeSize);
- SetupStore("fontGridSize", tvguideConfig.fontGridSize);
- SetupStore("fontGridSmallSize", tvguideConfig.fontGridSmallSize);
- SetupStore("fontTimeLineWeekdaySize", tvguideConfig.fontTimeLineWeekdaySize);
- SetupStore("fontTimeLineDateSize", tvguideConfig.fontTimeLineDateSize);
- SetupStore("fontTimeLineTimeSize", tvguideConfig.fontTimeLineTimeSize);
- SetupStore("fontButtonSize", tvguideConfig.fontButtonSize);
- SetupStore("fontDetailViewSize", tvguideConfig.fontDetailViewSize);
- SetupStore("fontDetailHeaderSize", tvguideConfig.fontDetailHeaderSize);
- SetupStore("fontMessageBoxSize", tvguideConfig.fontMessageBoxSize);
- SetupStore("fontMessageBoxLargeSize", tvguideConfig.fontMessageBoxLargeSize);
+ SetupStore("FontButtonDelta", tvguideConfig.FontButtonDelta);
+ SetupStore("FontDetailViewDelta", tvguideConfig.FontDetailViewDelta);
+ SetupStore("FontDetailHeaderDelta", tvguideConfig.FontDetailHeaderDelta);
+ SetupStore("FontMessageBoxDelta", tvguideConfig.FontMessageBoxDelta);
+ SetupStore("FontMessageBoxLargeDelta", tvguideConfig.FontMessageBoxLargeDelta);
+ SetupStore("FontStatusHeaderDelta", tvguideConfig.FontStatusHeaderDelta);
+ SetupStore("FontStatusHeaderLargeDelta", tvguideConfig.FontStatusHeaderLargeDelta);
+ SetupStore("FontChannelHeaderDelta", tvguideConfig.FontChannelHeaderDelta);
+ SetupStore("FontGridDelta", tvguideConfig.FontGridDelta);
+ SetupStore("FontGridSmallDelta", tvguideConfig.FontGridSmallDelta);
+ SetupStore("FontTimeLineWeekdayDelta", tvguideConfig.FontTimeLineWeekdayDelta);
+ SetupStore("FontTimeLineDateDelta", tvguideConfig.FontTimeLineDateDelta);
+ SetupStore("FontTimeLineTimeDelta", tvguideConfig.FontTimeLineTimeDelta);
+ SetupStore("FontChannelHeaderHorizontalDelta", tvguideConfig.FontChannelHeaderHorizontalDelta);
+ SetupStore("FontGridHorizontalDelta", tvguideConfig.FontGridHorizontalDelta);
+ SetupStore("FontGridHorizontalSmallDelta", tvguideConfig.FontGridHorizontalSmallDelta);
+ SetupStore("FontTimeLineDateHorizontalDelta", tvguideConfig.FontTimeLineDateHorizontalDelta);
+ SetupStore("FontTimeLineTimeHorizontalDelta", tvguideConfig.FontTimeLineTimeHorizontalDelta);
}
cMenuSetupSubMenu::cMenuSetupSubMenu(const char* Title, cTvguideConfig* data) : cOsdMenu(Title, 30) {
@@ -111,19 +122,25 @@ eOSState cMenuSetupSubMenu::ProcessKey(eKeys Key) {
//------------------------------------------------------------------------------------------------------------------
cMenuSetupGeneral::cMenuSetupGeneral(cTvguideConfig* data) : cMenuSetupSubMenu(tr("General Settings"), data) {
- timeFormatItems[0] = "12h";
+ themes.Load(*cString("tvguide"));
+ timeFormatItems[0] = "12h";
timeFormatItems[1] = "24h";
-
+ blendingMethods[0] = "none";
+ blendingMethods[1] = "classic";
+ blendingMethods[2] = "nOpacity style";
Set();
}
void cMenuSetupGeneral::Set(void) {
int currentItem = Current();
Clear();
-
- Add(new cMenuEditIntItem(tr("Number of Channels / Columns"), &tmpTvguideConfig->channelCols, 3, 8));
+ if (themes.NumThemes())
+ Add(new cMenuEditStraItem(tr("Theme"), &tmpTvguideConfig->themeIndex, themes.NumThemes(), themes.Descriptions()));
+ Add(new cMenuEditStraItem(tr("Use color gradients"), &tmpTvguideConfig->useBlending, 3, blendingMethods));
+ Add(new cMenuEditBoolItem(tr("Rounded Corners"), &tmpTvguideConfig->roundedCorners));
+
Add(new cMenuEditIntItem(tr("Channels to Jump (Keys Green / Yellow)"), &tmpTvguideConfig->jumpChannels, 2, 30));
- Add(new cMenuEditIntItem(tr("Time to display vertically in minutes"), &tmpTvguideConfig->displayTime, 120, 320));
+ Add(new cMenuEditIntItem(tr("Time to display in minutes"), &tmpTvguideConfig->displayTime, 120, 320));
Add(new cMenuEditIntItem(tr("Big Step (Keys 1 / 3) in hours"), &tmpTvguideConfig->bigStepHours, 1, 12));
Add(new cMenuEditIntItem(tr("Huge Step (Keys 4 / 6) in hours"), &tmpTvguideConfig->hugeStepHours, 13, 48));
Add(new cMenuEditStraItem(tr("Time Format (12h/24h)"), &tmpTvguideConfig->timeFormat, 2, timeFormatItems));
@@ -135,14 +152,12 @@ void cMenuSetupGeneral::Set(void) {
//------------------------------------------------------------------------------------------------------------------
cMenuSetupScreenLayout::cMenuSetupScreenLayout(cTvguideConfig* data) : cMenuSetupSubMenu(tr("Screen Presentation"), data) {
- themes.Load(*cString("tvguide"));
+ displayModeItems[0] = "vertical";
+ displayModeItems[1] = "horizontal";
hideChannelLogosItems[0] = trVDR("yes");
hideChannelLogosItems[1] = trVDR("no");
logoExtensionItems[0] = "png";
logoExtensionItems[1] = "jpg";
- blendingMethods[0] = "none";
- blendingMethods[1] = "classic";
- blendingMethods[2] = "nOpacity style";
Set();
}
@@ -150,26 +165,33 @@ void cMenuSetupScreenLayout::Set(void) {
const char *indent = " ";
int currentItem = Current();
Clear();
- if (themes.NumThemes())
- Add(new cMenuEditStraItem(tr("Theme"), &tmpTvguideConfig->themeIndex, themes.NumThemes(), themes.Descriptions()));
+ Add(new cMenuEditStraItem(tr("Display Mode"), &tmpTvguideConfig->displayMode, 2, displayModeItems));
+ if (tmpTvguideConfig->displayMode == eVertical) {
+ Add(new cMenuEditIntItem(*cString::sprintf("%s%s", indent, tr("Height of Channel Header (Perc. of osd height)")), &tmpTvguideConfig->channelHeaderHeightPercent, 5, 30));
+ Add(new cMenuEditIntItem(*cString::sprintf("%s%s", indent, tr("Width of Timeline (Perc. of osd width)")), &tmpTvguideConfig->timeLineWidthPercent, 5, 30));
+ Add(new cMenuEditIntItem(*cString::sprintf("%s%s", indent, tr("Number of Channels to display")), &tmpTvguideConfig->channelCols, 3, 12));
+ } else if (tmpTvguideConfig->displayMode == eHorizontal) {
+ Add(new cMenuEditIntItem(*cString::sprintf("%s%s", indent, tr("Width of Channel Header (Perc. of osd width)")), &tmpTvguideConfig->channelHeaderWidthPercent, 5, 30));
+ Add(new cMenuEditIntItem(*cString::sprintf("%s%s", indent, tr("Height of Timeline (Perc. of osd height)")), &tmpTvguideConfig->timeLineHeightPercent, 5, 30));
+ Add(new cMenuEditIntItem(*cString::sprintf("%s%s", indent, tr("Number of Channels to display")), &tmpTvguideConfig->channelRows, 3, 12));
+ }
+ Add(new cMenuEditIntItem(tr("Height of Footer"), &tmpTvguideConfig->footerHeight, 50, 300));
+
Add(new cMenuEditBoolItem(tr("Display status header"), &tmpTvguideConfig->displayStatusHeader));
if (tmpTvguideConfig->displayStatusHeader) {
- Add(new cMenuEditBoolItem(*cString::sprintf("%s%s", indent, tr("Scale video to upper right corner")), &tmpTvguideConfig->scaleVideo));
Add(new cMenuEditIntItem(*cString::sprintf("%s%s", indent, tr("Height of status header (Perc. of osd height)")), &tmpTvguideConfig->statusHeaderPercent, 5, 50));
+ Add(new cMenuEditBoolItem(*cString::sprintf("%s%s", indent, tr("Scale video to upper right corner")), &tmpTvguideConfig->scaleVideo));
+ Add(new cMenuEditBoolItem(*cString::sprintf("%s%s", indent, tr("Rounded corners around video frame")), &tmpTvguideConfig->decorateVideo));
}
- Add(new cMenuEditStraItem(tr("Use color gradients"), &tmpTvguideConfig->useBlending, 3, blendingMethods));
- Add(new cMenuEditBoolItem(tr("Rounded Corners"), &tmpTvguideConfig->roundedCorners));
- Add(new cMenuEditIntItem(tr("Width of Timeline"), &tmpTvguideConfig->timeColWidth, 50, 300));
- Add(new cMenuEditIntItem(tr("Height of Header"), &tmpTvguideConfig->headerHeight, 50, 300));
- Add(new cMenuEditIntItem(tr("Height of Footer"), &tmpTvguideConfig->footerHeight, 50, 300));
+ Add(new cMenuEditBoolItem(tr("Display Channel Names in Header"), &tmpTvguideConfig->displayChannelName));
Add(new cMenuEditStraItem(tr("Show Channel Logos"), &tmpTvguideConfig->hideChannelLogos, 2, hideChannelLogosItems));
if (!tmpTvguideConfig->hideChannelLogos) {
Add(InfoItem(tr("Logo Path used"), *tvguideConfig.logoPath));
Add(new cMenuEditStraItem(*cString::sprintf("%s%s", indent, tr("Logo Extension")), &tmpTvguideConfig->logoExtension, 2, logoExtensionItems));
- Add(new cMenuEditIntItem(*cString::sprintf("%s%s", indent, tr("Logo width")), &tmpTvguideConfig->logoWidth, 0, 350));
- Add(new cMenuEditIntItem(*cString::sprintf("%s%s", indent, tr("Logo height")), &tmpTvguideConfig->logoHeight, 0, 250));
+ Add(new cMenuEditIntItem(*cString::sprintf("%s%s", indent, tr("Logo width ratio")), &tmpTvguideConfig->logoWidthRatio, 1, 1000));
+ Add(new cMenuEditIntItem(*cString::sprintf("%s%s", indent, tr("Logo height ratio")), &tmpTvguideConfig->logoHeightRatio, 1, 1000));
}
Add(new cMenuEditStraItem(tr("Show EPG Images"), &tmpTvguideConfig->hideEpgImages, 2, hideChannelLogosItems));
@@ -204,22 +226,34 @@ cMenuSetupFont::cMenuSetupFont(cTvguideConfig* data) : cMenuSetupSubMenu(tr("Fo
void cMenuSetupFont::Set(void) {
int currentItem = Current();
Clear();
-
- Add(new cMenuEditStraItem(tr("Font"), &tmpTvguideConfig->fontIndex, fontNames.Size(), &fontNames[0]));
- Add(new cMenuEditIntItem(tr("Status Header Large Font Size"), &tmpTvguideConfig->fontStatusHeaderLargeSize, 10, 70));
- Add(new cMenuEditIntItem(tr("Status Header Font Size"), &tmpTvguideConfig->fontStatusHeaderSize, 10, 70));
- Add(new cMenuEditIntItem(tr("Channel Header Font Size"), &tmpTvguideConfig->fontHeaderSize, 10, 70));
- Add(new cMenuEditIntItem(tr("Grid Font Size"), &tmpTvguideConfig->fontGridSize, 10, 70));
- Add(new cMenuEditIntItem(tr("Grid Font Small Size"), &tmpTvguideConfig->fontGridSmallSize, 10, 70));
- Add(new cMenuEditIntItem(tr("Timeline Weekday Font Size"), &tmpTvguideConfig->fontTimeLineWeekdaySize, 10, 70));
- Add(new cMenuEditIntItem(tr("Timeline Date Font Size"), &tmpTvguideConfig->fontTimeLineDateSize, 10, 70));
- Add(new cMenuEditIntItem(tr("Timeline Time Font Size"), &tmpTvguideConfig->fontTimeLineTimeSize, 10, 70));
- Add(new cMenuEditIntItem(tr("Button Font Size"), &tmpTvguideConfig->fontButtonSize, 10, 70));
- Add(new cMenuEditIntItem(tr("Detail EPG View Font Size"), &tmpTvguideConfig->fontDetailViewSize, 10, 70));
- Add(new cMenuEditIntItem(tr("Detail EPG View Header Font Size"), &tmpTvguideConfig->fontDetailHeaderSize, 10, 70));
- Add(new cMenuEditIntItem(tr("Message Font Size"), &tmpTvguideConfig->fontMessageBoxSize, 10, 70));
- Add(new cMenuEditIntItem(tr("Message Large Font Size"), &tmpTvguideConfig->fontMessageBoxLargeSize, 10, 70));
-
+
+ Add(new cMenuEditStraItem(tr("Font"), &tmpTvguideConfig->fontIndex, fontNames.Size(), &fontNames[0]));
+
+ Add(new cMenuEditIntItem(tr("Status Header Font Size"), &tmpTvguideConfig->FontStatusHeaderDelta, -30, 30));
+ Add(new cMenuEditIntItem(tr("Status Header Large Font Size"), &tmpTvguideConfig->FontStatusHeaderLargeDelta, -30, 30));
+ Add(new cMenuEditIntItem(tr("Detail EPG View Font Size"), &tmpTvguideConfig->FontDetailViewDelta, -30, 30));
+ Add(new cMenuEditIntItem(tr("Detail EPG View Header Font Size"), &tmpTvguideConfig->FontDetailHeaderDelta, -30, 30));
+ Add(new cMenuEditIntItem(tr("Message Font Size"), &tmpTvguideConfig->FontMessageBoxDelta, -30, 30));
+ Add(new cMenuEditIntItem(tr("Message Large Font Size"), &tmpTvguideConfig->FontMessageBoxLargeDelta, -30, 30));
+ Add(new cMenuEditIntItem(tr("Button Font Size"), &tmpTvguideConfig->FontButtonDelta, -30, 30));
+
+
+ if (tmpTvguideConfig->displayMode == eVertical) {
+ Add(new cMenuEditIntItem(tr("Channel Header Font Size"), &tmpTvguideConfig->FontChannelHeaderDelta, -30, 30));
+ Add(new cMenuEditIntItem(tr("Grid Font Size"), &tmpTvguideConfig->FontGridDelta, -30, 30));
+ Add(new cMenuEditIntItem(tr("Grid Font Small Size"), &tmpTvguideConfig->FontGridSmallDelta, -30, 30));
+ Add(new cMenuEditIntItem(tr("Timeline Weekday Font Size"), &tmpTvguideConfig->FontTimeLineWeekdayDelta, -30, 30));
+ Add(new cMenuEditIntItem(tr("Timeline Date Font Size"), &tmpTvguideConfig->FontTimeLineDateDelta, -30, 30));
+ Add(new cMenuEditIntItem(tr("Timeline Time Font Size"), &tmpTvguideConfig->FontTimeLineTimeDelta, -30, 30));
+ } else if (tmpTvguideConfig->displayMode == eHorizontal) {
+ Add(new cMenuEditIntItem(tr("Channel Header Font Size"), &tmpTvguideConfig->FontChannelHeaderHorizontalDelta, -30, 30));
+ Add(new cMenuEditIntItem(tr("Grid Font Size"), &tmpTvguideConfig->FontGridHorizontalDelta, -30, 30));
+ Add(new cMenuEditIntItem(tr("Grid Font Small Size"), &tmpTvguideConfig->FontGridHorizontalSmallDelta, -30, 30));
+ Add(new cMenuEditIntItem(tr("Timeline Date Font Size"), &tmpTvguideConfig->FontTimeLineDateHorizontalDelta, -30, 30));
+ Add(new cMenuEditIntItem(tr("Timeline Time Font Size"), &tmpTvguideConfig->FontTimeLineTimeHorizontalDelta, -30, 30));
+ }
+
+
SetCurrent(Get(currentItem));
Display();
} \ No newline at end of file
diff --git a/setup.h b/setup.h
index ba81d8f..48b3b1c 100644
--- a/setup.h
+++ b/setup.h
@@ -26,6 +26,8 @@ class cMenuSetupSubMenu : public cOsdMenu {
class cMenuSetupGeneral : public cMenuSetupSubMenu {
protected:
+ cThemes themes;
+ const char * blendingMethods[3];
const char * timeFormatItems[2];
void Set(void);
public:
@@ -35,10 +37,9 @@ class cMenuSetupGeneral : public cMenuSetupSubMenu {
class cMenuSetupScreenLayout : public cMenuSetupSubMenu {
protected:
virtual eOSState ProcessKey(eKeys Key);
- cThemes themes;
+ const char * displayModeItems[2];
const char * hideChannelLogosItems[2];
const char * logoExtensionItems[2];
- const char * blendingMethods[3];
void Set(void);
public:
cMenuSetupScreenLayout(cTvguideConfig *data);
diff --git a/statusheader.c b/statusheader.c
index ecb2363..107cf22 100644
--- a/statusheader.c
+++ b/statusheader.c
@@ -10,14 +10,27 @@ cStatusHeader::cStatusHeader(void) {
} else {
width = tvguideConfig.osdWidth;
}
+ int tvFrameWidth = tvguideConfig.osdWidth - width;
+ int radius = tvguideConfig.statusHeaderHeight / 8;
pixmap = osdManager.requestPixmap(1, cRect(0, 0, width, height));
pixmapText = osdManager.requestPixmap(2, cRect(0, 0, width, height));
pixmapText->Fill(clrTransparent);
+
+ pixmapTVFrame = osdManager.requestPixmap(1, cRect(width, 0, tvFrameWidth, height));
+ pixmapTVFrame->Fill(clrTransparent);
+ if (tvguideConfig.decorateVideo) {
+ pixmapTVFrame->DrawEllipse(cRect(0,0,radius,radius), theme.Color(clrBackground), -2);
+ pixmapTVFrame->DrawEllipse(cRect(tvFrameWidth - radius, 0, radius, radius), theme.Color(clrBackground), -1);
+ pixmapTVFrame->DrawEllipse(cRect(0, height - radius, radius, radius), theme.Color(clrBackground), -3);
+ pixmapTVFrame->DrawEllipse(cRect(tvFrameWidth - radius, height - radius, radius, radius), theme.Color(clrBackground), -4);
+ }
drawBackground();
drawBorder();
}
cStatusHeader::~cStatusHeader(void) {
+ osdManager.releasePixmap(pixmapText);
+ osdManager.releasePixmap(pixmapTVFrame);
if (tvguideConfig.scaleVideo) {
cRect vidWin = cDevice::PrimaryDevice()->CanScaleVideo(cRect::Null);
cDevice::PrimaryDevice()->ScaleVideo(vidWin);
@@ -71,4 +84,4 @@ void cStatusHeader::DrawInfoText(cGrid *grid) {
y += (heightText - tvguideConfig.FontStatusHeaderLarge->Height() - 2*border)/2;
pixmapText->DrawText(cPoint(x,y), *grid->getText(), theme.Color(clrFont), clrTransparent, tvguideConfig.FontStatusHeaderLarge);
}
-} \ No newline at end of file
+}
diff --git a/statusheader.h b/statusheader.h
index fdd3149..051c0c9 100644
--- a/statusheader.h
+++ b/statusheader.h
@@ -6,6 +6,7 @@
class cStatusHeader : public cStyledPixmap {
private:
cPixmap *pixmapText;
+ cPixmap *pixmapTVFrame;
public:
cStatusHeader(void);
virtual ~cStatusHeader(void);
diff --git a/themes/tvguide-nOpacitydarkred.theme b/themes/tvguide-nOpacitydarkred.theme
new file mode 100644
index 0000000..63d9214
--- /dev/null
+++ b/themes/tvguide-nOpacitydarkred.theme
@@ -0,0 +1,28 @@
+Description = nOpacity Dark Red
+clrBackground = FF000000
+clrBackgroundOSD = FF000000
+clrGrid1 = EE555555
+clrGrid1Blending = 90000000
+clrGrid2 = DD333333
+clrGrid2Blending = 90000000
+clrHighlight = DDBB0000
+clrHighlightBlending = DD000000
+clrFont = FFFFFFFF
+clrFontHeader = FFFFFFFF
+clrFontButtons = FFFFFFFF
+clrHeader = EE888888
+clrHeaderBlending = 90000000
+clrBorder = AABB0000
+clrTimeline1 = BBFFFFFF
+clrTimeline1Blending = 90828282
+clrTimeline2 = BB000000
+clrTimeline2Blending = 903F3F3F
+clrButtonRed = 99BB0000
+clrButtonRedBorder = FFBB0000
+clrButtonGreen = 9900BB00
+clrButtonGreenBorder = FF00BB00
+clrButtonYellow = 99BBBB00
+clrButtonYellowBorder = FFBBBB00
+clrButtonBlue = 990000BB
+clrButtonBlueBorder = FF0000BB
+clrButtonBlend = DD000000
diff --git a/timeline.c b/timeline.c
index d5ed4c9..0bcde25 100644
--- a/timeline.c
+++ b/timeline.c
@@ -2,57 +2,85 @@
cTimeLine::cTimeLine(cMyTime *myTime) {
this->myTime = myTime;
- dateViewer = new cStyledPixmap(osdManager.requestPixmap(3, cRect(0,
- tvguideConfig.statusHeaderHeight,
- tvguideConfig.timeColWidth,
- tvguideConfig.headerHeight)
- , cRect::Null));
- timeline = osdManager.requestPixmap(2, cRect(0,
- tvguideConfig.statusHeaderHeight + tvguideConfig.headerHeight,
- tvguideConfig.timeColWidth,
- tvguideConfig.osdHeight - tvguideConfig.statusHeaderHeight - tvguideConfig.headerHeight - tvguideConfig.footerHeight)
- , cRect(0,
- 0,
- tvguideConfig.timeColWidth,
- 1440*tvguideConfig.minuteHeight));
- clock = new cStyledPixmap(osdManager.requestPixmap(3, cRect(0,
+ if (tvguideConfig.displayMode == eVertical) {
+ dateViewer = new cStyledPixmap(osdManager.requestPixmap(3, cRect(0,
+ tvguideConfig.statusHeaderHeight,
+ tvguideConfig.timeLineWidth,
+ tvguideConfig.channelHeaderHeight)));
+ timeline = osdManager.requestPixmap(2, cRect(0,
+ tvguideConfig.statusHeaderHeight + tvguideConfig.channelHeaderHeight,
+ tvguideConfig.timeLineWidth,
+ tvguideConfig.osdHeight - tvguideConfig.statusHeaderHeight - tvguideConfig.channelHeaderHeight - tvguideConfig.footerHeight)
+ , cRect(0,
+ 0,
+ tvguideConfig.timeLineWidth,
+ 1440*tvguideConfig.minutePixel));
+ } else if (tvguideConfig.displayMode == eHorizontal) {
+ dateViewer = new cStyledPixmap(osdManager.requestPixmap(3, cRect(0,
+ tvguideConfig.statusHeaderHeight,
+ tvguideConfig.channelHeaderWidth,
+ tvguideConfig.timeLineHeight)));
+ timeline = osdManager.requestPixmap(2, cRect(tvguideConfig.channelHeaderWidth,
+ tvguideConfig.statusHeaderHeight,
+ tvguideConfig.osdWidth - tvguideConfig.channelHeaderWidth,
+ tvguideConfig.timeLineHeight)
+ , cRect(0,
+ 0,
+ 1440*tvguideConfig.minutePixel,
+ tvguideConfig.timeLineWidth));
+ }
+ clock = new cStyledPixmap(osdManager.requestPixmap(3, cRect(0,
tvguideConfig.osdHeight- tvguideConfig.footerHeight,
- tvguideConfig.timeColWidth,
- tvguideConfig.footerHeight-9)
- , cRect::Null));
+ tvguideConfig.timeLineWidth,
+ tvguideConfig.footerHeight-9)));
}
cTimeLine::~cTimeLine(void) {
delete dateViewer;
osdManager.releasePixmap(timeline);
- delete clock;
+ if (clock)
+ delete clock;
}
void cTimeLine::drawDateViewer() {
cString weekDay = myTime->GetWeekday();
cString date = myTime->GetDate();
-
- int textHeight = tvguideConfig.FontTimeLineWeekday->Height();
- int weekdayWidth = tvguideConfig.FontTimeLineWeekday->Width(*weekDay);
- int dateWidth = tvguideConfig.FontTimeLineDate->Width(*date);
-
dateViewer->setColor(theme.Color(clrHeader), theme.Color(clrHeaderBlending));
dateViewer->drawBackground();
dateViewer->drawBorder();
- dateViewer->DrawText(cPoint((tvguideConfig.timeColWidth-weekdayWidth)/2, (tvguideConfig.headerHeight-2*textHeight)/2), *weekDay, theme.Color(clrFontHeader), clrTransparent, tvguideConfig.FontTimeLineWeekday);
- dateViewer->DrawText(cPoint((tvguideConfig.timeColWidth-dateWidth)/2, (tvguideConfig.headerHeight-2*textHeight)/2 + textHeight + 5), *date, theme.Color(clrFontHeader), clrTransparent, tvguideConfig.FontTimeLineDate);
+
+ if (tvguideConfig.displayMode == eVertical) {
+ int textHeight = tvguideConfig.FontTimeLineWeekday->Height();
+ int weekdayWidth = tvguideConfig.FontTimeLineWeekday->Width(*weekDay);
+ int dateWidth = tvguideConfig.FontTimeLineDate->Width(*date);
+ dateViewer->DrawText(cPoint((tvguideConfig.timeLineWidth-weekdayWidth)/2, (tvguideConfig.channelHeaderHeight-2*textHeight)/2), *weekDay, theme.Color(clrFontHeader), clrTransparent, tvguideConfig.FontTimeLineWeekday);
+ dateViewer->DrawText(cPoint((tvguideConfig.timeLineWidth-dateWidth)/2, (tvguideConfig.channelHeaderHeight-2*textHeight)/2 + textHeight + 5), *date, theme.Color(clrFontHeader), clrTransparent, tvguideConfig.FontTimeLineDate);
+ } else if (tvguideConfig.displayMode == eHorizontal) {
+ cString strDate = cString::sprintf("%s %s", *weekDay, *date);
+ int x = (dateViewer->Width() - tvguideConfig.FontTimeLineDateHorizontal->Width(*strDate))/2;
+ int y = (dateViewer->Height() - tvguideConfig.FontTimeLineDateHorizontal->Height())/2;
+ dateViewer->DrawText(cPoint(x, y), *strDate, theme.Color(clrFontHeader), clrTransparent, tvguideConfig.FontTimeLineDateHorizontal);
+ }
}
void cTimeLine::drawTimeline() {
timeline->SetTile(true);
timeline->Fill(theme.Color(clrBackground));
- tColor colorFont;
+ tColor colorFont;
- const cImage *img1 = createBackgroundImage(tvguideConfig.timeColWidth-4, tvguideConfig.minuteHeight*30, theme.Color(clrTimeline1), theme.Color(clrTimeline1Blending));
- const cImage *img2 = createBackgroundImage(tvguideConfig.timeColWidth-4, tvguideConfig.minuteHeight*30, theme.Color(clrTimeline2), theme.Color(clrTimeline2Blending));
+ int imgWidth, imgHeight;
+ if (tvguideConfig.displayMode == eVertical) {
+ imgWidth = tvguideConfig.timeLineWidth-4;
+ imgHeight = tvguideConfig.minutePixel*30;
+ } else if (tvguideConfig.displayMode == eHorizontal) {
+ imgWidth = tvguideConfig.minutePixel*30;
+ imgHeight = tvguideConfig.timeLineHeight-4;
+ }
+ const cImage *img1 = createBackgroundImage(imgWidth, imgHeight, theme.Color(clrTimeline1), theme.Color(clrTimeline1Blending));
+ const cImage *img2 = createBackgroundImage(imgWidth, imgHeight, theme.Color(clrTimeline2), theme.Color(clrTimeline2Blending));
const cImage *img = NULL;
- int textWidth, posY;
+ int textWidth, posX, posY;
char timetext[10];
for (int i=0; i<48; i++) {
@@ -83,10 +111,16 @@ void cTimeLine::drawTimeline() {
sprintf(timetext, "%d:30", i/2);
}
}
- posY = i*tvguideConfig.minuteHeight*30;
- timeline->DrawImage(cPoint(2, posY), *img);
- textWidth = tvguideConfig.FontTimeLineTime->Width(timetext);
- timeline->DrawText(cPoint((tvguideConfig.timeColWidth-textWidth)/2, posY + 5), timetext, colorFont, clrTransparent, tvguideConfig.FontTimeLineTime);
+ if (tvguideConfig.displayMode == eVertical) {
+ posY = i*tvguideConfig.minutePixel*30;
+ timeline->DrawImage(cPoint(2, posY), *img);
+ textWidth = tvguideConfig.FontTimeLineTime->Width(timetext);
+ timeline->DrawText(cPoint((tvguideConfig.timeLineWidth-textWidth)/2, posY + 5), timetext, colorFont, clrTransparent, tvguideConfig.FontTimeLineTime);
+ } else if (tvguideConfig.displayMode == eHorizontal) {
+ posX = i*tvguideConfig.minutePixel*30;
+ timeline->DrawImage(cPoint(posX, 2), *img);
+ timeline->DrawText(cPoint(posX + 2, (dateViewer->Height() - tvguideConfig.FontTimeLineTimeHorizontal->Height())/2), timetext, colorFont, clrTransparent, tvguideConfig.FontTimeLineTimeHorizontal);
+ }
}
setTimeline();
delete img1;
@@ -124,15 +158,23 @@ cImage *cTimeLine::createBackgroundImage(int width, int height, tColor clrBgr, t
void cTimeLine::setTimeline() {
int offset = myTime->GetTimelineOffset();
- timeline->SetDrawPortPoint(cPoint(0, -offset*tvguideConfig.minuteHeight));
+ int xNew, yNew;
+ if (tvguideConfig.displayMode == eVertical) {
+ xNew = 0;
+ yNew = -offset*tvguideConfig.minutePixel;
+ } else if (tvguideConfig.displayMode == eHorizontal) {
+ xNew = -offset*tvguideConfig.minutePixel;
+ yNew = 0;
+ }
+ timeline->SetDrawPortPoint(cPoint(xNew, yNew));
}
void cTimeLine::drawClock() {
- cString currentTime = myTime->GetCurrentTime();
+ cString currentTime = myTime->GetCurrentTime();
int textHeight = tvguideConfig.FontTimeLineTime->Height();
int clockWidth = tvguideConfig.FontTimeLineTime->Width(*currentTime);
clock->setColor(theme.Color(clrHeader), theme.Color(clrHeaderBlending));
clock->drawBackground();
clock->drawBorder();
- clock->DrawText(cPoint((tvguideConfig.timeColWidth-clockWidth)/2, (tvguideConfig.footerHeight-textHeight)/2), *currentTime, theme.Color(clrFontHeader), clrTransparent, tvguideConfig.FontTimeLineTime);
+ clock->DrawText(cPoint((tvguideConfig.timeLineWidth-clockWidth)/2, (tvguideConfig.footerHeight-textHeight)/2), *currentTime, theme.Color(clrFontHeader), clrTransparent, tvguideConfig.FontTimeLineTime);
} \ No newline at end of file
diff --git a/timer.c b/timer.c
index cb1a438..1acd3bf 100644
--- a/timer.c
+++ b/timer.c
@@ -15,7 +15,11 @@ void cMyTime::Now() {
t = time(0);
tStart = t;
tStart = GetRounded();
- tEnd = tStart + (tvguideConfig.osdHeight - tvguideConfig.statusHeaderHeight - tvguideConfig.headerHeight - tvguideConfig.footerHeight)/tvguideConfig.minuteHeight*60;
+ if (tvguideConfig.displayMode == eVertical) {
+ tEnd = tStart + (tvguideConfig.osdHeight - tvguideConfig.statusHeaderHeight - tvguideConfig.channelHeaderHeight - tvguideConfig.footerHeight)/tvguideConfig.minutePixel*60;
+ } else if (tvguideConfig.displayMode == eHorizontal) {
+ tEnd = tStart + (tvguideConfig.osdWidth - tvguideConfig.channelHeaderWidth)/tvguideConfig.minutePixel*60;
+ }
}
void cMyTime::AddStep(int step) {
@@ -34,7 +38,11 @@ bool cMyTime::DelStep(int step) {
void cMyTime::SetTime(time_t newTime) {
tStart = newTime;
- tEnd = tStart + (tvguideConfig.osdHeight - tvguideConfig.statusHeaderHeight - tvguideConfig.headerHeight - tvguideConfig.footerHeight)/tvguideConfig.minuteHeight*60;
+ if (tvguideConfig.displayMode == eVertical) {
+ tEnd = tStart + (tvguideConfig.osdHeight - tvguideConfig.statusHeaderHeight - tvguideConfig.channelHeaderHeight - tvguideConfig.footerHeight)/tvguideConfig.minutePixel*60;
+ } else if (tvguideConfig.displayMode == eHorizontal) {
+ tEnd = tStart + (tvguideConfig.osdWidth - tvguideConfig.channelHeaderWidth)/tvguideConfig.minutePixel*60;
+ }
}
time_t cMyTime::getPrevPrimetime(time_t current) {
diff --git a/tvguide.c b/tvguide.c
index 4eba4ec..1b10c8a 100644
--- a/tvguide.c
+++ b/tvguide.c
@@ -14,13 +14,13 @@
#include "tvguideosd.c"
-#if defined(APIVERSNUM) && APIVERSNUM < 10717
-#error "VDR-1.7.17 API version or greater is required!"
+#if defined(APIVERSNUM) && APIVERSNUM < 20000
+#error "VDR-2.0.0 API version or greater is required!"
#endif
-static const char *VERSION = "0.0.3";
+static const char *VERSION = "0.0.4";
static const char *DESCRIPTION = "A fancy 2d EPG Viewer";
static const char *MAINMENUENTRY = "Tvguide";
diff --git a/tvguideosd.c b/tvguideosd.c
index e5214bd..44f64c2 100644
--- a/tvguideosd.c
+++ b/tvguideosd.c
@@ -129,7 +129,7 @@ void cTvGuideOsd::readChannels(const cChannel *channelStart) {
delete column;
}
}
- if (i == tvguideConfig.channelCols)
+ if (i == tvguideConfig.numGrids)
break;
}
}
@@ -187,91 +187,46 @@ void cTvGuideOsd::setNextActiveGrid(cGrid *next) {
}
}
-void cTvGuideOsd::processKeyUp() {
- if (!activeGrid) {
- return;
- }
- if (detailViewActive) {
- detailView->scrollUp();
- } else {
- bool actionDone = false;
- if ( (activeGrid->StartTime() - myTime->GetStart())/60 < 30 ) {
- ScrollBack();
- actionDone = true;
- }
- cGrid *prev = activeGrid->column->getPrev(activeGrid);
- if (prev) {
- if ( (prev->StartTime() > myTime->GetStart())
- || ( (prev->EndTime() - myTime->GetStart())/60 > 30 )
- || ( prev->isFirst()) ) {
- setNextActiveGrid(prev);
- actionDone = true;
- }
- }
- if (!actionDone) {
- ScrollBack();
- }
+void cTvGuideOsd::channelForward() {
+ cChannelColumn *colRight = columns.Next(activeGrid->column);
+ if (!colRight) {
+ const cChannel *channelRight = activeGrid->column->getChannel();
+ while (channelRight = Channels.Next(channelRight)) {
+ if (!channelRight->GroupSep()) {
+ colRight = new cChannelColumn(tvguideConfig.numGrids - 1, channelRight, myTime);
+ if (colRight->readGrids()) {
+ break;
+ } else {
+ delete colRight;
+ colRight = NULL;
+ }
+ }
+ }
+ if (colRight) {
+ if (columns.Count() == tvguideConfig.numGrids) {
+ cChannelColumn *cFirst = columns.First();
+ columns.Del(cFirst);
+ }
+ for (cChannelColumn *column = columns.First(); column; column = columns.Next(column)) {
+ column->SetNum(column->GetNum() - 1);
+ column->drawHeader();
+ column->drawGrids();
+ }
+ columns.Add(colRight);
+ colRight->createHeader();
+ colRight->drawGrids();
+ }
}
- osdManager.flush();
-}
-void cTvGuideOsd::ScrollBack() {
- bool tooFarInPast = myTime->DelStep(tvguideConfig.stepMinutes);
- if (tooFarInPast)
- return;
- timeLine->drawDateViewer();
- timeLine->drawClock();
- timeLine->setTimeline();
- for (cChannelColumn *column = columns.First(); column; column = columns.Next(column)) {
- column->AddNewGridsAtStart();
- column->ClearOutdatedEnd();
- column->drawGrids();
- }
-}
-
-void cTvGuideOsd::processKeyDown() {
- if (!activeGrid) {
- return;
- }
- if (detailViewActive) {
- detailView->scrollDown();
- } else {
- bool actionDone = false;
- if ( (myTime->GetEnd() - activeGrid->EndTime())/60 < 30 ) {
- ScrollForward();
- actionDone = true;
- }
- cGrid *next = activeGrid->column->getNext(activeGrid);
- if (next) {
- if ( (next->EndTime() < myTime->GetEnd())
- || ( (myTime->GetEnd() - next->StartTime())/60 > 30 ) ) {
- setNextActiveGrid(next);
- actionDone = true;
- }
- }
- if (!actionDone) {
- ScrollForward();
- }
+ if (colRight) {
+ cGrid *right = colRight->getNeighbor(activeGrid);
+ if (right) {
+ setNextActiveGrid(right);
+ }
}
osdManager.flush();
}
-void cTvGuideOsd::ScrollForward() {
- myTime->AddStep(tvguideConfig.stepMinutes);
- timeLine->drawDateViewer();
- timeLine->drawClock();
- timeLine->setTimeline();
- for (cChannelColumn *column = columns.First(); column; column = columns.Next(column)) {
- column->AddNewGridsAtEnd();
- column->ClearOutdatedStart();
- column->drawGrids();
- }
-}
-
-void cTvGuideOsd::processKeyLeft() {
- if (detailViewActive)
- return;
- if (activeGrid == NULL)
- return;
+void cTvGuideOsd::channelBack() {
cChannelColumn *colLeft = columns.Prev(activeGrid->column);
if (!colLeft) {
const cChannel *channelLeft = activeGrid->column->getChannel();
@@ -287,7 +242,7 @@ void cTvGuideOsd::processKeyLeft() {
}
}
if (colLeft) {
- if (columns.Count() == tvguideConfig.channelCols) {
+ if (columns.Count() == tvguideConfig.numGrids) {
cChannelColumn *cLast = columns.Last();
columns.Del(cLast);
}
@@ -311,47 +266,127 @@ void cTvGuideOsd::processKeyLeft() {
osdManager.flush();
}
+void cTvGuideOsd::timeForward() {
+ bool actionDone = false;
+ if ( (myTime->GetEnd() - activeGrid->EndTime())/60 < 30 ) {
+ ScrollForward();
+ actionDone = true;
+ }
+ cGrid *next = activeGrid->column->getNext(activeGrid);
+ if (next) {
+ if ( (next->EndTime() < myTime->GetEnd())
+ || ( (myTime->GetEnd() - next->StartTime())/60 > 30 ) ) {
+ setNextActiveGrid(next);
+ actionDone = true;
+ }
+ }
+ if (!actionDone) {
+ ScrollForward();
+ }
+ osdManager.flush();
+}
+
+void cTvGuideOsd::ScrollForward() {
+ myTime->AddStep(tvguideConfig.stepMinutes);
+ timeLine->drawDateViewer();
+ timeLine->drawClock();
+ timeLine->setTimeline();
+ for (cChannelColumn *column = columns.First(); column; column = columns.Next(column)) {
+ column->AddNewGridsAtEnd();
+ column->ClearOutdatedStart();
+ column->drawGrids();
+ }
+}
+
+void cTvGuideOsd::timeBack() {
+ bool actionDone = false;
+ if ( (activeGrid->StartTime() - myTime->GetStart())/60 < 30 ) {
+ ScrollBack();
+ actionDone = true;
+ }
+ cGrid *prev = activeGrid->column->getPrev(activeGrid);
+ if (prev) {
+ if ( (prev->StartTime() > myTime->GetStart())
+ || ( (prev->EndTime() - myTime->GetStart())/60 > 30 )
+ || ( prev->isFirst()) ) {
+ setNextActiveGrid(prev);
+ actionDone = true;
+ }
+ }
+ if (!actionDone) {
+ ScrollBack();
+ }
+ osdManager.flush();
+}
+
+void cTvGuideOsd::ScrollBack() {
+ bool tooFarInPast = myTime->DelStep(tvguideConfig.stepMinutes);
+ if (tooFarInPast)
+ return;
+ timeLine->drawDateViewer();
+ timeLine->drawClock();
+ timeLine->setTimeline();
+ for (cChannelColumn *column = columns.First(); column; column = columns.Next(column)) {
+ column->AddNewGridsAtStart();
+ column->ClearOutdatedEnd();
+ column->drawGrids();
+ }
+}
+
+void cTvGuideOsd::processKeyUp() {
+ if (!activeGrid) {
+ return;
+ }
+ if (detailViewActive) {
+ detailView->scrollUp();
+ osdManager.flush();
+ } else {
+ if (tvguideConfig.displayMode == eVertical) {
+ timeBack();
+ } else if (tvguideConfig.displayMode == eHorizontal) {
+ channelBack();
+ }
+ }
+}
+
+void cTvGuideOsd::processKeyDown() {
+ if (!activeGrid) {
+ return;
+ }
+ if (detailViewActive) {
+ detailView->scrollDown();
+ osdManager.flush();
+ } else {
+ if (tvguideConfig.displayMode == eVertical) {
+ timeForward();
+ } else if (tvguideConfig.displayMode == eHorizontal) {
+ channelForward();
+ }
+ }
+}
+
+void cTvGuideOsd::processKeyLeft() {
+ if (detailViewActive)
+ return;
+ if (activeGrid == NULL)
+ return;
+ if (tvguideConfig.displayMode == eVertical) {
+ channelBack();
+ } else if (tvguideConfig.displayMode == eHorizontal) {
+ timeBack();
+ }
+}
+
void cTvGuideOsd::processKeyRight() {
if (detailViewActive)
return;
if (activeGrid == NULL)
return;
- cChannelColumn *colRight = columns.Next(activeGrid->column);
- if (!colRight) {
- const cChannel *channelRight = activeGrid->column->getChannel();
- while (channelRight = Channels.Next(channelRight)) {
- if (!channelRight->GroupSep()) {
- colRight = new cChannelColumn(tvguideConfig.channelCols - 1, channelRight, myTime);
- if (colRight->readGrids()) {
- break;
- } else {
- delete colRight;
- colRight = NULL;
- }
- }
- }
- if (colRight) {
- if (columns.Count() == tvguideConfig.channelCols) {
- cChannelColumn *cFirst = columns.First();
- columns.Del(cFirst);
- }
- for (cChannelColumn *column = columns.First(); column; column = columns.Next(column)) {
- column->SetNum(column->GetNum() - 1);
- column->drawHeader();
- column->drawGrids();
- }
- columns.Add(colRight);
- colRight->createHeader();
- colRight->drawGrids();
- }
- }
- if (colRight) {
- cGrid *right = colRight->getNeighbor(activeGrid);
- if (right) {
- setNextActiveGrid(right);
- }
- }
- osdManager.flush();
+ if (tvguideConfig.displayMode == eVertical) {
+ channelForward();
+ } else if (tvguideConfig.displayMode == eHorizontal) {
+ timeForward();
+ }
}
void cTvGuideOsd::processKeyOk() {
@@ -370,7 +405,7 @@ void cTvGuideOsd::processKeyOk() {
}
void cTvGuideOsd::processKeyRed() {
- if (activeGrid == NULL)
+ if ((activeGrid == NULL) || activeGrid->isDummy())
return;
cTimer *timer = new cTimer(activeGrid->GetEvent());
cTimer *t = Timers.GetTimer(timer);
diff --git a/tvguideosd.h b/tvguideosd.h
index 4027db2..433c48c 100644
--- a/tvguideosd.h
+++ b/tvguideosd.h
@@ -33,6 +33,10 @@ private:
void processKey7();
void processKey9();
void setNextActiveGrid(cGrid *next);
+ void channelForward();
+ void channelBack();
+ void timeForward();
+ void timeBack();
void ScrollForward();
void ScrollBack();
void dump();