diff options
-rw-r--r-- | HISTORY | 6 | ||||
-rw-r--r-- | channelcolumn.c | 4 | ||||
-rw-r--r-- | channelgroup.c | 84 | ||||
-rw-r--r-- | channelgroup.h | 38 | ||||
-rw-r--r-- | channelgroups.c | 137 | ||||
-rw-r--r-- | channelgroups.h | 25 | ||||
-rw-r--r-- | config.c | 30 | ||||
-rw-r--r-- | config.h | 10 | ||||
-rw-r--r-- | dummygrid.c | 4 | ||||
-rw-r--r-- | epggrid.c | 4 | ||||
-rw-r--r-- | footer.c | 51 | ||||
-rw-r--r-- | footer.h | 7 | ||||
-rw-r--r-- | headergrid.c | 8 | ||||
-rw-r--r-- | osdmanager.c | 2 | ||||
-rwxr-xr-x | po/de_DE.po | 36 | ||||
-rw-r--r-- | setup.c | 27 | ||||
-rw-r--r-- | setup.h | 1 | ||||
-rw-r--r-- | timeline.c | 16 | ||||
-rw-r--r-- | timer.c | 8 | ||||
-rw-r--r-- | tvguideosd.c | 123 | ||||
-rw-r--r-- | tvguideosd.h | 1 |
21 files changed, 545 insertions, 77 deletions
@@ -27,3 +27,9 @@ VDR Plugin 'tvguide' Revision History - Fixed some Bugs (position of video, deadlock) - setup of usage of blending now done with clrDoBlending theme color variable and not by setup +- font color of active grid themable +- avoided nasty font pixelation effects with theme iceblue +- Display of channel groups +- Buttons green / yellow can be configured to jump to prev / next channel + group +- Added setup option to hide last channel group diff --git a/channelcolumn.c b/channelcolumn.c index 06adb3f..dae36a0 100644 --- a/channelcolumn.c +++ b/channelcolumn.c @@ -6,10 +6,12 @@ cChannelColumn::cChannelColumn(int num, const cChannel *channel, cMyTime *myTime this->myTime = myTime; hasTimer = channel->HasTimer(); schedulesLock = new cSchedulesLock(false, 100); + header = NULL; } cChannelColumn::~cChannelColumn(void) { - delete header; + if (header) + delete header; grids.Clear(); delete schedulesLock; } diff --git a/channelgroup.c b/channelgroup.c new file mode 100644 index 0000000..a089210 --- /dev/null +++ b/channelgroup.c @@ -0,0 +1,84 @@ +#include "channelgroup.h"
+
+cChannelGroup::cChannelGroup(const char *name) {
+ channelStart = 0;
+ channelStop = 0;
+ this->name = name;
+}
+
+cChannelGroup::~cChannelGroup(void) {
+}
+
+void cChannelGroup::Dump(void) {
+ esyslog("tvguide: Group %s, startChannel %d, stopChannel %d", name, channelStart, channelStop);
+}
+
+// --- cChannelGroupGrid -------------------------------------------------------------
+
+cChannelGroupGrid::cChannelGroupGrid(const char *name) {
+ this->name = name;
+}
+
+cChannelGroupGrid::~cChannelGroupGrid(void) {
+}
+
+void cChannelGroupGrid::SetBackground() {
+ if (isColor1) {
+ color = theme.Color(clrGrid1);
+ colorBlending = theme.Color(clrGrid1Blending);
+ } else {
+ color = theme.Color(clrGrid2);
+ colorBlending = theme.Color(clrGrid2Blending);
+ }
+}
+
+void cChannelGroupGrid::SetGeometry(int start, int end) {
+ int x, y, width, height;
+ if (tvguideConfig.displayMode == eVertical) {
+ x = tvguideConfig.timeLineWidth + start*tvguideConfig.colWidth;
+ y = tvguideConfig.statusHeaderHeight;
+ width = (end - start + 1) * tvguideConfig.colWidth;
+ height = tvguideConfig.channelGroupsHeight;
+ } else if (tvguideConfig.displayMode == eHorizontal) {
+ x = 0;
+ y = tvguideConfig.statusHeaderHeight + tvguideConfig.timeLineHeight + start*tvguideConfig.rowHeight;
+ width = tvguideConfig.channelGroupsWidth;
+ height = (end - start + 1) * tvguideConfig.rowHeight;
+ }
+ pixmap = osdManager.requestPixmap(1, cRect(x, y, width, height));
+}
+
+void cChannelGroupGrid::Draw(void) {
+ drawBackground();
+ drawBorder();
+ tColor colorText = theme.Color(clrFont);
+ tColor colorTextBack = (tvguideConfig.useBlending==0)?color:clrTransparent;
+ if (tvguideConfig.displayMode == eVertical) {
+ int textY = (Height() - tvguideConfig.FontChannelGroups->Height()) / 2;
+ cString text = CutText(name, Width() - 4, tvguideConfig.FontChannelGroups).c_str();
+ int textWidth = tvguideConfig.FontChannelGroups->Width(*text);
+ int x = (Width() - textWidth) / 2;
+ pixmap->DrawText(cPoint(x, textY), *text, colorText, colorTextBack, tvguideConfig.FontChannelGroups);
+ } else if (tvguideConfig.displayMode == eHorizontal) {
+ std::string nameUpper = name;
+ std::transform(nameUpper.begin(), nameUpper.end(),nameUpper.begin(), ::toupper);
+ int numChars = nameUpper.length();
+ int charHeight = tvguideConfig.FontChannelGroupsHorizontal->Height();
+ int textHeight = numChars * charHeight;
+ int y = 5;
+ if ((textHeight +5) < Height()) {
+ y = (Height() - textHeight) / 2;
+ }
+ for (int i=0; i < numChars; i++) {
+ if (((y + 2*charHeight) > Height()) && ((i+1)<numChars)) {
+ int x = (Width() - tvguideConfig.FontChannelGroupsHorizontal->Width("...")) / 2;
+ pixmap->DrawText(cPoint(x, y), "...", colorText, colorTextBack, tvguideConfig.FontChannelGroupsHorizontal);
+ break;
+ }
+ cString currentChar = cString::sprintf("%c", nameUpper.at(i));
+ int x = (Width() - tvguideConfig.FontChannelGroupsHorizontal->Width(*currentChar)) / 2;
+ pixmap->DrawText(cPoint(x, y), *currentChar, colorText, colorTextBack, tvguideConfig.FontChannelGroupsHorizontal);
+ y += tvguideConfig.FontChannelGroupsHorizontal->Height();
+ }
+ }
+}
\ No newline at end of file diff --git a/channelgroup.h b/channelgroup.h new file mode 100644 index 0000000..62589b0 --- /dev/null +++ b/channelgroup.h @@ -0,0 +1,38 @@ +#ifndef __TVGUIDE_CHANNELGROUP_H
+#define __TVGUIDE_CHANNELGROUP_H
+
+// --- cChannelGroup -------------------------------------------------------------
+
+class cChannelGroup {
+private:
+ int channelStart;
+ int channelStop;
+ const char *name;
+public:
+ cChannelGroup(const char *name);
+ virtual ~cChannelGroup(void);
+ void SetChannelStart(int start) { channelStart = start; };
+ int StartChannel(void) { return channelStart; };
+ void SetChannelStop(int stop) { channelStop = stop; };
+ int StopChannel(void) { return channelStop; };
+ const char* GetName(void) { return name; };
+ void Dump(void);
+};
+
+// --- cChannelGroupGrid -------------------------------------------------------------
+
+class cChannelGroupGrid : public cListObject, public cStyledPixmap {
+private:
+ const char *name;
+ bool isColor1;
+public:
+ cChannelGroupGrid(const char *name);
+ virtual ~cChannelGroupGrid(void);
+ void SetColor(bool color) {isColor1 = color;};
+ void SetBackground(void);
+ void SetGeometry(int start, int end);
+ void Draw(void);
+};
+
+
+#endif //__TVGUIDE_CHANNELGROUP_H
diff --git a/channelgroups.c b/channelgroups.c new file mode 100644 index 0000000..ce11e78 --- /dev/null +++ b/channelgroups.c @@ -0,0 +1,137 @@ +#include <vector> +#include "channelgroups.h" + +cChannelGroups::cChannelGroups(void) { +} + +cChannelGroups::~cChannelGroups(void) { +} + +void cChannelGroups::ReadChannelGroups(void) { + bool setStart = false; + int lastChannelNumber = 0; + const cChannel *first = Channels.First(); + if (!first->GroupSep()) { + channelGroups.push_back(cChannelGroup(tr("Main Program"))); + setStart = true; + } + for (const cChannel *channel = Channels.First(); channel; channel = Channels.Next(channel)) { + if (setStart && (channelGroups.size() > 0)) { + channelGroups[channelGroups.size()-1].SetChannelStart(channel->Number()); + setStart = false; + } + if (channel->GroupSep()) { + if (channelGroups.size() > 0) { + channelGroups[channelGroups.size()-1].SetChannelStop(lastChannelNumber); + } + channelGroups.push_back(cChannelGroup(channel->Name())); + setStart = true; + } else { + lastChannelNumber = channel->Number(); + } + } + if (channelGroups.size() > 0) { + channelGroups[channelGroups.size()-1].SetChannelStop(lastChannelNumber); + if ((tvguideConfig.hideLastGroup)&&(channelGroups.size() > 1)) { + channelGroups.pop_back(); + } + } +} + +int cChannelGroups::GetGroup(const cChannel *channel) { + int channelNumber = channel->Number(); + int numGroups = channelGroups.size(); + if (numGroups) { + for (int i=0; i<numGroups; i++) { + if ((channelGroups[i].StartChannel() <= channelNumber) && ((channelGroups[i].StopChannel() >= channelNumber))) { + return i; + } + } + } + return -1; +} + +const char* cChannelGroups::GetPrev(int group) { + if (group > 0) { + return channelGroups[group-1].GetName(); + } + return ""; +} + +const char* cChannelGroups::GetNext(int group) { + if (group > -1) { + if ((group+1) < channelGroups.size()) + return channelGroups[group+1].GetName(); + } + return ""; +} + +int cChannelGroups::GetPrevGroupChannelNumber(const cChannel *channel) { + int currentGroup = GetGroup(channel); + if (currentGroup == -1) + return 0; + if (currentGroup > 0) { + return channelGroups[currentGroup-1].StartChannel(); + } + return 0; +} + +int cChannelGroups::GetNextGroupChannelNumber(const cChannel *channel) { + int currentGroup = GetGroup(channel); + if (currentGroup == -1) + return 0; + if ((currentGroup+1) < channelGroups.size()) { + return channelGroups[currentGroup+1].StartChannel(); + } + return 0; +} + +bool cChannelGroups::IsInLastGroup(const cChannel *channel) { + if (!tvguideConfig.hideLastGroup) + return false; + if (channelGroups.size() > 0) { + if (channel->Number() > channelGroups[channelGroups.size()-1].StopChannel()) { + return true; + } + } + return false; +} + +void cChannelGroups::DrawChannelGroups(const cChannel *start, const cChannel *stop) { + groupGrids.Clear(); + int group = GetGroup(start); + int groupLast = group; + int line = 0; + int lineStart = 0; + for (const cChannel *channel = Channels.Next(start); channel; channel = Channels.Next(channel)) { + if (channel->GroupSep()) + continue; + group = GetGroup(channel); + if (group != groupLast) { + CreateGroupGrid(channelGroups[groupLast].GetName(), group, lineStart, line); + lineStart = line + 1; + } + line++; + groupLast = group; + if (channel == stop) { + CreateGroupGrid(channelGroups[groupLast].GetName(), group, lineStart, line); + break; + } + } + +} + +void cChannelGroups::CreateGroupGrid(const char *name, int number, int start, int end) { + cChannelGroupGrid *groupGrid = new cChannelGroupGrid(name); + groupGrid->SetColor(number%2); + groupGrid->SetBackground(); + groupGrid->SetGeometry(start, end); + groupGrid->Draw(); + groupGrids.Add(groupGrid); +} + +void cChannelGroups::DumpGroups(void) { + for (std::vector<cChannelGroup>::iterator group = channelGroups.begin(); group!=channelGroups.end(); ++group) { + group->Dump(); + } +} diff --git a/channelgroups.h b/channelgroups.h new file mode 100644 index 0000000..3bab829 --- /dev/null +++ b/channelgroups.h @@ -0,0 +1,25 @@ +#ifndef __TVGUIDE_CHANNELGROUPS_H +#define __TVGUIDE_CHANNELGROUPS_H + +// --- cChannelGroups ------------------------------------------------------------- + +class cChannelGroups { +private: + std::vector<cChannelGroup> channelGroups; + cList<cChannelGroupGrid> groupGrids; +public: + cChannelGroups(void); + virtual ~cChannelGroups(void); + void ReadChannelGroups(void); + const char* GetPrev(int group); + const char* GetNext(int group); + int GetGroup(const cChannel *channel); + int GetPrevGroupChannelNumber(const cChannel *channel); + int GetNextGroupChannelNumber(const cChannel *channel); + bool IsInLastGroup(const cChannel *channel); + void DrawChannelGroups(const cChannel *start, const cChannel *stop); + void CreateGroupGrid(const char *name, int number, int start, int end); + void DumpGroups(void); +}; + +#endif //__TVGUIDE_CHANNELGROUPS_H @@ -10,6 +10,10 @@ enum { eHorizontal
};
+enum {
+ eNumJump,
+ eGroupJump
+};
cTvguideConfig::cTvguideConfig() {
osdWidth = 0;
@@ -22,8 +26,12 @@ cTvguideConfig::cTvguideConfig() { displayTime = 160;
minutePixel = 0;
displayStatusHeader = 1;
+ displayChannelGroups = 1;
statusHeaderPercent = 20;
statusHeaderHeight = 0;
+ channelGroupsPercent = 5;
+ channelGroupsWidth = 0;
+ channelGroupsHeight = 0;
scaleVideo = 1;
decorateVideo = 1;
timeLineWidthPercent = 8;
@@ -35,7 +43,9 @@ cTvguideConfig::cTvguideConfig() { stepMinutes = 30;
bigStepHours = 3;
hugeStepHours = 24;
+ channelJumpMode = eNumJump;
jumpChannels = 10;
+ hideLastGroup = 0;
hideChannelLogos = 0;
logoWidthRatio = 13;
logoHeightRatio = 10;
@@ -53,12 +63,14 @@ cTvguideConfig::cTvguideConfig() { FontStatusHeaderDelta = 0;
FontStatusHeaderLargeDelta = 0;
FontChannelHeaderDelta = 0;
+ FontChannelGroupsDelta = 0;
FontGridDelta = 0;
FontGridSmallDelta = 0;
FontTimeLineWeekdayDelta = 0;
FontTimeLineDateDelta = 0;
FontTimeLineTimeDelta = 0;
FontChannelHeaderHorizontalDelta = 0;
+ FontChannelGroupsHorizontalDelta = 0;
FontGridHorizontalDelta = 0;
FontGridHorizontalSmallDelta = 0;
FontTimeLineDateHorizontalDelta = 0;
@@ -103,12 +115,14 @@ cTvguideConfig::~cTvguideConfig() { delete FontStatusHeader;
delete FontStatusHeaderLarge;
delete FontChannelHeader;
+ delete FontChannelGroups;
delete FontGrid;
delete FontGridSmall;
delete FontTimeLineWeekday;
delete FontTimeLineDate;
delete FontTimeLineTime;
delete FontChannelHeaderHorizontal;
+ delete FontChannelGroupsHorizontal;
delete FontGridHorizontal;
delete FontGridHorizontalSmall;
delete FontTimeLineDateHorizontal;
@@ -124,6 +138,8 @@ void cTvguideConfig::SetGeometry(int width, int height) { osdWidth = width;
osdHeight = height;
statusHeaderHeight = (displayStatusHeader)?(statusHeaderPercent * osdHeight / 100):0;
+ channelGroupsWidth = (displayChannelGroups)?(channelGroupsPercent * osdWidth / 100):0;
+ channelGroupsHeight = (displayChannelGroups)?(channelGroupsPercent * osdHeight / 100):0;
channelHeaderWidth = channelHeaderWidthPercent * osdWidth / 100;
channelHeaderHeight = channelHeaderHeightPercent * osdHeight / 100;
timeLineWidth = timeLineWidthPercent * osdWidth / 100;
@@ -132,11 +148,11 @@ void cTvguideConfig::SetGeometry(int width, int height) { if (displayMode == eVertical) {
colWidth = (osdWidth - timeLineWidth) / channelCols;
rowHeight = 0;
- minutePixel = (osdHeight - statusHeaderHeight - channelHeaderHeight - footerHeight) / displayTime;
+ minutePixel = (osdHeight - statusHeaderHeight - channelGroupsHeight - channelHeaderHeight - footerHeight) / displayTime;
} else if (displayMode == eHorizontal) {
colWidth = 0;
rowHeight = (osdHeight - statusHeaderHeight - timeLineHeight - footerHeight) / channelRows;
- minutePixel = (osdWidth - channelHeaderWidth) / displayTime;
+ minutePixel = (osdWidth - channelHeaderWidth - channelGroupsWidth) / displayTime;
}
numGrids = (displayMode == eVertical)?channelCols:channelRows;
@@ -171,6 +187,7 @@ void cTvguideConfig::SetFonts(void){ FontStatusHeaderLarge = cFont::CreateFont(*fontname, statusHeaderHeight/5 + FontStatusHeaderLargeDelta);
//Fonts for vertical Display
FontChannelHeader = cFont::CreateFont(*fontname, colWidth/10 + FontChannelHeaderDelta);
+ FontChannelGroups = cFont::CreateFont(*fontname, colWidth/8 + FontChannelGroupsDelta);
FontGrid = cFont::CreateFont(*fontname, colWidth/12 + FontGridDelta);
FontGridSmall = cFont::CreateFont(*fontname, colWidth/12 + FontGridSmallDelta);
FontTimeLineWeekday = cFont::CreateFont(*fontname, timeLineWidth/3 + FontTimeLineWeekdayDelta);
@@ -178,6 +195,7 @@ void cTvguideConfig::SetFonts(void){ FontTimeLineTime = cFont::CreateFont(*fontname, timeLineWidth/4 + FontTimeLineTimeDelta);
//Fonts for horizontal Display
FontChannelHeaderHorizontal = cFont::CreateFont(*fontname, rowHeight/3 + FontChannelHeaderHorizontalDelta);
+ FontChannelGroupsHorizontal = cFont::CreateFont(*fontname, rowHeight/3 + 5 + FontChannelGroupsHorizontalDelta);
FontGridHorizontal = cFont::CreateFont(*fontname, rowHeight/3 + 5 + FontGridHorizontalDelta);
FontGridHorizontalSmall = cFont::CreateFont(*fontname, rowHeight/4 + FontGridHorizontalSmallDelta);
FontTimeLineDateHorizontal = cFont::CreateFont(*fontname, timeLineHeight/2 + 5 + FontTimeLineDateHorizontalDelta);
@@ -217,7 +235,9 @@ bool cTvguideConfig::SetupParse(const char *Name, const char *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, "displayChannelGroups") == 0) displayChannelGroups = atoi(Value);
else if (strcmp(Name, "statusHeaderPercent") == 0) statusHeaderPercent = atoi(Value);
+ else if (strcmp(Name, "channelGroupsPercent") == 0) channelGroupsPercent = atoi(Value);
else if (strcmp(Name, "scaleVideo") == 0) scaleVideo = atoi(Value);
else if (strcmp(Name, "decorateVideo") == 0) decorateVideo = atoi(Value);
else if (strcmp(Name, "roundedCorners") == 0) roundedCorners = atoi(Value);
@@ -230,7 +250,9 @@ bool cTvguideConfig::SetupParse(const char *Name, const char *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, "channelJumpMode") == 0) channelJumpMode = atoi(Value);
else if (strcmp(Name, "jumpChannels") == 0) jumpChannels = atoi(Value);
+ else if (strcmp(Name, "hideLastGroup") == 0) hideLastGroup = 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);
@@ -248,13 +270,15 @@ bool cTvguideConfig::SetupParse(const char *Name, const char *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, "FontChannelHeaderDelta") == 0) FontChannelHeaderDelta = atoi(Value);
+ else if (strcmp(Name, "FontChannelGroupsDelta") == 0) FontChannelGroupsDelta = 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, "FontChannelGroupsHorizontalDelta") == 0) FontChannelGroupsHorizontalDelta = 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);
@@ -22,8 +22,12 @@ class cTvguideConfig { int displayTime;
int minutePixel;
int displayStatusHeader;
+ int displayChannelGroups;
int statusHeaderPercent;
int statusHeaderHeight;
+ int channelGroupsPercent;
+ int channelGroupsWidth;
+ int channelGroupsHeight;
int scaleVideo;
int decorateVideo;
int timeLineWidthPercent;
@@ -39,7 +43,9 @@ class cTvguideConfig { int stepMinutes;
int bigStepHours;
int hugeStepHours;
+ int channelJumpMode;
int jumpChannels;
+ int hideLastGroup;
int hideChannelLogos;
int logoWidthRatio;
int logoHeightRatio;
@@ -59,18 +65,22 @@ class cTvguideConfig { int FontStatusHeaderDelta;
int FontStatusHeaderLargeDelta;
int FontChannelHeaderDelta;
+ int FontChannelGroupsDelta;
int FontGridDelta;
int FontGridSmallDelta;
int FontTimeLineWeekdayDelta;
int FontTimeLineDateDelta;
int FontTimeLineTimeDelta;
int FontChannelHeaderHorizontalDelta;
+ int FontChannelGroupsHorizontalDelta;
int FontGridHorizontalDelta;
int FontGridHorizontalSmallDelta;
int FontTimeLineDateHorizontalDelta;
int FontTimeLineTimeHorizontalDelta;
const cFont *FontChannelHeader;
const cFont *FontChannelHeaderHorizontal;
+ const cFont *FontChannelGroups;
+ const cFont *FontChannelGroupsHorizontal;
const cFont *FontStatusHeader;
const cFont *FontStatusHeaderLarge;
const cFont *FontGrid;
diff --git a/dummygrid.c b/dummygrid.c index f2c5c03..97a8d1a 100644 --- a/dummygrid.c +++ b/dummygrid.c @@ -21,7 +21,7 @@ void cDummyGrid::PositionPixmap() { int x0, y0; if (tvguideConfig.displayMode == eVertical) { x0 = column->getX(); - y0 = tvguideConfig.statusHeaderHeight + tvguideConfig.channelHeaderHeight; + y0 = tvguideConfig.statusHeaderHeight + tvguideConfig.channelHeaderHeight + tvguideConfig.channelGroupsHeight; if ( column->Start() < StartTime() ) { y0 += (StartTime() - column->Start())/60*tvguideConfig.minutePixel; } @@ -34,7 +34,7 @@ void cDummyGrid::PositionPixmap() { pixmap->SetViewPort(cRect(x0, y0, tvguideConfig.colWidth, viewportHeight)); } } else if (tvguideConfig.displayMode == eHorizontal) { - x0 = tvguideConfig.channelHeaderWidth; + x0 = tvguideConfig.channelHeaderWidth + tvguideConfig.channelGroupsWidth; y0 = column->getY(); if ( column->Start() < StartTime() ) { x0 += (StartTime() - column->Start())/60*tvguideConfig.minutePixel; @@ -33,7 +33,7 @@ void cEpgGrid::PositionPixmap() { int x0, y0;
if (tvguideConfig.displayMode == eVertical) {
int x0 = column->getX();
- int y0 = tvguideConfig.statusHeaderHeight + tvguideConfig.channelHeaderHeight;
+ int y0 = tvguideConfig.statusHeaderHeight + tvguideConfig.channelHeaderHeight + tvguideConfig.channelGroupsHeight;
if ( column->Start() < StartTime() ) {
y0 += (StartTime() - column->Start())/60*tvguideConfig.minutePixel;
}
@@ -44,7 +44,7 @@ void cEpgGrid::PositionPixmap() { pixmap->SetViewPort(cRect(x0, y0, tvguideConfig.colWidth, viewportHeight));
}
} else if (tvguideConfig.displayMode == eHorizontal) {
- int x0 = tvguideConfig.channelHeaderWidth;
+ int x0 = tvguideConfig.channelHeaderWidth + tvguideConfig.channelGroupsWidth;
int y0 = column->getY();
if ( column->Start() < StartTime() ) {
x0 += (StartTime() - column->Start())/60*tvguideConfig.minutePixel;
@@ -1,6 +1,8 @@ #include "footer.h"
-cFooter::cFooter() {
+cFooter::cFooter(cChannelGroups *channelGroups) {
+ this->channelGroups = channelGroups;
+ currentGroup = -1;
buttonBorder = 20;
buttonWidth = (tvguideConfig.osdWidth - tvguideConfig.timeLineWidth - 5*buttonBorder)/4;
buttonHeight= tvguideConfig.footerHeight - 2*buttonBorder;
@@ -18,6 +20,23 @@ cFooter::~cFooter(void) { osdManager.releasePixmap(footer);
}
+void cFooter::DrawButton(const char *text, tColor color, tColor borderColor, int num) {
+ tColor colorTextBack = (tvguideConfig.useBlending==0)?color:clrTransparent;
+ int left = num * buttonWidth + (num + 1) * buttonBorder;
+ footer->DrawRectangle(cRect(left, buttonY, buttonWidth, buttonHeight), borderColor);
+ if (tvguideConfig.useBlending) {
+ cImageLoader imgLoader;
+ imgLoader.DrawBackground(theme.Color(clrButtonBlend), color, buttonWidth-4, buttonHeight-4);
+ footer->DrawImage(cPoint(left+2, buttonY+2), imgLoader.GetImage());
+ } else {
+ footer->DrawRectangle(cRect(left, buttonY, buttonWidth, buttonHeight), borderColor);
+ footer->DrawRectangle(cRect(left+2, buttonY+2, buttonWidth-4, buttonHeight-4), color);
+ }
+ int textWidth = tvguideConfig.FontButton->Width(text);
+ int textHeight = tvguideConfig.FontButton->Height();
+ footer->DrawText(cPoint(left + (buttonWidth-textWidth)/2, buttonY + (buttonHeight-textHeight)/2), text, theme.Color(clrFontButtons), colorTextBack, tvguideConfig.FontButton);
+}
+
void cFooter::drawRedButton() {
cString text(tr("Set Timer"));
DrawButton(*text, theme.Color(clrButtonRed), theme.Color(clrButtonRedBorder), 0);
@@ -28,29 +47,31 @@ void cFooter::drawGreenButton() { DrawButton(*text, theme.Color(clrButtonGreen), theme.Color(clrButtonGreenBorder), 1);
}
+void cFooter::drawGreenButton(const char *text) {
+ std::string cuttedText = CutText(text, buttonWidth-6, tvguideConfig.FontButton);
+ DrawButton(cuttedText.c_str(), theme.Color(clrButtonGreen), theme.Color(clrButtonGreenBorder), 1);
+}
+
void cFooter::drawYellowButton() {
cString text = cString::sprintf("%d %s", tvguideConfig.jumpChannels, tr("Channels forward"));
DrawButton(*text, theme.Color(clrButtonYellow), theme.Color(clrButtonYellowBorder), 2);
}
+void cFooter::drawYellowButton(const char *text) {
+ std::string cuttedText = CutText(text, buttonWidth-6, tvguideConfig.FontButton);
+ DrawButton(cuttedText.c_str(), theme.Color(clrButtonYellow), theme.Color(clrButtonYellowBorder), 2);
+}
+
void cFooter::drawBlueButton() {
cString text(tr("Switch to Channel"));
DrawButton(*text, theme.Color(clrButtonBlue), theme.Color(clrButtonBlueBorder), 3);
}
-void cFooter::DrawButton(const char *text, tColor color, tColor borderColor, int num) {
- tColor colorTextBack = (tvguideConfig.useBlending==0)?color:clrTransparent;
- int left = num * buttonWidth + (num + 1) * buttonBorder;
- footer->DrawRectangle(cRect(left, buttonY, buttonWidth, buttonHeight), borderColor);
- if (tvguideConfig.useBlending) {
- cImageLoader imgLoader;
- imgLoader.DrawBackground(theme.Color(clrButtonBlend), color, buttonWidth-4, buttonHeight-4);
- footer->DrawImage(cPoint(left+2, buttonY+2), imgLoader.GetImage());
- } else {
- footer->DrawRectangle(cRect(left, buttonY, buttonWidth, buttonHeight), borderColor);
- footer->DrawRectangle(cRect(left+2, buttonY+2, buttonWidth-4, buttonHeight-4), color);
+void cFooter::UpdateGroupButtons(const cChannel *channel) {
+ int group = channelGroups->GetGroup(channel);
+ if (group != currentGroup) {
+ currentGroup = group;
+ drawGreenButton(channelGroups->GetPrev(group));
+ drawYellowButton(channelGroups->GetNext(group));
}
- int textWidth = tvguideConfig.FontButton->Width(text);
- int textHeight = tvguideConfig.FontButton->Height();
- footer->DrawText(cPoint(left + (buttonWidth-textWidth)/2, buttonY + (buttonHeight-textHeight)/2), text, theme.Color(clrFontButtons), colorTextBack, tvguideConfig.FontButton);
}
\ No newline at end of file @@ -10,14 +10,19 @@ private: int buttonHeight;
int buttonY;
int buttonBorder;
+ cChannelGroups *channelGroups;
+ int currentGroup;
void DrawButton(const char *text, tColor color, tColor borderColor, int num);
public:
- cFooter();
+ cFooter(cChannelGroups *channelGroups);
virtual ~cFooter(void);
void drawRedButton();
void drawGreenButton();
void drawYellowButton();
+ void drawGreenButton(const char *text);
+ void drawYellowButton(const char *text);
void drawBlueButton();
+ void UpdateGroupButtons(const cChannel *channel);
};
#endif //__TVGUIDE_FOOTER_H
\ No newline at end of file diff --git a/headergrid.c b/headergrid.c index 06e8b49..280ea46 100644 --- a/headergrid.c +++ b/headergrid.c @@ -15,11 +15,11 @@ void cHeaderGrid::createBackground(int num) { int x, y, width, height;
if (tvguideConfig.displayMode == eVertical) {
x = tvguideConfig.timeLineWidth + num*tvguideConfig.colWidth;
- y = tvguideConfig.statusHeaderHeight;
+ y = tvguideConfig.statusHeaderHeight + tvguideConfig.channelGroupsHeight;
width = tvguideConfig.colWidth;
height = tvguideConfig.channelHeaderHeight;
} else if (tvguideConfig.displayMode == eHorizontal) {
- x = 0;
+ x = tvguideConfig.channelGroupsWidth;
y = tvguideConfig.statusHeaderHeight + tvguideConfig.timeLineHeight + num*tvguideConfig.rowHeight;
width = tvguideConfig.channelHeaderWidth;
height = tvguideConfig.rowHeight;
@@ -114,11 +114,11 @@ void cHeaderGrid::setPosition(int num) { int x, y, width, height;
if (tvguideConfig.displayMode == eVertical) {
x = tvguideConfig.timeLineWidth + num*tvguideConfig.colWidth;
- y = tvguideConfig.statusHeaderHeight;
+ y = tvguideConfig.statusHeaderHeight + tvguideConfig.channelGroupsHeight;
width = tvguideConfig.colWidth;
height = tvguideConfig.channelHeaderHeight;
} else if (tvguideConfig.displayMode == eHorizontal) {
- x = 0;
+ x = tvguideConfig.channelGroupsWidth;
y = tvguideConfig.statusHeaderHeight + tvguideConfig.timeLineHeight + num*tvguideConfig.rowHeight;
width = tvguideConfig.channelHeaderWidth;
height = tvguideConfig.rowHeight;
diff --git a/osdmanager.c b/osdmanager.c index 9347f8c..8fdd7f6 100644 --- a/osdmanager.c +++ b/osdmanager.c @@ -38,8 +38,6 @@ bool cOsdManager::setOsd() { }
void cOsdManager::setBackground() {
-esyslog("tvguide: %d %d", Width(), Height());
-
if (tvguideConfig.displayStatusHeader && tvguideConfig.scaleVideo) {
int widthStatus = cOsd::OsdWidth() - tvguideConfig.statusHeaderHeight * 16 / 9;
osd->DrawRectangle(0, 0, widthStatus, tvguideConfig.statusHeaderHeight, theme.Color(clrBackgroundOSD));
diff --git a/po/de_DE.po b/po/de_DE.po index 979ec86..dc388f2 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-28 16:45+0200\n" +"POT-Creation-Date: 2013-05-31 11:43+0200\n" "PO-Revision-Date: 2012-08-25 17:49+0200\n" "Last-Translator: Horst\n" "Language-Team: \n" @@ -12,6 +12,9 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +msgid "Main Program" +msgstr "Hauptprogramm" + msgid "RERUNS OF THIS SHOW" msgstr "Wiederholungen dieser Sendung" @@ -39,6 +42,12 @@ msgstr "Anzeigeoptionen" msgid "Fonts and Fontsizes" msgstr "Schriften und Schriftgrößen" +msgid "x channels back / forward" +msgstr "x Kanäle zurück / vor" + +msgid "previous / next channel group" +msgstr "vorherige / nächste Kanalgruppe" + msgid "never" msgstr "nie" @@ -54,8 +63,14 @@ msgstr "Theme" msgid "Rounded Corners" msgstr "Abgerundete Ecken" -msgid "Channels to Jump (Keys Green / Yellow)" -msgstr "Kanalsprung (Tasten Grün / Gelb)" +msgid "Channel Jump Mode (Keys Green / Yellow)" +msgstr "Kanalsprung Modus (Tasten grün / gelb)" + +msgid "Channels to Jump" +msgstr "Anzahl der Kanäle" + +msgid "Hide last Channel Group" +msgstr "Letzte Kanalgruppe verstecken" msgid "Time to display in minutes" msgstr "Angezeigte Zeitspanne in Minuten" @@ -114,6 +129,15 @@ msgstr "Abgerundete Ecken um Videofenster" msgid "Display Channel Names in Header" msgstr "Kanalnamen im Header anzeigen" +msgid "Display channel groups" +msgstr "Kanalgruppen anzeigen" + +msgid "Height of channel groups (Perc. of osd height)" +msgstr "Höhe der Kanalgruppen (% der OSD Höhe)" + +msgid "Width of channel groups (Perc. of osd width)" +msgstr "Breite der Kanalgruppen (% der OSD Breite)" + msgid "Show Channel Logos" msgstr "Kanallogos anzeigen" @@ -168,6 +192,9 @@ msgstr "Button Schriftgröße" msgid "Channel Header Font Size" msgstr "Kanal Header Schriftgröße" +msgid "Channel Groups Font Size" +msgstr "Kanalgruppen Schriftgröße" + msgid "Grid Font Size" msgstr "Grid Schriftgröße" @@ -188,6 +215,3 @@ msgstr "Timer wurde nicht gesetzt! Es existiert bereits ein Timer für diese Sen msgid "Timer set" msgstr "Timer gesetzt" - -#~ msgid "Use color gradients" -#~ msgstr "Farbverläufe verwenden" @@ -48,7 +48,9 @@ void cTvguideSetup::Store(void) { SetupStore("themeIndex", tvguideConfig.themeIndex); SetupStore("displayMode", tvguideConfig.displayMode); SetupStore("displayStatusHeader", tvguideConfig.displayStatusHeader); + SetupStore("displayChannelGroups", tvguideConfig.displayChannelGroups); SetupStore("statusHeaderPercent", tvguideConfig.statusHeaderPercent); + SetupStore("channelGroupsPercent", tvguideConfig.channelGroupsPercent); SetupStore("scaleVideo", tvguideConfig.scaleVideo); SetupStore("decorateVideo", tvguideConfig.decorateVideo); SetupStore("roundedCorners", tvguideConfig.roundedCorners); @@ -58,7 +60,9 @@ void cTvguideSetup::Store(void) { SetupStore("displayTime", tvguideConfig.displayTime); SetupStore("bigStepHours", tvguideConfig.bigStepHours); SetupStore("hugeStepHours", tvguideConfig.hugeStepHours); + SetupStore("channelJumpMode", tvguideConfig.channelJumpMode); SetupStore("jumpChannels", tvguideConfig.jumpChannels); + SetupStore("hideLastGroup", tvguideConfig.hideLastGroup); SetupStore("hideChannelLogos", tvguideConfig.hideChannelLogos); SetupStore("logoExtension", tvguideConfig.logoExtension); SetupStore("logoWidthRatio", tvguideConfig.logoWidthRatio); @@ -82,12 +86,14 @@ void cTvguideSetup::Store(void) { SetupStore("FontStatusHeaderDelta", tvguideConfig.FontStatusHeaderDelta); SetupStore("FontStatusHeaderLargeDelta", tvguideConfig.FontStatusHeaderLargeDelta); SetupStore("FontChannelHeaderDelta", tvguideConfig.FontChannelHeaderDelta); + SetupStore("FontChannelGroupsDelta", tvguideConfig.FontChannelGroupsDelta); 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("FontChannelGroupsHorizontalDelta", tvguideConfig.FontChannelGroupsHorizontalDelta); SetupStore("FontGridHorizontalDelta", tvguideConfig.FontGridHorizontalDelta); SetupStore("FontGridHorizontalSmallDelta", tvguideConfig.FontGridHorizontalSmallDelta); SetupStore("FontTimeLineDateHorizontalDelta", tvguideConfig.FontTimeLineDateHorizontalDelta); @@ -127,6 +133,8 @@ cMenuSetupGeneral::cMenuSetupGeneral(cTvguideConfig* data) : cMenuSetupSubMenu( themes.Load(*cString("tvguide")); timeFormatItems[0] = "12h"; timeFormatItems[1] = "24h"; + jumpMode[0] = tr("x channels back / forward"); + jumpMode[1] = tr("previous / next channel group"); useSubtitleRerunTexts[0] = tr("never"); useSubtitleRerunTexts[1] = tr("if exists"); useSubtitleRerunTexts[2] = tr("always"); @@ -140,8 +148,12 @@ void cMenuSetupGeneral::Set(void) { if (themes.NumThemes()) Add(new cMenuEditStraItem(tr("Theme"), &tmpTvguideConfig->themeIndex, themes.NumThemes(), themes.Descriptions())); Add(new cMenuEditBoolItem(tr("Rounded Corners"), &tmpTvguideConfig->roundedCorners)); - - Add(new cMenuEditIntItem(tr("Channels to Jump (Keys Green / Yellow)"), &tmpTvguideConfig->jumpChannels, 2, 30)); + + Add(new cMenuEditStraItem(tr("Channel Jump Mode (Keys Green / Yellow)"), &tmpTvguideConfig->channelJumpMode, 2, jumpMode)); + if (tmpTvguideConfig->channelJumpMode == eNumJump) { + Add(new cMenuEditIntItem(cString::sprintf("%s%s", indent, tr("Channels to Jump")), &tmpTvguideConfig->jumpChannels, 2, 30)); + } + Add(new cMenuEditBoolItem(tr("Hide last Channel Group"), &tmpTvguideConfig->hideLastGroup)); 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)); @@ -203,6 +215,15 @@ void cMenuSetupScreenLayout::Set(void) { } Add(new cMenuEditBoolItem(tr("Display Channel Names in Header"), &tmpTvguideConfig->displayChannelName)); + Add(new cMenuEditBoolItem(tr("Display channel groups"), &tmpTvguideConfig->displayChannelGroups)); + if (tmpTvguideConfig->displayChannelGroups) { + if (tmpTvguideConfig->displayMode == eVertical) { + Add(new cMenuEditIntItem(*cString::sprintf("%s%s", indent, tr("Height of channel groups (Perc. of osd height)")), &tmpTvguideConfig->channelGroupsPercent, 3, 30)); + } else if (tmpTvguideConfig->displayMode == eHorizontal) { + Add(new cMenuEditIntItem(*cString::sprintf("%s%s", indent, tr("Width of channel groups (Perc. of osd width)")), &tmpTvguideConfig->channelGroupsPercent, 3, 30)); + } + } + Add(new cMenuEditStraItem(tr("Show Channel Logos"), &tmpTvguideConfig->hideChannelLogos, 2, hideChannelLogosItems)); if (!tmpTvguideConfig->hideChannelLogos) { Add(InfoItem(tr("Logo Path used"), *tvguideConfig.logoPath)); @@ -257,6 +278,7 @@ void cMenuSetupFont::Set(void) { if (tmpTvguideConfig->displayMode == eVertical) { Add(new cMenuEditIntItem(tr("Channel Header Font Size"), &tmpTvguideConfig->FontChannelHeaderDelta, -30, 30)); + Add(new cMenuEditIntItem(tr("Channel Groups Font Size"), &tmpTvguideConfig->FontChannelGroupsDelta, -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)); @@ -264,6 +286,7 @@ void cMenuSetupFont::Set(void) { 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("Channel Groups Font Size"), &tmpTvguideConfig->FontChannelGroupsHorizontalDelta, -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)); @@ -29,6 +29,7 @@ class cMenuSetupGeneral : public cMenuSetupSubMenu { virtual eOSState ProcessKey(eKeys Key); cThemes themes; const char * timeFormatItems[2]; + const char * jumpMode[2]; const char *useSubtitleRerunTexts[3]; void Set(void); public: @@ -6,11 +6,11 @@ cTimeLine::cTimeLine(cMyTime *myTime) { dateViewer = new cStyledPixmap(osdManager.requestPixmap(3, cRect(0,
tvguideConfig.statusHeaderHeight,
tvguideConfig.timeLineWidth,
- tvguideConfig.channelHeaderHeight)));
+ tvguideConfig.channelHeaderHeight + tvguideConfig.channelGroupsHeight)));
timeline = osdManager.requestPixmap(2, cRect(0,
- tvguideConfig.statusHeaderHeight + tvguideConfig.channelHeaderHeight,
+ tvguideConfig.statusHeaderHeight + tvguideConfig.channelHeaderHeight + tvguideConfig.channelGroupsHeight,
tvguideConfig.timeLineWidth,
- tvguideConfig.osdHeight - tvguideConfig.statusHeaderHeight - tvguideConfig.channelHeaderHeight - tvguideConfig.footerHeight)
+ tvguideConfig.osdHeight - tvguideConfig.statusHeaderHeight - tvguideConfig.channelHeaderHeight - tvguideConfig.channelGroupsHeight - tvguideConfig.footerHeight)
, cRect(0,
0,
tvguideConfig.timeLineWidth,
@@ -18,11 +18,11 @@ cTimeLine::cTimeLine(cMyTime *myTime) { } else if (tvguideConfig.displayMode == eHorizontal) {
dateViewer = new cStyledPixmap(osdManager.requestPixmap(3, cRect(0,
tvguideConfig.statusHeaderHeight,
- tvguideConfig.channelHeaderWidth,
+ tvguideConfig.channelHeaderWidth + tvguideConfig.channelGroupsWidth,
tvguideConfig.timeLineHeight)));
- timeline = osdManager.requestPixmap(2, cRect(tvguideConfig.channelHeaderWidth,
+ timeline = osdManager.requestPixmap(2, cRect(tvguideConfig.channelHeaderWidth + tvguideConfig.channelGroupsWidth,
tvguideConfig.statusHeaderHeight,
- tvguideConfig.osdWidth - tvguideConfig.channelHeaderWidth,
+ tvguideConfig.osdWidth - tvguideConfig.channelHeaderWidth - tvguideConfig.channelGroupsWidth,
tvguideConfig.timeLineHeight)
, cRect(0,
0,
@@ -54,8 +54,8 @@ void cTimeLine::drawDateViewer() { 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), colorFontBack, tvguideConfig.FontTimeLineWeekday);
- dateViewer->DrawText(cPoint((tvguideConfig.timeLineWidth-dateWidth)/2, (tvguideConfig.channelHeaderHeight-2*textHeight)/2 + textHeight + 5), *date, theme.Color(clrFontHeader), colorFontBack, tvguideConfig.FontTimeLineDate);
+ dateViewer->DrawText(cPoint((tvguideConfig.timeLineWidth-weekdayWidth)/2, (tvguideConfig.channelHeaderHeight + tvguideConfig.channelGroupsHeight -2*textHeight)/2), *weekDay, theme.Color(clrFontHeader), colorFontBack, tvguideConfig.FontTimeLineWeekday);
+ dateViewer->DrawText(cPoint((tvguideConfig.timeLineWidth-dateWidth)/2, (tvguideConfig.channelHeaderHeight + tvguideConfig.channelGroupsHeight -2*textHeight)/2 + textHeight + 5), *date, theme.Color(clrFontHeader), colorFontBack, tvguideConfig.FontTimeLineDate);
} else if (tvguideConfig.displayMode == eHorizontal) {
cString strDate = cString::sprintf("%s %s", *weekDay, *date);
int x = (dateViewer->Width() - tvguideConfig.FontTimeLineDateHorizontal->Width(*strDate))/2;
@@ -16,9 +16,9 @@ void cMyTime::Now() { tStart = t;
tStart = GetRounded();
if (tvguideConfig.displayMode == eVertical) {
- tEnd = tStart + (tvguideConfig.osdHeight - tvguideConfig.statusHeaderHeight - tvguideConfig.channelHeaderHeight - tvguideConfig.footerHeight)/tvguideConfig.minutePixel*60;
+ tEnd = tStart + (tvguideConfig.osdHeight - tvguideConfig.statusHeaderHeight - tvguideConfig.channelHeaderHeight - tvguideConfig.channelGroupsHeight - tvguideConfig.footerHeight)/tvguideConfig.minutePixel*60;
} else if (tvguideConfig.displayMode == eHorizontal) {
- tEnd = tStart + (tvguideConfig.osdWidth - tvguideConfig.channelHeaderWidth)/tvguideConfig.minutePixel*60;
+ tEnd = tStart + (tvguideConfig.osdWidth - tvguideConfig.channelHeaderWidth - tvguideConfig.channelGroupsWidth)/tvguideConfig.minutePixel*60;
}
}
@@ -39,9 +39,9 @@ bool cMyTime::DelStep(int step) { void cMyTime::SetTime(time_t newTime) {
tStart = newTime;
if (tvguideConfig.displayMode == eVertical) {
- tEnd = tStart + (tvguideConfig.osdHeight - tvguideConfig.statusHeaderHeight - tvguideConfig.channelHeaderHeight - tvguideConfig.footerHeight)/tvguideConfig.minutePixel*60;
+ tEnd = tStart + (tvguideConfig.osdHeight - tvguideConfig.statusHeaderHeight - tvguideConfig.channelHeaderHeight - tvguideConfig.channelGroupsHeight - tvguideConfig.footerHeight)/tvguideConfig.minutePixel*60;
} else if (tvguideConfig.displayMode == eHorizontal) {
- tEnd = tStart + (tvguideConfig.osdWidth - tvguideConfig.channelHeaderWidth)/tvguideConfig.minutePixel*60;
+ tEnd = tStart + (tvguideConfig.osdWidth - tvguideConfig.channelHeaderWidth - tvguideConfig.channelGroupsWidth)/tvguideConfig.minutePixel*60;
}
}
diff --git a/tvguideosd.c b/tvguideosd.c index 5ff142a..5da028a 100644 --- a/tvguideosd.c +++ b/tvguideosd.c @@ -57,6 +57,8 @@ cOsdManager osdManager; #include "statusheader.c"
#include "detailview.c"
#include "channelcolumn.c"
+#include "channelgroup.c"
+#include "channelgroups.c"
#include "footer.c"
#include "tvguideosd.h"
@@ -78,6 +80,7 @@ cTvGuideOsd::~cTvGuideOsd() { if (detailView)
delete detailView;
delete timeLine;
+ delete channelGroups;
delete footer;
cMessageBox::Destroy();
osdManager.deleteOsd();
@@ -110,10 +113,15 @@ void cTvGuideOsd::drawOsd() { timeLine->drawDateViewer();
timeLine->drawTimeline();
timeLine->drawClock();
- footer = new cFooter();
+ channelGroups = new cChannelGroups();
+ channelGroups->ReadChannelGroups();
+ //channelGroups->DumpGroups();
+ footer = new cFooter(channelGroups);
footer->drawRedButton();
- footer->drawGreenButton();
- footer->drawYellowButton();
+ if (tvguideConfig.channelJumpMode == eNumJump) {
+ footer->drawGreenButton();
+ footer->drawYellowButton();
+ }
footer->drawBlueButton();
osdManager.flush();
readChannels(startChannel);
@@ -124,21 +132,34 @@ void cTvGuideOsd::drawOsd() { void cTvGuideOsd::readChannels(const cChannel *channelStart) {
int i=0;
+ bool foundEnough = false;
columns.Clear();
if (!channelStart)
return;
for (const cChannel *channel = channelStart; channel; channel = Channels.Next(channel)) {
- if (!channel->GroupSep()) {
- cChannelColumn *column = new cChannelColumn(i, channel, myTime);
- if (column->readGrids()) {
- columns.Add(column);
- i++;
- } else {
- delete column;
+ if (!channel->GroupSep()) {
+ if (channelGroups->IsInLastGroup(channel)) {
+ break;
+ }
+ cChannelColumn *column = new cChannelColumn(i, channel, myTime);
+ if (column->readGrids()) {
+ columns.Add(column);
+ i++;
+ } else {
+ delete column;
+ }
}
- }
- if (i == tvguideConfig.numGrids)
- break;
+ if (i == tvguideConfig.numGrids) {
+ foundEnough = true;
+ break;
+ }
+ }
+ if (!foundEnough) {
+ int numCurrent = columns.Count();
+ int numBack = tvguideConfig.numGrids - numCurrent;
+ int newChannelNumber = columns.First()->getChannel()->Number() - numBack;
+ const cChannel *newStart = Channels.GetByNumber(newChannelNumber);
+ readChannels(newStart);
}
}
@@ -151,6 +172,12 @@ void cTvGuideOsd::drawGridsChannelJump() { if (tvguideConfig.displayStatusHeader) {
statusHeader->DrawInfoText(activeGrid);
}
+ if (activeGrid && (tvguideConfig.channelJumpMode == eGroupJump)) {
+ footer->UpdateGroupButtons(activeGrid->column->getChannel());
+ }
+ if (tvguideConfig.displayChannelGroups) {
+ channelGroups->DrawChannelGroups(columns.First()->getChannel(), columns.Last()->getChannel());
+ }
for (cChannelColumn *column = columns.First(); column; column = columns.Next(column)) {
column->createHeader();
column->drawGrids();
@@ -197,10 +224,14 @@ void cTvGuideOsd::setNextActiveGrid(cGrid *next) { void cTvGuideOsd::channelForward() {
cChannelColumn *colRight = columns.Next(activeGrid->column);
+ bool colAdded = false;
if (!colRight) {
const cChannel *channelRight = activeGrid->column->getChannel();
while (channelRight = Channels.Next(channelRight)) {
if (!channelRight->GroupSep()) {
+ if (channelGroups->IsInLastGroup(channelRight)) {
+ break;
+ }
colRight = new cChannelColumn(tvguideConfig.numGrids - 1, channelRight, myTime);
if (colRight->readGrids()) {
break;
@@ -211,6 +242,7 @@ void cTvGuideOsd::channelForward() { }
}
if (colRight) {
+ colAdded = true;
if (columns.Count() == tvguideConfig.numGrids) {
cChannelColumn *cFirst = columns.First();
columns.Del(cFirst);
@@ -231,11 +263,18 @@ void cTvGuideOsd::channelForward() { setNextActiveGrid(right);
}
}
+ if (tvguideConfig.displayChannelGroups && colAdded) {
+ channelGroups->DrawChannelGroups(columns.First()->getChannel(), columns.Last()->getChannel());
+ }
+ if (activeGrid && (tvguideConfig.channelJumpMode == eGroupJump)) {
+ footer->UpdateGroupButtons(activeGrid->column->getChannel());
+ }
osdManager.flush();
}
void cTvGuideOsd::channelBack() {
cChannelColumn *colLeft = columns.Prev(activeGrid->column);
+ bool colAdded = false;
if (!colLeft) {
const cChannel *channelLeft = activeGrid->column->getChannel();
while (channelLeft = Channels.Prev(channelLeft)) {
@@ -250,6 +289,7 @@ void cTvGuideOsd::channelBack() { }
}
if (colLeft) {
+ colAdded = true;
if (columns.Count() == tvguideConfig.numGrids) {
cChannelColumn *cLast = columns.Last();
columns.Del(cLast);
@@ -271,6 +311,13 @@ void cTvGuideOsd::channelBack() { setNextActiveGrid(left);
}
}
+ if (tvguideConfig.displayChannelGroups && colAdded) {
+ channelGroups->DrawChannelGroups(columns.First()->getChannel(), columns.Last()->getChannel());
+ }
+
+ if (activeGrid && (tvguideConfig.channelJumpMode == eGroupJump)) {
+ footer->UpdateGroupButtons(activeGrid->column->getChannel());
+ }
osdManager.flush();
}
@@ -440,16 +487,25 @@ void cTvGuideOsd::processKeyRed() { void cTvGuideOsd::processKeyGreen() {
if (activeGrid == NULL)
return;
+
const cChannel *currentChannel = activeGrid->column->getChannel();
const cChannel *prev = NULL;
- int i = tvguideConfig.jumpChannels + 1;
- for (const cChannel *channel = currentChannel; channel; channel = Channels.Prev(channel)) {
- if (!channel->GroupSep()) {
- prev = channel;
- i--;
+
+ if (tvguideConfig.channelJumpMode == eGroupJump) {
+ int prevNum = channelGroups->GetPrevGroupChannelNumber(currentChannel);
+ if (prevNum) {
+ prev = Channels.GetByNumber(prevNum);
+ }
+ } else if (tvguideConfig.channelJumpMode == eNumJump) {
+ int i = tvguideConfig.jumpChannels + 1;
+ for (const cChannel *channel = currentChannel; channel; channel = Channels.Prev(channel)) {
+ if (!channel->GroupSep()) {
+ prev = channel;
+ i--;
+ }
+ if (i == 0)
+ break;
}
- if (i == 0)
- break;
}
if (prev) {
readChannels(prev);
@@ -463,16 +519,29 @@ void cTvGuideOsd::processKeyGreen() { void cTvGuideOsd::processKeyYellow() {
if (activeGrid == NULL)
return;
+
const cChannel *currentChannel = activeGrid->column->getChannel();
const cChannel *next = NULL;
- int i=0;
- for (const cChannel *channel = currentChannel; channel; channel = Channels.Next(channel)) {
- if (!channel->GroupSep()) {
- next = channel;
- i++;
+
+ if (tvguideConfig.channelJumpMode == eGroupJump) {
+ int nextNum = channelGroups->GetNextGroupChannelNumber(currentChannel);
+ if (nextNum) {
+ next = Channels.GetByNumber(nextNum);
+ }
+ } else if (tvguideConfig.channelJumpMode == eNumJump) {
+ int i=0;
+ for (const cChannel *channel = currentChannel; channel; channel = Channels.Next(channel)) {
+ if (channelGroups->IsInLastGroup(channel)) {
+ break;
+ }
+ if (!channel->GroupSep()) {
+ next = channel;
+ i++;
+ }
+ if (i == (tvguideConfig.jumpChannels+1)) {
+ break;
+ }
}
- if (i == (tvguideConfig.jumpChannels+1))
- break;
}
if (next) {
readChannels(next);
diff --git a/tvguideosd.h b/tvguideosd.h index 433c48c..0fa9de9 100644 --- a/tvguideosd.h +++ b/tvguideosd.h @@ -11,6 +11,7 @@ private: cStatusHeader *statusHeader;
cDetailView *detailView;
cTimeLine *timeLine;
+ cChannelGroups *channelGroups;
cFooter *footer;
bool detailViewActive;
void drawOsd();
|