summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--HISTORY6
-rw-r--r--channelcolumn.c4
-rw-r--r--channelgroup.c84
-rw-r--r--channelgroup.h38
-rw-r--r--channelgroups.c137
-rw-r--r--channelgroups.h25
-rw-r--r--config.c30
-rw-r--r--config.h10
-rw-r--r--dummygrid.c4
-rw-r--r--epggrid.c4
-rw-r--r--footer.c51
-rw-r--r--footer.h7
-rw-r--r--headergrid.c8
-rw-r--r--osdmanager.c2
-rwxr-xr-xpo/de_DE.po36
-rw-r--r--setup.c27
-rw-r--r--setup.h1
-rw-r--r--timeline.c16
-rw-r--r--timer.c8
-rw-r--r--tvguideosd.c123
-rw-r--r--tvguideosd.h1
21 files changed, 545 insertions, 77 deletions
diff --git a/HISTORY b/HISTORY
index 9b8fbaa..a200858 100644
--- a/HISTORY
+++ b/HISTORY
@@ -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
diff --git a/config.c b/config.c
index fb2ea0e..154af20 100644
--- a/config.c
+++ b/config.c
@@ -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);
diff --git a/config.h b/config.h
index 4df9177..ee2a2a4 100644
--- a/config.h
+++ b/config.h
@@ -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;
diff --git a/epggrid.c b/epggrid.c
index 8dfea95..b71d3e8 100644
--- a/epggrid.c
+++ b/epggrid.c
@@ -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;
diff --git a/footer.c b/footer.c
index 9e40689..cbda6f8 100644
--- a/footer.c
+++ b/footer.c
@@ -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
diff --git a/footer.h b/footer.h
index 3e9c042..1c75a14 100644
--- a/footer.h
+++ b/footer.h
@@ -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"
diff --git a/setup.c b/setup.c
index aac537e..b22c61d 100644
--- a/setup.c
+++ b/setup.c
@@ -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));
diff --git a/setup.h b/setup.h
index 215dfce..be43dad 100644
--- a/setup.h
+++ b/setup.h
@@ -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:
diff --git a/timeline.c b/timeline.c
index ce79dd1..454aa9c 100644
--- a/timeline.c
+++ b/timeline.c
@@ -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;
diff --git a/timer.c b/timer.c
index 74d4ff4..8e60c0e 100644
--- a/timer.c
+++ b/timer.c
@@ -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();