62 Commits

Author SHA1 Message Date
kamel5
8db88c2556 Version 1.2.16 2020-01-10 11:11:55 +01:00
kamel5
509b64d78f RecMenu "Timer Timeline" displays now sorted active timer 2020-01-10 11:05:28 +01:00
kamel5
15b7074b4e Separate "displayTime" for horizontal and vertical view 2020-01-09 14:30:05 +01:00
kamel5
3fee6ab13f Optimize display "REC" sign in epgview 2020-01-09 14:29:47 +01:00
kamel5
ffd3e2c79f Refactor CutText in horizontal epgview 2020-01-09 14:29:30 +01:00
kamel5
c77f74321f Refactor Timeline 2020-01-06 15:14:45 +01:00
kamel5
efe06b8e98 Fixed a possible deadlook in cEPGView::cEPGView 2020-01-06 15:14:45 +01:00
kamel5
6540e21444 Optimize TimeJump 2020-01-06 15:14:45 +01:00
kamel5
2e4a43133e Fixed a error in DeleteTimerConflictMenu 2020-01-06 15:14:45 +01:00
kamel5
bcf2ce757c Fixed a timer changed message 2020-01-06 15:14:42 +01:00
kamel5
263a734a0d Version 1.2.15 2019-11-03 13:46:13 +01:00
kamel5
7300fdf91c Workaround for HWAccelerated OSD 2019-11-03 13:08:07 +01:00
kamel5
89e9086943 Version 1.2.14 2019-10-19 16:41:09 +02:00
kamel5
e236d9e571 Optimize cTimeLine::drawClock 2019-10-19 15:10:20 +02:00
kamel5
8794891599 Fixed a error while changing a Theme 2019-10-19 15:10:13 +02:00
kamel5
cd62a9bd6b Diplay the current TimeBase throughout the whole timeline 2019-10-19 15:10:06 +02:00
kamel5
3f0bd75011 Can switch off and optimize diplay time in epggrid "displayMode == Vertical" 2019-10-19 15:09:59 +02:00
kamel5
a711aed160 Version 1.2.13 2019-10-14 18:16:28 +02:00
kamel5
cdb5a46145 Revert "Diplay the current TimeBase throughout the whole timeline"
This reverts commit b707292 because of a segfault.
2019-10-14 16:51:52 +02:00
kamel5
fc784f34e5 Version 1.2.12 2019-10-14 12:58:40 +02:00
kamel5
b707292485 Diplay the current TimeBase throughout the whole timeline 2019-10-14 12:58:35 +02:00
kamel5
587fbe1f44 Fixed updating current TimeBase 2019-10-13 13:46:29 +02:00
kamel5
9173d14b10 Fixed updating current time 2019-10-13 13:46:23 +02:00
kamel5
3386c05e91 Version 1.2.11 2019-09-07 17:32:20 +02:00
kamel5
a1eaf7a865 Optical change in cMenuSetupImageCache 2019-09-07 17:24:01 +02:00
kamel5
41eb32389d Fixed a possible deadlock in detailview 2019-09-07 17:23:32 +02:00
kamel5
f4369c0772 Fix a segfault with graphicsmagick > 1.3.31 2019-09-05 17:08:12 +02:00
kamel5
0203cb3f01 Version 1.2.10 2019-07-20 11:53:04 +02:00
kamel5
152662d519 Rework cRecMenuItemDayChooser 2019-07-19 15:59:44 +02:00
kamel5
b17fd9b7aa Rework cRecMenuItemDay 2019-07-19 11:38:07 +02:00
kamel5
fb165b2b43 Rework cRecMenuItemTime 2019-07-19 11:38:07 +02:00
kamel5
e31070cd76 Rework cRecMenuItemText 2019-07-19 11:38:07 +02:00
kamel5
15ce11db5f Rework cRecMenuItemBool 2019-07-19 11:38:07 +02:00
kamel5
0d3dd79585 Rework cRecMenuItemInt 2019-07-19 11:38:07 +02:00
kamel5
7f8ac2a2a8 Rework cRecMenuItemSelect 2019-07-19 11:38:07 +02:00
kamel5
31f72f2ad8 Rework cRecMenuItemChannelChooser 2019-07-19 11:38:04 +02:00
kamel5
a1aa300259 Rework indent & refresh 2019-07-18 16:53:27 +02:00
kamel5
b7970e5723 Fixed cRecMenuItemSelectDirectory::DrawValue 2019-07-18 13:38:53 +02:00
kamel5
3f9327b8e4 Simplify cRecMenuSearchTimerEdit::GetSearchTimer 2019-07-14 14:22:26 +02:00
kamel5
bff9d78ff3 Rename grid.* to gridelement.* 2019-07-11 15:11:26 +02:00
kamel5
d21b1496f0 Change cGrid to cGridElement 2019-07-11 15:06:07 +02:00
kamel5
5ff172c987 Rename timer.* to timemanager.* 2019-07-11 14:40:41 +02:00
kamel5
6b3eda282f Change cMyTime to cTimeManager 2019-07-11 14:34:31 +02:00
kamel5
107f3f945f lastValidChannel 2019-07-11 14:19:44 +02:00
kamel5
45a2d6bee0 Cosmetic changes in channelgroups.c 2019-07-11 13:40:00 +02:00
kamel5
700543b394 GetLastValidChannel 2019-07-11 13:20:23 +02:00
kamel5
1df9641621 Rename channelcolumn.* to channelepg.* 2019-07-11 12:07:35 +02:00
kamel5
3ed46bd881 Rename channelcolumn to channelepg 2019-07-11 12:06:18 +02:00
kamel5
81759f95cb Change cTvguideConfig to cTVGuideConfig 2019-07-11 11:44:46 +02:00
kamel5
0766d67980 Change tvguideConfig to Config 2019-07-11 11:44:39 +02:00
kamel5
3513f82a8c Change tmpTvguideConfig to tmpConfig 2019-07-11 11:13:51 +02:00
kamel5
7a79059414 Change files to unix 2019-07-11 11:07:13 +02:00
kamel5
ceadc0bbfe Rework recmenuview.c 2019-07-10 18:54:44 +02:00
kamel5
e09279ca32 set ff=unix recmenuview.* 2019-07-10 18:54:29 +02:00
kamel5
27e9004629 Rename recmenumanager.* to recmenuview.* 2019-07-10 17:41:35 +02:00
kamel5
194aa06a4e Update remotetimers.h 2019-07-10 17:41:35 +02:00
kamel5
f046493a00 Cosmetic changes 2019-07-10 17:41:35 +02:00
kamel5
fd7b1b9ab7 Rework cRecManager::UserDefinedTime 2019-07-10 17:41:30 +02:00
kamel5
c4e25b899c Rework cRecManager::WhatsOnNow 2019-07-10 17:41:25 +02:00
kamel5
059936c6d7 Rework cRecManager::DeleteTimer 2019-07-10 17:41:16 +02:00
kamel5
549d42b487 Rework cRecManager::createLocalTimer 2019-07-10 17:41:00 +02:00
kamel5
ad1f0ba0d6 Fixed a compiler error for VDR < 2.3.0 and Cosmetic changes 2019-07-06 13:44:55 +02:00
69 changed files with 8458 additions and 8409 deletions

47
HISTORY
View File

@@ -203,3 +203,50 @@ Version 1.2.9
- Correct plugin options in README and CommandLineHelp - Correct plugin options in README and CommandLineHelp
- Change locking in cTVGuideSearchTimer::cTVGuideSearchTimer - Change locking in cTVGuideSearchTimer::cTVGuideSearchTimer
- Fixed a dayOfWeek error in RecMenuSearchTimerEdit - Fixed a dayOfWeek error in RecMenuSearchTimerEdit
Version 1.2.10
- Update remotetimers.h
- Simplify cRecMenuSearchTimerEdit::GetSearchTimer
- Fixed cRecMenuItemSelectDirectory::DrawValue
- Some rework
Version 1.2.11
- Fixed a segfault with graphicsmagick > 1.3.31
- Fixed a possible deadlock in detailview
- Optical changes in cMenuSetupImageCache
Version 1.2.12
- Fixed updating current time
- Fixed updating current TimeBase
- Diplay the current TimeBase throughout the whole timeline
Version 1.2.13
- Revert "Diplay the current TimeBase throughout the whole timeline"
Version 1.2.14
- Diplay the current TimeBase throughout the whole timeline
- Can switch off and optimize diplay time in epggrid "displayMode == Vertical"
- Fixed a error while changing a Theme
Version 1.2.15
- Workaround for HWAccelerated OSD
Version 1.2.16
- Fixed a timer changed message
- Extend keys kFastRew, kFastFwd, kPrev, kNext for TimeJump
(if you use the numeric keys for "Jump to specific channel",
you can now use the keys kFastRew, kFastFwd, kPrev, kNext for TimeJump.
Note: if you use the permashift-plugin then the key kFastRew doesnt work for TimeJump)
- Fixed a possible deadlook in cEPGView::cEPGView
- Refactor Timeline
- Refactor CutText in horizontal epgview
- Optimize display "REC" sign in epgview
- Separate "displayTime" for horizontal and vertical view
- RecMenu "Timer Timeline" displays now sorted active timer

View File

@@ -60,7 +60,7 @@ endif
### The object files (add further files here): ### The object files (add further files here):
OBJS = $(PLUGIN).o channelcolumn.o channelgroup.o channelgroups.o channeljump.o config.o detailview.o dummygrid.o epggrid.o fontmanager.o footer.o geometrymanager.o grid.o headergrid.o imagecache.o imageloader.o imagemagickwrapper.o imagescaler.o osdmanager.o recmanager.o recmenu.o recmenuitem.o recmenumanager.o recmenus.o searchtimer.o setup.o statusheader.o styledpixmap.o switchtimer.o timeline.o timer.o timerconflict.o tools.o tvguideosd.o view.o OBJS = $(PLUGIN).o channelepg.o channelgroup.o channelgroups.o channeljump.o config.o detailview.o dummygrid.o epggrid.o fontmanager.o footer.o geometrymanager.o gridelement.o headergrid.o imagecache.o imageloader.o imagemagickwrapper.o imagescaler.o osdmanager.o recmanager.o recmenu.o recmenuitem.o recmenuview.o recmenus.o searchtimer.o setup.o statusheader.o styledpixmap.o switchtimer.o timeline.o timemanager.o timerconflict.o tools.o tvguideosd.o view.o
### The main target: ### The main target:

View File

@@ -1,10 +1,10 @@
#include "channelcolumn.h" #include "channelepg.h"
#include "dummygrid.h" #include "dummygrid.h"
cChannelColumn::cChannelColumn(int num, const cChannel *channel, cMyTime *myTime) { cChannelEpg::cChannelEpg(int num, const cChannel *channel, cTimeManager *timeManager) {
this->channel = channel; this->channel = channel;
this->num = num; this->num = num;
this->myTime = myTime; this->timeManager = timeManager;
#if VDRVERSNUM < 20301 #if VDRVERSNUM < 20301
hasTimer = channel->HasTimer(); hasTimer = channel->HasTimer();
#endif #endif
@@ -15,7 +15,7 @@ cChannelColumn::cChannelColumn(int num, const cChannel *channel, cMyTime *myTime
header = NULL; header = NULL;
} }
cChannelColumn::~cChannelColumn(void) { cChannelEpg::~cChannelEpg(void) {
if (header) if (header)
delete header; delete header;
grids.Clear(); grids.Clear();
@@ -24,21 +24,21 @@ cChannelColumn::~cChannelColumn(void) {
#endif #endif
} }
void cChannelColumn::clearGrids() { void cChannelEpg::clearGrids() {
grids.Clear(); grids.Clear();
} }
void cChannelColumn::createHeader() { void cChannelEpg::createHeader() {
header = new cHeaderGrid(); header = new cHeaderGrid();
header->createBackground(num); header->createBackground(num);
header->drawChannel(channel); header->drawChannel(channel);
} }
void cChannelColumn::drawHeader() { void cChannelEpg::drawHeader() {
header->setPosition(num); header->setPosition(num);
} }
bool cChannelColumn::readGrids() { bool cChannelEpg::readGrids() {
#if VDRVERSNUM >= 20301 #if VDRVERSNUM >= 20301
const cSchedules* schedules; const cSchedules* schedules;
{ {
@@ -51,17 +51,17 @@ bool cChannelColumn::readGrids() {
const cSchedule *Schedule = NULL; const cSchedule *Schedule = NULL;
Schedule = schedules->GetSchedule(channel); Schedule = schedules->GetSchedule(channel);
if (!Schedule) { if (!Schedule) {
addDummyGrid(myTime->GetStart(), myTime->GetEnd(), NULL, false); addDummyGrid(timeManager->GetStart(), timeManager->GetEnd(), NULL, false);
return true; return true;
} }
bool eventFound = false; bool eventFound = false;
bool dummyAtStart = false; bool dummyAtStart = false;
const cEvent *startEvent = Schedule->GetEventAround(myTime->GetStart()); const cEvent *startEvent = Schedule->GetEventAround(timeManager->GetStart());
if (startEvent != NULL) { if (startEvent != NULL) {
eventFound = true; eventFound = true;
} else { } else {
for (int i=1; i<6; i++) { for (int i=1; i<6; i++) {
startEvent = Schedule->GetEventAround(myTime->GetStart()+i*5*60); startEvent = Schedule->GetEventAround(timeManager->GetStart()+i*5*60);
if (startEvent) { if (startEvent) {
eventFound = true; eventFound = true;
dummyAtStart = true; dummyAtStart = true;
@@ -72,20 +72,20 @@ bool cChannelColumn::readGrids() {
if (eventFound) { if (eventFound) {
bool col = true; bool col = true;
if (dummyAtStart) { if (dummyAtStart) {
addDummyGrid(myTime->GetStart(), startEvent->StartTime(), NULL, col); addDummyGrid(timeManager->GetStart(), startEvent->StartTime(), NULL, col);
col = !col; col = !col;
} }
bool dummyNeeded = true; bool dummyNeeded = true;
bool toFarInFuture = false; bool toFarInFuture = false;
time_t endLast = myTime->GetStart(); time_t endLast = timeManager->GetStart();
const cEvent *event = startEvent; const cEvent *event = startEvent;
const cEvent *eventLast = NULL; const cEvent *eventLast = NULL;
for (; event; event = Schedule->Events()->Next(event)) { for (; event; event = Schedule->Events()->Next(event)) {
if (endLast < event->StartTime()) { if (endLast < event->StartTime()) {
//gap, dummy needed //gap, dummy needed
time_t endTime = event->StartTime(); time_t endTime = event->StartTime();
if (endTime > myTime->GetEnd()) { if (endTime > timeManager->GetEnd()) {
endTime = myTime->GetEnd(); endTime = timeManager->GetEnd();
toFarInFuture = true; toFarInFuture = true;
} }
addDummyGrid(endLast, endTime, NULL, col); addDummyGrid(endLast, endTime, NULL, col);
@@ -97,74 +97,76 @@ bool cChannelColumn::readGrids() {
addEpgGrid(event, NULL, col); addEpgGrid(event, NULL, col);
col = !col; col = !col;
endLast = event->EndTime(); endLast = event->EndTime();
if (event->EndTime() > myTime->GetEnd()) { if (event->EndTime() > timeManager->GetEnd()) {
dummyNeeded = false; dummyNeeded = false;
break; break;
} }
eventLast = event; eventLast = event;
} }
if (dummyNeeded) { if (dummyNeeded) {
addDummyGrid(eventLast->EndTime(), myTime->GetEnd(), NULL, col); addDummyGrid(eventLast->EndTime(), timeManager->GetEnd(), NULL, col);
} }
return true; return true;
} else { } else {
addDummyGrid(myTime->GetStart(), myTime->GetEnd(), NULL, false); addDummyGrid(timeManager->GetStart(), timeManager->GetEnd(), NULL, false);
return true; return true;
} }
return false; return false;
} }
void cChannelColumn::drawGrids() { void cChannelEpg::drawGrids() {
for (cGrid *grid = grids.First(); grid; grid = grids.Next(grid)) { for (cGridElement *grid = grids.First(); grid; grid = grids.Next(grid)) {
grid->SetViewportHeight(); grid->SetViewportHeight();
grid->PositionPixmap(); grid->PositionPixmap();
grid->Draw(); grid->Draw();
} }
} }
int cChannelColumn::getX() { int cChannelEpg::getX() {
return geoManager.timeLineWidth + num*geoManager.colWidth; return geoManager.timeLineWidth + num*geoManager.colWidth;
} }
int cChannelColumn::getY() { int cChannelEpg::getY() {
return geoManager.statusHeaderHeight + geoManager.timeLineHeight + num*geoManager.rowHeight; return geoManager.statusHeaderHeight + geoManager.timeLineHeight + num*geoManager.rowHeight;
} }
cGrid * cChannelColumn::getActive() { cGridElement *cChannelEpg::getActive(bool last) {
cMyTime t; cTimeManager t;
t.Now(); t.Now();
for (cGrid *grid = grids.First(); grid; grid = grids.Next(grid)) { if (last)
return grids.Last();
for (cGridElement *grid = grids.First(); grid; grid = grids.Next(grid)) {
if (grid->Match(t.Get())) if (grid->Match(t.Get()))
return grid; return grid;
} }
return grids.First(); return grids.First();
} }
cGrid * cChannelColumn::getNext(cGrid *activeGrid) { cGridElement *cChannelEpg::getNext(cGridElement *activeGrid) {
if (activeGrid == NULL) if (activeGrid == NULL)
return NULL; return NULL;
cGrid *next = grids.Next(activeGrid); cGridElement *next = grids.Next(activeGrid);
if (next) if (next)
return next; return next;
return NULL; return NULL;
} }
cGrid * cChannelColumn::getPrev(cGrid *activeGrid) { cGridElement *cChannelEpg::getPrev(cGridElement *activeGrid) {
if (activeGrid == NULL) if (activeGrid == NULL)
return NULL; return NULL;
cGrid *prev = grids.Prev(activeGrid); cGridElement *prev = grids.Prev(activeGrid);
if (prev) if (prev)
return prev; return prev;
return NULL; return NULL;
} }
cGrid * cChannelColumn::getNeighbor(cGrid *activeGrid) { cGridElement *cChannelEpg::getNeighbor(cGridElement *activeGrid) {
if (!activeGrid) if (!activeGrid)
return NULL; return NULL;
cGrid *neighbor = NULL; cGridElement *neighbor = NULL;
int overlap = 0; int overlap = 0;
int overlapNew = 0; int overlapNew = 0;
cGrid *grid = NULL; cGridElement *grid = NULL;
grid = grids.First(); grid = grids.First();
if (grid) { if (grid) {
for (; grid; grid = grids.Next(grid)) { for (; grid; grid = grids.Next(grid)) {
@@ -184,19 +186,19 @@ cGrid * cChannelColumn::getNeighbor(cGrid *activeGrid) {
return neighbor; return neighbor;
} }
bool cChannelColumn::isFirst(cGrid *grid) { bool cChannelEpg::isFirst(cGridElement *grid) {
if (grid == grids.First()) if (grid == grids.First())
return true; return true;
return false; return false;
} }
void cChannelColumn::AddNewGridsAtStart() { void cChannelEpg::AddNewGridsAtStart() {
cGrid *firstGrid = NULL; cGridElement *firstGrid = NULL;
firstGrid = grids.First(); firstGrid = grids.First();
if (firstGrid == NULL) if (firstGrid == NULL)
return; return;
//if first event is long enough, nothing to do. //if first event is long enough, nothing to do.
if (firstGrid->StartTime() <= myTime->GetStart()) { if (firstGrid->StartTime() <= timeManager->GetStart()) {
return; return;
} }
//if not, i have to add new ones to the list //if not, i have to add new ones to the list
@@ -213,8 +215,8 @@ void cChannelColumn::AddNewGridsAtStart() {
Schedule = schedules->GetSchedule(channel); Schedule = schedules->GetSchedule(channel);
if (!Schedule) { if (!Schedule) {
if (firstGrid->isDummy()) { if (firstGrid->isDummy()) {
firstGrid->SetStartTime(myTime->GetStart()); firstGrid->SetStartTime(timeManager->GetStart());
firstGrid->SetEndTime(myTime->GetEnd()); firstGrid->SetEndTime(timeManager->GetEnd());
} }
return; return;
} }
@@ -223,13 +225,13 @@ void cChannelColumn::AddNewGridsAtStart() {
for (const cEvent *event = Schedule->GetEventAround(firstGrid->StartTime()-60); event; event = Schedule->Events()->Prev(event)) { for (const cEvent *event = Schedule->GetEventAround(firstGrid->StartTime()-60); event; event = Schedule->Events()->Prev(event)) {
if (!event) if (!event)
break; break;
if (event->EndTime() < myTime->GetStart()) { if (event->EndTime() < timeManager->GetStart()) {
break; break;
} }
cGrid *grid = addEpgGrid(event, firstGrid, col); cGridElement *grid = addEpgGrid(event, firstGrid, col);
col = !col; col = !col;
firstGrid = grid; firstGrid = grid;
if (event->StartTime() <= myTime->GetStart()) { if (event->StartTime() <= timeManager->GetStart()) {
dummyNeeded = false; dummyNeeded = false;
break; break;
} }
@@ -237,22 +239,22 @@ void cChannelColumn::AddNewGridsAtStart() {
if (dummyNeeded) { if (dummyNeeded) {
firstGrid = grids.First(); firstGrid = grids.First();
if (firstGrid->isDummy()) { if (firstGrid->isDummy()) {
firstGrid->SetStartTime(myTime->GetStart()); firstGrid->SetStartTime(timeManager->GetStart());
if (firstGrid->EndTime() >= myTime->GetEnd()) if (firstGrid->EndTime() >= timeManager->GetEnd())
firstGrid->SetEndTime(myTime->GetEnd()); firstGrid->SetEndTime(timeManager->GetEnd());
} else { } else {
addDummyGrid(myTime->GetStart(), firstGrid->StartTime(), firstGrid, col); addDummyGrid(timeManager->GetStart(), firstGrid->StartTime(), firstGrid, col);
} }
} }
} }
void cChannelColumn::AddNewGridsAtEnd() { void cChannelEpg::AddNewGridsAtEnd() {
cGrid *lastGrid = NULL; cGridElement *lastGrid = NULL;
lastGrid = grids.Last(); lastGrid = grids.Last();
if (lastGrid == NULL) if (lastGrid == NULL)
return; return;
//if last event is long enough, nothing to do. //if last event is long enough, nothing to do.
if (lastGrid->EndTime() >= myTime->GetEnd()) { if (lastGrid->EndTime() >= timeManager->GetEnd()) {
return; return;
} }
//if not, i have to add new ones to the list //if not, i have to add new ones to the list
@@ -269,8 +271,8 @@ void cChannelColumn::AddNewGridsAtEnd() {
Schedule = schedules->GetSchedule(channel); Schedule = schedules->GetSchedule(channel);
if (!Schedule) { if (!Schedule) {
if (lastGrid->isDummy()) { if (lastGrid->isDummy()) {
lastGrid->SetStartTime(myTime->GetStart()); lastGrid->SetStartTime(timeManager->GetStart());
lastGrid->SetEndTime(myTime->GetEnd()); lastGrid->SetEndTime(timeManager->GetEnd());
} }
return; return;
} }
@@ -279,12 +281,12 @@ void cChannelColumn::AddNewGridsAtEnd() {
for (const cEvent *event = Schedule->GetEventAround(lastGrid->EndTime()+60); event; event = Schedule->Events()->Next(event)) { for (const cEvent *event = Schedule->GetEventAround(lastGrid->EndTime()+60); event; event = Schedule->Events()->Next(event)) {
if (!event) if (!event)
break; break;
if (event->StartTime() > myTime->GetEnd()) { if (event->StartTime() > timeManager->GetEnd()) {
break; break;
} }
addEpgGrid(event, NULL, col); addEpgGrid(event, NULL, col);
col = !col; col = !col;
if (event->EndTime() > myTime->GetEnd()) { if (event->EndTime() > timeManager->GetEnd()) {
dummyNeeded = false; dummyNeeded = false;
break; break;
} }
@@ -292,32 +294,32 @@ void cChannelColumn::AddNewGridsAtEnd() {
if (dummyNeeded) { if (dummyNeeded) {
lastGrid = grids.Last(); lastGrid = grids.Last();
if (lastGrid->isDummy()) { if (lastGrid->isDummy()) {
lastGrid->SetEndTime(myTime->GetEnd()); lastGrid->SetEndTime(timeManager->GetEnd());
if (lastGrid->StartTime() <= myTime->GetStart()) if (lastGrid->StartTime() <= timeManager->GetStart())
lastGrid->SetStartTime(myTime->GetStart()); lastGrid->SetStartTime(timeManager->GetStart());
} else { } else {
addDummyGrid(lastGrid->EndTime(), myTime->GetEnd(), NULL, col); addDummyGrid(lastGrid->EndTime(), timeManager->GetEnd(), NULL, col);
} }
} }
} }
void cChannelColumn::ClearOutdatedStart() { void cChannelEpg::ClearOutdatedStart() {
cGrid *firstGrid = NULL; cGridElement *firstGrid = NULL;
while (true) { while (true) {
firstGrid = grids.First(); firstGrid = grids.First();
if (!firstGrid) if (!firstGrid)
break; break;
if (firstGrid->EndTime() <= myTime->GetStart()) { if (firstGrid->EndTime() <= timeManager->GetStart()) {
grids.Del(firstGrid); grids.Del(firstGrid);
firstGrid = NULL; firstGrid = NULL;
} else { } else {
if (firstGrid->isDummy()) { if (firstGrid->isDummy()) {
firstGrid->SetStartTime(myTime->GetStart()); firstGrid->SetStartTime(timeManager->GetStart());
cGrid *next = getNext(firstGrid); cGridElement *next = getNext(firstGrid);
if (next) { if (next) {
firstGrid->SetEndTime(next->StartTime()); firstGrid->SetEndTime(next->StartTime());
} else { } else {
firstGrid->SetEndTime(myTime->GetEnd()); firstGrid->SetEndTime(timeManager->GetEnd());
} }
} }
break; break;
@@ -325,23 +327,23 @@ void cChannelColumn::ClearOutdatedStart() {
} }
} }
void cChannelColumn::ClearOutdatedEnd() { void cChannelEpg::ClearOutdatedEnd() {
cGrid *lastGrid = NULL; cGridElement *lastGrid = NULL;
while (true) { while (true) {
lastGrid = grids.Last(); lastGrid = grids.Last();
if (!lastGrid) if (!lastGrid)
break; break;
if (lastGrid->StartTime() >= myTime->GetEnd()) { if (lastGrid->StartTime() >= timeManager->GetEnd()) {
grids.Del(lastGrid); grids.Del(lastGrid);
lastGrid = NULL; lastGrid = NULL;
} else { } else {
if (lastGrid->isDummy()) { if (lastGrid->isDummy()) {
lastGrid->SetEndTime(myTime->GetEnd()); lastGrid->SetEndTime(timeManager->GetEnd());
cGrid *prev = getPrev(lastGrid); cGridElement *prev = getPrev(lastGrid);
if (prev) { if (prev) {
lastGrid->SetStartTime(prev->EndTime()); lastGrid->SetStartTime(prev->EndTime());
} else { } else {
lastGrid->SetStartTime(myTime->GetStart()); lastGrid->SetStartTime(timeManager->GetStart());
} }
} }
break; break;
@@ -349,8 +351,8 @@ void cChannelColumn::ClearOutdatedEnd() {
} }
} }
cGrid *cChannelColumn::addEpgGrid(const cEvent *event, cGrid *firstGrid, bool color) { cGridElement *cChannelEpg::addEpgGrid(const cEvent *event, cGridElement *firstGrid, bool color) {
cGrid *grid = new cEpgGrid(this, event); cGridElement *grid = new cEpgGrid(this, event);
grid->setText(); grid->setText();
grid->SetColor(color); grid->SetColor(color);
if (!firstGrid) if (!firstGrid)
@@ -360,8 +362,8 @@ cGrid *cChannelColumn::addEpgGrid(const cEvent *event, cGrid *firstGrid, bool co
return grid; return grid;
} }
cGrid *cChannelColumn::addDummyGrid(time_t start, time_t end, cGrid *firstGrid, bool color) { cGridElement *cChannelEpg::addDummyGrid(time_t start, time_t end, cGridElement *firstGrid, bool color) {
cGrid *dummy = new cDummyGrid(this, start, end); cGridElement *dummy = new cDummyGrid(this, start, end);
dummy->setText(); dummy->setText();
dummy->SetColor(color); dummy->SetColor(color);
if (!firstGrid) if (!firstGrid)
@@ -371,12 +373,12 @@ cGrid *cChannelColumn::addDummyGrid(time_t start, time_t end, cGrid *firstGrid,
return dummy; return dummy;
} }
void cChannelColumn::SetTimers() { void cChannelEpg::SetTimers() {
#if VDRVERSNUM < 20301 #if VDRVERSNUM < 20301
hasTimer = channel->HasTimer(); hasTimer = channel->HasTimer();
#endif #endif
hasSwitchTimer = SwitchTimers.ChannelInSwitchList(channel); hasSwitchTimer = SwitchTimers.ChannelInSwitchList(channel);
for (cGrid *grid = grids.First(); grid; grid = grids.Next(grid)) { for (cGridElement *grid = grids.First(); grid; grid = grids.Next(grid)) {
bool gridHadTimer = grid->HasTimer(); bool gridHadTimer = grid->HasTimer();
grid->SetTimer(); grid->SetTimer();
if (gridHadTimer || gridHadTimer != grid->HasTimer()) if (gridHadTimer || gridHadTimer != grid->HasTimer())
@@ -389,11 +391,11 @@ void cChannelColumn::SetTimers() {
} }
} }
void cChannelColumn::dumpGrids() { void cChannelEpg::dumpGrids() {
esyslog("tvguide: ------Channel %s %d: %d entires ---------", channel->Name(), num, grids.Count()); esyslog("tvguide: ------Channel %s %d: %d entires ---------", channel->Name(), num, grids.Count());
int i=1; int i=1;
for (cGrid *grid = grids.First(); grid; grid = grids.Next(grid)) { for (cGridElement *grid = grids.First(); grid; grid = grids.Next(grid)) {
esyslog("tvguide: grid %d: start: %s, stop: %s", i, *cMyTime::printTime(grid->StartTime()), *cMyTime::printTime(grid->EndTime())); esyslog("tvguide: grid %d: start: %s, stop: %s", i, *cTimeManager::printTime(grid->StartTime()), *cTimeManager::printTime(grid->EndTime()));
i++; i++;
} }
} }

View File

@@ -1,25 +1,25 @@
#ifndef __TVGUIDE_CHANNELCOLUMN_H #ifndef __TVGUIDE_CHANNELEPG_H
#define __TVGUIDE_CHANNELCOLUMN_H #define __TVGUIDE_CHANNELEPG_H
#include <vdr/tools.h> #include <vdr/tools.h>
#include "grid.h" #include "gridelement.h"
#include "epggrid.h" #include "epggrid.h"
#include "headergrid.h" #include "headergrid.h"
#include "switchtimer.h" #include "switchtimer.h"
class cGrid; class cGridElement;
class cEpgGrid; class cEpgGrid;
class cHeaderGrid; class cHeaderGrid;
// --- cChannelColumn ------------------------------------------------------------- // --- cChannelEpg -------------------------------------------------------------
class cChannelColumn : public cListObject, public cStyledPixmap { class cChannelEpg : public cListObject, public cStyledPixmap {
private: private:
cMyTime *myTime; cTimeManager *timeManager;
int num; int num;
const cChannel *channel; const cChannel *channel;
cHeaderGrid *header; cHeaderGrid *header;
cList<cGrid> grids; cList<cGridElement> grids;
#if VDRVERSNUM >= 20301 #if VDRVERSNUM >= 20301
#else #else
cSchedulesLock *schedulesLock; cSchedulesLock *schedulesLock;
@@ -27,26 +27,26 @@ private:
const cSchedules *schedules; const cSchedules *schedules;
bool hasTimer; bool hasTimer;
bool hasSwitchTimer; bool hasSwitchTimer;
cGrid *addEpgGrid(const cEvent *event, cGrid *firstGrid, bool color); cGridElement *addEpgGrid(const cEvent *event, cGridElement *firstGrid, bool color);
cGrid *addDummyGrid(time_t start, time_t end, cGrid *firstGrid, bool color); cGridElement *addDummyGrid(time_t start, time_t end, cGridElement *firstGrid, bool color);
public: public:
cChannelColumn(int num, const cChannel *channel, cMyTime *myTime); cChannelEpg(int num, const cChannel *channel, cTimeManager *timeManager);
virtual ~cChannelColumn(void); virtual ~cChannelEpg(void);
void createHeader(); void createHeader();
void drawHeader(); void drawHeader();
bool readGrids(); bool readGrids();
void drawGrids(); void drawGrids();
int getX(); int getX();
int getY(); int getY();
int Start() { return myTime->GetStart(); }; int Start() { return timeManager->GetStart(); };
int Stop() { return myTime->GetEnd(); }; int Stop() { return timeManager->GetEnd(); };
const char* Name() { return channel->Name(); }; const char* Name() { return channel->Name(); };
const cChannel * getChannel() {return channel;} const cChannel *getChannel() {return channel;}
cGrid * getActive(); cGridElement *getActive(bool last = false);
cGrid * getNext(cGrid *activeGrid); cGridElement *getNext(cGridElement *activeGrid);
cGrid * getPrev(cGrid *activeGrid); cGridElement *getPrev(cGridElement *activeGrid);
cGrid * getNeighbor(cGrid *activeGrid); cGridElement *getNeighbor(cGridElement *activeGrid);
bool isFirst(cGrid *grid); bool isFirst(cGridElement *grid);
void AddNewGridsAtStart(); void AddNewGridsAtStart();
void AddNewGridsAtEnd(); void AddNewGridsAtEnd();
void ClearOutdatedStart(); void ClearOutdatedStart();
@@ -66,4 +66,4 @@ public:
void dumpGrids(); void dumpGrids();
}; };
#endif //__TVGUIDE_CHANNELCOLUMN_H #endif //__TVGUIDE_CHANNELEPG_H

View File

@@ -1,98 +1,98 @@
#include <algorithm> #include <algorithm>
#include "channelgroup.h" #include "channelgroup.h"
#include "tools.h" #include "tools.h"
cChannelGroup::cChannelGroup(const char *name) { cChannelGroup::cChannelGroup(const char *name) {
channelStart = 0; channelStart = 0;
channelStop = 0; channelStop = 0;
this->name = name; this->name = name;
} }
cChannelGroup::~cChannelGroup(void) { cChannelGroup::~cChannelGroup(void) {
} }
void cChannelGroup::Dump(void) { void cChannelGroup::Dump(void) {
esyslog("tvguide: Group %s, startChannel %d, stopChannel %d", name, channelStart, channelStop); esyslog("tvguide: Group %s, startChannel %d, stopChannel %d", name, channelStart, channelStop);
} }
// --- cChannelGroupGrid ------------------------------------------------------------- // --- cChannelGroupGrid -------------------------------------------------------------
cChannelGroupGrid::cChannelGroupGrid(const char *name) { cChannelGroupGrid::cChannelGroupGrid(const char *name) {
this->name = name; this->name = name;
} }
cChannelGroupGrid::~cChannelGroupGrid(void) { cChannelGroupGrid::~cChannelGroupGrid(void) {
} }
void cChannelGroupGrid::SetBackground() { void cChannelGroupGrid::SetBackground() {
if (isColor1) { if (isColor1) {
color = theme.Color(clrGrid1); color = theme.Color(clrGrid1);
colorBlending = theme.Color(clrGrid1Blending); colorBlending = theme.Color(clrGrid1Blending);
} else { } else {
color = theme.Color(clrGrid2); color = theme.Color(clrGrid2);
colorBlending = theme.Color(clrGrid2Blending); colorBlending = theme.Color(clrGrid2Blending);
} }
} }
void cChannelGroupGrid::SetGeometry(int start, int end) { void cChannelGroupGrid::SetGeometry(int start, int end) {
int x, y, width, height; int x, y, width, height;
if (tvguideConfig.displayMode == eVertical) { if (config.displayMode == eVertical) {
x = geoManager.timeLineWidth + start*geoManager.colWidth; x = geoManager.timeLineWidth + start*geoManager.colWidth;
y = geoManager.statusHeaderHeight; y = geoManager.statusHeaderHeight;
width = (end - start + 1) * geoManager.colWidth; width = (end - start + 1) * geoManager.colWidth;
height = geoManager.channelGroupsHeight; height = geoManager.channelGroupsHeight;
} else if (tvguideConfig.displayMode == eHorizontal) { } else if (config.displayMode == eHorizontal) {
x = 0; x = 0;
y = geoManager.statusHeaderHeight + geoManager.timeLineHeight + start*geoManager.rowHeight; y = geoManager.statusHeaderHeight + geoManager.timeLineHeight + start*geoManager.rowHeight;
width = geoManager.channelGroupsWidth; width = geoManager.channelGroupsWidth;
height = (end - start + 1) * geoManager.rowHeight; height = (end - start + 1) * geoManager.rowHeight;
} }
pixmap = osdManager.requestPixmap(1, cRect(x, y, width, height)); pixmap = osdManager.requestPixmap(1, cRect(x, y, width, height));
} }
void cChannelGroupGrid::Draw(void) { void cChannelGroupGrid::Draw(void) {
if (tvguideConfig.style == eStyleGraphical) { if (config.style == eStyleGraphical) {
drawBackgroundGraphical(bgChannelGroup); drawBackgroundGraphical(bgChannelGroup);
} else { } else {
drawBackground(); drawBackground();
drawBorder(); drawBorder();
} }
tColor colorText = theme.Color(clrFont); tColor colorText = theme.Color(clrFont);
tColor colorTextBack = (tvguideConfig.style == eStyleFlat)?color:clrTransparent; tColor colorTextBack = (config.style == eStyleFlat)?color:clrTransparent;
if (tvguideConfig.displayMode == eVertical) { if (config.displayMode == eVertical) {
DrawVertical(colorText, colorTextBack); DrawVertical(colorText, colorTextBack);
} else if (tvguideConfig.displayMode == eHorizontal) { } else if (config.displayMode == eHorizontal) {
DrawHorizontal(colorText, colorTextBack); DrawHorizontal(colorText, colorTextBack);
} }
} }
void cChannelGroupGrid::DrawVertical(tColor colorText, tColor colorTextBack) { void cChannelGroupGrid::DrawVertical(tColor colorText, tColor colorTextBack) {
int textY = (Height() - fontManager.FontChannelGroups->Height()) / 2; int textY = (Height() - fontManager.FontChannelGroups->Height()) / 2;
cString text = CutText(name, Width() - 4, fontManager.FontChannelGroups).c_str(); cString text = CutText(name, Width() - 4, fontManager.FontChannelGroups).c_str();
int textWidth = fontManager.FontChannelGroups->Width(*text); int textWidth = fontManager.FontChannelGroups->Width(*text);
int x = (Width() - textWidth) / 2; int x = (Width() - textWidth) / 2;
pixmap->DrawText(cPoint(x, textY), *text, colorText, colorTextBack, fontManager.FontChannelGroups); pixmap->DrawText(cPoint(x, textY), *text, colorText, colorTextBack, fontManager.FontChannelGroups);
} }
void cChannelGroupGrid::DrawHorizontal(tColor colorText, tColor colorTextBack) { void cChannelGroupGrid::DrawHorizontal(tColor colorText, tColor colorTextBack) {
std::string nameUpper = name; std::string nameUpper = name;
std::transform(nameUpper.begin(), nameUpper.end(),nameUpper.begin(), ::toupper); std::transform(nameUpper.begin(), nameUpper.end(),nameUpper.begin(), ::toupper);
int numChars = nameUpper.length(); int numChars = nameUpper.length();
int charHeight = fontManager.FontChannelGroupsHorizontal->Height(); int charHeight = fontManager.FontChannelGroupsHorizontal->Height();
int textHeight = numChars * charHeight; int textHeight = numChars * charHeight;
int y = 5; int y = 5;
if ((textHeight +5) < Height()) { if ((textHeight +5) < Height()) {
y = (Height() - textHeight) / 2; y = (Height() - textHeight) / 2;
} }
for (int i=0; i < numChars; i++) { for (int i=0; i < numChars; i++) {
if (((y + 2*charHeight) > Height()) && ((i+1)<numChars)) { if (((y + 2*charHeight) > Height()) && ((i+1)<numChars)) {
int x = (Width() - fontManager.FontChannelGroupsHorizontal->Width("...")) / 2; int x = (Width() - fontManager.FontChannelGroupsHorizontal->Width("...")) / 2;
pixmap->DrawText(cPoint(x, y), "...", colorText, colorTextBack, fontManager.FontChannelGroupsHorizontal); pixmap->DrawText(cPoint(x, y), "...", colorText, colorTextBack, fontManager.FontChannelGroupsHorizontal);
break; break;
} }
cString currentChar = cString::sprintf("%c", nameUpper.at(i)); cString currentChar = cString::sprintf("%c", nameUpper.at(i));
int x = (Width() - fontManager.FontChannelGroupsHorizontal->Width(*currentChar)) / 2; int x = (Width() - fontManager.FontChannelGroupsHorizontal->Width(*currentChar)) / 2;
pixmap->DrawText(cPoint(x, y), *currentChar, colorText, colorTextBack, fontManager.FontChannelGroupsHorizontal); pixmap->DrawText(cPoint(x, y), *currentChar, colorText, colorTextBack, fontManager.FontChannelGroupsHorizontal);
y += fontManager.FontChannelGroupsHorizontal->Height(); y += fontManager.FontChannelGroupsHorizontal->Height();
} }
} }

View File

@@ -1,44 +1,44 @@
#ifndef __TVGUIDE_CHANNELGROUP_H #ifndef __TVGUIDE_CHANNELGROUP_H
#define __TVGUIDE_CHANNELGROUP_H #define __TVGUIDE_CHANNELGROUP_H
#include <vdr/tools.h> #include <vdr/tools.h>
#include "styledpixmap.h" #include "styledpixmap.h"
// --- cChannelGroup ------------------------------------------------------------- // --- cChannelGroup -------------------------------------------------------------
class cChannelGroup { class cChannelGroup {
private: private:
int channelStart; int channelStart;
int channelStop; int channelStop;
const char *name; const char *name;
public: public:
cChannelGroup(const char *name); cChannelGroup(const char *name);
virtual ~cChannelGroup(void); virtual ~cChannelGroup(void);
void SetChannelStart(int start) { channelStart = start; }; void SetChannelStart(int start) { channelStart = start; };
int StartChannel(void) { return channelStart; }; int StartChannel(void) { return channelStart; };
void SetChannelStop(int stop) { channelStop = stop; }; void SetChannelStop(int stop) { channelStop = stop; };
int StopChannel(void) { return channelStop; }; int StopChannel(void) { return channelStop; };
const char* GetName(void) { return name; }; const char* GetName(void) { return name; };
void Dump(void); void Dump(void);
}; };
// --- cChannelGroupGrid ------------------------------------------------------------- // --- cChannelGroupGrid -------------------------------------------------------------
class cChannelGroupGrid : public cListObject, public cStyledPixmap { class cChannelGroupGrid : public cListObject, public cStyledPixmap {
private: private:
const char *name; const char *name;
bool isColor1; bool isColor1;
void DrawHorizontal(tColor colorText, tColor colorTextBack); void DrawHorizontal(tColor colorText, tColor colorTextBack);
void DrawVertical(tColor colorText, tColor colorTextBack); void DrawVertical(tColor colorText, tColor colorTextBack);
public: public:
cChannelGroupGrid(const char *name); cChannelGroupGrid(const char *name);
virtual ~cChannelGroupGrid(void); virtual ~cChannelGroupGrid(void);
void SetColor(bool color) {isColor1 = color;}; void SetColor(bool color) {isColor1 = color;};
void SetBackground(void); void SetBackground(void);
void SetGeometry(int start, int end); void SetGeometry(int start, int end);
void Draw(void); void Draw(void);
}; };
#endif //__TVGUIDE_CHANNELGROUP_H #endif //__TVGUIDE_CHANNELGROUP_H

View File

@@ -1,4 +1,5 @@
#include <vector> #include <vector>
#include "config.h"
#include "channelgroups.h" #include "channelgroups.h"
cChannelGroups::cChannelGroups(void) { cChannelGroups::cChannelGroups(void) {
@@ -12,26 +13,23 @@ void cChannelGroups::ReadChannelGroups(void) {
int lastChannelNumber = 0; int lastChannelNumber = 0;
#if VDRVERSNUM >= 20301 #if VDRVERSNUM >= 20301
LOCK_CHANNELS_READ; LOCK_CHANNELS_READ;
const cChannel *first = Channels->First(); const cChannels *channels = Channels;
#else #else
const cChannel *first = Channels.First(); const cChannels *channels = &Channels;
#endif #endif
const cChannel *first = channels->First();
if (!first->GroupSep()) { if (!first->GroupSep()) {
channelGroups.push_back(cChannelGroup(tr("Main Program"))); channelGroups.push_back(cChannelGroup(tr("Main Program")));
setStart = true; setStart = true;
} }
#if VDRVERSNUM >= 20301 for (const cChannel *channel = channels->First(); channel; channel = channels->Next(channel)) {
for (const cChannel *channel = Channels->First(); channel; channel = Channels->Next(channel)) {
#else
for (const cChannel *channel = Channels.First(); channel; channel = Channels.Next(channel)) {
#endif
if (setStart && (channelGroups.size() > 0)) { if (setStart && (channelGroups.size() > 0)) {
channelGroups[channelGroups.size()-1].SetChannelStart(channel->Number()); channelGroups[channelGroups.size() - 1].SetChannelStart(channel->Number());
setStart = false; setStart = false;
} }
if (channel->GroupSep()) { if (channel->GroupSep()) {
if (channelGroups.size() > 0) { if (channelGroups.size() > 0) {
channelGroups[channelGroups.size()-1].SetChannelStop(lastChannelNumber); channelGroups[channelGroups.size() - 1].SetChannelStop(lastChannelNumber);
} }
channelGroups.push_back(cChannelGroup(channel->Name())); channelGroups.push_back(cChannelGroup(channel->Name()));
setStart = true; setStart = true;
@@ -40,8 +38,8 @@ void cChannelGroups::ReadChannelGroups(void) {
} }
} }
if (channelGroups.size() > 0) { if (channelGroups.size() > 0) {
channelGroups[channelGroups.size()-1].SetChannelStop(lastChannelNumber); channelGroups[channelGroups.size() - 1].SetChannelStop(lastChannelNumber);
if ((tvguideConfig.hideLastGroup)&&(channelGroups.size() > 1)) { if ((config.hideLastGroup) && (channelGroups.size() > 1)) {
channelGroups.pop_back(); channelGroups.pop_back();
} }
} }
@@ -96,7 +94,7 @@ int cChannelGroups::GetNextGroupChannelNumber(const cChannel *channel) {
} }
bool cChannelGroups::IsInLastGroup(const cChannel *channel) { bool cChannelGroups::IsInLastGroup(const cChannel *channel) {
if (!tvguideConfig.hideLastGroup) if (!config.hideLastGroup)
return false; return false;
if (channelGroups.size() > 0) { if (channelGroups.size() > 0) {
if (channel->Number() > channelGroups[channelGroups.size()-1].StopChannel()) { if (channel->Number() > channelGroups[channelGroups.size()-1].StopChannel()) {
@@ -145,9 +143,15 @@ void cChannelGroups::CreateGroupGrid(const char *name, int number, int start, in
} }
int cChannelGroups::GetLastValidChannel(void) { int cChannelGroups::GetLastValidChannel(void) {
if (channelGroups.size() > 0) if (config.hideLastGroup && channelGroups.size() > 0) {
return channelGroups[channelGroups.size()-1].StopChannel(); return channelGroups[channelGroups.size() - 1].StopChannel();
return 0; }
#if VDRVERSNUM >= 20301
LOCK_CHANNELS_READ;
return Channels->MaxNumber();
#else
return Channels.MaxNumber();
#endif
} }
void cChannelGroups::DumpGroups(void) { void cChannelGroups::DumpGroups(void) {

View File

@@ -3,6 +3,7 @@
#include <vector> #include <vector>
#include <vdr/channels.h> #include <vdr/channels.h>
#include "config.h"
#include "channelgroup.h" #include "channelgroup.h"
// --- cChannelGroups ------------------------------------------------------------- // --- cChannelGroups -------------------------------------------------------------

View File

@@ -1,95 +1,86 @@
#include <vdr/channels.h> #include <vdr/channels.h>
#include "config.h" #include "config.h"
#include "geometrymanager.h" #include "geometrymanager.h"
#include "osdmanager.h" #include "osdmanager.h"
#include "fontmanager.h" #include "fontmanager.h"
#include "channelgroups.h" #include "channelgroups.h"
#include "channeljump.h" #include "channeljump.h"
cChannelJump::cChannelJump(cChannelGroups *channelGroups) { cChannelJump::cChannelJump(cChannelGroups *channelGroups, int lastValidChannel) {
this->channelGroups = channelGroups; this->channelGroups = channelGroups;
pixmapText = NULL; pixmapText = NULL;
channel = 0; channel = 0;
if (!tvguideConfig.hideLastGroup) { maxChannels = lastValidChannel;
#if VDRVERSNUM >= 20301 timeout = Setup.ChannelEntryTimeout;
LOCK_CHANNELS_READ; startTime = 0;
maxChannels = Channels->MaxNumber(); SetPixmaps();
#else Draw();
maxChannels = Channels.MaxNumber(); }
#endif
} else { cChannelJump::~cChannelJump(void) {
maxChannels = channelGroups->GetLastValidChannel(); osdManager.releasePixmap(pixmapBack);
} osdManager.releasePixmap(pixmapText);
timeout = Setup.ChannelEntryTimeout; }
startTime = cTimeMs::Now();
SetPixmaps(); void cChannelJump::SetPixmaps(void) {
Draw(); int x = (geoManager.osdWidth - geoManager.channelJumpWidth)/2;
} int y = (geoManager.osdHeight - geoManager.channelJumpHeight)/2;
cChannelJump::~cChannelJump(void) { pixmapBack = osdManager.requestPixmap(4, cRect(x, y, geoManager.channelJumpWidth, geoManager.channelJumpHeight));
osdManager.releasePixmap(pixmapBack); pixmap = osdManager.requestPixmap(5, cRect(x, y, geoManager.channelJumpWidth, geoManager.channelJumpHeight));
osdManager.releasePixmap(pixmapText); pixmapText = osdManager.requestPixmap(6, cRect(x, y, geoManager.channelJumpWidth, geoManager.channelJumpHeight));
} }
void cChannelJump::SetPixmaps(void) { void cChannelJump::Draw(void) {
int x = (geoManager.osdWidth - geoManager.channelJumpWidth)/2; if (config.style == eStyleGraphical) {
int y = (geoManager.osdHeight - geoManager.channelJumpHeight)/2; drawBackgroundGraphical(bgChannelJump);
} else {
pixmapBack = osdManager.requestPixmap(4, cRect(x, y, geoManager.channelJumpWidth, geoManager.channelJumpHeight)); pixmap->Fill(theme.Color(clrBackground));
pixmap = osdManager.requestPixmap(5, cRect(x, y, geoManager.channelJumpWidth, geoManager.channelJumpHeight)); drawBorder();
pixmapText = osdManager.requestPixmap(6, cRect(x, y, geoManager.channelJumpWidth, geoManager.channelJumpHeight)); }
} pixmapBack->Fill(clrTransparent);
pixmapBack->DrawRectangle(cRect(5, Height()/2, Width()-10, Height()-3), theme.Color(clrBackground));
void cChannelJump::Draw(void) { }
if (tvguideConfig.style == eStyleGraphical) {
drawBackgroundGraphical(bgChannelJump); void cChannelJump::DrawText(void) {
} else { pixmapText->Fill(clrTransparent);
pixmap->Fill(theme.Color(clrBackground));
drawBorder(); cString header = cString::sprintf("%s:", tr("Channel"));
}
pixmapBack->Fill(clrTransparent); const cFont *font = fontManager.FontMessageBox;
pixmapBack->DrawRectangle(cRect(5, Height()/2, Width()-10, Height()-3), theme.Color(clrBackground)); const cFont *fontHeader = fontManager.FontMessageBoxLarge;
}
int xHeader = (Width() - fontHeader->Width(*header)) / 2;
void cChannelJump::DrawText(void) { int yHeader = (Height()/2 - fontHeader->Height()) / 2;
pixmapText->Fill(clrTransparent); pixmapText->DrawText(cPoint(xHeader, yHeader), *header, theme.Color(clrFont), clrTransparent, fontHeader);
cString header = cString::sprintf("%s:", tr("Channel")); cString strChannel = BuildChannelString();
int xChannel = (Width() - font->Width(*strChannel)) / 2;
const cFont *font = fontManager.FontMessageBox; int yChannel = Height()/2 + (Height()/2 - font->Height()) / 2;
const cFont *fontHeader = fontManager.FontMessageBoxLarge; pixmapText->DrawText(cPoint(xChannel, yChannel), *strChannel, theme.Color(clrFont), clrTransparent, font);
int xHeader = (Width() - fontHeader->Width(*header)) / 2; }
int yHeader = (Height()/2 - fontHeader->Height()) / 2;
pixmapText->DrawText(cPoint(xHeader, yHeader), *header, theme.Color(clrFont), clrTransparent, fontHeader); void cChannelJump::Set(int num) {
startTime = cTimeMs::Now();
cString strChannel = BuildChannelString(); if (channel == 0) {
int xChannel = (Width() - font->Width(*strChannel)) / 2; channel = num;
int yChannel = Height()/2 + (Height()/2 - font->Height()) / 2; return;
pixmapText->DrawText(cPoint(xChannel, yChannel), *strChannel, theme.Color(clrFont), clrTransparent, font); }
int newChannel = channel * 10 + num;
} if (newChannel <= maxChannels)
channel = newChannel;
void cChannelJump::Set(int num) { }
startTime = cTimeMs::Now();
if (channel == 0) { cString cChannelJump::BuildChannelString(void) {
channel = num; if (channel*10 <= maxChannels)
return; return cString::sprintf("%d-", channel);
} else
int newChannel = channel * 10 + num; return cString::sprintf("%d", channel);
if (newChannel <= maxChannels) }
channel = newChannel;
} bool cChannelJump::TimeOut(void) {
if ((cTimeMs::Now() - startTime) > timeout)
cString cChannelJump::BuildChannelString(void) { return true;
if (channel*10 <= maxChannels) return false;
return cString::sprintf("%d-", channel); }
else
return cString::sprintf("%d", channel);
}
bool cChannelJump::TimeOut(void) {
if ((cTimeMs::Now() - startTime) > timeout)
return true;
return false;
}

View File

@@ -1,29 +1,29 @@
#ifndef __TVGUIDE_CHANNELJUMP_H #ifndef __TVGUIDE_CHANNELJUMP_H
#define __TVGUIDE_CHANNELJUMP_H #define __TVGUIDE_CHANNELJUMP_H
#include "styledpixmap.h" #include "styledpixmap.h"
// --- cChannelJump ------------------------------------------------------------- // --- cChannelJump -------------------------------------------------------------
class cChannelJump : public cStyledPixmap { class cChannelJump : public cStyledPixmap {
private: private:
int channel; int channel;
cChannelGroups *channelGroups; cChannelGroups *channelGroups;
int maxChannels; int maxChannels;
long unsigned int startTime; long unsigned int startTime;
long unsigned int timeout; long unsigned int timeout;
cPixmap *pixmapBack; cPixmap *pixmapBack;
cPixmap *pixmapText; cPixmap *pixmapText;
void SetPixmaps(void); void SetPixmaps(void);
void Draw(void); void Draw(void);
cString BuildChannelString(void); cString BuildChannelString(void);
public: public:
cChannelJump(cChannelGroups *channelGroups); cChannelJump(cChannelGroups *channelGroups, int lastValidChannel);
virtual ~cChannelJump(void); virtual ~cChannelJump(void);
void Set(int num); void Set(int num);
void DrawText(void); void DrawText(void);
bool TimeOut(void); bool TimeOut(void);
int GetChannel(void) { return channel; }; int GetChannel(void) { return channel; };
}; };
#endif //__TVGUIDE_CHANNELJUMP_H #endif //__TVGUIDE_CHANNELJUMP_H

689
config.c
View File

@@ -1,340 +1,349 @@
#include <string> #include <string>
#include "config.h" #include "config.h"
cTvguideConfig::cTvguideConfig() { cTVGuideConfig::cTVGuideConfig() {
debugImageLoading = 0; useHWAccel = false;
showMainMenuEntry = 1; debugImageLoading = 0;
replaceOriginalSchedule = 0; showMainMenuEntry = 1;
displayMode = eHorizontal; replaceOriginalSchedule = 0;
showTimeInGrid = 1; displayMode = eHorizontal;
channelCols = 5; showTimeInGrid = 1;
channelRows = 10; channelCols = 5;
displayTime = 160; channelRows = 10;
displayHorizontalTime = 160; displayTime = 180;
displayStatusHeader = 1; displayHorizontalTime = 180;
displayChannelGroups = 1; displayStatusHeader = 1;
displayTimeBase = 1; displayChannelGroups = 1;
headerHeightPercent = 20; displayTimeBase = 1;
channelGroupsPercent = 5; headerHeightPercent = 20;
epgViewBorder = 50; channelGroupsPercent = 5;
scaleVideo = 1; epgViewBorder = 50;
decorateVideo = 1; scaleVideo = 1;
timeLineWidthPercent = 8; decorateVideo = 1;
timeLineHeightPercent = 4; timeLineWidthPercent = 8;
displayChannelName = 1; timeLineHeightPercent = 4;
channelHeaderWidthPercent = 20; displayChannelName = 1;
channelHeaderHeightPercent = 15; channelHeaderWidthPercent = 20;
footerHeightPercent = 7; channelHeaderHeightPercent = 15;
stepMinutes = 30; footerHeightPercent = 7;
bigStepHours = 3; stepMinutes = 30;
hugeStepHours = 24; bigStepHours = 3;
channelJumpMode = eNumJump; bigStepHoursHorizontal = 3;
jumpChannels = 0; hugeStepHours = 24;
blueKeyMode = 2; hugeStepHoursHorizontal = 24;
closeOnSwitch = 1; channelJumpMode = eNumJump;
numkeyMode = 0; jumpChannels = 0;
useRemoteTimers = 0; blueKeyMode = 2;
hideLastGroup = 0; closeOnSwitch = 1;
hideChannelLogos = 0; numkeyMode = 0;
logoWidthRatio = 13; useRemoteTimers = 0;
logoHeightRatio = 10; hideLastGroup = 0;
logoExtension = 0; hideChannelLogos = 0;
hideEpgImages = 0; logoWidthRatio = 13;
epgImageWidth = 315; logoHeightRatio = 10;
epgImageHeight = 240; logoExtension = 0;
numAdditionalEPGPictures = 9; hideEpgImages = 0;
epgImageWidthLarge = 525; epgImageWidth = 315;
epgImageHeightLarge = 400; epgImageHeight = 240;
detailedViewScrollStep = 5; numAdditionalEPGPictures = 9;
instRecFolderMode = eFolderRoot; epgImageWidthLarge = 525;
instRecFixedFolder = ""; epgImageHeightLarge = 400;
favWhatsOnNow = 1; detailedViewScrollStep = 5;
favWhatsOnNext = 1; instRecFolderMode = eFolderRoot;
favUseTime1 = 0; instRecFixedFolder = "";
favUseTime2 = 0; favWhatsOnNow = 1;
favUseTime3 = 0; favWhatsOnNext = 1;
favUseTime4 = 0; favUseTime1 = 0;
favTime1 = 0; favUseTime2 = 0;
favTime2 = 0; favUseTime3 = 0;
favTime3 = 0; favUseTime4 = 0;
favTime4 = 0; favTime1 = 0;
descUser1 = ""; favTime2 = 0;
descUser2 = ""; favTime3 = 0;
descUser3 = ""; favTime4 = 0;
descUser4 = ""; descUser1 = "";
favLimitChannels = 0; descUser2 = "";
favStartChannel = 0; descUser3 = "";
favStopChannel = 0; descUser4 = "";
switchMode = 0; favLimitChannels = 0;
switchMinsBefore = 2; favStartChannel = 0;
fontIndex = 0; favStopChannel = 0;
fontNameDefault = "VDRSymbols Sans:Book"; switchMode = 0;
FontButtonDelta = 0; switchMinsBefore = 2;
FontDetailViewDelta = 0; fontIndex = 0;
FontDetailViewSmallDelta = 0; fontNameDefault = "VDRSymbols Sans:Book";
FontDetailHeaderDelta = 0; FontButtonDelta = 0;
FontMessageBoxDelta = 0; FontDetailViewDelta = 0;
FontMessageBoxLargeDelta = 0; FontDetailViewSmallDelta = 0;
FontStatusHeaderDelta = 0; FontDetailHeaderDelta = 0;
FontStatusHeaderLargeDelta = 0; FontMessageBoxDelta = 0;
FontChannelHeaderDelta = 0; FontMessageBoxLargeDelta = 0;
FontChannelGroupsDelta = 0; FontStatusHeaderDelta = 0;
FontGridDelta = 0; FontStatusHeaderLargeDelta = 0;
FontGridSmallDelta = 0; FontChannelHeaderDelta = 0;
FontTimeLineWeekdayDelta = 0; FontChannelGroupsDelta = 0;
FontTimeLineDateDelta = 0; FontGridDelta = 0;
FontTimeLineTimeDelta = 0; FontGridSmallDelta = 0;
FontChannelHeaderHorizontalDelta = 0; FontTimeLineWeekdayDelta = 0;
FontChannelGroupsHorizontalDelta = 0; FontTimeLineDateDelta = 0;
FontGridHorizontalDelta = 0; FontTimeLineTimeDelta = 0;
FontGridHorizontalSmallDelta = 0; FontChannelHeaderHorizontalDelta = 0;
FontTimeLineDateHorizontalDelta = 0; FontChannelGroupsHorizontalDelta = 0;
FontTimeLineTimeHorizontalDelta = 0; FontGridHorizontalDelta = 0;
FontRecMenuItemDelta = 0; FontGridHorizontalSmallDelta = 0;
FontRecMenuItemSmallDelta = 0; FontTimeLineDateHorizontalDelta = 0;
FontRecMenuItemLargeDelta = 0; FontTimeLineTimeHorizontalDelta = 0;
timeFormat = 1; FontRecMenuItemDelta = 0;
useNopacityTheme = 1; FontRecMenuItemSmallDelta = 0;
themeIndex = -1; FontRecMenuItemLargeDelta = 0;
themeIndexCurrent = -1; timeFormat = 1;
themeName = ""; useNopacityTheme = 1;
nOpacityTheme = ""; useNopacityThemeCurrent = -1;
style = eStyleBlendingDefault; themeIndex = -1;
roundedCorners = 0; themeIndexCurrent = -1;
displayRerunsDetailEPGView = 1; themeName = "";
numReruns = 5; nOpacityTheme = "";
useSubtitleRerun = 1; style = eStyleBlendingDefault;
numLogosInitial = 30; roundedCorners = 0;
numLogosMax = 50; displayRerunsDetailEPGView = 1;
limitLogoCache = 1; numReruns = 5;
logoPathSet = false; useSubtitleRerun = 1;
imagesPathSet = false; numLogosInitial = 30;
iconsPathSet = false; numLogosMax = 50;
} limitLogoCache = 1;
logoPathSet = false;
cTvguideConfig::~cTvguideConfig() { imagesPathSet = false;
} iconsPathSet = false;
}
void cTvguideConfig::setDynamicValues() {
numGrids = (displayMode == eVertical)?channelCols:channelRows; cTVGuideConfig::~cTVGuideConfig() {
jumpChannels = numGrids; }
}
void cTVGuideConfig::setDynamicValues() {
bool cTvguideConfig::LoadTheme() { numGrids = (displayMode == eVertical)?channelCols:channelRows;
//is correct theme already loaded? jumpChannels = numGrids;
if (nOpacityTheme.size() == 0) }
nOpacityTheme = Setup.OSDTheme;
if ((themeIndex > -1) && (themeIndex == themeIndexCurrent)) { bool cTVGuideConfig::LoadTheme() {
if (!nOpacityTheme.compare(Setup.OSDTheme)) { //is correct theme already loaded?
return false; if (nOpacityTheme.size() == 0)
} else { nOpacityTheme = Setup.OSDTheme;
nOpacityTheme = Setup.OSDTheme; if ((themeIndex > -1) && (themeIndex == themeIndexCurrent) && (useNopacityTheme == useNopacityThemeCurrent)) {
} if (!nOpacityTheme.compare(Setup.OSDTheme)) {
} return false;
//Load available Themes } else {
cThemes themes; nOpacityTheme = Setup.OSDTheme;
themes.Load(*cString("tvguide")); }
int numThemesAvailable = themes.NumThemes(); }
esyslog("tvguide: loading new Theme");
//Check for nOpacity Theme //Load available Themes
if (useNopacityTheme) { cThemes themes;
std::string nOpacity = "nOpacity"; themes.Load(*cString("tvguide"));
std::string currentSkin = Setup.OSDSkin; int numThemesAvailable = themes.NumThemes();
std::string currentSkinTheme = Setup.OSDTheme;
if (!currentSkin.compare(nOpacity)) { //Check for nOpacity Theme
for (int curThemeIndex = 0; curThemeIndex < numThemesAvailable; curThemeIndex++) { if (useNopacityTheme) {
std::string curThemeName = themes.Name(curThemeIndex); std::string nOpacity = "nOpacity";
if (!curThemeName.compare(currentSkinTheme)) { std::string currentSkin = Setup.OSDSkin;
themeIndex = curThemeIndex; std::string currentSkinTheme = Setup.OSDTheme;
break; if (!currentSkin.compare(nOpacity)) {
} for (int curThemeIndex = 0; curThemeIndex < numThemesAvailable; curThemeIndex++) {
} std::string curThemeName = themes.Name(curThemeIndex);
} if (!curThemeName.compare(currentSkinTheme)) {
} themeIndex = curThemeIndex;
break;
if (themeIndex == -1) { }
for (int curThemeIndex = 0; curThemeIndex < numThemesAvailable; curThemeIndex++) { }
std::string curThemeName = themes.Name(curThemeIndex); }
if (!curThemeName.compare("default")) { }
themeIndex = curThemeIndex;
break; if (themeIndex == -1) {
} for (int curThemeIndex = 0; curThemeIndex < numThemesAvailable; curThemeIndex++) {
} std::string curThemeName = themes.Name(curThemeIndex);
if (!curThemeName.compare("default")) {
} themeIndex = curThemeIndex;
break;
if (themeIndex == -1) }
themeIndex = 0; }
themeIndexCurrent = themeIndex; }
const char *themePath = themes.FileName(themeIndex); if (themeIndex == -1)
if (access(themePath, F_OK) == 0) { themeIndex = 0;
::theme.Load(themePath);
themeName = themes.Name(themeIndex); themeIndexCurrent = themeIndex;
} useNopacityThemeCurrent = useNopacityTheme;
esyslog("tvguide: set Theme to %s", *themeName);
return true; const char *themePath = themes.FileName(themeIndex);
} if (access(themePath, F_OK) == 0) {
::theme.Load(themePath);
themeName = themes.Name(themeIndex);
void cTvguideConfig::SetStyle(void) { }
if (theme.Color(clrStyle) == CLR_STYLE_FLAT) { esyslog("tvguide: set Theme to %s", *themeName);
style = eStyleFlat; return true;
esyslog("tvguide: set flat style"); }
} else if (theme.Color(clrStyle) == CLR_STYLE_BLENDING_DEFAULT) {
style = eStyleBlendingDefault;
esyslog("tvguide: set blending style"); void cTVGuideConfig::SetStyle(void) {
} else if (theme.Color(clrStyle) == CLR_STYLE_GRAPHICAL) { if (theme.Color(clrStyle) == CLR_STYLE_FLAT) {
style = eStyleGraphical; style = eStyleFlat;
esyslog("tvguide: set graphical style"); esyslog("tvguide: set flat style");
} else { } else if (theme.Color(clrStyle) == CLR_STYLE_BLENDING_DEFAULT) {
style = eStyleBlendingMagick; style = eStyleBlendingDefault;
esyslog("tvguide: set magick blending style"); esyslog("tvguide: set blending style");
} } else if (theme.Color(clrStyle) == CLR_STYLE_GRAPHICAL) {
style = eStyleGraphical;
} esyslog("tvguide: set graphical style");
} else {
void cTvguideConfig::SetLogoPath(cString path) { style = eStyleBlendingMagick;
logoPath = checkSlashAtEnd(*path); esyslog("tvguide: set magick blending style");
logoPathSet = true; }
esyslog("tvguide: Logo Path set to %s", *logoPath);
} }
void cTvguideConfig::SetImagesPath(cString path) { void cTVGuideConfig::SetLogoPath(cString path) {
epgImagePath = checkSlashAtEnd(*path); logoPath = checkSlashAtEnd(*path);
imagesPathSet = true; logoPathSet = true;
esyslog("tvguide: EPG Image Path set to %s", *epgImagePath); esyslog("tvguide: Logo Path set to %s", *logoPath);
} }
void cTvguideConfig::SetIconsPath(cString path) { void cTVGuideConfig::SetImagesPath(cString path) {
iconPath = checkSlashAtEnd(*path); epgImagePath = checkSlashAtEnd(*path);
iconsPathSet = true; imagesPathSet = true;
esyslog("tvguide: Icon Path set to %s", *iconPath); esyslog("tvguide: EPG Image Path set to %s", *epgImagePath);
} }
void cTvguideConfig::SetDefaultPathes(void) { void cTVGuideConfig::SetIconsPath(cString path) {
logoPathDefault = cString::sprintf("%s/logos/", cPlugin::ResourceDirectory(PLUGIN_NAME_I18N)); iconPath = checkSlashAtEnd(*path);
iconPathDefault = cString::sprintf("%s/icons/", cPlugin::ResourceDirectory(PLUGIN_NAME_I18N)); iconsPathSet = true;
epgImagePathDefault = cString::sprintf("%s/epgimages/", cPlugin::CacheDirectory(PLUGIN_NAME_I18N)); esyslog("tvguide: Icon Path set to %s", *iconPath);
}
if (!logoPathSet) {
logoPath = logoPathDefault; void cTVGuideConfig::SetDefaultPathes(void) {
} logoPathDefault = cString::sprintf("%s/logos/", cPlugin::ResourceDirectory(PLUGIN_NAME_I18N));
if (!imagesPathSet) { iconPathDefault = cString::sprintf("%s/icons/", cPlugin::ResourceDirectory(PLUGIN_NAME_I18N));
epgImagePath = epgImagePathDefault; epgImagePathDefault = cString::sprintf("%s/epgimages/", cPlugin::CacheDirectory(PLUGIN_NAME_I18N));
}
if (!iconsPathSet) { if (!logoPathSet) {
iconPath = iconPathDefault; logoPath = logoPathDefault;
} }
} if (!imagesPathSet) {
epgImagePath = epgImagePathDefault;
cString cTvguideConfig::checkSlashAtEnd(std::string path) { }
try { if (!iconsPathSet) {
if (!(path.at(path.size()-1) == '/')) iconPath = iconPathDefault;
return cString::sprintf("%s/", path.c_str()); }
} catch (...) {return path.c_str();} }
return path.c_str();
} cString cTVGuideConfig::checkSlashAtEnd(std::string path) {
try {
bool cTvguideConfig::SetupParse(const char *Name, const char *Value) { if (!(path.at(path.size()-1) == '/'))
if (strcmp(Name, "timeFormat") == 0) timeFormat = atoi(Value); return cString::sprintf("%s/", path.c_str());
else if (strcmp(Name, "debugImageLoading") == 0) debugImageLoading = atoi(Value); } catch (...) {return path.c_str();}
else if (strcmp(Name, "showMainMenuEntry") == 0) showMainMenuEntry = atoi(Value); return path.c_str();
else if (strcmp(Name, "replaceOriginalSchedule") == 0) replaceOriginalSchedule = atoi(Value); }
else if (strcmp(Name, "useNopacityTheme") == 0) useNopacityTheme = atoi(Value);
else if (strcmp(Name, "themeIndex") == 0) themeIndex = atoi(Value); bool cTVGuideConfig::SetupParse(const char *Name, const char *Value) {
else if (strcmp(Name, "displayMode") == 0) displayMode = atoi(Value); if (strcmp(Name, "timeFormat") == 0) timeFormat = atoi(Value);
else if (strcmp(Name, "showTimeInGrid") == 0) showTimeInGrid = atoi(Value); else if (strcmp(Name, "debugImageLoading") == 0) debugImageLoading = atoi(Value);
else if (strcmp(Name, "displayStatusHeader") == 0) displayStatusHeader = atoi(Value); else if (strcmp(Name, "useHWAccel") == 0) useHWAccel = atoi(Value);
else if (strcmp(Name, "displayChannelGroups") == 0) displayChannelGroups = atoi(Value); else if (strcmp(Name, "showMainMenuEntry") == 0) showMainMenuEntry = atoi(Value);
else if (strcmp(Name, "displayTimeBase") == 0) displayTimeBase = atoi(Value); else if (strcmp(Name, "replaceOriginalSchedule") == 0) replaceOriginalSchedule = atoi(Value);
else if (strcmp(Name, "headerHeightPercent") == 0) headerHeightPercent = atoi(Value); else if (strcmp(Name, "useNopacityTheme") == 0) useNopacityTheme = atoi(Value);
else if (strcmp(Name, "channelGroupsPercent") == 0) channelGroupsPercent = atoi(Value); else if (strcmp(Name, "themeIndex") == 0) themeIndex = atoi(Value);
else if (strcmp(Name, "epgViewBorder") == 0) epgViewBorder = atoi(Value); else if (strcmp(Name, "displayMode") == 0) displayMode = atoi(Value);
else if (strcmp(Name, "scaleVideo") == 0) scaleVideo = atoi(Value); else if (strcmp(Name, "showTimeInGrid") == 0) showTimeInGrid = atoi(Value);
else if (strcmp(Name, "decorateVideo") == 0) decorateVideo = atoi(Value); else if (strcmp(Name, "displayStatusHeader") == 0) displayStatusHeader = atoi(Value);
else if (strcmp(Name, "roundedCorners") == 0) roundedCorners = atoi(Value); else if (strcmp(Name, "displayChannelGroups") == 0) displayChannelGroups = atoi(Value);
else if (strcmp(Name, "channelCols") == 0) channelCols = atoi(Value); else if (strcmp(Name, "displayTimeBase") == 0) displayTimeBase = atoi(Value);
else if (strcmp(Name, "channelRows") == 0) channelRows = atoi(Value); else if (strcmp(Name, "headerHeightPercent") == 0) headerHeightPercent = atoi(Value);
else if (strcmp(Name, "displayTime") == 0) displayTime = atoi(Value); else if (strcmp(Name, "channelGroupsPercent") == 0) channelGroupsPercent = atoi(Value);
else if (strcmp(Name, "displayHorizontalTime") == 0) displayHorizontalTime = atoi(Value); else if (strcmp(Name, "epgViewBorder") == 0) epgViewBorder = atoi(Value);
else if (strcmp(Name, "hideChannelLogos") == 0) hideChannelLogos = atoi(Value); else if (strcmp(Name, "scaleVideo") == 0) scaleVideo = atoi(Value);
else if (strcmp(Name, "logoExtension") == 0) logoExtension = atoi(Value); else if (strcmp(Name, "decorateVideo") == 0) decorateVideo = atoi(Value);
else if (strcmp(Name, "logoWidthRatio") == 0) logoWidthRatio = atoi(Value); else if (strcmp(Name, "roundedCorners") == 0) roundedCorners = atoi(Value);
else if (strcmp(Name, "logoHeightRatio") == 0) logoHeightRatio = atoi(Value); else if (strcmp(Name, "channelCols") == 0) channelCols = atoi(Value);
else if (strcmp(Name, "bigStepHours") == 0) bigStepHours = atoi(Value); else if (strcmp(Name, "channelRows") == 0) channelRows = atoi(Value);
else if (strcmp(Name, "hugeStepHours") == 0) hugeStepHours = atoi(Value); else if (strcmp(Name, "displayTime") == 0) displayTime = atoi(Value);
else if (strcmp(Name, "channelJumpMode") == 0) channelJumpMode = atoi(Value); else if (strcmp(Name, "displayHorizontalTime") == 0) displayHorizontalTime = atoi(Value);
else if (strcmp(Name, "blueKeyMode") == 0) blueKeyMode = atoi(Value); else if (strcmp(Name, "hideChannelLogos") == 0) hideChannelLogos = atoi(Value);
else if (strcmp(Name, "numkeyMode") == 0) numkeyMode = atoi(Value); else if (strcmp(Name, "logoExtension") == 0) logoExtension = atoi(Value);
else if (strcmp(Name, "closeOnSwitch") == 0) closeOnSwitch = atoi(Value); else if (strcmp(Name, "logoWidthRatio") == 0) logoWidthRatio = atoi(Value);
else if (strcmp(Name, "useRemoteTimers") == 0) useRemoteTimers = atoi(Value); else if (strcmp(Name, "logoHeightRatio") == 0) logoHeightRatio = atoi(Value);
else if (strcmp(Name, "hideLastGroup") == 0) hideLastGroup = atoi(Value); else if (strcmp(Name, "bigStepHours") == 0) bigStepHours = atoi(Value);
else if (strcmp(Name, "hideEpgImages") == 0) hideEpgImages = atoi(Value); else if (strcmp(Name, "bigStepHoursHorizontal") == 0) bigStepHoursHorizontal = atoi(Value);
else if (strcmp(Name, "epgImageWidth") == 0) epgImageWidth = atoi(Value); else if (strcmp(Name, "hugeStepHours") == 0) hugeStepHours = atoi(Value);
else if (strcmp(Name, "epgImageHeight") == 0) epgImageHeight = atoi(Value); else if (strcmp(Name, "hugeStepHoursHorizontal") == 0) hugeStepHoursHorizontal = atoi(Value);
else if (strcmp(Name, "numAdditionalEPGPictures") == 0) numAdditionalEPGPictures = atoi(Value); else if (strcmp(Name, "channelJumpMode") == 0) channelJumpMode = atoi(Value);
else if (strcmp(Name, "epgImageWidthLarge") == 0) epgImageWidthLarge = atoi(Value); else if (strcmp(Name, "blueKeyMode") == 0) blueKeyMode = atoi(Value);
else if (strcmp(Name, "epgImageHeightLarge") == 0) epgImageHeightLarge = atoi(Value); else if (strcmp(Name, "numkeyMode") == 0) numkeyMode = atoi(Value);
else if (strcmp(Name, "detailedViewScrollStep") == 0) detailedViewScrollStep = atoi(Value); else if (strcmp(Name, "closeOnSwitch") == 0) closeOnSwitch = atoi(Value);
else if (strcmp(Name, "timeLineWidthPercent") == 0) timeLineWidthPercent = atoi(Value); else if (strcmp(Name, "useRemoteTimers") == 0) useRemoteTimers = atoi(Value);
else if (strcmp(Name, "timeLineHeightPercent") == 0) timeLineHeightPercent = atoi(Value); else if (strcmp(Name, "hideLastGroup") == 0) hideLastGroup = atoi(Value);
else if (strcmp(Name, "displayChannelName") == 0) displayChannelName = atoi(Value); else if (strcmp(Name, "hideEpgImages") == 0) hideEpgImages = atoi(Value);
else if (strcmp(Name, "channelHeaderWidthPercent") == 0) channelHeaderWidthPercent = atoi(Value); else if (strcmp(Name, "epgImageWidth") == 0) epgImageWidth = atoi(Value);
else if (strcmp(Name, "channelHeaderHeightPercent") == 0) channelHeaderHeightPercent = atoi(Value); else if (strcmp(Name, "epgImageHeight") == 0) epgImageHeight = atoi(Value);
else if (strcmp(Name, "footerHeightPercent") == 0) footerHeightPercent = atoi(Value); else if (strcmp(Name, "numAdditionalEPGPictures") == 0) numAdditionalEPGPictures = atoi(Value);
else if (strcmp(Name, "instRecFolderMode") == 0) instRecFolderMode = atoi(Value); else if (strcmp(Name, "epgImageWidthLarge") == 0) epgImageWidthLarge = atoi(Value);
else if (strcmp(Name, "instRecFixedFolder") == 0) instRecFixedFolder = Value; else if (strcmp(Name, "epgImageHeightLarge") == 0) epgImageHeightLarge = atoi(Value);
else if (strcmp(Name, "favWhatsOnNow") == 0) favWhatsOnNow = atoi(Value); else if (strcmp(Name, "detailedViewScrollStep") == 0) detailedViewScrollStep = atoi(Value);
else if (strcmp(Name, "favWhatsOnNext") == 0) favWhatsOnNext = atoi(Value); else if (strcmp(Name, "timeLineWidthPercent") == 0) timeLineWidthPercent = atoi(Value);
else if (strcmp(Name, "favUseTime1") == 0) favUseTime1 = atoi(Value); else if (strcmp(Name, "timeLineHeightPercent") == 0) timeLineHeightPercent = atoi(Value);
else if (strcmp(Name, "favUseTime2") == 0) favUseTime2 = atoi(Value); else if (strcmp(Name, "displayChannelName") == 0) displayChannelName = atoi(Value);
else if (strcmp(Name, "favUseTime3") == 0) favUseTime3 = atoi(Value); else if (strcmp(Name, "channelHeaderWidthPercent") == 0) channelHeaderWidthPercent = atoi(Value);
else if (strcmp(Name, "favUseTime4") == 0) favUseTime4 = atoi(Value); else if (strcmp(Name, "channelHeaderHeightPercent") == 0) channelHeaderHeightPercent = atoi(Value);
else if (strcmp(Name, "favTime1") == 0) favTime1 = atoi(Value); else if (strcmp(Name, "footerHeightPercent") == 0) footerHeightPercent = atoi(Value);
else if (strcmp(Name, "favTime2") == 0) favTime2 = atoi(Value); else if (strcmp(Name, "instRecFolderMode") == 0) instRecFolderMode = atoi(Value);
else if (strcmp(Name, "favTime3") == 0) favTime3 = atoi(Value); else if (strcmp(Name, "instRecFixedFolder") == 0) instRecFixedFolder = Value;
else if (strcmp(Name, "favTime4") == 0) favTime4 = atoi(Value); else if (strcmp(Name, "favWhatsOnNow") == 0) favWhatsOnNow = atoi(Value);
else if (strcmp(Name, "descUser1") == 0) descUser1 = Value; else if (strcmp(Name, "favWhatsOnNext") == 0) favWhatsOnNext = atoi(Value);
else if (strcmp(Name, "descUser2") == 0) descUser2 = Value; else if (strcmp(Name, "favUseTime1") == 0) favUseTime1 = atoi(Value);
else if (strcmp(Name, "descUser3") == 0) descUser3 = Value; else if (strcmp(Name, "favUseTime2") == 0) favUseTime2 = atoi(Value);
else if (strcmp(Name, "descUser4") == 0) descUser4 = Value; else if (strcmp(Name, "favUseTime3") == 0) favUseTime3 = atoi(Value);
else if (strcmp(Name, "favLimitChannels") == 0) favLimitChannels = atoi(Value); else if (strcmp(Name, "favUseTime4") == 0) favUseTime4 = atoi(Value);
else if (strcmp(Name, "favStartChannel") == 0) favStartChannel = atoi(Value); else if (strcmp(Name, "favTime1") == 0) favTime1 = atoi(Value);
else if (strcmp(Name, "favStopChannel") == 0) favStopChannel = atoi(Value); else if (strcmp(Name, "favTime2") == 0) favTime2 = atoi(Value);
else if (strcmp(Name, "switchMode") == 0) switchMode = atoi(Value); else if (strcmp(Name, "favTime3") == 0) favTime3 = atoi(Value);
else if (strcmp(Name, "switchMinsBefore") == 0) switchMinsBefore = atoi(Value); else if (strcmp(Name, "favTime4") == 0) favTime4 = atoi(Value);
else if (strcmp(Name, "fontIndex") == 0) fontIndex = atoi(Value); else if (strcmp(Name, "descUser1") == 0) descUser1 = Value;
else if (strcmp(Name, "FontButtonDelta") == 0) FontButtonDelta = atoi(Value); else if (strcmp(Name, "descUser2") == 0) descUser2 = Value;
else if (strcmp(Name, "FontDetailViewDelta") == 0) FontDetailViewDelta = atoi(Value); else if (strcmp(Name, "descUser3") == 0) descUser3 = Value;
else if (strcmp(Name, "FontDetailHeaderDelta") == 0) FontDetailHeaderDelta = atoi(Value); else if (strcmp(Name, "descUser4") == 0) descUser4 = Value;
else if (strcmp(Name, "FontMessageBoxDelta") == 0) FontMessageBoxDelta = atoi(Value); else if (strcmp(Name, "favLimitChannels") == 0) favLimitChannels = atoi(Value);
else if (strcmp(Name, "FontMessageBoxLargeDelta") == 0) FontMessageBoxLargeDelta = atoi(Value); else if (strcmp(Name, "favStartChannel") == 0) favStartChannel = atoi(Value);
else if (strcmp(Name, "FontStatusHeaderDelta") == 0) FontStatusHeaderDelta = atoi(Value); else if (strcmp(Name, "favStopChannel") == 0) favStopChannel = atoi(Value);
else if (strcmp(Name, "FontStatusHeaderLargeDelta") == 0) FontStatusHeaderLargeDelta = atoi(Value); else if (strcmp(Name, "switchMode") == 0) switchMode = atoi(Value);
else if (strcmp(Name, "FontChannelHeaderDelta") == 0) FontChannelHeaderDelta = atoi(Value); else if (strcmp(Name, "switchMinsBefore") == 0) switchMinsBefore = atoi(Value);
else if (strcmp(Name, "FontChannelGroupsDelta") == 0) FontChannelGroupsDelta = atoi(Value); else if (strcmp(Name, "fontIndex") == 0) fontIndex = atoi(Value);
else if (strcmp(Name, "FontGridDelta") == 0) FontGridDelta = atoi(Value); else if (strcmp(Name, "FontButtonDelta") == 0) FontButtonDelta = atoi(Value);
else if (strcmp(Name, "FontGridSmallDelta") == 0) FontGridSmallDelta = atoi(Value); else if (strcmp(Name, "FontDetailViewDelta") == 0) FontDetailViewDelta = atoi(Value);
else if (strcmp(Name, "FontTimeLineWeekdayDelta") == 0) FontTimeLineWeekdayDelta = atoi(Value); else if (strcmp(Name, "FontDetailHeaderDelta") == 0) FontDetailHeaderDelta = atoi(Value);
else if (strcmp(Name, "FontTimeLineDateDelta") == 0) FontTimeLineDateDelta = atoi(Value); else if (strcmp(Name, "FontMessageBoxDelta") == 0) FontMessageBoxDelta = atoi(Value);
else if (strcmp(Name, "FontTimeLineTimeDelta") == 0) FontTimeLineTimeDelta = atoi(Value); else if (strcmp(Name, "FontMessageBoxLargeDelta") == 0) FontMessageBoxLargeDelta = atoi(Value);
else if (strcmp(Name, "FontChannelHeaderHorizontalDelta") == 0) FontChannelHeaderHorizontalDelta = atoi(Value); else if (strcmp(Name, "FontStatusHeaderDelta") == 0) FontStatusHeaderDelta = atoi(Value);
else if (strcmp(Name, "FontChannelGroupsHorizontalDelta") == 0) FontChannelGroupsHorizontalDelta = atoi(Value); else if (strcmp(Name, "FontStatusHeaderLargeDelta") == 0) FontStatusHeaderLargeDelta = atoi(Value);
else if (strcmp(Name, "FontGridHorizontalDelta") == 0) FontGridHorizontalDelta = atoi(Value); else if (strcmp(Name, "FontChannelHeaderDelta") == 0) FontChannelHeaderDelta = atoi(Value);
else if (strcmp(Name, "FontGridHorizontalSmallDelta") == 0) FontGridHorizontalSmallDelta = atoi(Value); else if (strcmp(Name, "FontChannelGroupsDelta") == 0) FontChannelGroupsDelta = atoi(Value);
else if (strcmp(Name, "FontTimeLineDateHorizontalDelta") == 0) FontTimeLineDateHorizontalDelta = atoi(Value); else if (strcmp(Name, "FontGridDelta") == 0) FontGridDelta = atoi(Value);
else if (strcmp(Name, "FontTimeLineTimeHorizontalDelta") == 0) FontTimeLineTimeHorizontalDelta = atoi(Value); else if (strcmp(Name, "FontGridSmallDelta") == 0) FontGridSmallDelta = atoi(Value);
else if (strcmp(Name, "FontRecMenuItemDelta") == 0) FontRecMenuItemDelta = atoi(Value); else if (strcmp(Name, "FontTimeLineWeekdayDelta") == 0) FontTimeLineWeekdayDelta = atoi(Value);
else if (strcmp(Name, "FontRecMenuItemSmallDelta") == 0) FontRecMenuItemSmallDelta = atoi(Value); else if (strcmp(Name, "FontTimeLineDateDelta") == 0) FontTimeLineDateDelta = atoi(Value);
else if (strcmp(Name, "FontRecMenuItemLargeDelta") == 0) FontRecMenuItemLargeDelta = atoi(Value); else if (strcmp(Name, "FontTimeLineTimeDelta") == 0) FontTimeLineTimeDelta = atoi(Value);
else if (strcmp(Name, "displayRerunsDetailEPGView") == 0) displayRerunsDetailEPGView = atoi(Value); else if (strcmp(Name, "FontChannelHeaderHorizontalDelta") == 0) FontChannelHeaderHorizontalDelta = atoi(Value);
else if (strcmp(Name, "numReruns") == 0) numReruns = atoi(Value); else if (strcmp(Name, "FontChannelGroupsHorizontalDelta") == 0) FontChannelGroupsHorizontalDelta = atoi(Value);
else if (strcmp(Name, "useSubtitleRerun") == 0) useSubtitleRerun = atoi(Value); else if (strcmp(Name, "FontGridHorizontalDelta") == 0) FontGridHorizontalDelta = atoi(Value);
else if (strcmp(Name, "numLogosInitial") == 0) numLogosInitial = atoi(Value); else if (strcmp(Name, "FontGridHorizontalSmallDelta") == 0) FontGridHorizontalSmallDelta = atoi(Value);
else if (strcmp(Name, "numLogosMax") == 0) numLogosMax = atoi(Value); else if (strcmp(Name, "FontTimeLineDateHorizontalDelta") == 0) FontTimeLineDateHorizontalDelta = atoi(Value);
else if (strcmp(Name, "limitLogoCache") == 0) limitLogoCache = atoi(Value); else if (strcmp(Name, "FontTimeLineTimeHorizontalDelta") == 0) FontTimeLineTimeHorizontalDelta = atoi(Value);
else return false; else if (strcmp(Name, "FontRecMenuItemDelta") == 0) FontRecMenuItemDelta = atoi(Value);
return true; else if (strcmp(Name, "FontRecMenuItemSmallDelta") == 0) FontRecMenuItemSmallDelta = atoi(Value);
} else if (strcmp(Name, "FontRecMenuItemLargeDelta") == 0) FontRecMenuItemLargeDelta = atoi(Value);
else if (strcmp(Name, "displayRerunsDetailEPGView") == 0) displayRerunsDetailEPGView = atoi(Value);
else if (strcmp(Name, "numReruns") == 0) numReruns = atoi(Value);
else if (strcmp(Name, "useSubtitleRerun") == 0) useSubtitleRerun = atoi(Value);
else if (strcmp(Name, "numLogosInitial") == 0) numLogosInitial = atoi(Value);
else if (strcmp(Name, "numLogosMax") == 0) numLogosMax = atoi(Value);
else if (strcmp(Name, "limitLogoCache") == 0) limitLogoCache = atoi(Value);
else return false;
return true;
}

520
config.h
View File

@@ -1,258 +1,262 @@
#ifndef __TVGUIDE_CONFIG_H #ifndef __TVGUIDE_CONFIG_H
#define __TVGUIDE_CONFIG_H #define __TVGUIDE_CONFIG_H
#include <vdr/themes.h> #include <vdr/themes.h>
#include <vdr/plugin.h> #include <vdr/plugin.h>
#include "osdmanager.h" #include "osdmanager.h"
#include "geometrymanager.h" #include "geometrymanager.h"
#include "fontmanager.h" #include "fontmanager.h"
#include "imagecache.h" #include "imagecache.h"
enum { enum eTimeFormat {
e12Hours, e12Hours,
e24Hours e24Hours
}; };
enum { enum {
eVertical, eVertical,
eHorizontal eHorizontal
}; };
enum { enum {
eNumJump, eNumJump,
eGroupJump eGroupJump
}; };
enum { enum {
eStyleGraphical, eStyleGraphical,
eStyleBlendingMagick, eStyleBlendingMagick,
eStyleBlendingDefault, eStyleBlendingDefault,
eStyleFlat eStyleFlat
}; };
enum eBlueKeyMode { enum eBlueKeyMode {
eBlueKeySwitch = 0, eBlueKeySwitch = 0,
eBlueKeyEPG, eBlueKeyEPG,
eBlueKeyFavorites eBlueKeyFavorites
}; };
enum eInstRecFolderMode { enum eInstRecFolderMode {
eFolderRoot = 0, eFolderRoot = 0,
eFolderSelect, eFolderSelect,
eFolderFixed eFolderFixed
}; };
class cTvguideConfig { class cTVGuideConfig {
private: private:
cString checkSlashAtEnd(std::string path); cString checkSlashAtEnd(std::string path);
public: public:
cTvguideConfig(); cTVGuideConfig();
~cTvguideConfig(); ~cTVGuideConfig();
int debugImageLoading; int useHWAccel;
int showMainMenuEntry; int debugImageLoading;
int replaceOriginalSchedule; int showMainMenuEntry;
int displayMode; int replaceOriginalSchedule;
int showTimeInGrid; int displayMode;
int channelCols; int showTimeInGrid;
int channelRows; int channelCols;
int numGrids; int channelRows;
int displayTime; int numGrids;
int displayHorizontalTime; int displayTime;
int displayStatusHeader; int displayHorizontalTime;
int displayChannelGroups; int displayStatusHeader;
int displayTimeBase; int displayChannelGroups;
int headerHeightPercent; int displayTimeBase;
int channelGroupsPercent; int headerHeightPercent;
int epgViewBorder; int channelGroupsPercent;
int scaleVideo; int epgViewBorder;
int decorateVideo; int scaleVideo;
int timeLineWidthPercent; int decorateVideo;
int timeLineHeightPercent; int timeLineWidthPercent;
int displayChannelName; int timeLineHeightPercent;
int channelHeaderWidthPercent; int displayChannelName;
int channelHeaderHeightPercent; int channelHeaderWidthPercent;
int footerHeightPercent; int channelHeaderHeightPercent;
int stepMinutes; int footerHeightPercent;
int bigStepHours; int stepMinutes;
int hugeStepHours; int bigStepHours;
int channelJumpMode; int bigStepHoursHorizontal;
int jumpChannels; int hugeStepHours;
int blueKeyMode; int hugeStepHoursHorizontal;
int closeOnSwitch; int channelJumpMode;
int numkeyMode; int jumpChannels;
int useRemoteTimers; int blueKeyMode;
int hideLastGroup; int closeOnSwitch;
int hideChannelLogos; int numkeyMode;
int logoWidthRatio; int useRemoteTimers;
int logoHeightRatio; int hideLastGroup;
cString logoPath; int hideChannelLogos;
int logoExtension; int logoWidthRatio;
int hideEpgImages; int logoHeightRatio;
int epgImageWidth; cString logoPath;
int epgImageHeight; int logoExtension;
int numAdditionalEPGPictures; int hideEpgImages;
int epgImageWidthLarge; int epgImageWidth;
int epgImageHeightLarge; int epgImageHeight;
int detailedViewScrollStep; int numAdditionalEPGPictures;
cString epgImagePath; int epgImageWidthLarge;
cString iconPath; int epgImageHeightLarge;
cString logoPathDefault; int detailedViewScrollStep;
cString iconPathDefault; cString epgImagePath;
cString epgImagePathDefault; cString iconPath;
int instRecFolderMode; cString logoPathDefault;
std::string instRecFixedFolder; cString iconPathDefault;
int favWhatsOnNow; cString epgImagePathDefault;
int favWhatsOnNext; int instRecFolderMode;
int favUseTime1; std::string instRecFixedFolder;
int favUseTime2; int favWhatsOnNow;
int favUseTime3; int favWhatsOnNext;
int favUseTime4; int favUseTime1;
int favTime1; int favUseTime2;
int favTime2; int favUseTime3;
int favTime3; int favUseTime4;
int favTime4; int favTime1;
std::string descUser1; int favTime2;
std::string descUser2; int favTime3;
std::string descUser3; int favTime4;
std::string descUser4; std::string descUser1;
int favLimitChannels; std::string descUser2;
int favStartChannel; std::string descUser3;
int favStopChannel; std::string descUser4;
int switchMode; int favLimitChannels;
int switchMinsBefore; int favStartChannel;
int fontIndex; int favStopChannel;
const char *fontNameDefault; int switchMode;
int FontButtonDelta; int switchMinsBefore;
int FontDetailViewDelta; int fontIndex;
int FontDetailViewSmallDelta; const char *fontNameDefault;
int FontDetailHeaderDelta; int FontButtonDelta;
int FontMessageBoxDelta; int FontDetailViewDelta;
int FontMessageBoxLargeDelta; int FontDetailViewSmallDelta;
int FontStatusHeaderDelta; int FontDetailHeaderDelta;
int FontStatusHeaderLargeDelta; int FontMessageBoxDelta;
int FontChannelHeaderDelta; int FontMessageBoxLargeDelta;
int FontChannelGroupsDelta; int FontStatusHeaderDelta;
int FontGridDelta; int FontStatusHeaderLargeDelta;
int FontGridSmallDelta; int FontChannelHeaderDelta;
int FontTimeLineWeekdayDelta; int FontChannelGroupsDelta;
int FontTimeLineDateDelta; int FontGridDelta;
int FontTimeLineTimeDelta; int FontGridSmallDelta;
int FontChannelHeaderHorizontalDelta; int FontTimeLineWeekdayDelta;
int FontChannelGroupsHorizontalDelta; int FontTimeLineDateDelta;
int FontGridHorizontalDelta; int FontTimeLineTimeDelta;
int FontGridHorizontalSmallDelta; int FontChannelHeaderHorizontalDelta;
int FontTimeLineDateHorizontalDelta; int FontChannelGroupsHorizontalDelta;
int FontTimeLineTimeHorizontalDelta; int FontGridHorizontalDelta;
int FontRecMenuItemDelta; int FontGridHorizontalSmallDelta;
int FontRecMenuItemSmallDelta; int FontTimeLineDateHorizontalDelta;
int FontRecMenuItemLargeDelta; int FontTimeLineTimeHorizontalDelta;
int timeFormat; int FontRecMenuItemDelta;
int useNopacityTheme; int FontRecMenuItemSmallDelta;
int themeIndex; int FontRecMenuItemLargeDelta;
int themeIndexCurrent; int timeFormat;
cString themeName; int useNopacityTheme;
std::string nOpacityTheme; int useNopacityThemeCurrent;
int style; int themeIndex;
int roundedCorners; int themeIndexCurrent;
int displayRerunsDetailEPGView; cString themeName;
int numReruns; std::string nOpacityTheme;
int useSubtitleRerun; int style;
int numLogosInitial; int roundedCorners;
int numLogosMax; int displayRerunsDetailEPGView;
int limitLogoCache; int numReruns;
bool logoPathSet; int useSubtitleRerun;
bool imagesPathSet; int numLogosInitial;
bool iconsPathSet; int numLogosMax;
bool LoadTheme(); int limitLogoCache;
void SetStyle(void); bool logoPathSet;
void setDynamicValues(void); bool imagesPathSet;
void SetLogoPath(cString path); bool iconsPathSet;
void SetImagesPath(cString path); bool LoadTheme();
void SetIconsPath(cString path); void SetStyle(void);
void SetDefaultPathes(void); void setDynamicValues(void);
bool SetupParse(const char *Name, const char *Value); void SetLogoPath(cString path);
}; void SetImagesPath(cString path);
void SetIconsPath(cString path);
#ifdef DEFINE_CONFIG void SetDefaultPathes(void);
cTvguideConfig tvguideConfig; bool SetupParse(const char *Name, const char *Value);
cOsdManager osdManager; };
cGeometryManager geoManager;
cFontManager fontManager; #ifdef DEFINE_CONFIG
cImageCache imgCache; cTVGuideConfig config;
cTheme theme; cOsdManager osdManager;
cPlugin* pRemoteTimers = NULL; cGeometryManager geoManager;
#else cFontManager fontManager;
extern cTvguideConfig tvguideConfig; cImageCache imgCache;
extern cOsdManager osdManager; cTheme theme;
extern cGeometryManager geoManager; cPlugin* pRemoteTimers = NULL;
extern cFontManager fontManager; #else
extern cImageCache imgCache; extern cTVGuideConfig config;
extern cTheme theme; extern cOsdManager osdManager;
extern cPlugin* pRemoteTimers; extern cGeometryManager geoManager;
#endif extern cFontManager fontManager;
extern cImageCache imgCache;
extern cTheme theme;
// --- Theme ------------------------------------------------------------- extern cPlugin* pRemoteTimers;
//Style SETUP #endif
#define CLR_STYLE_BLENDING_MAGICK 0xFFFFFFFF
#define CLR_STYLE_BLENDING_DEFAULT 0xAAAAAAAA
#define CLR_STYLE_GRAPHICAL 0x66666666 // --- Theme -------------------------------------------------------------
#define CLR_STYLE_FLAT 0x00000000 //Style SETUP
#define CLR_STYLE_BLENDING_MAGICK 0xFFFFFFFF
THEME_CLR(theme, clrStyle, CLR_STYLE_BLENDING_DEFAULT); #define CLR_STYLE_BLENDING_DEFAULT 0xAAAAAAAA
THEME_CLR(theme, clrBackgroundOSD, 0xB012273f); #define CLR_STYLE_GRAPHICAL 0x66666666
THEME_CLR(theme, clrBackground, 0xFF12273f); #define CLR_STYLE_FLAT 0x00000000
THEME_CLR(theme, clrGrid1, 0x00000000);
THEME_CLR(theme, clrGrid1Blending, 0x00000000); THEME_CLR(theme, clrStyle, CLR_STYLE_BLENDING_DEFAULT);
THEME_CLR(theme, clrGrid2, 0x00000000); THEME_CLR(theme, clrBackgroundOSD, 0xB012273f);
THEME_CLR(theme, clrGrid2Blending, 0x00000000); THEME_CLR(theme, clrBackground, 0xFF12273f);
THEME_CLR(theme, clrHighlight, 0xAA3A3A55); THEME_CLR(theme, clrGrid1, 0x00000000);
THEME_CLR(theme, clrHighlightBlending, 0xDD000000); THEME_CLR(theme, clrGrid1Blending, 0x00000000);
THEME_CLR(theme, clrGridFontBack, clrTransparent); THEME_CLR(theme, clrGrid2, 0x00000000);
THEME_CLR(theme, clrGridActiveFontBack, 0xFFAFD533); THEME_CLR(theme, clrGrid2Blending, 0x00000000);
THEME_CLR(theme, clrFont, clrWhite); THEME_CLR(theme, clrHighlight, 0xAA3A3A55);
THEME_CLR(theme, clrFontActive, 0xFF363636); THEME_CLR(theme, clrHighlightBlending, 0xDD000000);
THEME_CLR(theme, clrFontHeader, 0xFF363636); THEME_CLR(theme, clrGridFontBack, clrTransparent);
THEME_CLR(theme, clrFontButtons, clrWhite); THEME_CLR(theme, clrGridActiveFontBack, 0xFFAFD533);
THEME_CLR(theme, clrStatusHeader, 0x00000000); THEME_CLR(theme, clrFont, clrWhite);
THEME_CLR(theme, clrStatusHeaderBlending, 0x00000000); THEME_CLR(theme, clrFontActive, 0xFF363636);
THEME_CLR(theme, clrHeader, 0x00000000); THEME_CLR(theme, clrFontHeader, 0xFF363636);
THEME_CLR(theme, clrHeaderBlending, 0x00000000); THEME_CLR(theme, clrFontButtons, clrWhite);
THEME_CLR(theme, clrBorder, 0x00000000); THEME_CLR(theme, clrStatusHeader, 0x00000000);
THEME_CLR(theme, clrTimeline1, clrWhite); THEME_CLR(theme, clrStatusHeaderBlending, 0x00000000);
THEME_CLR(theme, clrTimeline1Blending, 0xFF828282); THEME_CLR(theme, clrHeader, 0x00000000);
THEME_CLR(theme, clrTimeline2, clrBlack); THEME_CLR(theme, clrHeaderBlending, 0x00000000);
THEME_CLR(theme, clrTimeline2Blending, 0xFF3F3F3F); THEME_CLR(theme, clrBorder, 0x00000000);
THEME_CLR(theme, clrTimeBase, 0xA0FF0000); THEME_CLR(theme, clrTimeline1, clrWhite);
THEME_CLR(theme, clrTabInactive, 0xA01F3D7A); THEME_CLR(theme, clrTimeline1Blending, 0xFF828282);
THEME_CLR(theme, clrButtonRed, 0xFFFF0000); THEME_CLR(theme, clrTimeline2, clrBlack);
THEME_CLR(theme, clrButtonRedBorder, 0x00000000); THEME_CLR(theme, clrTimeline2Blending, 0xFF3F3F3F);
THEME_CLR(theme, clrButtonGreen, 0x00000000); THEME_CLR(theme, clrTimeBase, 0xA0FF0000);
THEME_CLR(theme, clrButtonGreenBorder, 0x00000000); THEME_CLR(theme, clrTabInactive, 0xA01F3D7A);
THEME_CLR(theme, clrButtonYellow, 0x00000000); THEME_CLR(theme, clrButtonRed, 0xFFFF0000);
THEME_CLR(theme, clrButtonYellowBorder, 0x00000000); THEME_CLR(theme, clrButtonRedBorder, 0x00000000);
THEME_CLR(theme, clrButtonBlue, 0x00000000); THEME_CLR(theme, clrButtonGreen, 0x00000000);
THEME_CLR(theme, clrButtonBlueBorder, 0x00000000); THEME_CLR(theme, clrButtonGreenBorder, 0x00000000);
THEME_CLR(theme, clrButtonBlend, 0xDD000000); THEME_CLR(theme, clrButtonYellow, 0x00000000);
THEME_CLR(theme, clrRecMenuBackground, 0xAA000000); THEME_CLR(theme, clrButtonYellowBorder, 0x00000000);
THEME_CLR(theme, clrRecMenuTimerConflictBackground, 0xFFCCCCCC); THEME_CLR(theme, clrButtonBlue, 0x00000000);
THEME_CLR(theme, clrRecMenuTimerConflictBar, 0xFF222222); THEME_CLR(theme, clrButtonBlueBorder, 0x00000000);
THEME_CLR(theme, clrRecMenuTimerConflictOverlap, 0xAAFF0000); THEME_CLR(theme, clrButtonBlend, 0xDD000000);
THEME_CLR(theme, clrRecMenuDayActive, 0xFF00FF00); THEME_CLR(theme, clrRecMenuBackground, 0xAA000000);
THEME_CLR(theme, clrRecMenuDayInactive, 0xFFFF0000); THEME_CLR(theme, clrRecMenuTimerConflictBackground, 0xFFCCCCCC);
THEME_CLR(theme, clrRecMenuDayHighlight, 0x44FFFFFF); THEME_CLR(theme, clrRecMenuTimerConflictBar, 0xFF222222);
THEME_CLR(theme, clrRecMenuTextBack, 0xFF000000); THEME_CLR(theme, clrRecMenuTimerConflictOverlap, 0xAAFF0000);
THEME_CLR(theme, clrRecMenuTextActiveBack, 0xFF939376); THEME_CLR(theme, clrRecMenuDayActive, 0xFF00FF00);
THEME_CLR(theme, clrRecMenuKeyboardBack, 0xFF000000); THEME_CLR(theme, clrRecMenuDayInactive, 0xFFFF0000);
THEME_CLR(theme, clrRecMenuKeyboardBorder, clrWhite); THEME_CLR(theme, clrRecMenuDayHighlight, 0x44FFFFFF);
THEME_CLR(theme, clrRecMenuKeyboardHigh, 0x40BB0000); THEME_CLR(theme, clrRecMenuTextBack, 0xFF000000);
THEME_CLR(theme, clrButtonRedKeyboard, 0xFFBB0000); THEME_CLR(theme, clrRecMenuTextActiveBack, 0xFF939376);
THEME_CLR(theme, clrButtonGreenKeyboard, 0xFF00BB00); THEME_CLR(theme, clrRecMenuKeyboardBack, 0xFF000000);
THEME_CLR(theme, clrButtonYellowKeyboard, 0xFFBBBB00); THEME_CLR(theme, clrRecMenuKeyboardBorder, clrWhite);
THEME_CLR(theme, clrRecMenuTimelineTimer, 0xB012273f); THEME_CLR(theme, clrRecMenuKeyboardHigh, 0x40BB0000);
THEME_CLR(theme, clrRecMenuTimelineBack, 0xFF828282); THEME_CLR(theme, clrButtonRedKeyboard, 0xFFBB0000);
THEME_CLR(theme, clrRecMenuTimelineActive, 0xFF3F3F3F); THEME_CLR(theme, clrButtonGreenKeyboard, 0xFF00BB00);
THEME_CLR(theme, clrRecMenuTimelineConflict, 0x30FF0000); THEME_CLR(theme, clrButtonYellowKeyboard, 0xFFBBBB00);
THEME_CLR(theme, clrRecMenuTimelineConflictOverlap, 0x90FF0000); THEME_CLR(theme, clrRecMenuTimelineTimer, 0xB012273f);
#endif //__TVGUIDE_CONFIG_H THEME_CLR(theme, clrRecMenuTimelineBack, 0xFF828282);
THEME_CLR(theme, clrRecMenuTimelineActive, 0xFF3F3F3F);
THEME_CLR(theme, clrRecMenuTimelineConflict, 0x30FF0000);
THEME_CLR(theme, clrRecMenuTimelineConflictOverlap, 0x90FF0000);
#endif //__TVGUIDE_CONFIG_H

View File

@@ -1,12 +1,12 @@
#include "detailview.h" #include "detailview.h"
cDetailView::cDetailView(const cEvent *event, cFooter *footer) { cDetailView::cDetailView(const cEvent *event, cFooter *footer) : cThread("DetailView") {
this->event = event; this->event = event;
this->footer = footer; this->footer = footer;
} }
cDetailView::~cDetailView(void){ cDetailView::~cDetailView(void){
Cancel(-1); Cancel(3);
while (Active()) while (Active())
cCondWait::SleepMs(10); cCondWait::SleepMs(10);
#if VDRVERSNUM >= 20301 #if VDRVERSNUM >= 20301
@@ -74,8 +74,8 @@ std::string cDetailView::LoadReruns(void) {
Epgsearch_searchresults_v1_0 data; Epgsearch_searchresults_v1_0 data;
std::string strQuery = event->Title(); std::string strQuery = event->Title();
if (tvguideConfig.displayRerunsDetailEPGView > 0) { if (config.displayRerunsDetailEPGView > 0) {
if (tvguideConfig.useSubtitleRerun == 2 && !isempty(event->ShortText())) { if (config.useSubtitleRerun == 2 && !isempty(event->ShortText())) {
strQuery += "~"; strQuery += "~";
strQuery += event->ShortText(); strQuery += event->ShortText();
} }
@@ -95,7 +95,7 @@ std::string cDetailView::LoadReruns(void) {
if (list && (list->Count() > 1)) { if (list && (list->Count() > 1)) {
foundRerun = true; foundRerun = true;
int i = 0; int i = 0;
for (Epgsearch_searchresults_v1_0::cServiceSearchResult *r = list->First(); r && i < tvguideConfig.numReruns; r = list->Next(r)) { for (Epgsearch_searchresults_v1_0::cServiceSearchResult *r = list->First(); r && i < config.numReruns; r = list->Next(r)) {
if ((event->ChannelID() == r->event->ChannelID()) && (event->StartTime() == r->event->StartTime())) if ((event->ChannelID() == r->event->ChannelID()) && (event->StartTime() == r->event->StartTime()))
continue; continue;
i++; i++;
@@ -171,4 +171,4 @@ eOSState cDetailView::ProcessKey(eKeys Key) {
break; break;
} }
return state; return state;
} }

View File

@@ -25,4 +25,4 @@ public:
eOSState ProcessKey(eKeys Key); eOSState ProcessKey(eKeys Key);
}; };
#endif //__TVGUIDE_DETAILVIEW_H #endif //__TVGUIDE_DETAILVIEW_H

View File

@@ -1,6 +1,6 @@
#include "dummygrid.h" #include "dummygrid.h"
cDummyGrid::cDummyGrid(cChannelColumn *c, time_t start, time_t end) : cGrid(c) { cDummyGrid::cDummyGrid(cChannelEpg *c, time_t start, time_t end) : cGridElement(c) {
this->start = start; this->start = start;
this->end = end; this->end = end;
strText = tr("No EPG Information available"); strText = tr("No EPG Information available");
@@ -27,7 +27,7 @@ void cDummyGrid::SetViewportHeight() {
void cDummyGrid::PositionPixmap() { void cDummyGrid::PositionPixmap() {
int x0, y0; int x0, y0;
if (tvguideConfig.displayMode == eVertical) { if (config.displayMode == eVertical) {
x0 = column->getX(); x0 = column->getX();
y0 = geoManager.statusHeaderHeight + geoManager.channelHeaderHeight + geoManager.channelGroupsHeight; y0 = geoManager.statusHeaderHeight + geoManager.channelHeaderHeight + geoManager.channelGroupsHeight;
if ( column->Start() < StartTime() ) { if ( column->Start() < StartTime() ) {
@@ -41,7 +41,7 @@ void cDummyGrid::PositionPixmap() {
} else { } else {
pixmap->SetViewPort(cRect(x0, y0, geoManager.colWidth, viewportHeight)); pixmap->SetViewPort(cRect(x0, y0, geoManager.colWidth, viewportHeight));
} }
} else if (tvguideConfig.displayMode == eHorizontal) { } else if (config.displayMode == eHorizontal) {
x0 = geoManager.channelHeaderWidth + geoManager.channelGroupsWidth; x0 = geoManager.channelHeaderWidth + geoManager.channelGroupsWidth;
y0 = column->getY(); y0 = column->getY();
if ( column->Start() < StartTime() ) { if ( column->Start() < StartTime() ) {
@@ -59,7 +59,7 @@ void cDummyGrid::PositionPixmap() {
} }
void cDummyGrid::setText() { void cDummyGrid::setText() {
if (tvguideConfig.displayMode == eVertical) { if (config.displayMode == eVertical) {
text->Set(*strText, fontManager.FontGrid, geoManager.colWidth-2*borderWidth); text->Set(*strText, fontManager.FontGrid, geoManager.colWidth-2*borderWidth);
} }
} }
@@ -67,13 +67,13 @@ void cDummyGrid::setText() {
void cDummyGrid::drawText() { void cDummyGrid::drawText() {
tColor colorText = (active)?theme.Color(clrFontActive):theme.Color(clrFont); tColor colorText = (active)?theme.Color(clrFontActive):theme.Color(clrFont);
tColor colorTextBack; tColor colorTextBack;
if (tvguideConfig.style == eStyleFlat) if (config.style == eStyleFlat)
colorTextBack = color; colorTextBack = color;
else if (tvguideConfig.style == eStyleGraphical) else if (config.style == eStyleGraphical)
colorTextBack = (active)?theme.Color(clrGridActiveFontBack):theme.Color(clrGridFontBack); colorTextBack = (active)?theme.Color(clrGridActiveFontBack):theme.Color(clrGridFontBack);
else else
colorTextBack = clrTransparent; colorTextBack = clrTransparent;
if (tvguideConfig.displayMode == eVertical) { if (config.displayMode == eVertical) {
if (Height()/geoManager.minutePixel < 6) if (Height()/geoManager.minutePixel < 6)
return; return;
int textHeight = fontManager.FontGrid->Height(); int textHeight = fontManager.FontGrid->Height();
@@ -82,7 +82,7 @@ void cDummyGrid::drawText() {
pixmap->DrawText(cPoint(borderWidth, borderWidth + i*textHeight), text->GetLine(i), colorText, colorTextBack, fontManager.FontGrid); pixmap->DrawText(cPoint(borderWidth, borderWidth + i*textHeight), text->GetLine(i), colorText, colorTextBack, fontManager.FontGrid);
} }
} else if (tvguideConfig.displayMode == eHorizontal) { } else if (config.displayMode == eHorizontal) {
if (Width()/geoManager.minutePixel < 10) { if (Width()/geoManager.minutePixel < 10) {
int titleY = (geoManager.rowHeight - fontManager.FontGridHorizontal->Height())/2; int titleY = (geoManager.rowHeight - fontManager.FontGridHorizontal->Height())/2;
pixmap->DrawText(cPoint(borderWidth - 2, titleY), "...", colorText, colorTextBack, fontManager.FontGridHorizontal); pixmap->DrawText(cPoint(borderWidth - 2, titleY), "...", colorText, colorTextBack, fontManager.FontGridHorizontal);
@@ -103,9 +103,9 @@ cString cDummyGrid::getTimeString(void) {
void cDummyGrid::debug() { void cDummyGrid::debug() {
esyslog("tvguide dummygrid: %s: %s, %s, viewportHeight: %d px, Duration: %ld min, active: %d", esyslog("tvguide dummygrid: %s: %s, %s, viewportHeight: %d px, Duration: %ld min, active: %d",
column->Name(), column->Name(),
*cMyTime::printTime(start), *cTimeManager::printTime(start),
*cMyTime::printTime(end), *cTimeManager::printTime(end),
viewportHeight, viewportHeight,
Duration()/60, Duration()/60,
active); active);
} }

View File

@@ -1,12 +1,12 @@
#ifndef __TVGUIDE_DUMMYGRID_H #ifndef __TVGUIDE_DUMMYGRID_H
#define __TVGUIDE_DUMMYGRID_H #define __TVGUIDE_DUMMYGRID_H
#include "grid.h" #include "gridelement.h"
#include "channelcolumn.h" #include "channelepg.h"
// --- cDummyGrid ------------------------------------------------------------- // --- cDummyGrid -------------------------------------------------------------
class cDummyGrid : public cGrid { class cDummyGrid : public cGridElement {
private: private:
time_t start; time_t start;
time_t end; time_t end;
@@ -14,7 +14,7 @@ private:
void drawText(); void drawText();
time_t Duration(void); time_t Duration(void);
public: public:
cDummyGrid(cChannelColumn *c, time_t start, time_t end); cDummyGrid(cChannelEpg *c, time_t start, time_t end);
virtual ~cDummyGrid(void); virtual ~cDummyGrid(void);
void SetViewportHeight(); void SetViewportHeight();
void PositionPixmap(); void PositionPixmap();
@@ -24,11 +24,11 @@ public:
time_t EndTime() { return end; }; time_t EndTime() { return end; };
void SetStartTime(time_t start) { this->start = start; }; void SetStartTime(time_t start) { this->start = start; };
void SetEndTime(time_t end) { this->end = end; }; void SetEndTime(time_t end) { this->end = end; };
int calcOverlap(cGrid *neighbor); int calcOverlap(cGridElement *neighbor);
void setTimer() {}; void setTimer() {};
cString getText(void); cString getText(void);
cString getTimeString(void); cString getTimeString(void);
void debug(); void debug();
}; };
#endif //__TVGUIDE_DUMMYGRID_H #endif //__TVGUIDE_DUMMYGRID_H

391
epggrid.c
View File

@@ -1,194 +1,197 @@
#include "services/remotetimers.h" #include "services/remotetimers.h"
#include "channelcolumn.h" #include "channelepg.h"
#include "tools.h" #include "tools.h"
#include "epggrid.h" #include "epggrid.h"
cEpgGrid::cEpgGrid(cChannelColumn *c, const cEvent *event) : cGrid(c) { cEpgGrid::cEpgGrid(cChannelEpg *c, const cEvent *event) : cGridElement(c) {
this->event = event; this->event = event;
extText = new cTextWrapper(); extText = new cTextWrapper();
hasTimer = false; hasTimer = false;
SetTimer(); SetTimer();
hasSwitchTimer = false; hasSwitchTimer = false;
SetSwitchTimer(); SetSwitchTimer();
dummy = false; dummy = false;
} }
cEpgGrid::~cEpgGrid(void) { cEpgGrid::~cEpgGrid(void) {
delete extText; delete extText;
} }
void cEpgGrid::SetViewportHeight() { void cEpgGrid::SetViewportHeight() {
int viewportHeightOld = viewportHeight; int viewportHeightOld = viewportHeight;
if ( column->Start() > StartTime() ) { if ( column->Start() > StartTime() ) {
viewportHeight = (min((int)EndTime(), column->Stop()) - column->Start()) /60; viewportHeight = (min((int)EndTime(), column->Stop()) - column->Start()) /60;
} else if ( column->Stop() < EndTime() ) { } else if ( column->Stop() < EndTime() ) {
viewportHeight = (column->Stop() - StartTime()) /60; viewportHeight = (column->Stop() - StartTime()) /60;
if (viewportHeight < 0) viewportHeight = 0; if (viewportHeight < 0) viewportHeight = 0;
} else { } else {
viewportHeight = Duration() / 60; viewportHeight = Duration() / 60;
} }
viewportHeight *= geoManager.minutePixel; viewportHeight *= geoManager.minutePixel;
if (viewportHeight != viewportHeightOld) if (viewportHeight != viewportHeightOld)
dirty = true; dirty = true;
} }
void cEpgGrid::PositionPixmap() { void cEpgGrid::PositionPixmap() {
if (tvguideConfig.displayMode == eVertical) { if (config.displayMode == eVertical) {
int x0 = column->getX(); int x0 = column->getX();
int y0 = geoManager.statusHeaderHeight + geoManager.channelHeaderHeight + geoManager.channelGroupsHeight; int y0 = geoManager.statusHeaderHeight + geoManager.channelHeaderHeight + geoManager.channelGroupsHeight;
if ( column->Start() < StartTime() ) { if ( column->Start() < StartTime() ) {
y0 += (StartTime() - column->Start())/60*geoManager.minutePixel; y0 += (StartTime() - column->Start())/60*geoManager.minutePixel;
} }
if (!pixmap) { if (!pixmap) {
pixmap = osdManager.requestPixmap(-1, cRect(x0, y0, geoManager.colWidth, viewportHeight), pixmap = osdManager.requestPixmap(-1, cRect(x0, y0, geoManager.colWidth, viewportHeight),
cRect(0, 0, geoManager.colWidth, Duration()/60*geoManager.minutePixel)); cRect(0, 0, geoManager.colWidth, Duration()/60*geoManager.minutePixel));
} else { } else {
pixmap->SetViewPort(cRect(x0, y0, geoManager.colWidth, viewportHeight)); pixmap->SetViewPort(cRect(x0, y0, geoManager.colWidth, viewportHeight));
} }
} else if (tvguideConfig.displayMode == eHorizontal) { } else if (config.displayMode == eHorizontal) {
int x0 = geoManager.channelHeaderWidth + geoManager.channelGroupsWidth; int x0 = geoManager.channelHeaderWidth + geoManager.channelGroupsWidth;
int y0 = column->getY(); int y0 = column->getY();
if ( column->Start() < StartTime() ) { if ( column->Start() < StartTime() ) {
x0 += (StartTime() - column->Start())/60*geoManager.minutePixel; x0 += (StartTime() - column->Start())/60*geoManager.minutePixel;
} }
if (!pixmap) { if (!pixmap) {
pixmap = osdManager.requestPixmap(-1, cRect(x0, y0, viewportHeight, geoManager.rowHeight), pixmap = osdManager.requestPixmap(-1, cRect(x0, y0, viewportHeight, geoManager.rowHeight),
cRect(0, 0, Duration()/60*geoManager.minutePixel, geoManager.rowHeight)); cRect(0, 0, Duration()/60*geoManager.minutePixel, geoManager.rowHeight));
} else { } else {
pixmap->SetViewPort(cRect(x0, y0, viewportHeight, geoManager.rowHeight )); pixmap->SetViewPort(cRect(x0, y0, viewportHeight, geoManager.rowHeight ));
} }
} }
} }
void cEpgGrid::SetTimer() { void cEpgGrid::SetTimer() {
hasTimer = false; hasTimer = false;
if (tvguideConfig.useRemoteTimers && pRemoteTimers) { if (config.useRemoteTimers && pRemoteTimers) {
RemoteTimers_Event_v1_0 rt; RemoteTimers_Event_v1_0 rt;
rt.event = event; rt.event = event;
if (pRemoteTimers->Service("RemoteTimers::GetTimerByEvent-v1.0", &rt)) if (pRemoteTimers->Service("RemoteTimers::GetTimerByEvent-v1.0", &rt))
hasTimer = true; hasTimer = true;
#if VDRVERSNUM >= 20301 #if VDRVERSNUM >= 20301
} else { } else {
eTimerMatch TimerMatch = tmNone; eTimerMatch TimerMatch = tmNone;
LOCK_TIMERS_READ; LOCK_TIMERS_READ;
const cTimers *timers = Timers; const cTimers *timers = Timers;
if (timers->GetMatch(event, &TimerMatch) && (TimerMatch == tmFull)) if (timers->GetMatch(event, &TimerMatch) && (TimerMatch == tmFull))
hasTimer = true; hasTimer = true;
#else #else
} else if (column->HasTimer()) { } else if (column->HasTimer()) {
hasTimer = event->HasTimer(); hasTimer = event->HasTimer();
#endif #endif
} }
} }
void cEpgGrid::SetSwitchTimer() { void cEpgGrid::SetSwitchTimer() {
if (column->HasSwitchTimer()) { if (column->HasSwitchTimer()) {
hasSwitchTimer = SwitchTimers.EventInSwitchList(event); hasSwitchTimer = SwitchTimers.EventInSwitchList(event);
} else { } else {
hasSwitchTimer = false; hasSwitchTimer = false;
} }
} }
void cEpgGrid::setText() { void cEpgGrid::setText() {
if (tvguideConfig.displayMode == eVertical) { if (config.displayMode == eVertical) {
cString strText; text->Set(event->Title(), fontManager.FontGrid, geoManager.colWidth - 2 * borderWidth);
strText = cString::sprintf("%s - %s:\n%s", *(event->GetTimeString()), *(event->GetEndTimeString()), event->Title()); extText->Set(event->ShortText(), fontManager.FontGridSmall, geoManager.colWidth - 2 * borderWidth);
text->Set(*(strText), fontManager.FontGrid, geoManager.colWidth-2*borderWidth); }
extText->Set(event->ShortText(), fontManager.FontGridSmall, geoManager.colWidth-2*borderWidth); if (config.showTimeInGrid) {
} else if (tvguideConfig.displayMode == eHorizontal) { timeString = cString::sprintf("%s - %s:", *(event->GetTimeString()), *(event->GetEndTimeString()));
timeString = cString::sprintf("%s - %s", *(event->GetTimeString()), *(event->GetEndTimeString())); }
} }
}
void cEpgGrid::drawText() {
void cEpgGrid::drawText() { tColor colorText = (active) ? theme.Color(clrFontActive) : theme.Color(clrFont);
tColor colorText = (active)?theme.Color(clrFontActive):theme.Color(clrFont); tColor colorTextBack;
tColor colorTextBack; if (config.style == eStyleFlat)
if (tvguideConfig.style == eStyleFlat) colorTextBack = color;
colorTextBack = color; else if (config.style == eStyleGraphical)
else if (tvguideConfig.style == eStyleGraphical) colorTextBack = (active) ? theme.Color(clrGridActiveFontBack) : theme.Color(clrGridFontBack);
colorTextBack = (active)?theme.Color(clrGridActiveFontBack):theme.Color(clrGridFontBack); else
else colorTextBack = clrTransparent;
colorTextBack = clrTransparent; if (config.displayMode == eVertical) {
if (tvguideConfig.displayMode == eVertical) { if (Height() / geoManager.minutePixel < 6)
if (Height()/geoManager.minutePixel < 6) return;
return; int textHeight = fontManager.FontGrid->Height();
int textHeight = fontManager.FontGrid->Height(); int textHeightSmall = fontManager.FontGridSmall->Height();
int textLines = text->Lines(); int textLines = text->Lines();
for (int i=0; i<textLines; i++) { int titleY = borderWidth;
pixmap->DrawText(cPoint(borderWidth, borderWidth + i*textHeight), text->GetLine(i), colorText, colorTextBack, fontManager.FontGrid); if (config.showTimeInGrid) { // mit Zeitangabe im Grid
} pixmap->DrawText(cPoint(borderWidth, borderWidth), *timeString, colorText, colorTextBack, fontManager.FontGridSmall);
int extTextLines = extText->Lines(); titleY += textHeightSmall;
int offset = (textLines+1)*textHeight - 0.5*textHeight; }
textHeight = fontManager.FontGridSmall->Height(); for (int i = 0; i < textLines; i++) {
if ((Height()-textHeight-10) > offset) { pixmap->DrawText(cPoint(borderWidth, titleY + i * textHeight), text->GetLine(i), colorText, colorTextBack, fontManager.FontGrid);
for (int i=0; i<extTextLines; i++) { }
pixmap->DrawText(cPoint(borderWidth, borderWidth + offset + i*textHeight), extText->GetLine(i), colorText, colorTextBack, fontManager.FontGridSmall); int extTextLines = extText->Lines();
} int offset = titleY + (textLines + 0.5) * textHeight;
} if ((Height() - textHeightSmall - 10) > offset) {
} else if (tvguideConfig.displayMode == eHorizontal) { for (int i = 0; i < extTextLines; i++) {
if (Width()/geoManager.minutePixel < 10) { pixmap->DrawText(cPoint(borderWidth, offset + i * textHeightSmall), extText->GetLine(i), colorText, colorTextBack, fontManager.FontGridSmall);
int titleY = (geoManager.rowHeight - fontManager.FontGridHorizontal->Height())/2; }
pixmap->DrawText(cPoint(borderWidth - 2, titleY), "...", colorText, colorTextBack, fontManager.FontGridHorizontal); }
return; } else if (config.displayMode == eHorizontal) {
} cString strTitle = CutText(event->Title(), viewportHeight - borderWidth, fontManager.FontGridHorizontal).c_str();
cString strTitle = CutText(event->Title(), viewportHeight, fontManager.FontGridHorizontal).c_str(); int titleY = 0;
int titleY = 0; if (config.showTimeInGrid) { // mit Zeitangabe im Grid
if (tvguideConfig.showTimeInGrid) { pixmap->DrawText(cPoint(borderWidth, borderWidth), *timeString, colorText, colorTextBack, fontManager.FontGridHorizontalSmall);
pixmap->DrawText(cPoint(borderWidth, borderWidth), *timeString, colorText, colorTextBack, fontManager.FontGridHorizontalSmall); titleY = fontManager.FontGridHorizontalSmall->Height() + (geoManager.rowHeight - fontManager.FontGridHorizontalSmall->Height() - fontManager.FontGridHorizontal->Height()) / 2;
titleY = fontManager.FontGridHorizontalSmall->Height() + (geoManager.rowHeight - fontManager.FontGridHorizontalSmall->Height() - fontManager.FontGridHorizontal->Height())/2; } else {
} else { titleY = (geoManager.rowHeight - fontManager.FontGridHorizontal->Height()) / 2;
titleY = (geoManager.rowHeight - fontManager.FontGridHorizontal->Height())/2; }
} pixmap->DrawText(cPoint(borderWidth, titleY), *strTitle, colorText, colorTextBack, fontManager.FontGridHorizontal);
pixmap->DrawText(cPoint(borderWidth, titleY), *strTitle, colorText, colorTextBack, fontManager.FontGridHorizontal); }
} if (hasSwitchTimer)
if (hasSwitchTimer) drawIcon("Switch", theme.Color(clrButtonYellow));
drawIcon("Switch", theme.Color(clrButtonYellow)); if (hasTimer) {
if (hasTimer) { const cTimer *timer = NULL;
const cTimer *timer = NULL; #if VDRVERSNUM >= 20301
#if VDRVERSNUM >= 20301 {
{ LOCK_TIMERS_READ;
LOCK_TIMERS_READ; timer = Timers->GetMatch(event);
timer = Timers->GetMatch(event); }
} #else
#else timer = Timers.GetMatch(event);
timer = Timers.GetMatch(event); #endif
#endif if (timer)
if (timer) #ifdef SWITCHONLYPATCH
#ifdef SWITCHONLYPATCH if (timer->HasFlags(tfSwitchOnly))
if (timer->HasFlags(tfSwitchOnly)) drawIcon("Switch", theme.Color(clrButtonYellow));
drawIcon("Switch", theme.Color(clrButtonYellow)); else if (timer->HasFlags(tfActive))
else if (timer->HasFlags(tfActive)) #else /* SWITCHONLY */
#else /* SWITCHONLY */ if (timer->HasFlags(tfActive))
if (timer->HasFlags(tfActive)) #endif /* SWITCHONLY */
#endif /* SWITCHONLY */ drawIcon("REC", theme.Color(clrButtonRed));
drawIcon("REC", theme.Color(clrButtonRed)); else
else drawIcon("REC", theme.Color(clrButtonGreen));
drawIcon("REC", theme.Color(clrButtonGreen)); }
} }
}
void cEpgGrid::drawIcon(cString iconText, tColor color) {
void cEpgGrid::drawIcon(cString iconText, tColor color) {
const cFont *font = (config.displayMode == eVertical) ? fontManager.FontGrid : fontManager.FontGridHorizontalSmall;
const cFont *font = (tvguideConfig.displayMode == eVertical) int textWidth = font->Width(*iconText) + 2 * borderWidth;
?fontManager.FontGrid int textHeight = font->Height() + 10;
:fontManager.FontGridHorizontalSmall; if ((config.displayMode == eHorizontal) && ((Width() - 2 * textWidth) < 0))
int textWidth = font->Width(*iconText)+2*borderWidth; pixmap->DrawEllipse( cRect(Width() - textHeight / 2 - borderWidth, Height() - textHeight - borderWidth, textHeight / 2, textHeight / 2), color);
int textHeight = font->Height()+10; else if ((config.displayMode == eVertical) && ((Height() - 2 * textHeight) < 0))
pixmap->DrawRectangle( cRect(Width() - textWidth - borderWidth, Height() - textHeight - borderWidth, textWidth, textHeight), color); pixmap->DrawEllipse( cRect(Width() - textHeight / 2 - borderWidth, borderWidth, textHeight / 2, textHeight / 2), color);
pixmap->DrawText(cPoint(Width() - textWidth, Height() - textHeight - borderWidth/2), *iconText, theme.Color(clrFont), color, font); else {
} pixmap->DrawEllipse( cRect(Width() - textWidth - borderWidth, Height() - textHeight - borderWidth, textWidth, textHeight), color);
pixmap->DrawText(cPoint(Width() - textWidth, Height() - textHeight - borderWidth / 2), *iconText, theme.Color(clrFont), clrTransparent, font);
cString cEpgGrid::getTimeString(void) { }
return cString::sprintf("%s - %s", *(event->GetTimeString()), *(event->GetEndTimeString())); }
}
cString cEpgGrid::getTimeString(void) {
void cEpgGrid::debug() { return cString::sprintf("%s - %s", *(event->GetTimeString()), *(event->GetEndTimeString()));
esyslog("tvguide epggrid: %s: %s, %s, viewportHeight: %d px, Duration: %d min, active: %d", }
column->Name(),
*(event->GetTimeString()), void cEpgGrid::debug() {
event->Title(), esyslog("tvguide epggrid: %s: %s, %s, viewportHeight: %d px, Duration: %d min, active: %d",
viewportHeight, column->Name(),
event->Duration()/60, *(event->GetTimeString()),
active); event->Title(),
} viewportHeight,
event->Duration()/60,
active);
}

View File

@@ -1,33 +1,33 @@
#ifndef __TVGUIDE_EPGGRID_H #ifndef __TVGUIDE_EPGGRID_H
#define __TVGUIDE_EPGGRID_H #define __TVGUIDE_EPGGRID_H
#include <vdr/epg.h> #include <vdr/epg.h>
#include "grid.h" #include "gridelement.h"
// --- cEpgGrid ------------------------------------------------------------- // --- cEpgGrid -------------------------------------------------------------
class cEpgGrid : public cGrid { class cEpgGrid : public cGridElement {
private: private:
const cTimer *timer; const cTimer *timer;
const cEvent *event; const cEvent *event;
cTextWrapper *extText; cTextWrapper *extText;
cString timeString; cString timeString;
void drawText(); void drawText();
void drawIcon(cString iconText, tColor color); void drawIcon(cString iconText, tColor color);
time_t Duration(void) { return event->Duration(); }; time_t Duration(void) { return event->Duration(); };
public: public:
cEpgGrid(cChannelColumn *c, const cEvent *event); cEpgGrid(cChannelEpg *c, const cEvent *event);
virtual ~cEpgGrid(void); virtual ~cEpgGrid(void);
void SetViewportHeight(); void SetViewportHeight();
void PositionPixmap(); void PositionPixmap();
void setText(void); void setText(void);
const cEvent *GetEvent() {return event;}; const cEvent *GetEvent() {return event;};
time_t StartTime() { return event->StartTime(); }; time_t StartTime() { return event->StartTime(); };
time_t EndTime() { return event->EndTime(); }; time_t EndTime() { return event->EndTime(); };
void SetTimer(); void SetTimer();
void SetSwitchTimer(); void SetSwitchTimer();
cString getTimeString(void); cString getTimeString(void);
void debug(); void debug();
}; };
#endif //__TVGUIDE_EPGGRID_H #endif //__TVGUIDE_EPGGRID_H

View File

@@ -1,96 +1,96 @@
#include "geometrymanager.h" #include "geometrymanager.h"
#include "config.h" #include "config.h"
#include "fontmanager.h" #include "fontmanager.h"
cFontManager::cFontManager() { cFontManager::cFontManager() {
} }
cFontManager::~cFontManager() { cFontManager::~cFontManager() {
DeleteFonts(); DeleteFonts();
} }
void cFontManager::SetFonts() { void cFontManager::SetFonts() {
InitialiseFontType(); InitialiseFontType();
//Common Fonts //Common Fonts
FontButton = CreateFont(geoManager.footerHeight/3 + 4 + tvguideConfig.FontButtonDelta); FontButton = CreateFont(geoManager.footerHeight/3 + 4 + config.FontButtonDelta);
FontDetailView = CreateFont(geoManager.osdHeight/30 + tvguideConfig.FontDetailViewDelta); FontDetailView = CreateFont(geoManager.osdHeight/30 + config.FontDetailViewDelta);
FontDetailViewSmall = CreateFont(geoManager.osdHeight/40 + tvguideConfig.FontDetailViewSmallDelta); FontDetailViewSmall = CreateFont(geoManager.osdHeight/40 + config.FontDetailViewSmallDelta);
FontDetailHeader = CreateFont(geoManager.osdHeight/27 + tvguideConfig.FontDetailHeaderDelta); FontDetailHeader = CreateFont(geoManager.osdHeight/27 + config.FontDetailHeaderDelta);
FontDetailHeaderLarge = CreateFont(geoManager.osdHeight/20 + tvguideConfig.FontDetailHeaderDelta); FontDetailHeaderLarge = CreateFont(geoManager.osdHeight/20 + config.FontDetailHeaderDelta);
FontMessageBox = CreateFont(geoManager.osdHeight/33 + tvguideConfig.FontMessageBoxDelta); FontMessageBox = CreateFont(geoManager.osdHeight/33 + config.FontMessageBoxDelta);
FontMessageBoxLarge = CreateFont(geoManager.osdHeight/30 + tvguideConfig.FontMessageBoxLargeDelta); FontMessageBoxLarge = CreateFont(geoManager.osdHeight/30 + config.FontMessageBoxLargeDelta);
FontStatusHeader = CreateFont(geoManager.statusHeaderHeight/6 - 4 + tvguideConfig.FontStatusHeaderDelta); FontStatusHeader = CreateFont(geoManager.statusHeaderHeight/6 - 4 + config.FontStatusHeaderDelta);
FontStatusHeaderLarge = CreateFont(geoManager.statusHeaderHeight/5 + tvguideConfig.FontStatusHeaderLargeDelta); FontStatusHeaderLarge = CreateFont(geoManager.statusHeaderHeight/5 + config.FontStatusHeaderLargeDelta);
//Fonts for vertical Display //Fonts for vertical Display
FontChannelHeader = CreateFont(geoManager.colWidth/10 + tvguideConfig.FontChannelHeaderDelta); FontChannelHeader = CreateFont(geoManager.colWidth/10 + config.FontChannelHeaderDelta);
FontChannelGroups = CreateFont(geoManager.colWidth/8 + tvguideConfig.FontChannelGroupsDelta); FontChannelGroups = CreateFont(geoManager.colWidth/8 + config.FontChannelGroupsDelta);
FontGrid = CreateFont(geoManager.colWidth/12 + tvguideConfig.FontGridDelta); FontGrid = CreateFont(geoManager.colWidth/12 + config.FontGridDelta);
FontGridSmall = CreateFont(geoManager.colWidth/12 + tvguideConfig.FontGridSmallDelta); FontGridSmall = CreateFont(geoManager.colWidth/12 + config.FontGridSmallDelta);
FontTimeLineWeekday = CreateFont(geoManager.timeLineWidth/3 + tvguideConfig.FontTimeLineWeekdayDelta); FontTimeLineWeekday = CreateFont(geoManager.timeLineWidth/3 + config.FontTimeLineWeekdayDelta);
FontTimeLineDate = CreateFont(geoManager.timeLineWidth/4 + tvguideConfig.FontTimeLineDateDelta); FontTimeLineDate = CreateFont(geoManager.timeLineWidth/4 + config.FontTimeLineDateDelta);
FontTimeLineTime = CreateFont(geoManager.timeLineWidth/4 + tvguideConfig.FontTimeLineTimeDelta); FontTimeLineTime = CreateFont(geoManager.timeLineWidth/4 + config.FontTimeLineTimeDelta);
//Fonts for horizontal Display //Fonts for horizontal Display
FontChannelHeaderHorizontal = CreateFont(geoManager.rowHeight/3 + tvguideConfig.FontChannelHeaderHorizontalDelta); FontChannelHeaderHorizontal = CreateFont(geoManager.rowHeight/3 + config.FontChannelHeaderHorizontalDelta);
FontChannelGroupsHorizontal = CreateFont(geoManager.rowHeight/3 + 5 + tvguideConfig.FontChannelGroupsHorizontalDelta); FontChannelGroupsHorizontal = CreateFont(geoManager.rowHeight/3 + 5 + config.FontChannelGroupsHorizontalDelta);
FontGridHorizontal = CreateFont(geoManager.rowHeight/3 + 5 + tvguideConfig.FontGridHorizontalDelta); FontGridHorizontal = CreateFont(geoManager.rowHeight/3 + 5 + config.FontGridHorizontalDelta);
FontGridHorizontalSmall = CreateFont(geoManager.rowHeight/4 + tvguideConfig.FontGridHorizontalSmallDelta); FontGridHorizontalSmall = CreateFont(geoManager.rowHeight/4 + config.FontGridHorizontalSmallDelta);
FontTimeLineDateHorizontal = CreateFont(geoManager.timeLineHeight/2 + 5 + tvguideConfig.FontTimeLineDateHorizontalDelta); FontTimeLineDateHorizontal = CreateFont(geoManager.timeLineHeight/2 + 5 + config.FontTimeLineDateHorizontalDelta);
FontTimeLineTimeHorizontal = CreateFont(geoManager.timeLineHeight/2 + tvguideConfig.FontTimeLineTimeHorizontalDelta); FontTimeLineTimeHorizontal = CreateFont(geoManager.timeLineHeight/2 + config.FontTimeLineTimeHorizontalDelta);
//Fonts for RecMenu //Fonts for RecMenu
FontRecMenuItem = CreateFont(geoManager.osdHeight/30 + tvguideConfig.FontRecMenuItemDelta); FontRecMenuItem = CreateFont(geoManager.osdHeight/30 + config.FontRecMenuItemDelta);
FontRecMenuItemSmall = CreateFont(geoManager.osdHeight/40 + tvguideConfig.FontRecMenuItemSmallDelta); FontRecMenuItemSmall = CreateFont(geoManager.osdHeight/40 + config.FontRecMenuItemSmallDelta);
FontRecMenuItemLarge = CreateFont(geoManager.osdHeight/25 + tvguideConfig.FontRecMenuItemLargeDelta); FontRecMenuItemLarge = CreateFont(geoManager.osdHeight/25 + config.FontRecMenuItemLargeDelta);
} }
void cFontManager::DeleteFonts() { void cFontManager::DeleteFonts() {
delete FontButton; delete FontButton;
delete FontDetailView; delete FontDetailView;
delete FontDetailViewSmall; delete FontDetailViewSmall;
delete FontDetailHeader; delete FontDetailHeader;
delete FontDetailHeaderLarge; delete FontDetailHeaderLarge;
delete FontMessageBox; delete FontMessageBox;
delete FontMessageBoxLarge; delete FontMessageBoxLarge;
delete FontStatusHeader; delete FontStatusHeader;
delete FontStatusHeaderLarge; delete FontStatusHeaderLarge;
delete FontChannelHeader; delete FontChannelHeader;
delete FontChannelGroups; delete FontChannelGroups;
delete FontGrid; delete FontGrid;
delete FontGridSmall; delete FontGridSmall;
delete FontTimeLineWeekday; delete FontTimeLineWeekday;
delete FontTimeLineDate; delete FontTimeLineDate;
delete FontTimeLineTime; delete FontTimeLineTime;
delete FontChannelHeaderHorizontal; delete FontChannelHeaderHorizontal;
delete FontChannelGroupsHorizontal; delete FontChannelGroupsHorizontal;
delete FontGridHorizontal; delete FontGridHorizontal;
delete FontGridHorizontalSmall; delete FontGridHorizontalSmall;
delete FontTimeLineDateHorizontal; delete FontTimeLineDateHorizontal;
delete FontTimeLineTimeHorizontal; delete FontTimeLineTimeHorizontal;
delete FontRecMenuItem; delete FontRecMenuItem;
delete FontRecMenuItemSmall; delete FontRecMenuItemSmall;
delete FontRecMenuItemLarge; delete FontRecMenuItemLarge;
} }
void cFontManager::InitialiseFontType(void) { void cFontManager::InitialiseFontType(void) {
if (tvguideConfig.fontIndex == 0) { if (config.fontIndex == 0) {
fontName = tvguideConfig.fontNameDefault; fontName = config.fontNameDefault;
} else { } else {
cStringList availableFonts; cStringList availableFonts;
cFont::GetAvailableFontNames(&availableFonts); cFont::GetAvailableFontNames(&availableFonts);
if (availableFonts[tvguideConfig.fontIndex-1]) { if (availableFonts[config.fontIndex-1]) {
fontName = availableFonts[tvguideConfig.fontIndex-1]; fontName = availableFonts[config.fontIndex-1];
} else } else
fontName = tvguideConfig.fontNameDefault; fontName = config.fontNameDefault;
} }
cFont *test = NULL; cFont *test = NULL;
test = cFont::CreateFont(*fontName, 30); test = cFont::CreateFont(*fontName, 30);
if (!test) { if (!test) {
fontName = DefaultFontSml; fontName = DefaultFontSml;
} }
delete test; delete test;
esyslog("tvguide: Set Font to %s", *fontName); esyslog("tvguide: Set Font to %s", *fontName);
} }
cFont *cFontManager::CreateFont(int size) { cFont *cFontManager::CreateFont(int size) {
return cFont::CreateFont(*fontName, size); return cFont::CreateFont(*fontName, size);
} }

View File

@@ -1,41 +1,41 @@
#ifndef __TVGUIDE_FONTMANAGER_H #ifndef __TVGUIDE_FONTMANAGER_H
#define __TVGUIDE_FONTMANAGER_H #define __TVGUIDE_FONTMANAGER_H
#include <vdr/skins.h> #include <vdr/skins.h>
class cFontManager { class cFontManager {
cString fontName; cString fontName;
void InitialiseFontType(void); void InitialiseFontType(void);
cFont *CreateFont(int size); cFont *CreateFont(int size);
public: public:
cFontManager(); cFontManager();
~cFontManager(); ~cFontManager();
void SetFonts(void); void SetFonts(void);
void DeleteFonts(void); void DeleteFonts(void);
cFont *FontChannelHeader; cFont *FontChannelHeader;
cFont *FontChannelHeaderHorizontal; cFont *FontChannelHeaderHorizontal;
cFont *FontChannelGroups; cFont *FontChannelGroups;
cFont *FontChannelGroupsHorizontal; cFont *FontChannelGroupsHorizontal;
cFont *FontStatusHeader; cFont *FontStatusHeader;
cFont *FontStatusHeaderLarge; cFont *FontStatusHeaderLarge;
cFont *FontGrid; cFont *FontGrid;
cFont *FontGridSmall; cFont *FontGridSmall;
cFont *FontGridHorizontal; cFont *FontGridHorizontal;
cFont *FontGridHorizontalSmall; cFont *FontGridHorizontalSmall;
cFont *FontTimeLineWeekday; cFont *FontTimeLineWeekday;
cFont *FontTimeLineDate; cFont *FontTimeLineDate;
cFont *FontTimeLineDateHorizontal; cFont *FontTimeLineDateHorizontal;
cFont *FontTimeLineTime; cFont *FontTimeLineTime;
cFont *FontTimeLineTimeHorizontal; cFont *FontTimeLineTimeHorizontal;
cFont *FontButton; cFont *FontButton;
cFont *FontDetailView; cFont *FontDetailView;
cFont *FontDetailViewSmall; cFont *FontDetailViewSmall;
cFont *FontDetailHeader; cFont *FontDetailHeader;
cFont *FontDetailHeaderLarge; cFont *FontDetailHeaderLarge;
cFont *FontMessageBox; cFont *FontMessageBox;
cFont *FontMessageBoxLarge; cFont *FontMessageBoxLarge;
cFont *FontRecMenuItem; cFont *FontRecMenuItem;
cFont *FontRecMenuItemSmall; cFont *FontRecMenuItemSmall;
cFont *FontRecMenuItemLarge; cFont *FontRecMenuItemLarge;
}; };
#endif //__TVGUIDE_FONTMANAGER_H #endif //__TVGUIDE_FONTMANAGER_H

334
footer.c
View File

@@ -1,167 +1,167 @@
#include <string> #include <string>
#include "imageloader.h" #include "imageloader.h"
#include "tools.h" #include "tools.h"
#include "footer.h" #include "footer.h"
cFooter::cFooter(cChannelGroups *channelGroups) { cFooter::cFooter(cChannelGroups *channelGroups) {
this->channelGroups = channelGroups; this->channelGroups = channelGroups;
currentGroup = -1; currentGroup = -1;
buttonY = (geoManager.footerHeight - geoManager.buttonHeight)/2; buttonY = (geoManager.footerHeight - geoManager.buttonHeight)/2;
SetButtonPositions(); SetButtonPositions();
footer = osdManager.requestPixmap(2, cRect( 0, footer = osdManager.requestPixmap(2, cRect( 0,
geoManager.footerY, geoManager.footerY,
geoManager.osdWidth, geoManager.osdWidth,
geoManager.footerHeight), geoManager.footerHeight),
cRect::Null); cRect::Null);
footer->Fill(clrTransparent); footer->Fill(clrTransparent);
} }
cFooter::~cFooter(void) { cFooter::~cFooter(void) {
osdManager.releasePixmap(footer); osdManager.releasePixmap(footer);
} }
void cFooter::drawRedButton() { void cFooter::drawRedButton() {
cString text(tr("Search & Rec")); cString text(tr("Search & Rec"));
DrawButton(*text, theme.Color(clrButtonRed), theme.Color(clrButtonRedBorder), oeButtonRed, positionButtons[0]); DrawButton(*text, theme.Color(clrButtonRed), theme.Color(clrButtonRedBorder), oeButtonRed, positionButtons[0]);
} }
void cFooter::drawGreenButton() { void cFooter::drawGreenButton() {
cString text = cString::sprintf("%d %s", tvguideConfig.jumpChannels, tr("Channels back")); cString text = cString::sprintf("%d %s", config.jumpChannels, tr("Channels back"));
DrawButton(*text, theme.Color(clrButtonGreen), theme.Color(clrButtonGreenBorder), oeButtonGreen, positionButtons[1]); DrawButton(*text, theme.Color(clrButtonGreen), theme.Color(clrButtonGreenBorder), oeButtonGreen, positionButtons[1]);
} }
void cFooter::drawGreenButton(const char *text) { void cFooter::drawGreenButton(const char *text) {
std::string cuttedText = CutText(text, geoManager.buttonWidth-6, fontManager.FontButton); std::string cuttedText = CutText(text, geoManager.buttonWidth-6, fontManager.FontButton);
DrawButton(cuttedText.c_str(), theme.Color(clrButtonGreen), theme.Color(clrButtonGreenBorder), oeButtonGreen, positionButtons[1]); DrawButton(cuttedText.c_str(), theme.Color(clrButtonGreen), theme.Color(clrButtonGreenBorder), oeButtonGreen, positionButtons[1]);
} }
void cFooter::drawYellowButton() { void cFooter::drawYellowButton() {
cString text = cString::sprintf("%d %s", tvguideConfig.jumpChannels, tr("Channels forward")); cString text = cString::sprintf("%d %s", config.jumpChannels, tr("Channels forward"));
DrawButton(*text, theme.Color(clrButtonYellow), theme.Color(clrButtonYellowBorder), oeButtonYellow, positionButtons[2]); DrawButton(*text, theme.Color(clrButtonYellow), theme.Color(clrButtonYellowBorder), oeButtonYellow, positionButtons[2]);
} }
void cFooter::drawYellowButton(const char *text) { void cFooter::drawYellowButton(const char *text) {
std::string cuttedText = CutText(text, geoManager.buttonWidth-6, fontManager.FontButton); std::string cuttedText = CutText(text, geoManager.buttonWidth-6, fontManager.FontButton);
DrawButton(cuttedText.c_str(), theme.Color(clrButtonYellow), theme.Color(clrButtonYellowBorder), oeButtonYellow, positionButtons[2]); DrawButton(cuttedText.c_str(), theme.Color(clrButtonYellow), theme.Color(clrButtonYellowBorder), oeButtonYellow, positionButtons[2]);
} }
void cFooter::drawBlueButton(bool detailedEPG) { void cFooter::drawBlueButton(bool detailedEPG) {
cString text; cString text;
if (tvguideConfig.blueKeyMode == eBlueKeySwitch) if (config.blueKeyMode == eBlueKeySwitch)
text = tr("Switch to Channel"); text = tr("Switch to Channel");
else if (tvguideConfig.blueKeyMode == eBlueKeyEPG) { else if (config.blueKeyMode == eBlueKeyEPG) {
if (!detailedEPG) if (!detailedEPG)
text = tr("Detailed EPG"); text = tr("Detailed EPG");
else else
text = tr("Close detailed EPG"); text = tr("Close detailed EPG");
} else if (tvguideConfig.blueKeyMode == eBlueKeyFavorites) { } else if (config.blueKeyMode == eBlueKeyFavorites) {
if (!detailedEPG) if (!detailedEPG)
text = tr("Favorites"); text = tr("Favorites");
else else
text = tr("Switch to Channel"); text = tr("Switch to Channel");
} }
DrawButton(*text, theme.Color(clrButtonBlue), theme.Color(clrButtonBlueBorder), oeButtonBlue, positionButtons[3]); DrawButton(*text, theme.Color(clrButtonBlue), theme.Color(clrButtonBlueBorder), oeButtonBlue, positionButtons[3]);
} }
void cFooter::UpdateGroupButtons(const cChannel *channel, bool force) { void cFooter::UpdateGroupButtons(const cChannel *channel, bool force) {
if (!channel) if (!channel)
return; return;
int group = channelGroups->GetGroup(channel); int group = channelGroups->GetGroup(channel);
if ((group != currentGroup) || force) { if ((group != currentGroup) || force) {
currentGroup = group; currentGroup = group;
drawGreenButton(channelGroups->GetPrev(group)); drawGreenButton(channelGroups->GetPrev(group));
drawYellowButton(channelGroups->GetNext(group)); drawYellowButton(channelGroups->GetNext(group));
} }
} }
void cFooter::SetDetailedViewMode(bool fromRecMenu) { void cFooter::SetDetailedViewMode(bool fromRecMenu) {
ClearButton(positionButtons[1]); ClearButton(positionButtons[1]);
ClearButton(positionButtons[2]); ClearButton(positionButtons[2]);
if (fromRecMenu) { if (fromRecMenu) {
ClearButton(positionButtons[0]); ClearButton(positionButtons[0]);
ClearButton(positionButtons[3]); ClearButton(positionButtons[3]);
} else if (tvguideConfig.blueKeyMode != eBlueKeySwitch) { } else if (config.blueKeyMode != eBlueKeySwitch) {
ClearButton(positionButtons[3]); ClearButton(positionButtons[3]);
drawBlueButton(true); drawBlueButton(true);
} }
} }
void cFooter::LeaveDetailedViewMode(const cChannel *channel) { void cFooter::LeaveDetailedViewMode(const cChannel *channel) {
drawRedButton(); drawRedButton();
drawBlueButton(); drawBlueButton();
if (tvguideConfig.channelJumpMode == eNumJump) { if (config.channelJumpMode == eNumJump) {
drawGreenButton(); drawGreenButton();
drawYellowButton(); drawYellowButton();
} else { } else {
UpdateGroupButtons(channel, true); UpdateGroupButtons(channel, true);
} }
} }
void cFooter::SetButtonPositions(void) { void cFooter::SetButtonPositions(void) {
for (int i=0; i < 4; i++) { for (int i=0; i < 4; i++) {
positionButtons[i] = -1; positionButtons[i] = -1;
} }
/* /*
red button = 0 red button = 0
green button = 1 green button = 1
yellow button = 2 yellow button = 2
blue button = 3 blue button = 3
*/ */
for (int button=0; button<4; button++) { for (int button=0; button<4; button++) {
if (Setup.ColorKey0 == button) { if (Setup.ColorKey0 == button) {
positionButtons[button] = 0; positionButtons[button] = 0;
continue; continue;
} }
if (Setup.ColorKey1 == button) { if (Setup.ColorKey1 == button) {
positionButtons[button] = 1; positionButtons[button] = 1;
continue; continue;
} }
if (Setup.ColorKey2 == button) { if (Setup.ColorKey2 == button) {
positionButtons[button] = 2; positionButtons[button] = 2;
continue; continue;
} }
if (Setup.ColorKey3 == button) { if (Setup.ColorKey3 == button) {
positionButtons[button] = 3; positionButtons[button] = 3;
continue; continue;
} }
} }
} }
void cFooter::DrawButton(const char *text, tColor color, tColor borderColor, eOsdElementType buttonType, int num) { void cFooter::DrawButton(const char *text, tColor color, tColor borderColor, eOsdElementType buttonType, int num) {
tColor colorTextBack = (tvguideConfig.style == eStyleFlat)?color:clrTransparent; tColor colorTextBack = (config.style == eStyleFlat)?color:clrTransparent;
int left = num * geoManager.buttonWidth + (2 * num + 1) * geoManager.buttonBorder; int left = num * geoManager.buttonWidth + (2 * num + 1) * geoManager.buttonBorder;
if ((tvguideConfig.style == eStyleBlendingMagick) || (tvguideConfig.style == eStyleBlendingDefault)) { if ((config.style == eStyleBlendingMagick) || (config.style == eStyleBlendingDefault)) {
cImageLoader imgLoader; cImageLoader imgLoader;
imgLoader.DrawBackground(theme.Color(clrButtonBlend), color, geoManager.buttonWidth-4, geoManager.buttonHeight-4); imgLoader.DrawBackground(theme.Color(clrButtonBlend), color, geoManager.buttonWidth-4, geoManager.buttonHeight-4);
footer->DrawRectangle(cRect(left, buttonY, geoManager.buttonWidth, geoManager.buttonHeight), borderColor); footer->DrawRectangle(cRect(left, buttonY, geoManager.buttonWidth, geoManager.buttonHeight), borderColor);
footer->DrawImage(cPoint(left+2, buttonY+2), imgLoader.GetImage()); footer->DrawImage(cPoint(left+2, buttonY+2), imgLoader.GetImage());
if (tvguideConfig.roundedCorners) { if (config.roundedCorners) {
int borderRadius = 12; int borderRadius = 12;
int borderWidth = 2; int borderWidth = 2;
DrawRoundedCorners(footer, left, buttonY, geoManager.buttonWidth, geoManager.buttonHeight, borderRadius, borderWidth, borderColor); DrawRoundedCorners(footer, left, buttonY, geoManager.buttonWidth, geoManager.buttonHeight, borderRadius, borderWidth, borderColor);
} }
} else if (tvguideConfig.style == eStyleGraphical) { } else if (config.style == eStyleGraphical) {
cImage *button = imgCache.GetOsdElement(buttonType); cImage *button = imgCache.GetOsdElement(buttonType);
if (button) { if (button) {
footer->DrawImage(cPoint(left, buttonY), *button); footer->DrawImage(cPoint(left, buttonY), *button);
} }
} else { } else {
footer->DrawRectangle(cRect(left, buttonY, geoManager.buttonWidth, geoManager.buttonHeight), borderColor); footer->DrawRectangle(cRect(left, buttonY, geoManager.buttonWidth, geoManager.buttonHeight), borderColor);
footer->DrawRectangle(cRect(left+1, buttonY+1, geoManager.buttonWidth-2, geoManager.buttonHeight-2), color); footer->DrawRectangle(cRect(left+1, buttonY+1, geoManager.buttonWidth-2, geoManager.buttonHeight-2), color);
if (tvguideConfig.roundedCorners) { if (config.roundedCorners) {
int borderRadius = 12; int borderRadius = 12;
int borderWidth = 1; int borderWidth = 1;
DrawRoundedCorners(footer, left, buttonY, geoManager.buttonWidth, geoManager.buttonHeight, borderRadius, borderWidth, borderColor); DrawRoundedCorners(footer, left, buttonY, geoManager.buttonWidth, geoManager.buttonHeight, borderRadius, borderWidth, borderColor);
} }
} }
int textWidth = fontManager.FontButton->Width(text); int textWidth = fontManager.FontButton->Width(text);
int textHeight = fontManager.FontButton->Height(); int textHeight = fontManager.FontButton->Height();
footer->DrawText(cPoint(left + (geoManager.buttonWidth-textWidth)/2, buttonY + (geoManager.buttonHeight-textHeight)/2), text, theme.Color(clrFontButtons), colorTextBack, fontManager.FontButton); footer->DrawText(cPoint(left + (geoManager.buttonWidth-textWidth)/2, buttonY + (geoManager.buttonHeight-textHeight)/2), text, theme.Color(clrFontButtons), colorTextBack, fontManager.FontButton);
} }
void cFooter::ClearButton(int num) { void cFooter::ClearButton(int num) {
int left = num * geoManager.buttonWidth + (2 * num + 1) * geoManager.buttonBorder; int left = num * geoManager.buttonWidth + (2 * num + 1) * geoManager.buttonBorder;
footer->DrawRectangle(cRect(left, buttonY, geoManager.buttonWidth, geoManager.buttonHeight), clrTransparent); footer->DrawRectangle(cRect(left, buttonY, geoManager.buttonWidth, geoManager.buttonHeight), clrTransparent);
} }

View File

@@ -30,4 +30,4 @@ public:
void LeaveDetailedViewMode(const cChannel *channel); void LeaveDetailedViewMode(const cChannel *channel);
}; };
#endif //__TVGUIDE_FOOTER_H #endif //__TVGUIDE_FOOTER_H

View File

@@ -1,76 +1,76 @@
#include <vdr/osd.h> #include <vdr/osd.h>
#include "config.h" #include "config.h"
#include "geometrymanager.h" #include "geometrymanager.h"
cGeometryManager::cGeometryManager() { cGeometryManager::cGeometryManager() {
osdWidth = 0; osdWidth = 0;
osdHeight = 0; osdHeight = 0;
} }
cGeometryManager::~cGeometryManager() { cGeometryManager::~cGeometryManager() {
} }
bool cGeometryManager::SetGeometry(int osdWidth, int osdHeight, bool force) { bool cGeometryManager::SetGeometry(int osdWidth, int osdHeight, bool force) {
if (!force && (this->osdWidth == osdWidth) && (this->osdHeight == osdHeight)) { if (!force && (this->osdWidth == osdWidth) && (this->osdHeight == osdHeight)) {
esyslog("tvgudie: GeoManager SetGeometry nothing to change"); esyslog("tvgudie: GeoManager SetGeometry nothing to change");
return false; return false;
} }
this->osdWidth = osdWidth; this->osdWidth = osdWidth;
this->osdHeight = osdHeight; this->osdHeight = osdHeight;
esyslog("tvguide: Set OSD to %d x %d px", osdWidth, osdHeight); esyslog("tvguide: Set OSD to %d x %d px", osdWidth, osdHeight);
statusHeaderHeight = (tvguideConfig.displayStatusHeader)?(tvguideConfig.headerHeightPercent * osdHeight / 100):0; statusHeaderHeight = (config.displayStatusHeader) ? (config.headerHeightPercent * osdHeight / 100):0;
tvFrameWidth = statusHeaderHeight * 16 / 9; tvFrameWidth = statusHeaderHeight * 16 / 9;
headerContentWidth = (tvguideConfig.scaleVideo)?(osdWidth - tvFrameWidth):osdWidth; headerContentWidth = (config.scaleVideo) ? (osdWidth - tvFrameWidth):osdWidth;
channelGroupsWidth = (tvguideConfig.displayChannelGroups)?(tvguideConfig.channelGroupsPercent * osdWidth / 100):0; channelGroupsWidth = (config.displayChannelGroups) ? (config.channelGroupsPercent * osdWidth / 100):0;
channelGroupsHeight = (tvguideConfig.displayChannelGroups)?(tvguideConfig.channelGroupsPercent * osdHeight / 100):0; channelGroupsHeight = (config.displayChannelGroups) ? (config.channelGroupsPercent * osdHeight / 100):0;
channelHeaderWidth = tvguideConfig.channelHeaderWidthPercent * osdWidth / 100; channelHeaderWidth = config.channelHeaderWidthPercent * osdWidth / 100;
channelHeaderHeight = tvguideConfig.channelHeaderHeightPercent * osdHeight / 100; channelHeaderHeight = config.channelHeaderHeightPercent * osdHeight / 100;
timeLineWidth = tvguideConfig.timeLineWidthPercent * osdWidth / 100; timeLineWidth = config.timeLineWidthPercent * osdWidth / 100;
timeLineHeight = tvguideConfig.timeLineHeightPercent * osdHeight / 100; timeLineHeight = config.timeLineHeightPercent * osdHeight / 100;
footerHeight = tvguideConfig.footerHeightPercent * osdHeight / 100; footerHeight = config.footerHeightPercent * osdHeight / 100;
footerY = osdHeight - footerHeight; footerY = osdHeight - footerHeight;
if (tvguideConfig.displayMode == eVertical) { if (config.displayMode == eVertical) {
colWidth = (osdWidth - timeLineWidth) / tvguideConfig.channelCols; colWidth = (osdWidth - timeLineWidth) / config.channelCols;
rowHeight = 0; rowHeight = 0;
minutePixel = (osdHeight - statusHeaderHeight - channelGroupsHeight - channelHeaderHeight - footerHeight) / tvguideConfig.displayTime; minutePixel = (double)(osdHeight - statusHeaderHeight - channelGroupsHeight - channelHeaderHeight - footerHeight) / (double)config.displayTime;
channelLogoWidth = colWidth; channelLogoWidth = colWidth;
channelLogoHeight = channelHeaderHeight; channelLogoHeight = channelHeaderHeight;
logoWidth = channelLogoWidth/2 - 15; logoWidth = channelLogoWidth / 2 - 15;
logoHeight = logoWidth * tvguideConfig.logoHeightRatio / tvguideConfig.logoWidthRatio; logoHeight = logoWidth * config.logoHeightRatio / config.logoWidthRatio;
timeLineGridWidth = timeLineWidth; timeLineGridWidth = timeLineWidth;
timeLineGridHeight = minutePixel * 30; timeLineGridHeight = minutePixel * 30;
dateVieverWidth = timeLineWidth; dateVieverWidth = timeLineWidth;
dateVieverHeight = (channelHeaderHeight + channelGroupsHeight) * 2 / 3; dateVieverHeight = (channelHeaderHeight + channelGroupsHeight) * 2 / 3;
clockWidth = dateVieverWidth; clockWidth = dateVieverWidth;
clockHeight = (channelHeaderHeight + channelGroupsHeight) - dateVieverHeight; clockHeight = (channelHeaderHeight + channelGroupsHeight) - dateVieverHeight;
} else if (tvguideConfig.displayMode == eHorizontal) { } else if (config.displayMode == eHorizontal) {
colWidth = 0; colWidth = 0;
rowHeight = (osdHeight - statusHeaderHeight - timeLineHeight - footerHeight) / tvguideConfig.channelRows; rowHeight = (osdHeight - statusHeaderHeight - timeLineHeight - footerHeight) / config.channelRows;
minutePixel = (osdWidth - channelHeaderWidth - channelGroupsWidth) / tvguideConfig.displayHorizontalTime; minutePixel = (double)(osdWidth - channelHeaderWidth - channelGroupsWidth) / (double)config.displayHorizontalTime;
channelLogoWidth = channelHeaderWidth; channelLogoWidth = channelHeaderWidth;
channelLogoHeight = rowHeight; channelLogoHeight = rowHeight;
logoWidth = channelLogoHeight * tvguideConfig.logoWidthRatio / tvguideConfig.logoHeightRatio; logoWidth = channelLogoHeight * config.logoWidthRatio / config.logoHeightRatio;
logoHeight = channelLogoHeight; logoHeight = channelLogoHeight;
timeLineGridWidth = geoManager.minutePixel * 30; timeLineGridWidth = geoManager.minutePixel * 30;
timeLineGridHeight = geoManager.timeLineHeight; timeLineGridHeight = geoManager.timeLineHeight;
dateVieverWidth = (channelHeaderWidth + channelGroupsWidth) * 3 / 5; dateVieverWidth = (channelHeaderWidth + channelGroupsWidth) * 3 / 5;
dateVieverHeight = timeLineHeight; dateVieverHeight = timeLineHeight;
clockWidth = (channelHeaderWidth + channelGroupsWidth) - dateVieverWidth; clockWidth = (channelHeaderWidth + channelGroupsWidth) - dateVieverWidth;
clockHeight = timeLineHeight; clockHeight = timeLineHeight;
} }
buttonBorder = footerHeight / 6; buttonBorder = footerHeight / 6;
buttonWidth = osdWidth / 4 - 2 * buttonBorder; buttonWidth = osdWidth / 4 - 2 * buttonBorder;
buttonHeight = footerHeight - 3 * buttonBorder; buttonHeight = footerHeight - 3 * buttonBorder;
epgViewHeaderHeight = tvguideConfig.headerHeightPercent * osdHeight / 100; epgViewHeaderHeight = config.headerHeightPercent * osdHeight / 100;
borderRecMenus = 10; borderRecMenus = 10;
channelJumpWidth = osdWidth * 30 / 100; channelJumpWidth = osdWidth * 30 / 100;
channelJumpHeight = osdHeight * 20 / 100; channelJumpHeight = osdHeight * 20 / 100;
return true; return true;
} }

View File

@@ -1,54 +1,54 @@
#ifndef __TVGUIDE_GEOMETRYMANAGER_H #ifndef __TVGUIDE_GEOMETRYMANAGER_H
#define __TVGUIDE_GEOMETRYMANAGER_H #define __TVGUIDE_GEOMETRYMANAGER_H
class cGeometryManager { class cGeometryManager {
private: private:
public: public:
cGeometryManager(void); cGeometryManager(void);
~cGeometryManager(); ~cGeometryManager();
bool SetGeometry(int osdWidth, int osdHeight, bool force = false); bool SetGeometry(int osdWidth, int osdHeight, bool force = false);
//Common //Common
int osdWidth; int osdWidth;
int osdHeight; int osdHeight;
int statusHeaderHeight; int statusHeaderHeight;
int tvFrameWidth; int tvFrameWidth;
int headerContentWidth; int headerContentWidth;
//ChannelGroups //ChannelGroups
int channelGroupsWidth; int channelGroupsWidth;
int channelGroupsHeight; int channelGroupsHeight;
//ContentHeader //ContentHeader
int channelHeaderWidth; int channelHeaderWidth;
int channelHeaderHeight; int channelHeaderHeight;
int logoWidth; int logoWidth;
int logoHeight; int logoHeight;
//Content //Content
int colWidth; int colWidth;
int rowHeight; int rowHeight;
int minutePixel; double minutePixel;
int channelLogoWidth; int channelLogoWidth;
int channelLogoHeight; int channelLogoHeight;
//Timeline //Timeline
int timeLineWidth; int timeLineWidth;
int timeLineHeight; int timeLineHeight;
int timeLineGridWidth; int timeLineGridWidth;
int timeLineGridHeight; int timeLineGridHeight;
int dateVieverWidth; int dateVieverWidth;
int dateVieverHeight; int dateVieverHeight;
int clockWidth; int clockWidth;
int clockHeight; int clockHeight;
//Footer //Footer
int footerY; int footerY;
int footerHeight; int footerHeight;
int buttonWidth; int buttonWidth;
int buttonHeight; int buttonHeight;
int buttonBorder; int buttonBorder;
//Detailed EPG View //Detailed EPG View
int epgViewHeaderHeight; int epgViewHeaderHeight;
//Recording Menus //Recording Menus
int borderRecMenus; int borderRecMenus;
//Channel Jump //Channel Jump
int channelJumpWidth; int channelJumpWidth;
int channelJumpHeight; int channelJumpHeight;
}; };
#endif //__TVGUIDE_GEOMETRYMANAGER_H #endif //__TVGUIDE_GEOMETRYMANAGER_H

View File

@@ -1,82 +1,82 @@
#include "channelcolumn.h" #include "channelepg.h"
#include "grid.h" #include "gridelement.h"
cGrid::cGrid(cChannelColumn *c) { cGridElement::cGridElement(cChannelEpg *c) {
this->column = c; this->column = c;
text = new cTextWrapper(); text = new cTextWrapper();
dirty = true; dirty = true;
active = false; active = false;
viewportHeight = 0; viewportHeight = 0;
borderWidth = 10; borderWidth = 10;
} }
cGrid::~cGrid(void) { cGridElement::~cGridElement(void) {
delete text; delete text;
} }
void cGrid::setBackground() { void cGridElement::setBackground() {
if (active) { if (active) {
color = theme.Color(clrHighlight); color = theme.Color(clrHighlight);
colorBlending = theme.Color(clrHighlightBlending); colorBlending = theme.Color(clrHighlightBlending);
} else { } else {
if (isColor1) { if (isColor1) {
color = theme.Color(clrGrid1); color = theme.Color(clrGrid1);
colorBlending = theme.Color(clrGrid1Blending); colorBlending = theme.Color(clrGrid1Blending);
} else { } else {
color = theme.Color(clrGrid2); color = theme.Color(clrGrid2);
colorBlending = theme.Color(clrGrid2Blending); colorBlending = theme.Color(clrGrid2Blending);
} }
} }
} }
void cGrid::Draw() { void cGridElement::Draw() {
if (!pixmap) { if (!pixmap) {
return; return;
} }
if (dirty) { if (dirty) {
if (tvguideConfig.style == eStyleGraphical) { if (config.style == eStyleGraphical) {
drawBackgroundGraphical(bgGrid, active); drawBackgroundGraphical(bgGrid, active);
drawText(); drawText();
} else { } else {
setBackground(); setBackground();
drawBackground(); drawBackground();
drawText(); drawText();
drawBorder(); drawBorder();
} }
pixmap->SetLayer(1); pixmap->SetLayer(1);
dirty = false; dirty = false;
} }
} }
bool cGrid::isFirst(void) { bool cGridElement::isFirst(void) {
if (column->isFirst(this)) if (column->isFirst(this))
return true; return true;
return false; return false;
} }
bool cGrid::Match(time_t t) { bool cGridElement::Match(time_t t) {
if ((StartTime() < t) && (EndTime() > t)) if ((StartTime() < t) && (EndTime() > t))
return true; return true;
else else
return false; return false;
} }
int cGrid::calcOverlap(cGrid *neighbor) { int cGridElement::calcOverlap(cGridElement *neighbor) {
int overlap = 0; int overlap = 0;
if (intersects(neighbor)) { if (intersects(neighbor)) {
if ((StartTime() <= neighbor->StartTime()) && (EndTime() <= neighbor->EndTime())) { if ((StartTime() <= neighbor->StartTime()) && (EndTime() <= neighbor->EndTime())) {
overlap = EndTime() - neighbor->StartTime(); overlap = EndTime() - neighbor->StartTime();
} else if ((StartTime() >= neighbor->StartTime()) && (EndTime() >= neighbor->EndTime())) { } else if ((StartTime() >= neighbor->StartTime()) && (EndTime() >= neighbor->EndTime())) {
overlap = neighbor->EndTime() - StartTime(); overlap = neighbor->EndTime() - StartTime();
} else if ((StartTime() >= neighbor->StartTime()) && (EndTime() <= neighbor->EndTime())) { } else if ((StartTime() >= neighbor->StartTime()) && (EndTime() <= neighbor->EndTime())) {
overlap = Duration(); overlap = Duration();
} else if ((StartTime() <= neighbor->StartTime()) && (EndTime() >= neighbor->EndTime())) { } else if ((StartTime() <= neighbor->StartTime()) && (EndTime() >= neighbor->EndTime())) {
overlap = neighbor->EndTime() - neighbor->StartTime(); overlap = neighbor->EndTime() - neighbor->StartTime();
} }
} }
return overlap; return overlap;
} }
bool cGrid::intersects(cGrid *neighbor) { bool cGridElement::intersects(cGridElement *neighbor) {
return ! ( (neighbor->EndTime() <= StartTime()) || (neighbor->StartTime() >= EndTime()) ); return ! ( (neighbor->EndTime() <= StartTime()) || (neighbor->StartTime() >= EndTime()) );
} }

View File

@@ -1,58 +1,58 @@
#ifndef __TVGUIDE_GRID_H #ifndef __TVGUIDE_GRID_H
#define __TVGUIDE_GRID_H #define __TVGUIDE_GRID_H
#include <vdr/tools.h> #include <vdr/tools.h>
#include "styledpixmap.h" #include "styledpixmap.h"
class cChannelColumn; class cChannelEpg;
// --- cEpgGrid ------------------------------------------------------------- // --- cEpgGrid -------------------------------------------------------------
class cGrid : public cListObject, public cStyledPixmap { class cGridElement : public cListObject, public cStyledPixmap {
protected: protected:
cTextWrapper *text; cTextWrapper *text;
int viewportHeight; int viewportHeight;
int borderWidth; int borderWidth;
void setBackground(); void setBackground();
bool isColor1; bool isColor1;
bool active; bool active;
bool dirty; bool dirty;
bool hasTimer; bool hasTimer;
bool hasSwitchTimer; bool hasSwitchTimer;
bool intersects(cGrid *neighbor); bool intersects(cGridElement *neighbor);
virtual time_t Duration(void) { return 0; }; virtual time_t Duration(void) { return 0; };
virtual void drawText(void) {}; virtual void drawText(void) {};
bool dummy; bool dummy;
public: public:
cGrid(cChannelColumn *c); cGridElement(cChannelEpg *c);
virtual ~cGrid(void); virtual ~cGridElement(void);
cChannelColumn *column; cChannelEpg *column;
virtual void SetViewportHeight(void) {}; virtual void SetViewportHeight(void) {};
virtual void PositionPixmap(void) {}; virtual void PositionPixmap(void) {};
virtual void setText(void) {}; virtual void setText(void) {};
void Draw(void); void Draw(void);
void SetDirty(void) {dirty = true;}; void SetDirty(void) {dirty = true;};
void SetActive(void) {dirty = true; active = true;}; void SetActive(void) {dirty = true; active = true;};
void SetInActive(void) {dirty = true; active = false;}; void SetInActive(void) {dirty = true; active = false;};
void SetColor(bool color) {isColor1 = color;}; void SetColor(bool color) {isColor1 = color;};
bool IsColor1(void) {return isColor1;}; bool IsColor1(void) {return isColor1;};
bool isFirst(void); bool isFirst(void);
virtual const cEvent *GetEvent(void) { return NULL; }; virtual const cEvent *GetEvent(void) { return NULL; };
bool Match(time_t t); bool Match(time_t t);
virtual time_t StartTime(void) { return 0; }; virtual time_t StartTime(void) { return 0; };
virtual time_t EndTime(void) { return 0; }; virtual time_t EndTime(void) { return 0; };
virtual void SetStartTime(time_t start) {}; virtual void SetStartTime(time_t start) {};
virtual void SetEndTime(time_t end) {}; virtual void SetEndTime(time_t end) {};
int calcOverlap(cGrid *neighbor); int calcOverlap(cGridElement *neighbor);
virtual void SetTimer(void) {}; virtual void SetTimer(void) {};
virtual void SetSwitchTimer(void) {}; virtual void SetSwitchTimer(void) {};
virtual cString getText(void) { return cString("");}; virtual cString getText(void) { return cString("");};
virtual cString getTimeString(void) { return cString("");}; virtual cString getTimeString(void) { return cString("");};
bool Active(void) { return active; }; bool Active(void) { return active; };
bool HasTimer(void) {return hasTimer;}; bool HasTimer(void) {return hasTimer;};
bool HasSwitchTimer(void) {return hasSwitchTimer;}; bool HasSwitchTimer(void) {return hasSwitchTimer;};
bool isDummy(void) { return dummy; }; bool isDummy(void) { return dummy; };
virtual void debug() {}; virtual void debug() {};
}; };
#endif //__TVGUIDE_GRID_H #endif //__TVGUIDE_GRID_H

View File

@@ -1,134 +1,134 @@
#include "imageloader.h" #include "imageloader.h"
#include "tools.h" #include "tools.h"
#include "headergrid.h" #include "headergrid.h"
cHeaderGrid::cHeaderGrid(void) : cGrid(NULL) { cHeaderGrid::cHeaderGrid(void) : cGridElement(NULL) {
pixmap = NULL; pixmap = NULL;
pixmapLogo = NULL; pixmapLogo = NULL;
} }
cHeaderGrid::~cHeaderGrid(void) { cHeaderGrid::~cHeaderGrid(void) {
osdManager.releasePixmap(pixmapLogo); osdManager.releasePixmap(pixmapLogo);
} }
void cHeaderGrid::createBackground(int num) { void cHeaderGrid::createBackground(int num) {
color = theme.Color(clrHeader); color = theme.Color(clrHeader);
colorBlending = theme.Color(clrHeaderBlending); colorBlending = theme.Color(clrHeaderBlending);
int x, y; int x, y;
if (tvguideConfig.displayMode == eVertical) { if (config.displayMode == eVertical) {
x = geoManager.timeLineWidth + num*geoManager.colWidth; x = geoManager.timeLineWidth + num*geoManager.colWidth;
y = geoManager.statusHeaderHeight + geoManager.channelGroupsHeight; y = geoManager.statusHeaderHeight + geoManager.channelGroupsHeight;
} else if (tvguideConfig.displayMode == eHorizontal) { } else if (config.displayMode == eHorizontal) {
x = geoManager.channelGroupsWidth; x = geoManager.channelGroupsWidth;
y = geoManager.statusHeaderHeight + geoManager.timeLineHeight + num*geoManager.rowHeight; y = geoManager.statusHeaderHeight + geoManager.timeLineHeight + num*geoManager.rowHeight;
} }
pixmap = osdManager.requestPixmap(1, cRect(x, y, geoManager.channelLogoWidth, geoManager.channelLogoHeight)); pixmap = osdManager.requestPixmap(1, cRect(x, y, geoManager.channelLogoWidth, geoManager.channelLogoHeight));
pixmapLogo = osdManager.requestPixmap(2, cRect(x, y, geoManager.channelLogoWidth, geoManager.channelLogoHeight)); pixmapLogo = osdManager.requestPixmap(2, cRect(x, y, geoManager.channelLogoWidth, geoManager.channelLogoHeight));
if ((!pixmap) || (!pixmapLogo)){ if ((!pixmap) || (!pixmapLogo)){
return; return;
} }
pixmapLogo->Fill(clrTransparent); pixmapLogo->Fill(clrTransparent);
if (tvguideConfig.style == eStyleGraphical) { if (config.style == eStyleGraphical) {
drawBackgroundGraphical(bgChannelHeader); drawBackgroundGraphical(bgChannelHeader);
} else { } else {
drawBackground(); drawBackground();
drawBorder(); drawBorder();
} }
} }
void cHeaderGrid::drawChannel(const cChannel *channel) { void cHeaderGrid::drawChannel(const cChannel *channel) {
if (tvguideConfig.displayMode == eVertical) { if (config.displayMode == eVertical) {
drawChannelVertical(channel); drawChannelVertical(channel);
} else if (tvguideConfig.displayMode == eHorizontal) { } else if (config.displayMode == eHorizontal) {
drawChannelHorizontal(channel); drawChannelHorizontal(channel);
} }
} }
// Draw Channel horizontal view // Draw Channel horizontal view
void cHeaderGrid::drawChannelHorizontal(const cChannel *channel) { void cHeaderGrid::drawChannelHorizontal(const cChannel *channel) {
int logoWidth = geoManager.logoWidth; int logoWidth = geoManager.logoWidth;
int logoX = tvguideConfig.displayChannelName ? 5 : (Width() - logoWidth) / 2; int logoX = config.displayChannelName ? 5 : (Width() - logoWidth) / 2;
int textX = 5; int textX = 5;
int textY = (Height() - fontManager.FontChannelHeaderHorizontal->Height()) / 2; int textY = (Height() - fontManager.FontChannelHeaderHorizontal->Height()) / 2;
bool logoFound = false; bool logoFound = false;
if (!tvguideConfig.hideChannelLogos) { if (!config.hideChannelLogos) {
cImage *logo = imgCache.GetLogo(channel); cImage *logo = imgCache.GetLogo(channel);
if (logo) { if (logo) {
const int logoheight = logo->Height(); const int logoheight = logo->Height();
pixmapLogo->DrawImage(cPoint(logoX, (Height() - logoheight) / 2), *logo); pixmapLogo->DrawImage(cPoint(logoX, (Height() - logoheight) / 2), *logo);
logoFound = true; logoFound = true;
} }
} }
bool drawText = false; bool drawText = false;
int textWidthMax = Width() - 10; int textWidthMax = Width() - 10;
if (!logoFound) { if (!logoFound) {
drawText = true; drawText = true;
} }
if (tvguideConfig.displayChannelName) { if (config.displayChannelName) {
drawText = true; drawText = true;
textX += logoWidth + 5; textX += logoWidth + 5;
textWidthMax -= textX; textWidthMax -= textX;
} }
if (drawText) { if (drawText) {
tColor colorTextBack = (tvguideConfig.style == eStyleFlat)?color:clrTransparent; tColor colorTextBack = (config.style == eStyleFlat)?color:clrTransparent;
cString strChannel = cString::sprintf("%d %s", channel->Number(), channel->Name()); cString strChannel = cString::sprintf("%d %s", channel->Number(), channel->Name());
strChannel = CutText(*strChannel, textWidthMax, fontManager.FontChannelHeaderHorizontal).c_str(); strChannel = CutText(*strChannel, textWidthMax, fontManager.FontChannelHeaderHorizontal).c_str();
pixmap->DrawText(cPoint(textX, textY), *strChannel, theme.Color(clrFontHeader), colorTextBack, fontManager.FontChannelHeaderHorizontal); pixmap->DrawText(cPoint(textX, textY), *strChannel, theme.Color(clrFontHeader), colorTextBack, fontManager.FontChannelHeaderHorizontal);
} }
} }
// Draw Channel vertical view // Draw Channel vertical view
void cHeaderGrid::drawChannelVertical(const cChannel *channel) { void cHeaderGrid::drawChannelVertical(const cChannel *channel) {
int logoWidth = geoManager.logoWidth; int logoWidth = geoManager.logoWidth;
int logoHeight = geoManager.logoHeight; int logoHeight = geoManager.logoHeight;
cTextWrapper tw; cTextWrapper tw;
cString headerText = cString::sprintf("%d - %s", channel->Number(), channel->Name()); cString headerText = cString::sprintf("%d - %s", channel->Number(), channel->Name());
tw.Set(*headerText, fontManager.FontChannelHeader, geoManager.colWidth - 8); tw.Set(*headerText, fontManager.FontChannelHeader, geoManager.colWidth - 8);
int lines = tw.Lines(); int lines = tw.Lines();
int lineHeight = fontManager.FontChannelHeader->Height(); int lineHeight = fontManager.FontChannelHeader->Height();
int yStart = (geoManager.channelHeaderHeight - lines * lineHeight) / 2 + 8; int yStart = (geoManager.channelHeaderHeight - lines * lineHeight) / 2 + 8;
bool logoFound = false; bool logoFound = false;
if (!tvguideConfig.hideChannelLogos) { if (!config.hideChannelLogos) {
cImage *logo = imgCache.GetLogo(channel); cImage *logo = imgCache.GetLogo(channel);
if (logo) { if (logo) {
pixmapLogo->DrawImage(cPoint((Width() - logoWidth) / 2, 6), *logo); pixmapLogo->DrawImage(cPoint((Width() - logoWidth) / 2, 6), *logo);
logoFound = true; logoFound = true;
} }
} }
bool drawText = false; bool drawText = false;
if (!logoFound) { if (!logoFound) {
drawText = true; drawText = true;
} else if (tvguideConfig.displayChannelName) { } else if (config.displayChannelName) {
drawText = true; drawText = true;
yStart = logoHeight; yStart = logoHeight;
} }
if (!drawText) if (!drawText)
return; return;
tColor colorTextBack = (tvguideConfig.style == eStyleFlat)?color:clrTransparent; tColor colorTextBack = (config.style == eStyleFlat)?color:clrTransparent;
for (int i = 0; i < lines; i++) { for (int i = 0; i < lines; i++) {
int textWidth = fontManager.FontChannelHeader->Width(tw.GetLine(i)); int textWidth = fontManager.FontChannelHeader->Width(tw.GetLine(i));
int xText = (geoManager.colWidth - textWidth) / 2; int xText = (geoManager.colWidth - textWidth) / 2;
if (xText < 0) if (xText < 0)
xText = 0; xText = 0;
pixmap->DrawText(cPoint(xText, yStart + i * lineHeight), tw.GetLine(i), theme.Color(clrFontHeader), colorTextBack, fontManager.FontChannelHeader); pixmap->DrawText(cPoint(xText, yStart + i * lineHeight), tw.GetLine(i), theme.Color(clrFontHeader), colorTextBack, fontManager.FontChannelHeader);
} }
} }
void cHeaderGrid::setPosition(int num) { void cHeaderGrid::setPosition(int num) {
int x, y, width, height; int x, y, width, height;
if (tvguideConfig.displayMode == eVertical) { if (config.displayMode == eVertical) {
x = geoManager.timeLineWidth + num*geoManager.colWidth; x = geoManager.timeLineWidth + num*geoManager.colWidth;
y = geoManager.statusHeaderHeight + geoManager.channelGroupsHeight; y = geoManager.statusHeaderHeight + geoManager.channelGroupsHeight;
width = geoManager.colWidth; width = geoManager.colWidth;
height = geoManager.channelHeaderHeight; height = geoManager.channelHeaderHeight;
} else if (tvguideConfig.displayMode == eHorizontal) { } else if (config.displayMode == eHorizontal) {
x = geoManager.channelGroupsWidth; x = geoManager.channelGroupsWidth;
y = geoManager.statusHeaderHeight + geoManager.timeLineHeight + num*geoManager.rowHeight; y = geoManager.statusHeaderHeight + geoManager.timeLineHeight + num*geoManager.rowHeight;
width = geoManager.channelHeaderWidth; width = geoManager.channelHeaderWidth;
height = geoManager.rowHeight; height = geoManager.rowHeight;
} }
pixmap->SetViewPort(cRect(x, y, width, height)); pixmap->SetViewPort(cRect(x, y, width, height));
pixmapLogo->SetViewPort(cRect(x, y, width, height)); pixmapLogo->SetViewPort(cRect(x, y, width, height));
} }

View File

@@ -1,21 +1,21 @@
#ifndef __TVGUIDE_HEADERGRID_H #ifndef __TVGUIDE_HEADERGRID_H
#define __TVGUIDE_HEADERGRID_H #define __TVGUIDE_HEADERGRID_H
#include "grid.h" #include "gridelement.h"
// --- cHeaderGrid ------------------------------------------------------------- // --- cHeaderGrid -------------------------------------------------------------
class cHeaderGrid : public cGrid { class cHeaderGrid : public cGridElement {
private: private:
cPixmap *pixmapLogo; cPixmap *pixmapLogo;
void drawChannelHorizontal(const cChannel *channel); void drawChannelHorizontal(const cChannel *channel);
void drawChannelVertical(const cChannel *channel); void drawChannelVertical(const cChannel *channel);
public: public:
cHeaderGrid(void); cHeaderGrid(void);
virtual ~cHeaderGrid(void); virtual ~cHeaderGrid(void);
void createBackground(int num); void createBackground(int num);
void drawChannel(const cChannel *channel); void drawChannel(const cChannel *channel);
void setPosition(int num); void setPosition(int num);
}; };
#endif //__TVGUIDE_HEADERGRID_H #endif //__TVGUIDE_HEADERGRID_H

File diff suppressed because it is too large Load Diff

View File

@@ -1,92 +1,92 @@
#ifndef __TVGUIDE_IMAGECACHE_H #ifndef __TVGUIDE_IMAGECACHE_H
#define __TVGUIDE_IMAGECACHE_H #define __TVGUIDE_IMAGECACHE_H
#define X_DISPLAY_MISSING #define X_DISPLAY_MISSING
#include <map> #include <map>
#include <vector> #include <vector>
#include "imagemagickwrapper.h" #include "imagemagickwrapper.h"
enum eCacheType { enum eCacheType {
ctOsdElement = 0, ctOsdElement = 0,
ctGrid, ctGrid,
ctLogo, ctLogo,
ctChannelGroup, ctChannelGroup,
ctIcon, ctIcon,
}; };
enum eOsdElementType { enum eOsdElementType {
oeNone = -1, oeNone = -1,
oeStatusHeaderContentFull, oeStatusHeaderContentFull,
oeStatusHeaderContentWindowed, oeStatusHeaderContentWindowed,
oeStatusHeaderTVFrame, oeStatusHeaderTVFrame,
oeButtonRed, oeButtonRed,
oeButtonGreen, oeButtonGreen,
oeButtonYellow, oeButtonYellow,
oeButtonBlue, oeButtonBlue,
oeLogoBack, oeLogoBack,
oeTimeline1, oeTimeline1,
oeTimeline2, oeTimeline2,
oeDateViewer, oeDateViewer,
oeClock, oeClock,
oeChannelJump, oeChannelJump,
}; };
class cImageCache : public cImageMagickWrapper { class cImageCache : public cImageMagickWrapper {
public: public:
cImageCache(); cImageCache();
~cImageCache(); ~cImageCache();
void CreateCache(void); void CreateCache(void);
cImage *GetOsdElement(eOsdElementType type); cImage *GetOsdElement(eOsdElementType type);
cImage *GetGrid(int width, int height, bool active); cImage *GetGrid(int width, int height, bool active);
cImage *GetChannelGroup(int width, int height); cImage *GetChannelGroup(int width, int height);
cImage *GetLogo(const cChannel *channel); cImage *GetLogo(const cChannel *channel);
cImage *GetIcon(std::string name, int width, int height); cImage *GetIcon(std::string name, int width, int height);
std::string GetCacheSize(eCacheType type); std::string GetCacheSize(eCacheType type);
void Clear(void); void Clear(void);
private: private:
cImage *tempStaticLogo; cImage *tempStaticLogo;
Image bufferGrid; Image bufferGrid;
Image bufferGridActive; Image bufferGridActive;
bool gridsAvailable; bool gridsAvailable;
int cornerWidth; int cornerWidth;
int cornerHeight; int cornerHeight;
cImage *imgLeft; cImage *imgLeft;
cImage *imgLeftActive; cImage *imgLeftActive;
cImage *imgRight; cImage *imgRight;
cImage *imgRightActive; cImage *imgRightActive;
cImage *imgHead; cImage *imgHead;
cImage *imgHeadActive; cImage *imgHeadActive;
cImage *imgBottom; cImage *imgBottom;
cImage *imgBottomActive; cImage *imgBottomActive;
cImage *imgChannelgroupHead; cImage *imgChannelgroupHead;
cImage *imgChannelgroupBottom; cImage *imgChannelgroupBottom;
cImage *groupsHead; cImage *groupsHead;
cImage *groupsBottom; cImage *groupsBottom;
cImage *groupsLeft; cImage *groupsLeft;
cImage *groupsRight; cImage *groupsRight;
std::map<eOsdElementType, cImage*> osdElementCache; std::map<eOsdElementType, cImage*> osdElementCache;
std::map<std::string, cImage*> gridCache; std::map<std::string, cImage*> gridCache;
std::map<std::string, cImage*> groupsCache; std::map<std::string, cImage*> groupsCache;
std::map<std::string, cImage*> logoCache; std::map<std::string, cImage*> logoCache;
std::map<std::string, cImage*> iconCache; std::map<std::string, cImage*> iconCache;
void CreateOsdIconCache(void); void CreateOsdIconCache(void);
void PrepareGridIconCache(void); void PrepareGridIconCache(void);
void CreateGridIconCache(void); void CreateGridIconCache(void);
void CreateChannelGroupCache(void); void CreateChannelGroupCache(void);
void CreateLogoCache(void); void CreateLogoCache(void);
bool LoadIcon(std::string name); bool LoadIcon(std::string name);
void InsertIntoOsdElementCache(eOsdElementType type, int width=0, int height=0); void InsertIntoOsdElementCache(eOsdElementType type, int width=0, int height=0);
void InsertIntoGridCache(std::string name, int width, int height, bool active); void InsertIntoGridCache(std::string name, int width, int height, bool active);
cImage *CreateGrid(int width, int height, bool active); cImage *CreateGrid(int width, int height, bool active);
void AddCornersHorizontal(cImage *img, bool active); void AddCornersHorizontal(cImage *img, bool active);
void AddCornersVertical(cImage *img, bool active); void AddCornersVertical(cImage *img, bool active);
void InsertIntoGroupsCacheHorizontal(int size); void InsertIntoGroupsCacheHorizontal(int size);
void InsertIntoGroupsCacheVertical(int size); void InsertIntoGroupsCacheVertical(int size);
void AddCornersGroupHorizontal(cImage *img); void AddCornersGroupHorizontal(cImage *img);
void AddCornersGroupVertical(cImage *img); void AddCornersGroupVertical(cImage *img);
bool LoadLogo(const cChannel *channel); bool LoadLogo(const cChannel *channel);
void InsertIntoLogoCache(std::string channelID); void InsertIntoLogoCache(std::string channelID);
}; };
#endif //__TVGUIDE_IMAGECACHE_H #endif //__TVGUIDE_IMAGECACHE_H

View File

@@ -11,7 +11,6 @@
using namespace Magick; using namespace Magick;
cImageLoader::cImageLoader() { cImageLoader::cImageLoader() {
InitializeMagick(NULL);
} }
cImageLoader::~cImageLoader() { cImageLoader::~cImageLoader() {
@@ -23,22 +22,22 @@ bool cImageLoader::LoadLogo(const cChannel *channel, int width, int height) {
std::string channelID = StrToLowerCase(*(channel->GetChannelID().ToString())); std::string channelID = StrToLowerCase(*(channel->GetChannelID().ToString()));
std::string logoLower = StrToLowerCase(channel->Name()); std::string logoLower = StrToLowerCase(channel->Name());
cString extension; cString extension;
if (tvguideConfig.logoExtension == 0) { if (config.logoExtension == 0) {
extension = "png"; extension = "png";
} else if (tvguideConfig.logoExtension == 1) { } else if (config.logoExtension == 1) {
extension = "jpg"; extension = "jpg";
} }
bool success = false; bool success = false;
if (tvguideConfig.logoPathSet) { if (config.logoPathSet) {
success = LoadImage(channelID.c_str(), *tvguideConfig.logoPath, *extension); success = LoadImage(channelID.c_str(), *config.logoPath, *extension);
if (!success) { if (!success) {
success = LoadImage(logoLower.c_str(), *tvguideConfig.logoPath, *extension); success = LoadImage(logoLower.c_str(), *config.logoPath, *extension);
} }
} }
if (!success) if (!success)
success = LoadImage(channelID.c_str(), *tvguideConfig.logoPathDefault, *extension); success = LoadImage(channelID.c_str(), *config.logoPathDefault, *extension);
if (!success) if (!success)
success = LoadImage(logoLower.c_str(), *tvguideConfig.logoPathDefault, *extension); success = LoadImage(logoLower.c_str(), *config.logoPathDefault, *extension);
if (success) if (success)
buffer.sample(Geometry(width, height)); buffer.sample(Geometry(width, height));
return success; return success;
@@ -48,9 +47,9 @@ bool cImageLoader::LoadEPGImage(int eventID, int width, int height) {
if ((width == 0)||(height==0)) if ((width == 0)||(height==0))
return false; return false;
bool success = false; bool success = false;
success = LoadImage(*cString::sprintf("%d", eventID), *tvguideConfig.epgImagePath, "jpg"); success = LoadImage(*cString::sprintf("%d", eventID), *config.epgImagePath, "jpg");
if (!success) if (!success)
success = LoadImage(*cString::sprintf("%d_0", eventID), *tvguideConfig.epgImagePath, "jpg"); success = LoadImage(*cString::sprintf("%d_0", eventID), *config.epgImagePath, "jpg");
if (!success) if (!success)
return false; return false;
buffer.sample( Geometry(width, height)); buffer.sample( Geometry(width, height));
@@ -58,12 +57,12 @@ bool cImageLoader::LoadEPGImage(int eventID, int width, int height) {
} }
bool cImageLoader::LoadAdditionalEPGImage(cString name) { bool cImageLoader::LoadAdditionalEPGImage(cString name) {
int width = tvguideConfig.epgImageWidthLarge; int width = config.epgImageWidthLarge;
int height = tvguideConfig.epgImageHeightLarge; int height = config.epgImageHeightLarge;
if ((width == 0)||(height==0)) if ((width == 0)||(height==0))
return false; return false;
bool success = false; bool success = false;
success = LoadImage(*name, *tvguideConfig.epgImagePath, "jpg"); success = LoadImage(*name, *config.epgImagePath, "jpg");
if (!success) if (!success)
return false; return false;
if (height != 0 || width != 0) { if (height != 0 || width != 0) {
@@ -84,19 +83,19 @@ bool cImageLoader::LoadIcon(const char *cIcon, int size) {
if (size==0) if (size==0)
return false; return false;
bool success = false; bool success = false;
if (tvguideConfig.iconsPathSet) { if (config.iconsPathSet) {
cString iconPathTheme = cString::sprintf("%s%s/recmenuicons/", *tvguideConfig.iconPath, *tvguideConfig.themeName); cString iconPathTheme = cString::sprintf("%s%s/recmenuicons/", *config.iconPath, *config.themeName);
success = LoadImage(cIcon, *iconPathTheme, "png"); success = LoadImage(cIcon, *iconPathTheme, "png");
if (!success) { if (!success) {
cString iconPath = cString::sprintf("%srecmenuicons/", *tvguideConfig.iconPath); cString iconPath = cString::sprintf("%srecmenuicons/", *config.iconPath);
success = LoadImage(cIcon, *iconPath, "png"); success = LoadImage(cIcon, *iconPath, "png");
} }
} }
if (!success) { if (!success) {
cString iconPathTheme = cString::sprintf("%s%s/recmenuicons/", *tvguideConfig.iconPathDefault, *tvguideConfig.themeName); cString iconPathTheme = cString::sprintf("%s%s/recmenuicons/", *config.iconPathDefault, *config.themeName);
success = LoadImage(cIcon, *iconPathTheme, "png"); success = LoadImage(cIcon, *iconPathTheme, "png");
if (!success) { if (!success) {
cString iconPath = cString::sprintf("%srecmenuicons/", *tvguideConfig.iconPathDefault); cString iconPath = cString::sprintf("%srecmenuicons/", *config.iconPathDefault);
success = LoadImage(cIcon, *iconPath, "png"); success = LoadImage(cIcon, *iconPath, "png");
} }
} }
@@ -110,20 +109,20 @@ bool cImageLoader::LoadOsdElement(cString name, int width, int height) {
if ((width == 0)||(height==0)) if ((width == 0)||(height==0))
return false; return false;
bool success = false; bool success = false;
if (tvguideConfig.iconsPathSet) { if (config.iconsPathSet) {
cString path = cString::sprintf("%s%s%s", *tvguideConfig.iconPath, *tvguideConfig.themeName, "/osdElements/"); cString path = cString::sprintf("%s%s%s", *config.iconPath, *config.themeName, "/osdElements/");
success = LoadImage(*name, *path, "png"); success = LoadImage(*name, *path, "png");
if (!success) { if (!success) {
path = cString::sprintf("%s%s", *tvguideConfig.iconPath, "/osdElements/"); path = cString::sprintf("%s%s", *config.iconPath, "/osdElements/");
success = LoadImage(*name, *path, "png"); success = LoadImage(*name, *path, "png");
} }
} }
if (!success) { if (!success) {
cString path = cString::sprintf("%s%s%s", *tvguideConfig.iconPathDefault, *tvguideConfig.themeName, "/osdElements/"); cString path = cString::sprintf("%s%s%s", *config.iconPathDefault, *config.themeName, "/osdElements/");
success = LoadImage(*name, *path, "png"); success = LoadImage(*name, *path, "png");
} }
if (!success) { if (!success) {
cString path = cString::sprintf("%s%s", *tvguideConfig.iconPathDefault, "/osdElements/"); cString path = cString::sprintf("%s%s", *config.iconPathDefault, "/osdElements/");
success = LoadImage(*name, *path, "png"); success = LoadImage(*name, *path, "png");
} }
if (!success) if (!success)

View File

@@ -5,7 +5,6 @@
#include "imagescaler.h" #include "imagescaler.h"
cImageMagickWrapper::cImageMagickWrapper() { cImageMagickWrapper::cImageMagickWrapper() {
InitializeMagick(NULL);
} }
cImageMagickWrapper::~cImageMagickWrapper() { cImageMagickWrapper::~cImageMagickWrapper() {
@@ -77,21 +76,21 @@ bool cImageMagickWrapper::LoadImage(std::string FileName, std::string Path, std:
std::stringstream sstrImgFile; std::stringstream sstrImgFile;
sstrImgFile << Path << FileName << "." << Extension; sstrImgFile << Path << FileName << "." << Extension;
std::string imgFile = sstrImgFile.str(); std::string imgFile = sstrImgFile.str();
if (tvguideConfig.debugImageLoading) if (config.debugImageLoading)
esyslog("tvguide: trying to load: %s", imgFile.c_str()); esyslog("tvguide: trying to load: %s", imgFile.c_str());
buffer.read(imgFile.c_str()); buffer.read(imgFile.c_str());
if (tvguideConfig.debugImageLoading) if (config.debugImageLoading)
esyslog("tvguide: %s sucessfully loaded", imgFile.c_str()); esyslog("tvguide: %s sucessfully loaded", imgFile.c_str());
} catch( Magick::Warning &warning ) { } catch( Magick::Warning &warning ) {
if (tvguideConfig.debugImageLoading) if (config.debugImageLoading)
esyslog("tvguide: Magick Warning: %s", warning.what()); esyslog("tvguide: Magick Warning: %s", warning.what());
return true; return true;
} catch( Magick::Error &error ) { } catch( Magick::Error &error ) {
if (tvguideConfig.debugImageLoading) if (config.debugImageLoading)
esyslog("tvguide: Magick Error: %s", error.what()); esyslog("tvguide: Magick Error: %s", error.what());
return false; return false;
} catch(...) { } catch(...) {
if (tvguideConfig.debugImageLoading) if (config.debugImageLoading)
esyslog("tvguide: an unknown Magick error occured during image loading"); esyslog("tvguide: an unknown Magick error occured during image loading");
return false; return false;
} }
@@ -102,21 +101,21 @@ bool cImageMagickWrapper::LoadImage(const char *fullpath) {
if ((fullpath == NULL) || (strlen(fullpath) < 5)) if ((fullpath == NULL) || (strlen(fullpath) < 5))
return false; return false;
try { try {
if (tvguideConfig.debugImageLoading) if (config.debugImageLoading)
esyslog("tvguide: trying to load: %s", fullpath); esyslog("tvguide: trying to load: %s", fullpath);
buffer.read(fullpath); buffer.read(fullpath);
if (tvguideConfig.debugImageLoading) if (config.debugImageLoading)
esyslog("tvguide: %s sucessfully loaded", fullpath); esyslog("tvguide: %s sucessfully loaded", fullpath);
} catch( Magick::Warning &warning ) { } catch( Magick::Warning &warning ) {
if (tvguideConfig.debugImageLoading) if (config.debugImageLoading)
esyslog("tvguide: Magick Warning: %s", warning.what()); esyslog("tvguide: Magick Warning: %s", warning.what());
return true; return true;
} catch( Magick::Error &error ) { } catch( Magick::Error &error ) {
if (tvguideConfig.debugImageLoading) if (config.debugImageLoading)
esyslog("tvguide: Magick Error: %s", error.what()); esyslog("tvguide: Magick Error: %s", error.what());
return false; return false;
} catch(...) { } catch(...) {
if (tvguideConfig.debugImageLoading) if (config.debugImageLoading)
esyslog("tvguide: an unknown Magick error occured during image loading"); esyslog("tvguide: an unknown Magick error occured during image loading");
return false; return false;
} }

View File

@@ -1,38 +1,38 @@
#include "config.h" #include "config.h"
#include "osdmanager.h" #include "osdmanager.h"
cOsdManager::cOsdManager(void) { cOsdManager::cOsdManager(void) {
} }
bool cOsdManager::setOsd() { bool cOsdManager::setOsd() {
osd = cOsdProvider::NewOsd(cOsd::OsdLeft(), cOsd::OsdTop()); osd = cOsdProvider::NewOsd(cOsd::OsdLeft(), cOsd::OsdTop());
if (osd) { if (osd) {
tArea Area = { 0, 0, cOsd::OsdWidth(), cOsd::OsdHeight(), 32 }; tArea Area = { 0, 0, cOsd::OsdWidth(), cOsd::OsdHeight(), 32 };
if (osd->SetAreas(&Area, 1) == oeOk) { if (osd->SetAreas(&Area, 1) == oeOk) {
return true; return true;
} }
} }
return false; return false;
} }
void cOsdManager::setBackground() { void cOsdManager::setBackground() {
if (tvguideConfig.displayStatusHeader && tvguideConfig.scaleVideo) { if (config.displayStatusHeader && config.scaleVideo) {
int widthStatus = cOsd::OsdWidth() - geoManager.statusHeaderHeight * 16 / 9; int widthStatus = cOsd::OsdWidth() - geoManager.statusHeaderHeight * 16 / 9;
osd->DrawRectangle(0, 0, widthStatus, geoManager.statusHeaderHeight, theme.Color(clrBackgroundOSD)); osd->DrawRectangle(0, 0, widthStatus, geoManager.statusHeaderHeight, theme.Color(clrBackgroundOSD));
osd->DrawRectangle(0, geoManager.statusHeaderHeight, Width(), Height(), theme.Color(clrBackgroundOSD)); osd->DrawRectangle(0, geoManager.statusHeaderHeight, Width(), Height(), theme.Color(clrBackgroundOSD));
} }
else else
osd->DrawRectangle(0, 0, Width(), Height(), theme.Color(clrBackgroundOSD)); osd->DrawRectangle(0, 0, Width(), Height(), theme.Color(clrBackgroundOSD));
} }
cPixmap *cOsdManager::requestPixmap(int Layer, const cRect &ViewPort, const cRect &DrawPort) { cPixmap *cOsdManager::requestPixmap(int Layer, const cRect &ViewPort, const cRect &DrawPort) {
return osd->CreatePixmap(Layer, ViewPort, DrawPort); return osd->CreatePixmap(Layer, ViewPort, DrawPort);
} }
void cOsdManager::releasePixmap(cPixmap *pixmap) { void cOsdManager::releasePixmap(cPixmap *pixmap) {
if (!pixmap) if (!pixmap)
return; return;
osd->DestroyPixmap(pixmap); osd->DestroyPixmap(pixmap);
} }

View File

@@ -1,23 +1,23 @@
#ifndef __TVGUIDE_OSDMANAGER_H #ifndef __TVGUIDE_OSDMANAGER_H
#define __TVGUIDE_OSDMANAGER_H #define __TVGUIDE_OSDMANAGER_H
#include <vdr/osd.h> #include <vdr/osd.h>
class cOsdManager { class cOsdManager {
private: private:
cOsd *osd; cOsd *osd;
public: public:
cOsdManager(void); cOsdManager(void);
bool setOsd(); bool setOsd();
void setBackground(); void setBackground();
void flush() {osd->Flush();}; void flush() {osd->Flush();};
cPixmap *requestPixmap(int Layer, const cRect &ViewPort, const cRect &DrawPort = cRect::Null); cPixmap *requestPixmap(int Layer, const cRect &ViewPort, const cRect &DrawPort = cRect::Null);
void releasePixmap(cPixmap *pixmap); void releasePixmap(cPixmap *pixmap);
void deleteOsd() {delete osd;}; void deleteOsd() {delete osd;};
int Width() { return osd->Width(); }; int Width() { return osd->Width(); };
int Height() { return osd->Height(); }; int Height() { return osd->Height(); };
int Top() { return osd->Top(); }; int Top() { return osd->Top(); };
int Left() { return osd->Left(); }; int Left() { return osd->Left(); };
}; };
#endif //__TVGUIDE_OSDMANAGER_H #endif //__TVGUIDE_OSDMANAGER_H

View File

@@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: vdr-tvguide 0.0.1\n" "Project-Id-Version: vdr-tvguide 0.0.1\n"
"Report-Msgid-Bugs-To: <see README>\n" "Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2019-04-22 14:34+0200\n" "POT-Creation-Date: 2020-01-06 14:31+0100\n"
"PO-Revision-Date: 2013-09-21 17:49+0200\n" "PO-Revision-Date: 2013-09-21 17:49+0200\n"
"Last-Translator: My friend <Sampep> Thanks David <Gabychan> <gbonich@gmail.com>\n" "Last-Translator: My friend <Sampep> Thanks David <Gabychan> <gbonich@gmail.com>\n"
"Language-Team: \n" "Language-Team: \n"
@@ -99,12 +99,6 @@ msgstr ""
msgid "recordings done" msgid "recordings done"
msgstr "" msgstr ""
msgid "What's on now"
msgstr ""
msgid "What's on next"
msgstr ""
msgid "Instant Record" msgid "Instant Record"
msgstr "Enregistra a l'instant" msgstr "Enregistra a l'instant"
@@ -144,6 +138,9 @@ msgstr "Cerca a les gravacions"
msgid "Set Folder for" msgid "Set Folder for"
msgstr "Programa carpeta per" msgstr "Programa carpeta per"
msgid "Timer changed"
msgstr ""
msgid "Timer created" msgid "Timer created"
msgstr "Temporitzador creat" msgstr "Temporitzador creat"
@@ -567,6 +564,12 @@ msgstr "No s'han trobat gravacions per"
msgid "No Favorites available" msgid "No Favorites available"
msgstr "" msgstr ""
msgid "What's on now"
msgstr ""
msgid "What's on next"
msgstr ""
msgid "whole term must appear" msgid "whole term must appear"
msgstr "expressió completa" msgstr "expressió completa"
@@ -675,6 +678,9 @@ msgstr "si existeix"
msgid "always" msgid "always"
msgstr "sempre" msgstr "sempre"
msgid "Use workaround for HWAccelerated OSD"
msgstr ""
msgid "Show Main Menu Entry" msgid "Show Main Menu Entry"
msgstr "Mostra entrada del menú principal" msgstr "Mostra entrada del menú principal"

View File

@@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: vdr-tvguide 0.0.1\n" "Project-Id-Version: vdr-tvguide 0.0.1\n"
"Report-Msgid-Bugs-To: <see README>\n" "Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2019-04-22 14:34+0200\n" "POT-Creation-Date: 2020-01-06 14:31+0100\n"
"PO-Revision-Date: 2012-08-25 17:49+0200\n" "PO-Revision-Date: 2012-08-25 17:49+0200\n"
"Last-Translator: Horst\n" "Last-Translator: Horst\n"
"Language-Team: \n" "Language-Team: \n"
@@ -96,12 +96,6 @@ msgstr "aktive Timer"
msgid "recordings done" msgid "recordings done"
msgstr "erledigte Aufnahmen" msgstr "erledigte Aufnahmen"
msgid "What's on now"
msgstr "Was läuft jetzt?"
msgid "What's on next"
msgstr "Was läuft als nächstes?"
msgid "Instant Record" msgid "Instant Record"
msgstr "Aufnahme" msgstr "Aufnahme"
@@ -141,6 +135,9 @@ msgstr "In Aufnahmen suchen"
msgid "Set Folder for" msgid "Set Folder for"
msgstr "Verzeichnis festlegen für" msgstr "Verzeichnis festlegen für"
msgid "Timer changed"
msgstr "Timer geändert"
msgid "Timer created" msgid "Timer created"
msgstr "Timer angelegt" msgstr "Timer angelegt"
@@ -564,6 +561,12 @@ msgstr "Keine Aufnahmen gefunden für"
msgid "No Favorites available" msgid "No Favorites available"
msgstr "Keine Favoriten verfügbar" msgstr "Keine Favoriten verfügbar"
msgid "What's on now"
msgstr "Was läuft jetzt?"
msgid "What's on next"
msgstr "Was läuft als nächstes?"
msgid "whole term must appear" msgid "whole term must appear"
msgstr "vollständiger Ausdruck" msgstr "vollständiger Ausdruck"
@@ -672,6 +675,9 @@ msgstr "falls vorhanden"
msgid "always" msgid "always"
msgstr "immer" msgstr "immer"
msgid "Use workaround for HWAccelerated OSD"
msgstr ""
msgid "Show Main Menu Entry" msgid "Show Main Menu Entry"
msgstr "Hauptmenüeintrag anzeigen" msgstr "Hauptmenüeintrag anzeigen"

View File

@@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: vdr-tvguide 0.0.1\n" "Project-Id-Version: vdr-tvguide 0.0.1\n"
"Report-Msgid-Bugs-To: <see README>\n" "Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2019-04-22 14:34+0200\n" "POT-Creation-Date: 2020-01-06 14:31+0100\n"
"PO-Revision-Date: 2012-08-25 17:49+0200\n" "PO-Revision-Date: 2012-08-25 17:49+0200\n"
"Last-Translator: fiveten_59\n" "Last-Translator: fiveten_59\n"
"Language-Team: \n" "Language-Team: \n"
@@ -96,12 +96,6 @@ msgstr "Timers attivi"
msgid "recordings done" msgid "recordings done"
msgstr "registrazione eseguita" msgstr "registrazione eseguita"
msgid "What's on now"
msgstr "Was läuft jetzt?"
msgid "What's on next"
msgstr "Was läuft als nächstes?"
msgid "Instant Record" msgid "Instant Record"
msgstr "Registrazione immediata" msgstr "Registrazione immediata"
@@ -141,6 +135,9 @@ msgstr "Cerca nelle registrazioni"
msgid "Set Folder for" msgid "Set Folder for"
msgstr "Crea cartella per" msgstr "Crea cartella per"
msgid "Timer changed"
msgstr ""
msgid "Timer created" msgid "Timer created"
msgstr "Timer creato" msgstr "Timer creato"
@@ -564,6 +561,12 @@ msgstr "Nessuna registrazione trovata per"
msgid "No Favorites available" msgid "No Favorites available"
msgstr "Nessun Favoriti disponibile" msgstr "Nessun Favoriti disponibile"
msgid "What's on now"
msgstr "Was läuft jetzt?"
msgid "What's on next"
msgstr "Was läuft als nächstes?"
msgid "whole term must appear" msgid "whole term must appear"
msgstr "vollständiger Ausdruck" msgstr "vollständiger Ausdruck"
@@ -672,6 +675,9 @@ msgstr "se esiste"
msgid "always" msgid "always"
msgstr "sempre" msgstr "sempre"
msgid "Use workaround for HWAccelerated OSD"
msgstr ""
msgid "Show Main Menu Entry" msgid "Show Main Menu Entry"
msgstr "Hauptmenüeintrag anzeigen" msgstr "Hauptmenüeintrag anzeigen"

View File

@@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: vdr-tvguide 1.0.0\n" "Project-Id-Version: vdr-tvguide 1.0.0\n"
"Report-Msgid-Bugs-To: <see README>\n" "Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2019-04-22 14:34+0200\n" "POT-Creation-Date: 2020-01-06 14:31+0100\n"
"PO-Revision-Date: 2013-09-25 17:49+0400\n" "PO-Revision-Date: 2013-09-25 17:49+0400\n"
"Last-Translator: AmiD, ilya\n" "Last-Translator: AmiD, ilya\n"
"Language-Team: Russia-Cherepovets(wm.amid@gmail.com)\n" "Language-Team: Russia-Cherepovets(wm.amid@gmail.com)\n"
@@ -96,12 +96,6 @@ msgstr ""
msgid "recordings done" msgid "recordings done"
msgstr "" msgstr ""
msgid "What's on now"
msgstr ""
msgid "What's on next"
msgstr ""
msgid "Instant Record" msgid "Instant Record"
msgstr "Записать" msgstr "Записать"
@@ -141,6 +135,9 @@ msgstr "Искать в записях"
msgid "Set Folder for" msgid "Set Folder for"
msgstr "Укажите каталог для" msgstr "Укажите каталог для"
msgid "Timer changed"
msgstr ""
msgid "Timer created" msgid "Timer created"
msgstr "Таймер создан" msgstr "Таймер создан"
@@ -564,6 +561,12 @@ msgstr "Не найдено записей:"
msgid "No Favorites available" msgid "No Favorites available"
msgstr "" msgstr ""
msgid "What's on now"
msgstr ""
msgid "What's on next"
msgstr ""
msgid "whole term must appear" msgid "whole term must appear"
msgstr "фраза" msgstr "фраза"
@@ -672,6 +675,9 @@ msgstr "если существует"
msgid "always" msgid "always"
msgstr "всегда" msgstr "всегда"
msgid "Use workaround for HWAccelerated OSD"
msgstr ""
msgid "Show Main Menu Entry" msgid "Show Main Menu Entry"
msgstr "Показывать пункт в главном меню" msgstr "Показывать пункт в главном меню"

View File

@@ -3,7 +3,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: vdr-tvguide 1.1.0\n" "Project-Id-Version: vdr-tvguide 1.1.0\n"
"Report-Msgid-Bugs-To: <see README>\n" "Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2019-04-22 14:34+0200\n" "POT-Creation-Date: 2020-01-06 14:31+0100\n"
"PO-Revision-Date: 2013-09-15 00:12+0100\n" "PO-Revision-Date: 2013-09-15 00:12+0100\n"
"Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n" "Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n"
"Language-Team: \n" "Language-Team: \n"
@@ -96,12 +96,6 @@ msgstr ""
msgid "recordings done" msgid "recordings done"
msgstr "" msgstr ""
msgid "What's on now"
msgstr ""
msgid "What's on next"
msgstr ""
msgid "Instant Record" msgid "Instant Record"
msgstr "Okam<61>ite nahra<72>" msgstr "Okam<61>ite nahra<72>"
@@ -141,6 +135,9 @@ msgstr "Vyh
msgid "Set Folder for" msgid "Set Folder for"
msgstr "Nastavi<76> adres<65>r pre" msgstr "Nastavi<76> adres<65>r pre"
msgid "Timer changed"
msgstr ""
msgid "Timer created" msgid "Timer created"
msgstr "Pl<50>n vytvoren<65>" msgstr "Pl<50>n vytvoren<65>"
@@ -564,6 +561,12 @@ msgstr "Nena
msgid "No Favorites available" msgid "No Favorites available"
msgstr "" msgstr ""
msgid "What's on now"
msgstr ""
msgid "What's on next"
msgstr ""
msgid "whole term must appear" msgid "whole term must appear"
msgstr "kompletn<74> v<>raz" msgstr "kompletn<74> v<>raz"
@@ -672,6 +675,9 @@ msgstr "ak s
msgid "always" msgid "always"
msgstr "v<>dy" msgstr "v<>dy"
msgid "Use workaround for HWAccelerated OSD"
msgstr ""
msgid "Show Main Menu Entry" msgid "Show Main Menu Entry"
msgstr "Zobrazi<7A> v hlavnom menu" msgstr "Zobrazi<7A> v hlavnom menu"

View File

@@ -44,7 +44,7 @@ bool cRecManager::RefreshRemoteTimers(void) {
bool cRecManager::CheckEventForTimer(const cEvent *event) { bool cRecManager::CheckEventForTimer(const cEvent *event) {
bool hasTimer = false; bool hasTimer = false;
if (tvguideConfig.useRemoteTimers && pRemoteTimers) { if (config.useRemoteTimers && pRemoteTimers) {
RemoteTimers_GetMatch_v1_0 rtMatch; RemoteTimers_GetMatch_v1_0 rtMatch;
rtMatch.event = event; rtMatch.event = event;
pRemoteTimers->Service("RemoteTimers::GetMatch-v1.0", &rtMatch); pRemoteTimers->Service("RemoteTimers::GetMatch-v1.0", &rtMatch);
@@ -66,7 +66,7 @@ bool cRecManager::CheckEventForTimer(const cEvent *event) {
const cTimer *cRecManager::GetTimerForEvent(const cEvent *event) { const cTimer *cRecManager::GetTimerForEvent(const cEvent *event) {
const cTimer *timer = NULL; const cTimer *timer = NULL;
if (tvguideConfig.useRemoteTimers && pRemoteTimers) { if (config.useRemoteTimers && pRemoteTimers) {
RemoteTimers_GetMatch_v1_0 rtMatch; RemoteTimers_GetMatch_v1_0 rtMatch;
rtMatch.event = event; rtMatch.event = event;
pRemoteTimers->Service("RemoteTimers::GetMatch-v1.0", &rtMatch); pRemoteTimers->Service("RemoteTimers::GetMatch-v1.0", &rtMatch);
@@ -85,7 +85,7 @@ const cTimer *cRecManager::GetTimerForEvent(const cEvent *event) {
cTimer *cRecManager::createTimer(const cEvent *event, std::string path) { cTimer *cRecManager::createTimer(const cEvent *event, std::string path) {
cTimer *timer = NULL; cTimer *timer = NULL;
if (tvguideConfig.useRemoteTimers && pRemoteTimers) { if (config.useRemoteTimers && pRemoteTimers) {
timer = createRemoteTimer(event, path); timer = createRemoteTimer(event, path);
} else { } else {
timer = createLocalTimer(event, path); timer = createLocalTimer(event, path);
@@ -99,10 +99,11 @@ cTimer *cRecManager::createLocalTimer(const cEvent *event, std::string path) {
if (Setup.SVDRPPeering && *Setup.SVDRPDefaultHost) if (Setup.SVDRPPeering && *Setup.SVDRPDefaultHost)
((cTimer*)timer)->SetRemote(Setup.SVDRPDefaultHost); ((cTimer*)timer)->SetRemote(Setup.SVDRPDefaultHost);
LOCK_TIMERS_WRITE; LOCK_TIMERS_WRITE;
cTimer *t = Timers->GetTimer(timer); cTimers* timers = Timers;
#else #else
cTimer *t = Timers.GetTimer(timer); cTimers* timers = &Timers;
#endif #endif
cTimer *t = timers->GetTimer(timer);
if (t) { if (t) {
t->OnOff(); t->OnOff();
#if VDRVERSNUM >= 20301 #if VDRVERSNUM >= 20301
@@ -114,19 +115,11 @@ cTimer *cRecManager::createLocalTimer(const cEvent *event, std::string path) {
timer = t; timer = t;
isyslog("timer %s reactivated", *t->ToDescr()); isyslog("timer %s reactivated", *t->ToDescr());
} else { } else {
#if VDRVERSNUM >= 20301 timers->Add(timer);
Timers->Add(timer);
#else
Timers.Add(timer);
#endif
isyslog("timer %s added (active)", *timer->ToDescr()); isyslog("timer %s added (active)", *timer->ToDescr());
} }
SetTimerPath(timer, event, path); SetTimerPath(timer, event, path);
#if VDRVERSNUM >= 20301 timers->SetModified();
Timers->SetModified();
#else
Timers.SetModified();
#endif
return timer; return timer;
} }
@@ -150,9 +143,9 @@ cTimer *cRecManager::createRemoteTimer(const cEvent *event, std::string path) {
} }
void cRecManager::SetTimerPath(cTimer *timer, const cEvent *event, std::string path) { void cRecManager::SetTimerPath(cTimer *timer, const cEvent *event, std::string path) {
if (tvguideConfig.instRecFolderMode == eFolderFixed) { if (config.instRecFolderMode == eFolderFixed) {
Epgsearch_services_v1_2 *epgSearch = new Epgsearch_services_v1_2; Epgsearch_services_v1_2 *epgSearch = new Epgsearch_services_v1_2;
std::string recDir = tvguideConfig.instRecFixedFolder; std::string recDir = config.instRecFixedFolder;
std::replace(recDir.begin(), recDir.end(), '/', '~'); std::replace(recDir.begin(), recDir.end(), '/', '~');
if (strchr(recDir.c_str(), '%') != NULL) { if (strchr(recDir.c_str(), '%') != NULL) {
if (epgSearchPlugin->Service("Epgsearch-services-v1.1", epgSearch)) { if (epgSearchPlugin->Service("Epgsearch-services-v1.1", epgSearch)) {
@@ -182,25 +175,10 @@ void cRecManager::SetTimerPath(cTimer *timer, const cEvent *event, std::string p
timer->SetFile(*newFileName); timer->SetFile(*newFileName);
} }
void cRecManager::DeleteTimer(int timerID) {
#if VDRVERSNUM >= 20301
cTimer *t;
{
LOCK_TIMERS_WRITE;
t = Timers->Get(timerID);
}
#else
cTimer *t = Timers.Get(timerID);
#endif
if (!t)
return;
DeleteTimer(t);
}
void cRecManager::DeleteTimer(const cEvent *event) { void cRecManager::DeleteTimer(const cEvent *event) {
if (!event) if (!event)
return; return;
if (tvguideConfig.useRemoteTimers && pRemoteTimers) { if (config.useRemoteTimers && pRemoteTimers) {
DeleteRemoteTimer(event); DeleteRemoteTimer(event);
} else { } else {
DeleteLocalTimer(event); DeleteLocalTimer(event);
@@ -231,7 +209,8 @@ void cRecManager::DeleteTimer(const cTimer *timer) {
cTimers* timers = &Timers; cTimers* timers = &Timers;
cTimer* t = timers->GetTimer((cTimer*)timer); cTimer* t = timers->GetTimer((cTimer*)timer);
#endif #endif
if (!t)
return;
if (t->Recording()) { if (t->Recording()) {
t->Skip(); t->Skip();
#if VDRVERSNUM >= 20301 #if VDRVERSNUM >= 20301
@@ -239,7 +218,7 @@ void cRecManager::DeleteTimer(const cTimer *timer) {
#else #else
cRecordControls::Process(time(NULL)); cRecordControls::Process(time(NULL));
#endif #endif
} }
isyslog("timer %s deleted", *t->ToDescr()); isyslog("timer %s deleted", *t->ToDescr());
timers->Del(t, true); timers->Del(t, true);
timers->SetModified(); timers->SetModified();
@@ -293,7 +272,7 @@ void cRecManager::SaveTimer(const cTimer *t, cTimer newTimerSettings) {
#if VDRVERSNUM < 20300 #if VDRVERSNUM < 20300
timer->SetEventFromSchedule(); timer->SetEventFromSchedule();
#endif #endif
if (tvguideConfig.useRemoteTimers && pRemoteTimers) { if (config.useRemoteTimers && pRemoteTimers) {
RemoteTimers_Timer_v1_0 rt; RemoteTimers_Timer_v1_0 rt;
rt.timer = timer; rt.timer = timer;
if (!pRemoteTimers->Service("RemoteTimers::ModTimer-v1.0", &rt)) if (!pRemoteTimers->Service("RemoteTimers::ModTimer-v1.0", &rt))
@@ -308,7 +287,6 @@ void cRecManager::SaveTimer(const cTimer *t, cTimer newTimerSettings) {
} }
} }
bool cRecManager::IsRecorded(const cEvent *event) { bool cRecManager::IsRecorded(const cEvent *event) {
#if VDRVERSNUM >= 20301 #if VDRVERSNUM >= 20301
LOCK_TIMERS_WRITE; LOCK_TIMERS_WRITE;
@@ -341,11 +319,10 @@ cTVGuideTimerConflicts *cRecManager::CheckTimerConflict(void) {
} }
void cRecManager::CreateSeriesTimer(cTimer *seriesTimer) { void cRecManager::CreateSeriesTimer(cTimer *seriesTimer) {
#if VDRVERSNUM >= 20301 #if VDRVERSNUM < 20300
#else
seriesTimer->SetEventFromSchedule(); seriesTimer->SetEventFromSchedule();
#endif #endif
if (tvguideConfig.useRemoteTimers && pRemoteTimers) { if (config.useRemoteTimers && pRemoteTimers) {
RemoteTimers_Timer_v1_0 rt; RemoteTimers_Timer_v1_0 rt;
rt.timer = seriesTimer; rt.timer = seriesTimer;
if (!pRemoteTimers->Service("RemoteTimers::NewTimer-v1.0", &rt)) if (!pRemoteTimers->Service("RemoteTimers::NewTimer-v1.0", &rt))
@@ -355,12 +332,11 @@ void cRecManager::CreateSeriesTimer(cTimer *seriesTimer) {
#if VDRVERSNUM >= 20301 #if VDRVERSNUM >= 20301
LOCK_TIMERS_WRITE; LOCK_TIMERS_WRITE;
cTimers* timers = Timers; cTimers* timers = Timers;
#else
cTimers* timers = &Timers;
#endif
timers->Add(seriesTimer); timers->Add(seriesTimer);
timers->SetModified(); timers->SetModified();
#else
Timers.Add(seriesTimer);
Timers.SetModified();
#endif
} }
} }
@@ -597,7 +573,7 @@ void cRecManager::DeleteSearchTimer(cTVGuideSearchTimer *searchTimer, bool delTi
timers = &Timers; timers = &Timers;
#endif #endif
cTimer *timer = timers->First(); cTimer *timer = timers->First();
while(timer) { while (timer) {
if (!timer->Recording()) { if (!timer->Recording()) {
char* searchID = GetAuxValue(timer, "s-id"); char* searchID = GetAuxValue(timer, "s-id");
if (searchID) { if (searchID) {
@@ -726,8 +702,8 @@ const cEvent **cRecManager::LoadReruns(const cEvent *event, int &numResults) {
if (epgSearchAvailable && !isempty(event->Title())) { if (epgSearchAvailable && !isempty(event->Title())) {
Epgsearch_searchresults_v1_0 data; Epgsearch_searchresults_v1_0 data;
std::string strQuery = event->Title(); std::string strQuery = event->Title();
if (tvguideConfig.useSubtitleRerun > 0) { if (config.useSubtitleRerun > 0) {
if (tvguideConfig.useSubtitleRerun == 2 || !isempty(event->ShortText())) if (config.useSubtitleRerun == 2 || !isempty(event->ShortText()))
strQuery += "~"; strQuery += "~";
if (!isempty(event->ShortText())) if (!isempty(event->ShortText()))
strQuery += event->ShortText(); strQuery += event->ShortText();
@@ -789,31 +765,23 @@ const cEvent **cRecManager::WhatsOnNow(bool nowOrNext, int &numResults) {
std::vector<const cEvent*> tmpResults; std::vector<const cEvent*> tmpResults;
#if VDRVERSNUM >= 20301 #if VDRVERSNUM >= 20301
LOCK_CHANNELS_READ; LOCK_CHANNELS_READ;
const cChannels* channels = Channels;
LOCK_SCHEDULES_READ; LOCK_SCHEDULES_READ;
const cSchedules* schedules = Schedules; const cSchedules* schedules = Schedules;
#else #else
cChannels* channels = &Channels;
cSchedulesLock schedulesLock; cSchedulesLock schedulesLock;
const cSchedules *schedules = cSchedules::Schedules(schedulesLock); const cSchedules *schedules = cSchedules::Schedules(schedulesLock);
#endif #endif
const cChannel *startChannel = NULL, *stopChannel = NULL; const cChannel *startChannel = NULL, *stopChannel = NULL;
if (tvguideConfig.favLimitChannels) { if (config.favLimitChannels) {
#if VDRVERSNUM >= 20301 startChannel = channels->GetByNumber(config.favStartChannel);
startChannel = Channels->GetByNumber(tvguideConfig.favStartChannel); stopChannel = channels->GetByNumber(config.favStopChannel);
stopChannel = Channels->GetByNumber(tvguideConfig.favStopChannel);
} }
if (!startChannel) if (!startChannel)
startChannel = Channels->First(); startChannel = channels->First();
for (const cChannel *channel = startChannel; channel; channel = Channels->Next(channel)) { for (const cChannel *channel = startChannel; channel; channel = channels->Next(channel)) {
#else
startChannel = Channels.GetByNumber(tvguideConfig.favStartChannel);
stopChannel = Channels.GetByNumber(tvguideConfig.favStopChannel);
}
if (!startChannel)
startChannel = Channels.First();
for (const cChannel *channel = startChannel; channel; channel = Channels.Next(channel)) {
#endif
if (channel->GroupSep()) continue; if (channel->GroupSep()) continue;
const cSchedule *Schedule = schedules->GetSchedule(channel); const cSchedule *Schedule = schedules->GetSchedule(channel);
if (!Schedule) continue; if (!Schedule) continue;
@@ -842,13 +810,13 @@ const cEvent **cRecManager::UserDefinedTime(int userTime, int &numResults) {
std::vector<const cEvent*> tmpResults; std::vector<const cEvent*> tmpResults;
int favTime = 0; int favTime = 0;
if (userTime == 1) { if (userTime == 1) {
favTime = tvguideConfig.favTime1; favTime = config.favTime1;
} else if (userTime == 2) { } else if (userTime == 2) {
favTime = tvguideConfig.favTime2; favTime = config.favTime2;
} else if (userTime == 3) { } else if (userTime == 3) {
favTime = tvguideConfig.favTime3; favTime = config.favTime3;
} else if (userTime == 4) { } else if (userTime == 4) {
favTime = tvguideConfig.favTime4; favTime = config.favTime4;
} }
time_t now = time(0); time_t now = time(0);
@@ -865,32 +833,23 @@ const cEvent **cRecManager::UserDefinedTime(int userTime, int &numResults) {
#if VDRVERSNUM >= 20301 #if VDRVERSNUM >= 20301
LOCK_CHANNELS_READ; LOCK_CHANNELS_READ;
const cChannels* channels = Channels;
LOCK_SCHEDULES_READ; LOCK_SCHEDULES_READ;
// const cChannels* channels = Channels;
const cSchedules* schedules = Schedules; const cSchedules* schedules = Schedules;
#else #else
cChannels* channels = &Channels;
cSchedulesLock schedulesLock; cSchedulesLock schedulesLock;
const cSchedules *schedules = cSchedules::Schedules(schedulesLock); const cSchedules *schedules = cSchedules::Schedules(schedulesLock);
#endif #endif
const cChannel *startChannel = NULL, *stopChannel = NULL; const cChannel *startChannel = NULL, *stopChannel = NULL;
if (tvguideConfig.favLimitChannels) { if (config.favLimitChannels) {
#if VDRVERSNUM >= 20301 startChannel = channels->GetByNumber(config.favStartChannel);
startChannel = Channels->GetByNumber(tvguideConfig.favStartChannel); stopChannel = channels->GetByNumber(config.favStopChannel);
stopChannel = Channels->GetByNumber(tvguideConfig.favStopChannel);
} }
if (!startChannel) if (!startChannel)
startChannel = Channels->First(); startChannel = channels->First();
for (const cChannel *channel = startChannel; channel; channel = Channels->Next(channel)) { for (const cChannel *channel = startChannel; channel; channel = channels->Next(channel)) {
#else
startChannel = Channels.GetByNumber(tvguideConfig.favStartChannel);
stopChannel = Channels.GetByNumber(tvguideConfig.favStopChannel);
}
if (!startChannel)
startChannel = Channels.First();
for (const cChannel *channel = startChannel; channel; channel = Channels.Next(channel)) {
#endif
if (channel->GroupSep()) continue; if (channel->GroupSep()) continue;
const cSchedule *Schedule = schedules->GetSchedule(channel); const cSchedule *Schedule = schedules->GetSchedule(channel);
if (!Schedule) continue; if (!Schedule) continue;

View File

@@ -34,7 +34,6 @@ public:
cTimer *createRemoteTimer(const cEvent *event, std::string path); cTimer *createRemoteTimer(const cEvent *event, std::string path);
void SetTimerPath(cTimer *timer, const cEvent *event, std::string path); void SetTimerPath(cTimer *timer, const cEvent *event, std::string path);
void DeleteTimer(const cTimer *timer); void DeleteTimer(const cTimer *timer);
void DeleteTimer(int timerID);
void DeleteTimer(const cEvent *event); void DeleteTimer(const cEvent *event);
void DeleteLocalTimer(const cEvent *event); void DeleteLocalTimer(const cEvent *event);
void DeleteRemoteTimer(const cEvent *event); void DeleteRemoteTimer(const cEvent *event);

View File

@@ -532,7 +532,7 @@ void cRecMenu::Arrange(bool scroll) {
} }
void cRecMenu::Display(bool scroll) { void cRecMenu::Display(bool scroll) {
if (tvguideConfig.style == eStyleGraphical) { if (config.style == eStyleGraphical) {
drawBackgroundGraphical(bgRecMenuBack); drawBackgroundGraphical(bgRecMenuBack);
} else { } else {
pixmap->Fill(theme.Color(clrBackground)); pixmap->Fill(theme.Color(clrBackground));
@@ -674,7 +674,7 @@ eRecMenuState cRecMenu::ProcessKey(eKeys Key) {
cImage *cRecMenu::createScrollbar(int width, int height, tColor clrBgr, tColor clrBlend) { cImage *cRecMenu::createScrollbar(int width, int height, tColor clrBgr, tColor clrBlend) {
cImage *image = new cImage(cSize(width, height)); cImage *image = new cImage(cSize(width, height));
image->Fill(clrBgr); image->Fill(clrBgr);
if (tvguideConfig.style != eStyleFlat) { if (config.style != eStyleFlat) {
int numSteps = 64; int numSteps = 64;
int alphaStep = 0x03; int alphaStep = 0x03;
if (height < 30) if (height < 30)

View File

@@ -36,7 +36,7 @@ void cRecMenuItem::SetPixmaps(void) {
} }
void cRecMenuItem::setBackground(void) { void cRecMenuItem::setBackground(void) {
if (tvguideConfig.style == eStyleGraphical) { if (config.style == eStyleGraphical) {
if (defaultBackground) { if (defaultBackground) {
drawBackgroundGraphical(bgButton, active); drawBackgroundGraphical(bgButton, active);
} }
@@ -52,7 +52,7 @@ void cRecMenuItem::setBackground(void) {
colorBlending = theme.Color(clrGrid1Blending); colorBlending = theme.Color(clrGrid1Blending);
colorText = theme.Color(clrFont); colorText = theme.Color(clrFont);
} }
colorTextBack = (tvguideConfig.style == eStyleFlat)?color:clrTransparent; colorTextBack = (config.style == eStyleFlat)?color:clrTransparent;
if (defaultBackground) { if (defaultBackground) {
drawBackground(); drawBackground();
drawBorder(); drawBorder();
@@ -177,7 +177,7 @@ void cRecMenuItemButtonYesNo::Show(void) {
} }
void cRecMenuItemButtonYesNo::setBackground() { void cRecMenuItemButtonYesNo::setBackground() {
if (tvguideConfig.style == eStyleGraphical) { if (config.style == eStyleGraphical) {
drawBackgroundGraphical(bgButton, yesActive&&active); drawBackgroundGraphical(bgButton, yesActive&&active);
colorTextBack = clrTransparent; colorTextBack = clrTransparent;
colorTextNoBack = clrTransparent; colorTextNoBack = clrTransparent;
@@ -213,8 +213,8 @@ void cRecMenuItemButtonYesNo::setBackground() {
theme.Color(clrGrid1Blending)); theme.Color(clrGrid1Blending));
colorTextNo = theme.Color(clrFont); colorTextNo = theme.Color(clrFont);
} }
colorTextBack = (tvguideConfig.style == eStyleFlat)?color:clrTransparent; colorTextBack = (config.style == eStyleFlat)?color:clrTransparent;
colorTextNoBack = (tvguideConfig.style == eStyleFlat)?colorNoBack:clrTransparent; colorTextNoBack = (config.style == eStyleFlat)?colorNoBack:clrTransparent;
drawBackground(); drawBackground();
drawBorder(); drawBorder();
pixmapNo->drawBackground(); pixmapNo->drawBackground();
@@ -297,22 +297,17 @@ void cRecMenuItemInfo::Draw(void) {
// --- cRecMenuItemInt ------------------------------------------------------- // --- cRecMenuItemInt -------------------------------------------------------
cRecMenuItemInt::cRecMenuItemInt(cString text, cRecMenuItemInt::cRecMenuItemInt(cString text,
int initialVal,
int minVal, int minVal,
int maxVal, int maxVal,
// bool refresh;
bool active, bool active,
int *callback, int *callback,
eRecMenuState action, eRecMenuState action) {
int indent) {
selectable = true; selectable = true;
this->text = text; this->text = text;
this->currentVal = initialVal; this->currentVal = *callback;
this->minVal = minVal; this->minVal = minVal;
this->maxVal = maxVal; this->maxVal = maxVal;
// this->refresh = refresh;
this->active = active; this->active = active;
this->indent = indent;
this->callback = callback; this->callback = callback;
this->action = action; this->action = action;
height = 3 * font->Height() / 2; height = 3 * font->Height() / 2;
@@ -352,7 +347,7 @@ void cRecMenuItemInt::setBackground() {
void cRecMenuItemInt::Draw(void) { void cRecMenuItemInt::Draw(void) {
int textY = (height - font->Height()) / 2; int textY = (height - font->Height()) / 2;
pixmap->DrawText(cPoint(10 + indent * 30, textY), *text, colorText, colorTextBack, font); pixmap->DrawText(cPoint(10, textY), *text, colorText, colorTextBack, font);
DrawValue(); DrawValue();
} }
@@ -410,38 +405,32 @@ eRecMenuState cRecMenuItemInt::ProcessKey(eKeys Key) {
// --- cRecMenuItemBool ------------------------------------------------------- // --- cRecMenuItemBool -------------------------------------------------------
cRecMenuItemBool::cRecMenuItemBool(cString text, cRecMenuItemBool::cRecMenuItemBool(cString text,
bool initialVal,
bool refresh,
bool active, bool active,
bool *callback, bool *callback,
eRecMenuState action, eRecMenuState action,
int indent) { bool refresh) {
selectable = true; selectable = true;
this->text = text; this->text = text;
this->yes = initialVal; this->yes = *callback;
this->refresh = refresh; this->refresh = refresh;
this->active = active; this->active = active;
this->callback = callback; this->callback = callback;
this->indent = indent;
this->action = action; this->action = action;
height = 3 * font->Height() / 2; height = 3 * font->Height() / 2;
pixmapVal = NULL; pixmapVal = NULL;
} }
cRecMenuItemBool::cRecMenuItemBool(cString text, cRecMenuItemBool::cRecMenuItemBool(cString text,
bool initialVal,
bool refresh,
bool active, bool active,
int *callback, int *callback,
eRecMenuState action, eRecMenuState action,
int indent) { bool refresh) {
selectable = true; selectable = true;
this->text = text; this->text = text;
this->yes = initialVal; this->yes = *callback;
this->refresh = refresh; this->refresh = refresh;
this->active = active; this->active = active;
this->callback = (bool*)callback; this->callback = (bool*)callback;
this->indent = indent;
this->action = action; this->action = action;
height = 3 * font->Height() / 2; height = 3 * font->Height() / 2;
pixmapVal = NULL; pixmapVal = NULL;
@@ -474,13 +463,13 @@ void cRecMenuItemBool::Show(void) {
void cRecMenuItemBool::Draw(void) { void cRecMenuItemBool::Draw(void) {
int textY = (height - font->Height()) / 2; int textY = (height - font->Height()) / 2;
pixmap->DrawText(cPoint(10 + indent * 30, textY), *text, colorText, colorTextBack, font); pixmap->DrawText(cPoint(10, textY), *text, colorText, colorTextBack, font);
DrawValue(); DrawValue();
} }
void cRecMenuItemBool::DrawValue(void) { void cRecMenuItemBool::DrawValue(void) {
pixmapVal->Fill(clrTransparent); pixmapVal->Fill(clrTransparent);
std::string strIcon = yes?"yes":"no"; std::string strIcon = yes ? "yes" : "no";
int iconSize = height - 8; int iconSize = height - 8;
int iconX = width - iconSize - 10; int iconX = width - iconSize - 10;
int iconY = (height - iconSize) / 2; int iconY = (height - iconSize) / 2;
@@ -515,24 +504,20 @@ eRecMenuState cRecMenuItemBool::ProcessKey(eKeys Key) {
// --- cRecMenuItemSelect ------------------------------------------------------- // --- cRecMenuItemSelect -------------------------------------------------------
cRecMenuItemSelect::cRecMenuItemSelect(cString text, cRecMenuItemSelect::cRecMenuItemSelect(cString text,
std::vector<std::string> Strings, std::vector<std::string> Strings,
int initialVal,
bool active, bool active,
int *callback, int *callback,
eRecMenuState action, eRecMenuState action,
bool refresh, bool refresh) {
int indent) {
selectable = true; selectable = true;
this->text = text; this->text = text;
strings = Strings; strings = Strings;
numValues = Strings.size(); numValues = Strings.size();
if ((initialVal < 0) || (initialVal > numValues-1)) this->currentVal = *callback;
if ((this->currentVal < 0) || (this->currentVal > numValues - 1))
this->currentVal = 0; this->currentVal = 0;
else
this->currentVal = initialVal;
this->active = active; this->active = active;
this->callback = callback; this->callback = callback;
this->refresh = refresh; this->refresh = refresh;
this->indent = indent;
this->action = action; this->action = action;
height = 3 * font->Height() / 2; height = 3 * font->Height() / 2;
pixmapVal = NULL; pixmapVal = NULL;
@@ -565,7 +550,7 @@ void cRecMenuItemSelect::Show(void) {
void cRecMenuItemSelect::Draw(void) { void cRecMenuItemSelect::Draw(void) {
int textY = (height - font->Height()) / 2; int textY = (height - font->Height()) / 2;
pixmap->DrawText(cPoint(10 + indent * 30, textY), *text, colorText, colorTextBack, font); pixmap->DrawText(cPoint(10, textY), *text, colorText, colorTextBack, font);
DrawValue(); DrawValue();
} }
@@ -629,20 +614,18 @@ cRecMenuItemSelectDirectory::cRecMenuItemSelectDirectory(cString text,
bool active, bool active,
char *callback, char *callback,
eRecMenuState action, eRecMenuState action,
bool isSearchTimer, bool isSearchTimer) {
int indent) {
selectable = true; selectable = true;
this->text = text; this->text = text;
this->originalFolder = originalFolder; this->originalFolder = originalFolder;
this->active = active; this->active = active;
this->callback = callback; this->callback = callback;
this->indent = indent;
this->action = action; this->action = action;
height = 3 * font->Height() / 2; height = 3 * font->Height() / 2;
pixmapVal = NULL; pixmapVal = NULL;
folders.push_back(tr("root video folder")); folders.push_back(tr("root video folder"));
if (isSearchTimer && tvguideConfig.instRecFixedFolder.size() > 0) if (isSearchTimer && config.instRecFixedFolder.size() > 0)
folders.push_back(tvguideConfig.instRecFixedFolder); folders.push_back(config.instRecFixedFolder);
ReadRecordingDirectories(&folders, NULL, ""); ReadRecordingDirectories(&folders, NULL, "");
numValues = folders.size(); numValues = folders.size();
this->currentVal = GetInitial(); this->currentVal = GetInitial();
@@ -675,16 +658,16 @@ void cRecMenuItemSelectDirectory::Show(void) {
void cRecMenuItemSelectDirectory::Draw(void) { void cRecMenuItemSelectDirectory::Draw(void) {
int textY = (height - font->Height()) / 2; int textY = (height - font->Height()) / 2;
pixmap->DrawText(cPoint(10 + indent * 30, textY), *text, colorText, colorTextBack, font); pixmap->DrawText(cPoint(10, textY), *text, colorText, colorTextBack, font);
DrawValue(); DrawValue();
} }
void cRecMenuItemSelectDirectory::DrawValue(void) { void cRecMenuItemSelectDirectory::DrawValue(void) {
pixmapVal->Fill(clrTransparent); pixmapVal->Fill(clrTransparent);
int iconSize = min(128, height); int iconSize = min(128, height);
int textX = width - font->Width(folders[currentVal].c_str()) - iconSize; int textX = std::max(width - font->Width(folders[currentVal].c_str()) - iconSize, 10 + font->Width(*text) + 2 * iconSize);
int textY = (height - font->Height()) / 2; int textY = (height - font->Height()) / 2;
pixmapVal->DrawText(cPoint(textX, textY), folders[currentVal].c_str(), colorText, clrTransparent, font); pixmapVal->DrawText(cPoint(textX, textY), folders[currentVal].c_str(), colorText, clrTransparent, font, width - textX - iconSize, font->Height(), taTop | taRight);
int iconLeftX = textX - iconSize; int iconLeftX = textX - iconSize;
int iconRightX = width - iconSize; int iconRightX = width - iconSize;
int iconY = (height - iconSize) / 2; int iconY = (height - iconSize) / 2;
@@ -750,13 +733,12 @@ int cRecMenuItemSelectDirectory::GetInitial(void) {
// --- cRecMenuItemText ------------------------------------------------------- // --- cRecMenuItemText -------------------------------------------------------
cRecMenuItemText::cRecMenuItemText(cString title, cRecMenuItemText::cRecMenuItemText(cString title,
char *initialVal,
int length, int length,
bool active, bool active,
char *callback) { char *callback) {
selectable = true; selectable = true;
this->title = title; this->title = title;
value = initialVal; value = callback;
this->active = active; this->active = active;
this->callback = callback; this->callback = callback;
height = 3 * font->Height(); height = 3 * font->Height();
@@ -1323,21 +1305,18 @@ eRecMenuState cRecMenuItemText::ProcessKey(eKeys Key) {
// --- cRecMenuItemTime ------------------------------------------------------- // --- cRecMenuItemTime -------------------------------------------------------
cRecMenuItemTime::cRecMenuItemTime(cString text, cRecMenuItemTime::cRecMenuItemTime(cString text,
int initialVal,
bool active, bool active,
int *callback, int *callback,
eRecMenuState action, eRecMenuState action) {
int indent) {
selectable = true; selectable = true;
this->text = text; this->text = text;
this->value = initialVal; this->value = *callback;
hh = value / 100; hh = value / 100;
mm = value % 100; mm = value % 100;
pos = 0; pos = 0;
fresh = true; fresh = true;
this->active = active; this->active = active;
this->callback = callback; this->callback = callback;
this->indent = indent;
this->action = action; this->action = action;
height = 3 * font->Height() / 2; height = 3 * font->Height() / 2;
pixmapVal = NULL; pixmapVal = NULL;
@@ -1370,7 +1349,7 @@ void cRecMenuItemTime::Show(void) {
void cRecMenuItemTime::Draw(void) { void cRecMenuItemTime::Draw(void) {
int textY = (height - font->Height()) / 2; int textY = (height - font->Height()) / 2;
pixmap->DrawText(cPoint(10 + indent * 30, textY), *text, colorText, colorTextBack, font); pixmap->DrawText(cPoint(10, textY), *text, colorText, colorTextBack, font);
DrawValue(); DrawValue();
} }
@@ -1469,13 +1448,12 @@ eRecMenuState cRecMenuItemTime::ProcessKey(eKeys Key) {
// --- cRecMenuItemDay ------------------------------------------------------- // --- cRecMenuItemDay -------------------------------------------------------
cRecMenuItemDay::cRecMenuItemDay(cString text, cRecMenuItemDay::cRecMenuItemDay(cString text,
time_t initialVal,
bool active, bool active,
time_t *callback, time_t *callback,
eRecMenuState action) { eRecMenuState action) {
selectable = true; selectable = true;
this->text = text; this->text = text;
this->currentVal = cTimer::SetTime(initialVal, 0); this->currentVal = cTimer::SetTime(*callback, 0);
this->active = active; this->active = active;
this->callback = callback; this->callback = callback;
this->action = action; this->action = action;
@@ -1615,9 +1593,9 @@ void cRecMenuItemTimer::Draw(void) {
channelName = channel->Name(); channelName = channel->Name();
} }
int logoX = DrawIcons(); int logoX = DrawIcons();
int logoWidth = height * tvguideConfig.logoWidthRatio / tvguideConfig.logoHeightRatio; int logoWidth = height * config.logoWidthRatio / config.logoHeightRatio;
cImageLoader imgLoader; cImageLoader imgLoader;
if (!tvguideConfig.hideChannelLogos) { if (!config.hideChannelLogos) {
if (imgLoader.LoadLogo(channel, logoWidth, height)) { if (imgLoader.LoadLogo(channel, logoWidth, height)) {
cImage logo = imgLoader.GetImage(); cImage logo = imgLoader.GetImage();
pixmapIcons->DrawImage(cPoint(logoX, 0), logo); pixmapIcons->DrawImage(cPoint(logoX, 0), logo);
@@ -1865,9 +1843,9 @@ void cRecMenuItemEvent::Draw(void) {
cString channelName = ""; cString channelName = "";
if (channel) if (channel)
channelName = channel->Name(); channelName = channel->Name();
int logoWidth = height * tvguideConfig.logoWidthRatio / tvguideConfig.logoHeightRatio; int logoWidth = height * config.logoWidthRatio / config.logoHeightRatio;
cImageLoader imgLoader; cImageLoader imgLoader;
if (!tvguideConfig.hideChannelLogos) { if (!config.hideChannelLogos) {
if (imgLoader.LoadLogo(channel, logoWidth, height)) { if (imgLoader.LoadLogo(channel, logoWidth, height)) {
cImage logo = imgLoader.GetImage(); cImage logo = imgLoader.GetImage();
pixmapText->DrawImage(cPoint(logoX, (height - logo.Height()) / 2), logo); pixmapText->DrawImage(cPoint(logoX, (height - logo.Height()) / 2), logo);
@@ -1957,15 +1935,21 @@ eRecMenuState cRecMenuItemEvent::ProcessKey(eKeys Key) {
// --- cRecMenuItemChannelChooser ------------------------------------------------------- // --- cRecMenuItemChannelChooser -------------------------------------------------------
cRecMenuItemChannelChooser::cRecMenuItemChannelChooser(cString text, cRecMenuItemChannelChooser::cRecMenuItemChannelChooser(cString text,
const cChannel *initialChannel,
bool active, bool active,
int *callback, int *callback,
eRecMenuState action, eRecMenuState action) {
int indent) {
selectable = true; selectable = true;
this->text = text; this->text = text;
this->channel = initialChannel; #if VDRVERSNUM >= 20301
if (initialChannel) {
LOCK_CHANNELS_READ;
channels = Channels;
}
#else
channels = &Channels;
#endif
this->channel = channels->GetByNumber(*callback);
if (callback)
initialChannelSet = true; initialChannelSet = true;
else else
initialChannelSet = false; initialChannelSet = false;
@@ -1973,10 +1957,8 @@ cRecMenuItemChannelChooser::cRecMenuItemChannelChooser(cString text,
fresh = true; fresh = true;
this->active = active; this->active = active;
this->callback = callback; this->callback = callback;
this->indent = indent;
this->action = action; this->action = action;
height = 3 * font->Height() / 2; height = 3 * font->Height() / 2;
// height = 2 * font->Height();
pixmapChannel = NULL; pixmapChannel = NULL;
} }
@@ -2007,7 +1989,7 @@ void cRecMenuItemChannelChooser::Show(void) {
void cRecMenuItemChannelChooser::Draw(void) { void cRecMenuItemChannelChooser::Draw(void) {
int textY = (height - font->Height()) / 2; int textY = (height - font->Height()) / 2;
pixmap->DrawText(cPoint(10 + indent * 30, textY), *text, colorText, colorTextBack, font); pixmap->DrawText(cPoint(10, textY), *text, colorText, colorTextBack, font);
DrawValue(); DrawValue();
} }
@@ -2018,7 +2000,7 @@ void cRecMenuItemChannelChooser::DrawValue(void) {
cString textVal = cString::sprintf("%d - %s", channel->Number(), channel->Name()); cString textVal = cString::sprintf("%d - %s", channel->Number(), channel->Name());
int textX = width - font->Width(*textVal) - 10; int textX = width - font->Width(*textVal) - 10;
pixmapChannel->DrawText(cPoint(textX, textY), *textVal, colorText, clrTransparent, font); pixmapChannel->DrawText(cPoint(textX, textY), *textVal, colorText, clrTransparent, font);
int logoWidth = height * tvguideConfig.logoWidthRatio / tvguideConfig.logoHeightRatio; int logoWidth = height * config.logoWidthRatio / config.logoHeightRatio;
int logoX = textX - logoWidth - 10; int logoX = textX - logoWidth - 10;
cImageLoader imgLoader; cImageLoader imgLoader;
if (imgLoader.LoadLogo(channel, logoWidth, height - 10)) { if (imgLoader.LoadLogo(channel, logoWidth, height - 10)) {
@@ -2046,12 +2028,6 @@ eRecMenuState cRecMenuItemChannelChooser::ProcessKey(eKeys Key) {
if (!channel) if (!channel)
return rmsConsumed; return rmsConsumed;
const cChannel *prev = channel; const cChannel *prev = channel;
#if VDRVERSNUM >= 20301
LOCK_CHANNELS_READ;
const cChannels* channels = Channels;
#else
const cChannels* channels = &Channels;
#endif
const cChannel *firstChannel = channels->First(); const cChannel *firstChannel = channels->First();
if(firstChannel->GroupSep()) if(firstChannel->GroupSep())
firstChannel = channels->Next(firstChannel); firstChannel = channels->Next(firstChannel);
@@ -2077,12 +2053,6 @@ eRecMenuState cRecMenuItemChannelChooser::ProcessKey(eKeys Key) {
break; } break; }
case kRight: { case kRight: {
fresh = true; fresh = true;
#if VDRVERSNUM >= 20301
LOCK_CHANNELS_READ;
const cChannels* channels = Channels;
#else
const cChannels* channels = &Channels;
#endif
if (!channel) { if (!channel) {
channel = channels->First(); channel = channels->First();
if(channel->GroupSep()) if(channel->GroupSep())
@@ -2111,12 +2081,7 @@ eRecMenuState cRecMenuItemChannelChooser::ProcessKey(eKeys Key) {
fresh = false; fresh = false;
} }
channelNumber = channelNumber * 10 + (Key - k0); channelNumber = channelNumber * 10 + (Key - k0);
#if VDRVERSNUM >= 20301 chanNew = channels->GetByNumber(channelNumber);
LOCK_CHANNELS_READ;
const cChannel *chanNew = Channels->GetByNumber(channelNumber);
#else
const cChannel *chanNew = Channels.GetByNumber(channelNumber);
#endif
if (chanNew) { if (chanNew) {
channel = chanNew; channel = chanNew;
DrawValue(); DrawValue();
@@ -2135,18 +2100,15 @@ eRecMenuState cRecMenuItemChannelChooser::ProcessKey(eKeys Key) {
// --- cRecMenuItemDayChooser ------------------------------------------------------- // --- cRecMenuItemDayChooser -------------------------------------------------------
cRecMenuItemDayChooser::cRecMenuItemDayChooser(cString text, cRecMenuItemDayChooser::cRecMenuItemDayChooser(cString text,
int weekdays,
bool active, bool active,
int *callback, int *callback) {
int indent) {
selectable = true; selectable = true;
this->text = text; this->text = text;
this->weekdays = *callback;
if (weekdays < 1) if (weekdays < 1)
weekdays *= -1; weekdays *= -1;
this->weekdays = weekdays;
this->active = active; this->active = active;
this->callback = callback; this->callback = callback;
this->indent = indent;
height = 3 * font->Height() / 2; height = 3 * font->Height() / 2;
selectedDay = 0; selectedDay = 0;
pixmapWeekdays = NULL; pixmapWeekdays = NULL;
@@ -2209,7 +2171,7 @@ void cRecMenuItemDayChooser::setBackground() {
void cRecMenuItemDayChooser::Draw(void) { void cRecMenuItemDayChooser::Draw(void) {
int textY = (height - font->Height()) / 2; int textY = (height - font->Height()) / 2;
pixmap->DrawText(cPoint(10 + indent * 30, textY), *text, colorText, colorTextBack, font); pixmap->DrawText(cPoint(10, textY), *text, colorText, colorTextBack, font);
DrawDays(); DrawDays();
} }
@@ -2416,10 +2378,10 @@ void cRecMenuItemTimelineHeader::DrawCurrentTimer(void) {
const cChannel *channel = timer->Channel(); const cChannel *channel = timer->Channel();
int x = 0; int x = 0;
if (channel) { if (channel) {
int logoWidth = infoHeight * tvguideConfig.logoWidthRatio / tvguideConfig.logoHeightRatio; int logoWidth = infoHeight * config.logoWidthRatio / config.logoHeightRatio;
bool logoDrawn = false; bool logoDrawn = false;
cImageLoader imgLoader; cImageLoader imgLoader;
if (!tvguideConfig.hideChannelLogos) { if (!config.hideChannelLogos) {
if (imgLoader.LoadLogo(channel, logoWidth, infoHeight)) { if (imgLoader.LoadLogo(channel, logoWidth, infoHeight)) {
cImage logo = imgLoader.GetImage(); cImage logo = imgLoader.GetImage();
pixmapTimerInfo->DrawImage(cPoint(0, 0), logo); pixmapTimerInfo->DrawImage(cPoint(0, 0), logo);
@@ -2427,7 +2389,7 @@ void cRecMenuItemTimelineHeader::DrawCurrentTimer(void) {
logoDrawn = true; logoDrawn = true;
} }
} }
if (tvguideConfig.hideChannelLogos || !logoDrawn) { if (config.hideChannelLogos || !logoDrawn) {
int channelNameWidth = fontSmall->Width(channel->Name()); int channelNameWidth = fontSmall->Width(channel->Name());
pixmapTimerInfo->DrawText(cPoint(10, (infoHeight - fontSmall->Height())/2), channel->Name(), colorText, clrTransparent, fontSmall); pixmapTimerInfo->DrawText(cPoint(10, (infoHeight - fontSmall->Height())/2), channel->Name(), colorText, clrTransparent, fontSmall);
x += channelNameWidth + 20; x += channelNameWidth + 20;

View File

@@ -194,21 +194,16 @@ private:
int *callback; int *callback;
int minVal; int minVal;
int maxVal; int maxVal;
// bool refresh;
int indent;
cPixmap *pixmapVal; cPixmap *pixmapVal;
bool fresh; bool fresh;
void DrawValue(void); void DrawValue(void);
public: public:
cRecMenuItemInt(cString text, cRecMenuItemInt(cString text,
int initialVal,
int minVal, int minVal,
int maxVal, int maxVal,
// bool refresh = false,
bool active = false, bool active = false,
int *callback = NULL, int *callback = NULL,
eRecMenuState action = rmsNotConsumed, eRecMenuState action = rmsNotConsumed);
int indent = 0);
virtual ~cRecMenuItemInt(void); virtual ~cRecMenuItemInt(void);
void SetPixmaps(void); void SetPixmaps(void);
void Hide(void); void Hide(void);
@@ -224,26 +219,21 @@ class cRecMenuItemBool : public cRecMenuItem {
private: private:
cString text; cString text;
bool yes; bool yes;
int indent;
bool *callback; bool *callback;
cPixmap *pixmapVal; cPixmap *pixmapVal;
bool refresh; bool refresh;
void DrawValue(void); void DrawValue(void);
public: public:
cRecMenuItemBool(cString text, cRecMenuItemBool(cString text,
bool initialVal,
bool refresh = false,
bool active = false, bool active = false,
bool *callback = NULL, bool *callback = NULL,
eRecMenuState action = rmsNotConsumed, eRecMenuState action = rmsNotConsumed,
int indent = 0); bool refresh = false);
cRecMenuItemBool(cString text, cRecMenuItemBool(cString text,
bool initialVal,
bool refresh = false,
bool active = false, bool active = false,
int *callback = NULL, int *callback = NULL,
eRecMenuState action = rmsNotConsumed, eRecMenuState action = rmsNotConsumed,
int indent = 0); bool refresh = false);
virtual ~cRecMenuItemBool(void); virtual ~cRecMenuItemBool(void);
void SetPixmaps(void); void SetPixmaps(void);
void Hide(void); void Hide(void);
@@ -260,7 +250,6 @@ private:
int currentVal; int currentVal;
int *callback; int *callback;
bool refresh; bool refresh;
int indent;
std::vector<std::string> strings; std::vector<std::string> strings;
int numValues; int numValues;
cPixmap *pixmapVal; cPixmap *pixmapVal;
@@ -268,12 +257,10 @@ private:
public: public:
cRecMenuItemSelect(cString text, cRecMenuItemSelect(cString text,
std::vector<std::string> Strings, std::vector<std::string> Strings,
int initialVal,
bool active = false, bool active = false,
int *callback = NULL, int *callback = NULL,
eRecMenuState action = rmsNotConsumed, eRecMenuState action = rmsNotConsumed,
bool refresh = false, bool refresh = false);
int indent = 0);
virtual ~cRecMenuItemSelect(void); virtual ~cRecMenuItemSelect(void);
void SetPixmaps(void); void SetPixmaps(void);
void Hide(void); void Hide(void);
@@ -292,7 +279,6 @@ private:
std::vector<std::string> folders; std::vector<std::string> folders;
int currentVal; int currentVal;
char *callback; char *callback;
int indent;
int numValues; int numValues;
cPixmap *pixmapVal; cPixmap *pixmapVal;
void DrawValue(void); void DrawValue(void);
@@ -304,8 +290,7 @@ public:
bool active = false, bool active = false,
char *callback = NULL, char *callback = NULL,
eRecMenuState action = rmsNotConsumed, eRecMenuState action = rmsNotConsumed,
bool isSearchTimer = false, bool isSearchTimer = false);
int indent = 0);
virtual ~cRecMenuItemSelectDirectory(void); virtual ~cRecMenuItemSelectDirectory(void);
void SetPixmaps(void); void SetPixmaps(void);
void Hide(void); void Hide(void);
@@ -358,7 +343,6 @@ private:
void DrawValue(char *newValue); void DrawValue(char *newValue);
public: public:
cRecMenuItemText(cString title, cRecMenuItemText(cString title,
char *initialVal,
int length, int length,
bool active = false, bool active = false,
char *callback = NULL); char *callback = NULL);
@@ -379,7 +363,6 @@ private:
cString text; cString text;
int value; int value;
int *callback; int *callback;
int indent;
int mm; int mm;
int hh; int hh;
int pos; int pos;
@@ -388,11 +371,9 @@ private:
void DrawValue(void); void DrawValue(void);
public: public:
cRecMenuItemTime(cString text, cRecMenuItemTime(cString text,
int initialVal,
bool active = false, bool active = false,
int *callback = NULL, int *callback = NULL,
eRecMenuState action = rmsNotConsumed, eRecMenuState action = rmsNotConsumed);
int indent = 0);
virtual ~cRecMenuItemTime(void); virtual ~cRecMenuItemTime(void);
void SetPixmaps(void); void SetPixmaps(void);
void Hide(void); void Hide(void);
@@ -412,7 +393,6 @@ private:
void DrawValue(void); void DrawValue(void);
public: public:
cRecMenuItemDay(cString text, cRecMenuItemDay(cString text,
time_t initialVal,
bool active = false, bool active = false,
time_t *callback = NULL, time_t *callback = NULL,
eRecMenuState action = rmsNotConsumed); eRecMenuState action = rmsNotConsumed);
@@ -509,21 +489,25 @@ public:
class cRecMenuItemChannelChooser : public cRecMenuItem { class cRecMenuItemChannelChooser : public cRecMenuItem {
private: private:
cString text; cString text;
#if VDRVERSNUM >= 20301
const cChannels *channels;
const cChannel *chanNew;
#else
cChannels *channels;
cChannel *chanNew;
#endif
const cChannel *channel; const cChannel *channel;
int channelNumber; int channelNumber;
int *callback; int *callback;
int indent;
bool initialChannelSet; bool initialChannelSet;
bool fresh; bool fresh;
cPixmap *pixmapChannel; cPixmap *pixmapChannel;
void DrawValue(void); void DrawValue(void);
public: public:
cRecMenuItemChannelChooser (cString text, cRecMenuItemChannelChooser (cString text,
const cChannel *initialChannel,
bool active = false, bool active = false,
int *callback = NULL, int *callback = NULL,
eRecMenuState action = rmsNotConsumed, eRecMenuState action = rmsNotConsumed);
int indent = 0);
virtual ~cRecMenuItemChannelChooser(void); virtual ~cRecMenuItemChannelChooser(void);
void SetPixmaps(void); void SetPixmaps(void);
void Hide(void); void Hide(void);
@@ -539,7 +523,6 @@ private:
cString text; cString text;
int weekdays; int weekdays;
int *callback; int *callback;
int indent;
bool epgsearchMode; bool epgsearchMode;
std::string days; std::string days;
int daysX; int daysX;
@@ -555,10 +538,8 @@ private:
bool WeekDaySet(unsigned day); bool WeekDaySet(unsigned day);
public: public:
cRecMenuItemDayChooser (cString text, cRecMenuItemDayChooser (cString text,
int weekdays,
bool active = false, bool active = false,
int *callback = NULL, int *callback = NULL);
int indent = 0);
virtual ~cRecMenuItemDayChooser(void); virtual ~cRecMenuItemDayChooser(void);
void SetPixmaps(void); void SetPixmaps(void);
void Hide(void); void Hide(void);

View File

@@ -1,13 +1,13 @@
#include "services/remotetimers.h" #include "services/remotetimers.h"
#include "tools.h" #include "tools.h"
#include "recmenumanager.h" #include "recmenuview.h"
#include "recmenus.h" #include "recmenus.h"
// --- cRecMenuMain --------------------------------------------------------- // --- cRecMenuMain ---------------------------------------------------------
cRecMenuMain::cRecMenuMain(bool epgSearchAvailable, bool timerActive, bool switchTimerActive) { cRecMenuMain::cRecMenuMain(bool epgSearchAvailable, bool timerActive, bool switchTimerActive) {
eRecMenuState action = rmsInstantRecord; eRecMenuState action = rmsInstantRecord;
if (!timerActive) { if (!timerActive) {
if (tvguideConfig.instRecFolderMode == eFolderSelect) if (config.instRecFolderMode == eFolderSelect)
action = rmsInstantRecordFolder; action = rmsInstantRecordFolder;
AddMenuItem(new cRecMenuItemButton(tr("Instant Record"), action, true, false, false, true)); AddMenuItem(new cRecMenuItemButton(tr("Instant Record"), action, true, false, false, true));
} else { } else {
@@ -22,7 +22,7 @@ cRecMenuMain::cRecMenuMain(bool epgSearchAvailable, bool timerActive, bool switc
AddMenuItem(new cRecMenuItemButton(tr("Search Timers"), rmsSearchTimers, false, false, false, true)); AddMenuItem(new cRecMenuItemButton(tr("Search Timers"), rmsSearchTimers, false, false, false, true));
} }
if (tvguideConfig.instRecFolderMode == eFolderSelect) if (config.instRecFolderMode == eFolderSelect)
action = rmsSeriesTimerFolder; action = rmsSeriesTimerFolder;
else else
action = rmsSeriesTimer; action = rmsSeriesTimer;
@@ -103,7 +103,7 @@ std::string cRecMenuAskFolder::GetFolder(void) {
} }
// --- cRecMenuConfirmTimer --------------------------------------------------------- // --- cRecMenuConfirmTimer ---------------------------------------------------------
cRecMenuConfirmTimer::cRecMenuConfirmTimer(const cEvent *event) { cRecMenuConfirmTimer::cRecMenuConfirmTimer(const cEvent *event, bool timerChanged) {
SetWidthPercent(50); SetWidthPercent(50);
#if VDRVERSNUM >= 20301 #if VDRVERSNUM >= 20301
LOCK_CHANNELS_READ; LOCK_CHANNELS_READ;
@@ -111,9 +111,8 @@ cRecMenuConfirmTimer::cRecMenuConfirmTimer(const cEvent *event) {
#else #else
const cString channelName = Channels.GetByChannelID(event->ChannelID())->Name(); const cString channelName = Channels.GetByChannelID(event->ChannelID())->Name();
#endif #endif
cString message;
bool eventHasTimer = false; bool eventHasTimer = false;
if (tvguideConfig.useRemoteTimers && pRemoteTimers) { if (config.useRemoteTimers && pRemoteTimers) {
RemoteTimers_GetMatch_v1_0 rtMatch; RemoteTimers_GetMatch_v1_0 rtMatch;
rtMatch.event = event; rtMatch.event = event;
pRemoteTimers->Service("RemoteTimers::GetMatch-v1.0", &rtMatch); pRemoteTimers->Service("RemoteTimers::GetMatch-v1.0", &rtMatch);
@@ -123,11 +122,9 @@ cRecMenuConfirmTimer::cRecMenuConfirmTimer(const cEvent *event) {
} else { } else {
eventHasTimer = event->HasTimer(); eventHasTimer = event->HasTimer();
} }
if (eventHasTimer) { const cString message = (eventHasTimer) ? (timerChanged) ? tr("Timer changed")
message = tr("Timer created"); : tr("Timer created")
} else { : tr("Timer NOT created");
message = tr("Timer NOT created");
}
cString text = cString::sprintf("%s\n%s\n%s %s - %s\n%s", cString text = cString::sprintf("%s\n%s\n%s %s - %s\n%s",
*message, *message,
*channelName, *channelName,
@@ -426,7 +423,7 @@ cRecMenuEditTimer::cRecMenuEditTimer(const cTimer *timer, eRecMenuState nextStat
AddMenuItemInitial(infoItem); AddMenuItemInitial(infoItem);
timerActive = false; timerActive = false;
if (tvguideConfig.useRemoteTimers && pRemoteTimers) { if (config.useRemoteTimers && pRemoteTimers) {
RemoteTimers_GetMatch_v1_0 rtMatch; RemoteTimers_GetMatch_v1_0 rtMatch;
rtMatch.event = timer->Event(); rtMatch.event = timer->Event();
pRemoteTimers->Service("RemoteTimers::GetMatch-v1.0", &rtMatch); pRemoteTimers->Service("RemoteTimers::GetMatch-v1.0", &rtMatch);
@@ -444,12 +441,12 @@ cRecMenuEditTimer::cRecMenuEditTimer(const cTimer *timer, eRecMenuState nextStat
lifetime = timer->Lifetime(); lifetime = timer->Lifetime();
strncpy(folder, GetDirectoryFromTimer(timer->File()).c_str(), TEXTINPUTLENGTH); strncpy(folder, GetDirectoryFromTimer(timer->File()).c_str(), TEXTINPUTLENGTH);
AddMenuItemInitial(new cRecMenuItemBool(tr("Timer Active"), timerActive, false, true, &timerActive)); AddMenuItemInitial(new cRecMenuItemBool(tr("Timer Active"), true, &timerActive));
AddMenuItemInitial(new cRecMenuItemInt(tr("Priority"), prio, 0, MAXPRIORITY, false, &prio)); AddMenuItemInitial(new cRecMenuItemInt(tr("Priority"), 0, MAXPRIORITY, false, &prio));
AddMenuItemInitial(new cRecMenuItemInt(tr("Lifetime"), lifetime, 0, MAXLIFETIME, false, &lifetime)); AddMenuItemInitial(new cRecMenuItemInt(tr("Lifetime"), 0, MAXLIFETIME, false, &lifetime));
AddMenuItemInitial(new cRecMenuItemDay(tr("Day"), day, false, &day)); AddMenuItemInitial(new cRecMenuItemDay(tr("Day"), false, &day));
AddMenuItemInitial(new cRecMenuItemTime(tr("Timer start time"), start, false, &start)); AddMenuItemInitial(new cRecMenuItemTime(tr("Timer start time"), false, &start));
AddMenuItemInitial(new cRecMenuItemTime(tr("Timer stop time"), stop, false, &stop)); AddMenuItemInitial(new cRecMenuItemTime(tr("Timer stop time"), false, &stop));
cString fileInfo = cString::sprintf("%s:\n%s", tr("Timer File"), timer->File()); cString fileInfo = cString::sprintf("%s:\n%s", tr("Timer File"), timer->File());
cRecMenuItemInfo *fileInfoItem = new cRecMenuItemInfo(*fileInfo, false); cRecMenuItemInfo *fileInfoItem = new cRecMenuItemInfo(*fileInfo, false);
fileInfoItem->CalculateHeight(width - 2 * border); fileInfoItem->CalculateHeight(width - 2 * border);
@@ -522,18 +519,14 @@ cRecMenuSeriesTimer::cRecMenuSeriesTimer(const cChannel *initialChannel, const c
infoItem->CalculateHeight(width - 2 * border); infoItem->CalculateHeight(width - 2 * border);
SetHeader(infoItem); SetHeader(infoItem);
AddMenuItem(new cRecMenuItemBool(tr("Timer Active"), timerActive, false, false, &timerActive)); AddMenuItem(new cRecMenuItemBool(tr("Timer Active"), false, &timerActive));
#if VDRVERSNUM >= 20301 AddMenuItem(new cRecMenuItemChannelChooser(tr("Channel"), false, &channel));
AddMenuItem(new cRecMenuItemChannelChooser(tr("Channel"), initialChannel, false, &channel)); AddMenuItem(new cRecMenuItemTime(tr("Series Timer start time"), false, &start));
#else AddMenuItem(new cRecMenuItemTime(tr("Series Timer stop time"), false, &stop));
AddMenuItem(new cRecMenuItemChannelChooser(tr("Channel"), (cChannel*)initialChannel, false, &channel)); AddMenuItem(new cRecMenuItemDayChooser(tr("Days to record"), false, &dayOfWeek));
#endif AddMenuItem(new cRecMenuItemDay(tr("Day to start"), false, &tstart));
AddMenuItem(new cRecMenuItemTime(tr("Series Timer start time"), start, false, &start)); AddMenuItem(new cRecMenuItemInt(tr("Priority"), 0, MAXPRIORITY, false, &priority));
AddMenuItem(new cRecMenuItemTime(tr("Series Timer stop time"), stop, false, &stop)); AddMenuItem(new cRecMenuItemInt(tr("Lifetime"), 0, MAXLIFETIME, false, &lifetime));
AddMenuItem(new cRecMenuItemDayChooser(tr("Days to record"), dayOfWeek, false, &dayOfWeek));
AddMenuItem(new cRecMenuItemDay(tr("Day to start"), tstart, false, &tstart));
AddMenuItem(new cRecMenuItemInt(tr("Priority"), priority, 0, MAXPRIORITY, false, &priority));
AddMenuItem(new cRecMenuItemInt(tr("Lifetime"), lifetime, 0, MAXLIFETIME, false, &lifetime));
AddMenuItem(new cRecMenuItemButtonYesNo(tr("Create Timer"), tr("Cancel"), rmsSeriesTimerCreate, rmsClose, true)); AddMenuItem(new cRecMenuItemButtonYesNo(tr("Create Timer"), tr("Cancel"), rmsSeriesTimerCreate, rmsClose, true));
@@ -615,7 +608,7 @@ cRecMenuSearchTimer::cRecMenuSearchTimer(const cEvent *event) {
infoItem->CalculateHeight(width - 2 * border); infoItem->CalculateHeight(width - 2 * border);
SetHeader(infoItem); SetHeader(infoItem);
strncpy(searchString, event->Title(), TEXTINPUTLENGTH); strncpy(searchString, event->Title(), TEXTINPUTLENGTH);
AddMenuItemInitial(new cRecMenuItemText(tr("Search Expression:"), searchString, TEXTINPUTLENGTH, false)); AddMenuItemInitial(new cRecMenuItemText(tr("Search Expression:"), TEXTINPUTLENGTH, false, searchString));
AddMenuItemInitial(new cRecMenuItemButtonYesNo(tr("Continue"), tr("Cancel"), rmsSearchTimerOptions, rmsClose, true)); AddMenuItemInitial(new cRecMenuItemButtonYesNo(tr("Continue"), tr("Cancel"), rmsSearchTimerOptions, rmsClose, true));
CalculateHeight(); CalculateHeight();
CreatePixmap(); CreatePixmap();
@@ -721,14 +714,22 @@ int cRecMenuSearchTimers::GetTotalNumMenuItems(void) {
cRecMenuSearchTimerEdit::cRecMenuSearchTimerEdit(cTVGuideSearchTimer searchTimer, std::vector<std::string> channelGroups) { cRecMenuSearchTimerEdit::cRecMenuSearchTimerEdit(cTVGuideSearchTimer searchTimer, std::vector<std::string> channelGroups) {
init = true; init = true;
deleteMenuItems = false; deleteMenuItems = false;
this->searchTimer = searchTimer;
this->sT = searchTimer; this->sT = searchTimer;
this->channelGroups = channelGroups; this->channelGroups = channelGroups;
strncpy(searchString, sT.searchString.c_str(), TEXTINPUTLENGTH); strncpy(searchString, sT.searchString.c_str(), TEXTINPUTLENGTH);
channelgroupIndex = -1; channelgroupIndex = -1;
std::string dir = sT.directory; std::string dir = sT.directory;
strncpy(directory, dir.c_str(), TEXTINPUTLENGTH); strncpy(directory, dir.c_str(), TEXTINPUTLENGTH);
dayOfWeek = sT.DayOfWeek(); dayOfWeek = DayOfWeek(sT.dayOfWeek);
// dsyslog("Weekday = %i, %i", sT.dayOfWeek, dayOfWeek);
indent = " ";
if (sT.useChannel == 1) {
startChannel = (sT.channelMin) ? sT.channelMin->Number() : 0;
stopChannel = (sT.channelMax) ? sT.channelMax->Number() : 0;
if (startChannel == 0) startChannel = 1;
if (stopChannel == 0) stopChannel = 1;
}
sT.GetSearchModes(&searchModes); sT.GetSearchModes(&searchModes);
sT.GetUseChannelModes(&useChannelModes); sT.GetUseChannelModes(&useChannelModes);
@@ -759,6 +760,31 @@ cRecMenuSearchTimerEdit::~cRecMenuSearchTimerEdit(void) {
mainMenuItems.clear(); mainMenuItems.clear();
} }
int cRecMenuSearchTimerEdit::DayOfWeek(int dayofWeek) {
int vdrDayOfWeek = 0;
if (dayofWeek > 0) {
vdrDayOfWeek = pow(2, (dayofWeek + 6) % 7);
} else if (dayofWeek < 0) {
int absDayOfWeek = abs(dayofWeek);
for (int i = 0; i < 7; i++) {
if (absDayOfWeek & (1 << i)) {
vdrDayOfWeek += pow(2, (i + 6) % 7);
}
}
}
return vdrDayOfWeek;
}
int cRecMenuSearchTimerEdit::SetDayOfWeek(int VDRDayOfWeek) {
int epgSearchDayOfWeek = 0;
for (int i=0; i < 7; i++) {
if (VDRDayOfWeek & (1 << i)) {
epgSearchDayOfWeek += pow(2, (i+1)%7);
}
}
return epgSearchDayOfWeek * (-1);
}
int cRecMenuSearchTimerEdit::SplitChannelGroups(std::vector<std::string> *channelGroups, std::vector<std::string> *channelgroups) { int cRecMenuSearchTimerEdit::SplitChannelGroups(std::vector<std::string> *channelGroups, std::vector<std::string> *channelgroups) {
int i = 0; int i = 0;
int j = 0; int j = 0;
@@ -790,94 +816,82 @@ void cRecMenuSearchTimerEdit::CreateMenuItems(void) {
mainMenuItems.clear(); mainMenuItems.clear();
} }
mainMenuItems.push_back(new cRecMenuItemText(tr("Search term"), searchString, TEXTINPUTLENGTH, init, searchString)); mainMenuItems.push_back(new cRecMenuItemText(tr("Search term"), TEXTINPUTLENGTH, init, searchString));
mainMenuItems.push_back(new cRecMenuItemBool(tr("Active"), sT.useAsSearchTimer, true, false, &sT.useAsSearchTimer, rmsSearchTimerSave)); mainMenuItems.push_back(new cRecMenuItemBool(tr("Active"), false, &sT.useAsSearchTimer, rmsSearchTimerSave, true));
mainMenuItems.push_back(new cRecMenuItemSelect(tr("Search mode"), searchModes, sT.mode, false, &sT.mode, rmsSearchTimerSave, true)); mainMenuItems.push_back(new cRecMenuItemSelect(tr("Search mode"), searchModes, false, &sT.mode, rmsSearchTimerSave, true));
if (sT.mode == 5) { if (sT.mode == 5) {
mainMenuItems.push_back(new cRecMenuItemInt(tr("Tolerance"), sT.fuzzyTolerance, 1, 9, false, &sT.fuzzyTolerance, rmsSearchTimerSave, 1)); mainMenuItems.push_back(new cRecMenuItemInt(cString::sprintf("%s%s", *indent, tr("Tolerance")), 1, 9, false, &sT.fuzzyTolerance, rmsSearchTimerSave));
} }
mainMenuItems.push_back(new cRecMenuItemBool(tr("Match case"), sT.useCase, false, false, &sT.useCase, rmsSearchTimerSave)); mainMenuItems.push_back(new cRecMenuItemBool(tr("Match case"), false, &sT.useCase, rmsSearchTimerSave));
mainMenuItems.push_back(new cRecMenuItemBool(tr("Use title"), sT.useTitle, false, false, &sT.useTitle, rmsSearchTimerSave)); mainMenuItems.push_back(new cRecMenuItemBool(tr("Use title"), false, &sT.useTitle, rmsSearchTimerSave));
mainMenuItems.push_back(new cRecMenuItemBool(tr("Use subtitle"), sT.useSubtitle, false, false, &sT.useSubtitle, rmsSearchTimerSave)); mainMenuItems.push_back(new cRecMenuItemBool(tr("Use subtitle"), false, &sT.useSubtitle, rmsSearchTimerSave));
mainMenuItems.push_back(new cRecMenuItemBool(tr("Use description"), sT.useDescription, false, false, &sT.useDescription, rmsSearchTimerSave)); mainMenuItems.push_back(new cRecMenuItemBool(tr("Use description"), false, &sT.useDescription, rmsSearchTimerSave));
// mainMenuItems.push_back(new cRecMenuItemBool(tr("Use content descriptor"), sT.useContentDescriptors, false, false, &sT.useContentDescriptors, rmsSearchTimerSave)); // mainMenuItems.push_back(new cRecMenuItemBool(tr("Use content descriptor"), false, &sT.useContentDescriptors, rmsSearchTimerSave));
mainMenuItems.push_back(new cRecMenuItemSelect(tr("Use channel"), useChannelModes, sT.useChannel, false, &sT.useChannel, rmsSearchTimerSave, true)); mainMenuItems.push_back(new cRecMenuItemSelect(tr("Use channel"), useChannelModes, false, &sT.useChannel, rmsSearchTimerSave, true));
if (sT.useChannel == 1) { if (sT.useChannel == 1) {
startChannel = (sT.channelMin) ? sT.channelMin->Number() : 0; mainMenuItems.push_back(new cRecMenuItemChannelChooser(cString::sprintf("%s%s", *indent, tr("from channel")), false, &startChannel, rmsSearchTimerSave));
stopChannel = (sT.channelMax) ? sT.channelMax->Number() : 0; mainMenuItems.push_back(new cRecMenuItemChannelChooser(cString::sprintf("%s%s", *indent, tr("to channel")), false, &stopChannel, rmsSearchTimerSave));
if (startChannel == 0) startChannel = 1;
if (stopChannel == 0) stopChannel = 1;
#if VDRVERSNUM >= 20301
{
LOCK_CHANNELS_READ;
mainMenuItems.push_back(new cRecMenuItemChannelChooser(tr("from channel"), Channels->GetByNumber(startChannel), false, &startChannel, rmsSearchTimerSave, 1));
mainMenuItems.push_back(new cRecMenuItemChannelChooser(tr("to channel"), Channels->GetByNumber(stopChannel), false, &stopChannel, rmsSearchTimerSave, 1));
}
#else
mainMenuItems.push_back(new cRecMenuItemChannelChooser(tr("from channel"), Channels.GetByNumber(startChannel), false, &startChannel, rmsSearchTimerSave, 1));
mainMenuItems.push_back(new cRecMenuItemChannelChooser(tr("to channel"), Channels.GetByNumber(stopChannel), false, &stopChannel, rmsSearchTimerSave, 1));
#endif
} }
else if ((sT.useChannel == 2) && (channelgroups.size() > 0)) { else if ((sT.useChannel == 2) && (channelgroups.size() > 0)) {
mainMenuItems.push_back(new cRecMenuItemSelect(tr("Channel group"), channelgroups, channelgroupIndex, false, &channelgroupIndex, rmsSearchTimerSave, false, 1)); mainMenuItems.push_back(new cRecMenuItemSelect(cString::sprintf("%s%s", *indent, tr("Channel group")), channelgroups, false, &channelgroupIndex, rmsSearchTimerSave, false));
} }
mainMenuItems.push_back(new cRecMenuItemBool(tr("Use time"), sT.useTime, true, false, &sT.useTime, rmsSearchTimerSave)); mainMenuItems.push_back(new cRecMenuItemBool(tr("Use time"), false, &sT.useTime, rmsSearchTimerSave, true));
if (sT.useTime) { if (sT.useTime) {
mainMenuItems.push_back(new cRecMenuItemTime(tr("Start after"), sT.startTime, false, &sT.startTime, rmsSearchTimerSave, 1)); mainMenuItems.push_back(new cRecMenuItemTime(cString::sprintf("%s%s", *indent, tr("Start after")), false, &sT.startTime, rmsSearchTimerSave));
mainMenuItems.push_back(new cRecMenuItemTime(tr("Start before"), sT.stopTime, false, &sT.stopTime, rmsSearchTimerSave, 1)); mainMenuItems.push_back(new cRecMenuItemTime(cString::sprintf("%s%s", *indent, tr("Start before")), false, &sT.stopTime, rmsSearchTimerSave));
} }
mainMenuItems.push_back(new cRecMenuItemBool(tr("Use duration"), sT.useDuration, true, false, &sT.useDuration, rmsSearchTimerSave)); mainMenuItems.push_back(new cRecMenuItemBool(tr("Use duration"), false, &sT.useDuration, rmsSearchTimerSave, true));
if (sT.useDuration) { if (sT.useDuration) {
mainMenuItems.push_back(new cRecMenuItemTime(tr("Min. duration"), sT.minDuration, false, &sT.minDuration, rmsSearchTimerSave, 1)); mainMenuItems.push_back(new cRecMenuItemTime(cString::sprintf("%s%s", *indent, tr("Min. duration")), false, &sT.minDuration, rmsSearchTimerSave));
mainMenuItems.push_back(new cRecMenuItemTime(tr("Max. duration"), sT.maxDuration, false, &sT.maxDuration, rmsSearchTimerSave, 1)); mainMenuItems.push_back(new cRecMenuItemTime(cString::sprintf("%s%s", *indent, tr("Max. duration")), false, &sT.maxDuration, rmsSearchTimerSave));
} }
mainMenuItems.push_back(new cRecMenuItemBool(tr("Use day of week"), sT.useDayOfWeek, true, false, &sT.useDayOfWeek, rmsSearchTimerSave)); mainMenuItems.push_back(new cRecMenuItemBool(tr("Use day of week"), false, &sT.useDayOfWeek, rmsSearchTimerSave, true));
if (sT.useDayOfWeek) if (sT.useDayOfWeek)
mainMenuItems.push_back(new cRecMenuItemDayChooser(tr("Day of week"), dayOfWeek, false, &dayOfWeek, 1)); mainMenuItems.push_back(new cRecMenuItemDayChooser(cString::sprintf("%s%s", *indent, tr("Day of week")), false, &dayOfWeek));
mainMenuItems.push_back(new cRecMenuItemBool(tr("Use in Favorites"), sT.useInFavorites, false, false, &sT.useInFavorites, rmsSearchTimerSave)); mainMenuItems.push_back(new cRecMenuItemBool(tr("Use in Favorites"), false, &sT.useInFavorites, rmsSearchTimerSave));
mainMenuItems.push_back(new cRecMenuItemBool(tr("Use as search timer"), sT.useAsSearchTimer, true, false, &sT.useAsSearchTimer, rmsSearchTimerSave)); mainMenuItems.push_back(new cRecMenuItemBool(tr("Use as search timer"), false, &sT.useAsSearchTimer, rmsSearchTimerSave, true));
if (sT.useAsSearchTimer) { if (sT.useAsSearchTimer) {
mainMenuItems.push_back(new cRecMenuItemSelect(tr("Action"), searchTimerModes, sT.action, false, &sT.action, rmsSearchTimerSave, true, 1)); mainMenuItems.push_back(new cRecMenuItemSelect(cString::sprintf("%s%s", *indent, tr("Action")), searchTimerModes, false, &sT.action, rmsSearchTimerSave, true));
if (sT.action == searchTimerActionSwitchOnly) { if (sT.action == searchTimerActionSwitchOnly) {
mainMenuItems.push_back(new cRecMenuItemInt(tr("Switch ... minutes before start"), sT.switchMinsBefore, 0, 99, false, &sT.switchMinsBefore, rmsSearchTimerSave, 2)); mainMenuItems.push_back(new cRecMenuItemInt(cString::sprintf("%s%s%s", *indent, *indent, tr("Switch ... minutes before start")), 0, 99, false, &sT.switchMinsBefore, rmsSearchTimerSave));
mainMenuItems.push_back(new cRecMenuItemBool(tr("Unmute sound"), sT.unmuteSoundOnSwitch, false, false, &sT.unmuteSoundOnSwitch, rmsSearchTimerSave, 2)); mainMenuItems.push_back(new cRecMenuItemBool(cString::sprintf("%s%s%s", *indent, *indent, tr("Unmute sound")), false, &sT.unmuteSoundOnSwitch, rmsSearchTimerSave));
} }
if (sT.action == searchTimerActionAnnounceAndSwitch) { if (sT.action == searchTimerActionAnnounceAndSwitch) {
mainMenuItems.push_back(new cRecMenuItemInt(tr("Ask ... minutes before start"), sT.switchMinsBefore, 0, 99, false, &sT.switchMinsBefore, rmsSearchTimerSave, 2)); mainMenuItems.push_back(new cRecMenuItemInt(cString::sprintf("%s%s%s", *indent, *indent, tr("Ask ... minutes before start")), 0, 99, false, &sT.switchMinsBefore, rmsSearchTimerSave));
mainMenuItems.push_back(new cRecMenuItemBool(tr("Unmute sound"), sT.unmuteSoundOnSwitch, false, false, &sT.unmuteSoundOnSwitch, rmsSearchTimerSave, 2)); mainMenuItems.push_back(new cRecMenuItemBool(cString::sprintf("%s%s%s", *indent, *indent, tr("Unmute sound")), false, &sT.unmuteSoundOnSwitch, rmsSearchTimerSave));
} }
if ((sT.action == searchTimerActionRecord) || (sT.action == searchTimerActionInactiveRecord)) { if ((sT.action == searchTimerActionRecord) || (sT.action == searchTimerActionInactiveRecord)) {
mainMenuItems.push_back(new cRecMenuItemBool(tr("Series Recording"), sT.useEpisode, false, false, &sT.useEpisode, rmsSearchTimerSave, 2)); mainMenuItems.push_back(new cRecMenuItemBool(cString::sprintf("%s%s%s", *indent, *indent, tr("Series Recording")), false, &sT.useEpisode, rmsSearchTimerSave));
mainMenuItems.push_back(new cRecMenuItemSelectDirectory(tr("Directory"), std::string(directory), false, directory, rmsSearchTimerSave, true, 2)); mainMenuItems.push_back(new cRecMenuItemSelectDirectory(cString::sprintf("%s%s%s", *indent, *indent, tr("Directory")), std::string(directory), false, directory, rmsSearchTimerSave, true));
mainMenuItems.push_back(new cRecMenuItemInt(tr("Delete recordings after ... days"), sT.delAfterDays, 0, 999, false, &sT.delAfterDays, rmsSearchTimerSave, 2)); mainMenuItems.push_back(new cRecMenuItemInt(cString::sprintf("%s%s%s", *indent, *indent, tr("Delete recordings after ... days")), 0, 999, false, &sT.delAfterDays, rmsSearchTimerSave));
if (sT.delAfterDays > 0) { if (sT.delAfterDays > 0) {
mainMenuItems.push_back(new cRecMenuItemInt(tr("Keep ... recordings"), sT.recordingsKeep, 0, 999, false, &sT.recordingsKeep, rmsSearchTimerSave, 3)); mainMenuItems.push_back(new cRecMenuItemInt(cString::sprintf("%s%s%s%s", *indent, *indent, *indent, tr("Keep ... recordings")), 0, 999, false, &sT.recordingsKeep, rmsSearchTimerSave));
} }
mainMenuItems.push_back(new cRecMenuItemInt(tr("Pause when ... recordings exist"), sT.pauseOnNrRecordings, 0, 999, false, &sT.pauseOnNrRecordings, rmsSearchTimerSave, 2)); mainMenuItems.push_back(new cRecMenuItemInt(cString::sprintf("%s%s%s", *indent, *indent, tr("Pause when ... recordings exist")), 0, 999, false, &sT.pauseOnNrRecordings, rmsSearchTimerSave));
mainMenuItems.push_back(new cRecMenuItemBool(tr("Avoid Repeats"), sT.avoidRepeats, true, false, &sT.avoidRepeats, rmsSearchTimerSave, 2)); mainMenuItems.push_back(new cRecMenuItemBool(cString::sprintf("%s%s%s", *indent, *indent, tr("Avoid Repeats")), false, &sT.avoidRepeats, rmsSearchTimerSave, true));
if (sT.avoidRepeats) { if (sT.avoidRepeats) {
mainMenuItems.push_back(new cRecMenuItemInt(tr("Allowed repeats"), sT.allowedRepeats, 0, 99, false, &sT.allowedRepeats, rmsSearchTimerSave, 3)); mainMenuItems.push_back(new cRecMenuItemInt(cString::sprintf("%s%s%s%s", *indent, *indent, *indent, tr("Allowed repeats")), 0, 99, false, &sT.allowedRepeats, rmsSearchTimerSave));
if (sT.allowedRepeats > 0) { if (sT.allowedRepeats > 0) {
mainMenuItems.push_back(new cRecMenuItemInt(tr("Only repeats within ... days"), sT.repeatsWithinDays, 0, 999, false, &sT.repeatsWithinDays, rmsSearchTimerSave, 4)); mainMenuItems.push_back(new cRecMenuItemInt(cString::sprintf("%s%s%s%s%s", *indent, *indent, *indent, *indent, tr("Only repeats within ... days")), 0, 999, false, &sT.repeatsWithinDays, rmsSearchTimerSave));
} }
mainMenuItems.push_back(new cRecMenuItemBool(tr("Compare Title"), sT.compareTitle, false, false, &sT.compareTitle, rmsSearchTimerSave, 3)); mainMenuItems.push_back(new cRecMenuItemBool(cString::sprintf("%s%s%s%s", *indent, *indent, *indent, tr("Compare Title")), false, &sT.compareTitle, rmsSearchTimerSave));
mainMenuItems.push_back(new cRecMenuItemBool(tr("Compare Subtitle"), sT.compareSubtitle, false, false, &sT.compareSubtitle, rmsSearchTimerSave, 3)); mainMenuItems.push_back(new cRecMenuItemBool(cString::sprintf("%s%s%s%s", *indent, *indent, *indent, tr("Compare Subtitle")), false, &sT.compareSubtitle, rmsSearchTimerSave));
mainMenuItems.push_back(new cRecMenuItemBool(tr("Compare Description"), sT.compareSummary, true, false, &sT.compareSummary, rmsSearchTimerSave, 3)); mainMenuItems.push_back(new cRecMenuItemBool(cString::sprintf("%s%s%s%s", *indent, *indent, *indent, tr("Compare Description")), false, &sT.compareSummary, rmsSearchTimerSave, true));
if (sT.compareSummary) { if (sT.compareSummary) {
mainMenuItems.push_back(new cRecMenuItemInt(tr("Min. match in %"), sT.compareSummaryMatchInPercent, 1, 100, false, &sT.compareSummaryMatchInPercent, rmsSearchTimerSave, 4)); mainMenuItems.push_back(new cRecMenuItemInt(cString::sprintf("%s%s%s%s%s", *indent, *indent, *indent, *indent, tr("Min. match in %")), 1, 100, false, &sT.compareSummaryMatchInPercent, rmsSearchTimerSave));
} }
mainMenuItems.push_back(new cRecMenuItemSelect(tr("Compare date"), compareDateModes, sT.compareDate, false, &sT.compareDate, rmsSearchTimerSave, false, 3)); mainMenuItems.push_back(new cRecMenuItemSelect(cString::sprintf("%s%s%s%s", *indent, *indent, *indent, tr("Compare date")), compareDateModes, false, &sT.compareDate, rmsSearchTimerSave, false));
} }
mainMenuItems.push_back(new cRecMenuItemInt(tr("Priority"), sT.priority, 0, 99, false, &sT.priority, rmsSearchTimerSave, 2)); mainMenuItems.push_back(new cRecMenuItemInt(cString::sprintf("%s%s%s", *indent, *indent, tr("Priority")), 0, 99, false, &sT.priority, rmsSearchTimerSave));
mainMenuItems.push_back(new cRecMenuItemInt(tr("Lifetime"), sT.lifetime, 0, 99, false, &sT.lifetime, rmsSearchTimerSave, 2)); mainMenuItems.push_back(new cRecMenuItemInt(cString::sprintf("%s%s%s", *indent, *indent, tr("Lifetime")), 0, 99, false, &sT.lifetime, rmsSearchTimerSave));
mainMenuItems.push_back(new cRecMenuItemInt(tr("Time margin for start in minutes"), sT.marginStart, 0, 30, false, &sT.marginStart, rmsSearchTimerSave, 2)); mainMenuItems.push_back(new cRecMenuItemInt(cString::sprintf("%s%s%s", *indent, *indent, tr("Time margin for start in minutes")), 0, 30, false, &sT.marginStart, rmsSearchTimerSave));
mainMenuItems.push_back(new cRecMenuItemInt(tr("Time margin for stop in minutes"), sT.marginStop, 0, 30, false, &sT.marginStop, rmsSearchTimerSave, 2)); mainMenuItems.push_back(new cRecMenuItemInt(cString::sprintf("%s%s%s", *indent, *indent, tr("Time margin for stop in minutes")), 0, 30, false, &sT.marginStop, rmsSearchTimerSave));
mainMenuItems.push_back(new cRecMenuItemBool(tr("Use VPS"), sT.useVPS, false, false, &sT.useVPS, rmsSearchTimerSave, 2)); mainMenuItems.push_back(new cRecMenuItemBool(cString::sprintf("%s%s%s", *indent, *indent, tr("Use VPS")), false, &sT.useVPS, rmsSearchTimerSave));
mainMenuItems.push_back(new cRecMenuItemSelect(tr("Auto delete"), delModes, sT.delMode, false, &sT.delMode, rmsSearchTimerSave, true, 2)); mainMenuItems.push_back(new cRecMenuItemSelect(cString::sprintf("%s%s%s", *indent, *indent, tr("Auto delete")), delModes, false, &sT.delMode, rmsSearchTimerSave, true));
if (sT.delMode == 1) if (sT.delMode == 1)
mainMenuItems.push_back(new cRecMenuItemInt(tr("after ... recordings"), sT.delAfterCountRecs, 0, 999, false, &sT.delAfterCountRecs, rmsSearchTimerSave, 3)); mainMenuItems.push_back(new cRecMenuItemInt(cString::sprintf("%s%s%s%s", *indent, *indent, *indent, tr("after ... recordings")), 0, 999, false, &sT.delAfterCountRecs, rmsSearchTimerSave));
else if (sT.delMode == 2) else if (sT.delMode == 2)
mainMenuItems.push_back(new cRecMenuItemInt(tr("after ... days after first rec."), sT.delAfterDaysOfFirstRec, 0, 999, false, &sT.delAfterDaysOfFirstRec, rmsSearchTimerSave, 3)); mainMenuItems.push_back(new cRecMenuItemInt(cString::sprintf("%s%s%s%s", *indent, *indent, *indent, tr("after ... days after first rec.")), 0, 999, false, &sT.delAfterDaysOfFirstRec, rmsSearchTimerSave));
} }
} }
mainMenuItems.push_back(new cRecMenuItemButton(tr("Display Results for Search Timer"), rmsSearchTimerTest, false)); mainMenuItems.push_back(new cRecMenuItemButton(tr("Display Results for Search Timer"), rmsSearchTimerTest, false));
@@ -908,13 +922,7 @@ void cRecMenuSearchTimerEdit::CreateMenuItems(void) {
} }
cTVGuideSearchTimer cRecMenuSearchTimerEdit::GetSearchTimer(void) { cTVGuideSearchTimer cRecMenuSearchTimerEdit::GetSearchTimer(void) {
searchTimer.SetSearchString(searchString); sT.searchString = searchString;
searchTimer.SetSearchMode(sT.mode);
searchTimer.SetFuzzyTolerance(sT.fuzzyTolerance);
searchTimer.SetUseCase(sT.useCase);
searchTimer.SetUseTitle(sT.useTitle);
searchTimer.SetUseSubtitle(sT.useSubtitle);
searchTimer.SetUseDesription(sT.useDescription);
if (sT.useChannel == 1) { if (sT.useChannel == 1) {
#if VDRVERSNUM >= 20301 #if VDRVERSNUM >= 20301
{ {
@@ -926,67 +934,22 @@ cTVGuideSearchTimer cRecMenuSearchTimerEdit::GetSearchTimer(void) {
sT.channelMin = Channels.GetByNumber(startChannel); sT.channelMin = Channels.GetByNumber(startChannel);
sT.channelMax = Channels.GetByNumber(stopChannel); sT.channelMax = Channels.GetByNumber(stopChannel);
#endif #endif
searchTimer.SetStartChannel(sT.channelMin);
searchTimer.SetStopChannel(sT.channelMax);
} }
if (sT.useChannel == 2) { if (sT.useChannel == 2) {
if (channelgroups.size() > 0) { if (channelgroups.size() > 0) {
std::string & channelGroup = channelgroups[channelgroupIndex]; std::string & channelGroup = channelgroups[channelgroupIndex];
searchTimer.SetChannelGroup(channelGroup); sT.channelGroup = channelGroup;
} else { } else {
sT.useChannel = 0; sT.useChannel = 0;
} }
} }
searchTimer.SetUseChannel(sT.useChannel);
searchTimer.SetUseTime(sT.useTime);
if (sT.useTime) {
searchTimer.SetStartTime(sT.startTime);
searchTimer.SetStopTime(sT.stopTime);
}
searchTimer.SetUseDuration(sT.useDuration);
if (sT.useDuration) {
searchTimer.SetMinDuration(sT.minDuration);
searchTimer.SetMaxDuration(sT.maxDuration);
}
searchTimer.SetUseDayOfWeek(sT.useDayOfWeek);
if (sT.useDayOfWeek) { if (sT.useDayOfWeek) {
searchTimer.SetDayOfWeek(dayOfWeek); sT.dayOfWeek = SetDayOfWeek(dayOfWeek);
} }
searchTimer.SetUseAsSearchTimer(sT.useAsSearchTimer);
searchTimer.SetAction(sT.action);
searchTimer.SetSwitchMinsBefore(sT.switchMinsBefore);
searchTimer.SetUnmuteSoundOnSwitch(sT.unmuteSoundOnSwitch);
searchTimer.SetPriority(sT.priority);
searchTimer.SetLifetime(sT.lifetime);
searchTimer.SetUseEpisode(sT.useEpisode);
std::string dir(directory); std::string dir(directory);
std::replace(dir.begin(), dir.end(), '/', '~'); std::replace(dir.begin(), dir.end(), '/', '~');
searchTimer.SetDirectory(dir); sT.directory = dir;
searchTimer.SetDelAfterDays(sT.delAfterDays); return sT;
searchTimer.SetRecordingsKeep(sT.recordingsKeep);
searchTimer.SetPauseOnNrRecordings(sT.pauseOnNrRecordings);
searchTimer.SetMarginStart(sT.marginStart);
searchTimer.SetMarginStop(sT.marginStop);
searchTimer.SetUseVPS(sT.useVPS);
searchTimer.SetAvoidRepeats(sT.avoidRepeats);
if (sT.avoidRepeats) {
searchTimer.SetAllowedRepeats(sT.allowedRepeats);
if (sT.repeatsWithinDays > 0) {
searchTimer.SetRepeatsWithinDays(sT.repeatsWithinDays);
}
searchTimer.SetCompareTitle(sT.compareTitle);
searchTimer.SetCompareSubtitle(sT.compareSubtitle);
searchTimer.SetCompareSummary(sT.compareSummary);
if (sT.compareSummary) {
searchTimer.SetCompareSummaryMatchInPercent(sT.compareSummaryMatchInPercent);
}
searchTimer.SetCompareDate(sT.compareDate);
}
searchTimer.SetUseInFavorites(sT.useInFavorites);
searchTimer.SetDelMode(sT.delMode);
searchTimer.SetDelAfterCountRecs(sT.delAfterCountRecs);
searchTimer.SetDelAfterDaysOfFirstRec(sT.delAfterDaysOfFirstRec);
return searchTimer;
} }
int cRecMenuSearchTimerEdit::GetTotalNumMenuItems(void) { int cRecMenuSearchTimerEdit::GetTotalNumMenuItems(void) {
@@ -1148,8 +1111,8 @@ cRecMenuSearchTimerNothingFound::cRecMenuSearchTimerNothingFound(std::string sea
// --- cRecMenuSwitchTimer --------------------------------------------------------- // --- cRecMenuSwitchTimer ---------------------------------------------------------
cRecMenuSwitchTimer::cRecMenuSwitchTimer(void) { cRecMenuSwitchTimer::cRecMenuSwitchTimer(void) {
switchMinsBefore = tvguideConfig.switchMinsBefore; switchMinsBefore = config.switchMinsBefore;
switchMode = tvguideConfig.switchMode; switchMode = config.switchMode;
SetWidthPercent(60); SetWidthPercent(60);
@@ -1158,12 +1121,12 @@ cRecMenuSwitchTimer::cRecMenuSwitchTimer(void) {
infoItem->CalculateHeight(width - 2 * border); infoItem->CalculateHeight(width - 2 * border);
AddMenuItem(infoItem); AddMenuItem(infoItem);
AddMenuItem(new cRecMenuItemInt(tr("Minutes before switching"), switchMinsBefore, 0, 10, false, &switchMinsBefore)); AddMenuItem(new cRecMenuItemInt(tr("Minutes before switching"), 0, 10, false, &switchMinsBefore));
std::vector<std::string> switchModeItems; std::vector<std::string> switchModeItems;
switchModeItems.push_back(tr("switch")); switchModeItems.push_back(tr("switch"));
switchModeItems.push_back(tr("announce only")); switchModeItems.push_back(tr("announce only"));
switchModeItems.push_back(tr("ask for switch")); switchModeItems.push_back(tr("ask for switch"));
AddMenuItem(new cRecMenuItemSelect(tr("Switch Mode"), switchModeItems, switchMode, false, &switchMode)); AddMenuItem(new cRecMenuItemSelect(tr("Switch Mode"), switchModeItems, false, &switchMode));
AddMenuItem(new cRecMenuItemButtonYesNo(tr("Create"), tr("Cancel"), rmsSwitchTimerCreate, rmsClose, true)); AddMenuItem(new cRecMenuItemButtonYesNo(tr("Create"), tr("Cancel"), rmsSwitchTimerCreate, rmsClose, true));
@@ -1231,16 +1194,16 @@ cRecMenuSearch::cRecMenuSearch(std::string searchString, bool withOptions) {
cRecMenuItemInfo *infoItem = new cRecMenuItemInfo(*infoText, true); cRecMenuItemInfo *infoItem = new cRecMenuItemInfo(*infoText, true);
infoItem->CalculateHeight(width - 2 * border); infoItem->CalculateHeight(width - 2 * border);
SetHeader(infoItem); SetHeader(infoItem);
AddMenuItem(new cRecMenuItemText(tr("Search Expression:"), this->searchString, TEXTINPUTLENGTH, false, this->searchString)); AddMenuItem(new cRecMenuItemText(tr("Search Expression:"), TEXTINPUTLENGTH, false, this->searchString));
if (withOptions) { if (withOptions) {
std::vector<std::string> searchModes; std::vector<std::string> searchModes;
cTVGuideSearchTimer searchTimer; cTVGuideSearchTimer searchTimer;
searchTimer.GetSearchModes(&searchModes); searchTimer.GetSearchModes(&searchModes);
AddMenuItemInitial(new cRecMenuItemSelect(tr("Search Mode"), searchModes, 0, false, &mode)); AddMenuItemInitial(new cRecMenuItemSelect(tr("Search Mode"), searchModes, false, &mode));
AddMenuItemInitial(new cRecMenuItemChannelChooser(tr("Channel to Search"), NULL, false, &channelNr)); AddMenuItemInitial(new cRecMenuItemChannelChooser(tr("Channel to Search"), false, &channelNr));
AddMenuItemInitial(new cRecMenuItemBool(tr("Search in title"), true, false, false, &useTitle)); AddMenuItemInitial(new cRecMenuItemBool(tr("Search in title"), false, &useTitle));
AddMenuItemInitial(new cRecMenuItemBool(tr("Search in Subtitle"), true, false, false, &useSubTitle)); AddMenuItemInitial(new cRecMenuItemBool(tr("Search in Subtitle"), false, &useSubTitle));
AddMenuItemInitial(new cRecMenuItemBool(tr("Search in Description"), false, false, false, &useDescription)); AddMenuItemInitial(new cRecMenuItemBool(tr("Search in Description"), false, &useDescription));
} else { } else {
AddMenuItemInitial(new cRecMenuItemButton(tr("Show Search Options"), rmsSearchWithOptions, false)); AddMenuItemInitial(new cRecMenuItemButton(tr("Show Search Options"), rmsSearchWithOptions, false));
} }
@@ -1374,7 +1337,7 @@ cRecMenuRecordingSearch::cRecMenuRecordingSearch(std::string search) {
infoItem->CalculateHeight(width - 2 * border); infoItem->CalculateHeight(width - 2 * border);
SetHeader(infoItem); SetHeader(infoItem);
AddMenuItem(new cRecMenuItemText(tr("Search Expression:"), searchString, TEXTINPUTLENGTH, false, searchString)); AddMenuItem(new cRecMenuItemText(tr("Search Expression:"), TEXTINPUTLENGTH, false, searchString));
AddMenuItem(new cRecMenuItemButtonYesNo(tr("Perform Search"), tr("Cancel"), rmsRecordingSearchResult, rmsClose, true)); AddMenuItem(new cRecMenuItemButtonYesNo(tr("Perform Search"), tr("Cancel"), rmsRecordingSearchResult, rmsClose, true));
CalculateHeight(); CalculateHeight();
CreatePixmap(); CreatePixmap();
@@ -1468,14 +1431,19 @@ void cRecMenuTimeline::GetTimersForDay(void) {
timersToday.clear(); timersToday.clear();
#if VDRVERSNUM >= 20301 #if VDRVERSNUM >= 20301
LOCK_TIMERS_READ; LOCK_TIMERS_READ;
// const cTimers* timers = Timers; const cTimers* timers = Timers;
for (const cTimer *t = Timers->First(); t; t = Timers->Next(t)) {
#else #else
for (const cTimer *t = Timers.First(); t; t = Timers.Next(t)) { const cTimers* timers = &Timers;
#endif #endif
cSortedTimers SortedTimers(timers);
int i = 0;
while (i < SortedTimers.Size()) {
const cTimer *t = SortedTimers[i];
if (((t->StartTime() > timeStart) && (t->StartTime() <= timeStop)) || ((t->StopTime() > timeStart) && (t->StopTime() <= timeStop))) { if (((t->StartTime() > timeStart) && (t->StartTime() <= timeStop)) || ((t->StopTime() > timeStart) && (t->StopTime() <= timeStop))) {
timersToday.push_back(t); if (t->HasFlags(tfActive))
timersToday.push_back(t);
} }
i++;
} }
numTimersToday = timersToday.size(); numTimersToday = timersToday.size();
} }
@@ -1618,26 +1586,26 @@ cRecMenuFavorites::~cRecMenuFavorites(void) {
} }
void cRecMenuFavorites::CreateFavoritesMenuItems(void) { void cRecMenuFavorites::CreateFavoritesMenuItems(void) {
if (tvguideConfig.favWhatsOnNow) { if (config.favWhatsOnNow) {
myMenuItems.push_back(new cRecMenuItemFavoriteStatic(tr("What's on now"), rmsFavoritesNow, false)); myMenuItems.push_back(new cRecMenuItemFavoriteStatic(tr("What's on now"), rmsFavoritesNow, false));
} }
if (tvguideConfig.favWhatsOnNext) { if (config.favWhatsOnNext) {
myMenuItems.push_back(new cRecMenuItemFavoriteStatic(tr("What's on next"), rmsFavoritesNext, false)); myMenuItems.push_back(new cRecMenuItemFavoriteStatic(tr("What's on next"), rmsFavoritesNext, false));
} }
if (tvguideConfig.favUseTime1) { if (config.favUseTime1) {
std::string desc = *cString::sprintf("%s (%s)", tvguideConfig.descUser1.c_str(), NiceTime(tvguideConfig.favTime1).c_str()); std::string desc = *cString::sprintf("%s (%s)", config.descUser1.c_str(), NiceTime(config.favTime1).c_str());
myMenuItems.push_back(new cRecMenuItemFavoriteStatic(desc, rmsFavoritesUser1, false)); myMenuItems.push_back(new cRecMenuItemFavoriteStatic(desc, rmsFavoritesUser1, false));
} }
if (tvguideConfig.favUseTime2) { if (config.favUseTime2) {
std::string desc = *cString::sprintf("%s (%s)", tvguideConfig.descUser2.c_str(), NiceTime(tvguideConfig.favTime2).c_str()); std::string desc = *cString::sprintf("%s (%s)", config.descUser2.c_str(), NiceTime(config.favTime2).c_str());
myMenuItems.push_back(new cRecMenuItemFavoriteStatic(desc, rmsFavoritesUser2, false)); myMenuItems.push_back(new cRecMenuItemFavoriteStatic(desc, rmsFavoritesUser2, false));
} }
if (tvguideConfig.favUseTime3) { if (config.favUseTime3) {
std::string desc = *cString::sprintf("%s (%s)", tvguideConfig.descUser3.c_str(), NiceTime(tvguideConfig.favTime3).c_str()); std::string desc = *cString::sprintf("%s (%s)", config.descUser3.c_str(), NiceTime(config.favTime3).c_str());
myMenuItems.push_back(new cRecMenuItemFavoriteStatic(desc, rmsFavoritesUser3, false)); myMenuItems.push_back(new cRecMenuItemFavoriteStatic(desc, rmsFavoritesUser3, false));
} }
if (tvguideConfig.favUseTime4) { if (config.favUseTime4) {
std::string desc = *cString::sprintf("%s (%s)", tvguideConfig.descUser4.c_str(), NiceTime(tvguideConfig.favTime4).c_str()); std::string desc = *cString::sprintf("%s (%s)", config.descUser4.c_str(), NiceTime(config.favTime4).c_str());
myMenuItems.push_back(new cRecMenuItemFavoriteStatic(desc, rmsFavoritesUser4, false)); myMenuItems.push_back(new cRecMenuItemFavoriteStatic(desc, rmsFavoritesUser4, false));
} }

View File

@@ -47,7 +47,7 @@ public:
// --- cRecMenuConfirmTimer --------------------------------------------------------- // --- cRecMenuConfirmTimer ---------------------------------------------------------
class cRecMenuConfirmTimer: public cRecMenu { class cRecMenuConfirmTimer: public cRecMenu {
public: public:
cRecMenuConfirmTimer(const cEvent *event); cRecMenuConfirmTimer(const cEvent *event, bool timerChanged = false);
virtual ~cRecMenuConfirmTimer(void) {}; virtual ~cRecMenuConfirmTimer(void) {};
}; };
@@ -216,7 +216,6 @@ public:
// --- cRecMenuSearchTimerEdit --------------------------------------------------------- // --- cRecMenuSearchTimerEdit ---------------------------------------------------------
class cRecMenuSearchTimerEdit: public cRecMenu { class cRecMenuSearchTimerEdit: public cRecMenu {
private: private:
cTVGuideSearchTimer searchTimer;
cTVGuideSearchTimer sT; cTVGuideSearchTimer sT;
std::vector<std::string> searchModes; std::vector<std::string> searchModes;
std::vector<std::string> useChannelModes; std::vector<std::string> useChannelModes;
@@ -226,11 +225,14 @@ private:
std::vector<std::string> delModes; std::vector<std::string> delModes;
std::vector<std::string> channelgroups; std::vector<std::string> channelgroups;
std::vector<cRecMenuItem*> mainMenuItems; std::vector<cRecMenuItem*> mainMenuItems;
cString indent;
bool init; bool init;
int numMenuItems; int numMenuItems;
int useChannelPos; int useChannelPos;
int useTimePos; int useTimePos;
int useDayOfWeekPos; int useDayOfWeekPos;
int DayOfWeek(int dayofWeek = 0);
int SetDayOfWeek(int VDRDayOfWeek);
int avoidRepeatsPos; int avoidRepeatsPos;
char searchString[TEXTINPUTLENGTH]; char searchString[TEXTINPUTLENGTH];
bool timerActive; bool timerActive;

File diff suppressed because it is too large Load Diff

View File

@@ -1,43 +1,43 @@
#ifndef __TVGUIDE_RECMENUMANAGER_H #ifndef __TVGUIDE_RECMENUVIEW_H
#define __TVGUIDE_RECMENUMANAGER_H #define __TVGUIDE_RECMENUVIEW_H
#include "recmenu.h" #include "recmenu.h"
#include "recmanager.h" #include "recmanager.h"
#include "services/epgsearch.h" #include "services/epgsearch.h"
#include "footer.h" #include "footer.h"
// --- cRecMenuManager ------------------------------------------------------------- // --- cRecMenuView -------------------------------------------------------------
class cRecMenuManager { class cRecMenuView {
private: private:
cFooter *footer; cFooter *footer;
bool active; bool active;
cRecMenu *activeMenu; cRecMenu *activeMenu;
cRecMenu *activeMenuBuffer; cRecMenu *activeMenuBuffer;
cRecMenu *activeMenuBuffer2; cRecMenu *activeMenuBuffer2;
const cEvent *event; const cEvent *event;
const cEvent *displayEvent; const cEvent *displayEvent;
cRecManager *recManager; cRecManager *recManager;
cTVGuideTimerConflicts *timerConflicts; cTVGuideTimerConflicts *timerConflicts;
cDetailView *detailView; cDetailView *detailView;
cPixmap *pixmapBackground; cPixmap *pixmapBackground;
bool detailViewActive; bool detailViewActive;
void SetBackground(void); void SetBackground(void);
void DeleteBackground(void); void DeleteBackground(void);
void DisplaySearchTimerList(void); void DisplaySearchTimerList(void);
bool DisplayTimerConflict(const cTimer *timer); bool DisplayTimerConflict(const cTimer *timer);
bool DisplayTimerConflict(int timerID); bool DisplayTimerConflict(int timerID);
void DisplayDetailedView(const cEvent *ev); void DisplayDetailedView(const cEvent *ev);
void DisplayFavoriteResults(std::string header, const cEvent **result, int numResults); void DisplayFavoriteResults(std::string header, const cEvent **result, int numResults);
eOSState StateMachine(eRecMenuState nextState); eOSState StateMachine(eRecMenuState nextState);
public: public:
cRecMenuManager(void); cRecMenuView(void);
virtual ~cRecMenuManager(void); virtual ~cRecMenuView(void);
void SetFooter(cFooter *footer) { this->footer = footer; }; void SetFooter(cFooter *footer) { this->footer = footer; };
bool isActive(void) { return active; }; bool isActive(void) { return active; };
void Start(const cEvent *event); void Start(const cEvent *event);
void StartFavorites(void); void StartFavorites(void);
void Close(void); void Close(void);
eOSState ProcessKey(eKeys Key); eOSState ProcessKey(eKeys Key);
}; };
#endif //__TVGUIDE_RECMENUMANAGER_H #endif //__TVGUIDE_RECMENUVIEW_H

File diff suppressed because it is too large Load Diff

View File

@@ -1,141 +1,91 @@
#ifndef __TVGUIDE_SEARCHTIMER_H #ifndef __TVGUIDE_SEARCHTIMER_H
#define __TVGUIDE_SEARCHTIMER_H #define __TVGUIDE_SEARCHTIMER_H
class cTVGuideSearchTimer { class cTVGuideSearchTimer {
friend class cRecMenuSearchTimerEdit; friend class cRecMenuSearchTimerEdit;
protected: protected:
std::string strTimer; std::string strTimer;
int ID; int ID;
std::string searchString; std::string searchString;
int useTime; int useTime;
int startTime; int startTime;
int stopTime; int stopTime;
int useChannel; int useChannel;
#if VDRVERSNUM >= 20301 const cChannel *channelMin;
const cChannel *channelMin; const cChannel *channelMax;
const cChannel *channelMax; std::string channelGroup;
#else int useCase;
cChannel *channelMin; int mode;
cChannel *channelMax; int useTitle;
#endif int useSubtitle;
std::string channelGroup; int useDescription;
int useCase; int useDuration;
int mode; int minDuration;
int useTitle; int maxDuration;
int useSubtitle; int useAsSearchTimer;
int useDescription; int useDayOfWeek;
int useDuration; int dayOfWeek;
int minDuration; int useEpisode;
int maxDuration; std::string directory;
int useAsSearchTimer; int priority;
int useDayOfWeek; int lifetime;
int dayOfWeek; int marginStart;
int useEpisode; int marginStop;
std::string directory; int useVPS;
int priority; int action;
int lifetime; int useExtEPGInfo;
int marginStart; std::string extEPGInfoValues;
int marginStop; int avoidRepeats;
int useVPS; int allowedRepeats;
int action; int compareTitle;
int useExtEPGInfo; int compareSubtitle;
std::string extEPGInfoValues; int compareSummary;
int avoidRepeats; unsigned long catvaluesAvoidRepeat;
int allowedRepeats; int repeatsWithinDays;
int compareTitle; int delAfterDays;
int compareSubtitle; int recordingsKeep;
int compareSummary; int switchMinsBefore;
unsigned long catvaluesAvoidRepeat; int pauseOnNrRecordings;
int repeatsWithinDays; int blacklistMode;
int delAfterDays; std::string blacklists;
int recordingsKeep; int fuzzyTolerance;
int switchMinsBefore; int useInFavorites;
int pauseOnNrRecordings; int menuTemplate;
int blacklistMode; int delMode;
std::string blacklists; int delAfterCountRecs;
int fuzzyTolerance; int delAfterDaysOfFirstRec;
int useInFavorites; int useAsSearchTimerFrom;
int menuTemplate; int useAsSearchTimerTil;
int delMode; int ignoreMissingEPGCats;
int delAfterCountRecs; int unmuteSoundOnSwitch;
int delAfterDaysOfFirstRec; int compareSummaryMatchInPercent;
int useAsSearchTimerFrom; std::string contentsFilter;
int useAsSearchTimerTil; int compareDate;
int ignoreMissingEPGCats; public:
int unmuteSoundOnSwitch; cTVGuideSearchTimer(void);
int compareSummaryMatchInPercent; virtual ~cTVGuideSearchTimer(void);
std::string contentsFilter; bool operator < (const cTVGuideSearchTimer& other) const;
int compareDate; void SetEPGSearchString(std::string strTimer) { this->strTimer = strTimer; };
public: void SetTemplate(std::string tmpl);
cTVGuideSearchTimer(void); bool Parse(bool readTemplate = false);
virtual ~cTVGuideSearchTimer(void); std::string BuildSearchString(void);
bool operator < (const cTVGuideSearchTimer& other) const; int GetID(void) { return ID; };
void SetEPGSearchString(std::string strTimer) { this->strTimer = strTimer; }; //GETTER
void SetTemplate(std::string tmpl); std::string GetSearchString(void) const { return searchString; };
bool Parse(bool readTemplate = false); bool IsActive(void);
std::string BuildSearchString(void); bool UseInFavorites(void) { return useInFavorites; };
int GetID(void) { return ID; }; //SETTER
//GETTER void SetSearchString(std::string searchString) { this->searchString = searchString; };
std::string GetSearchString(void) const { return searchString; }; //COMMON
bool IsActive(void); int GetNumTimers(void);
int DayOfWeek(void); int GetNumRecordings(void);
bool UseInFavorites(void) { return useInFavorites; }; void GetSearchModes(std::vector<std::string> *searchModes);
//SETTER void GetUseChannelModes(std::vector<std::string> *useChannelModes);
void SetSearchString(std::string searchString) { this->searchString = searchString; }; void GetSearchTimerModes(std::vector<std::string> *searchTimerModes);
void SetSearchMode(int mode) { this->mode = mode; }; void GetCompareDateModes(std::vector<std::string> *compareDateModes);
void SetFuzzyTolerance(int fuzzyTolerance) { this->fuzzyTolerance = fuzzyTolerance; }; void GetDelModes(std::vector<std::string> *delModes);
void SetUseCase(bool useCase) { this->useCase = useCase; }; void Dump(void);
void SetUseTitle(bool useTitle) { this->useTitle = useTitle; }; };
void SetUseSubtitle(bool useSubtitle) { this->useSubtitle = useSubtitle; };
void SetUseDesription(bool useDescription) { this->useDescription = useDescription; }; #endif //__TVGUIDE_SEARCHTIMER_H
void SetUseChannel(int useChannel) { this->useChannel = useChannel; };
void SetStartChannel(const cChannel *channelMin) { this->channelMin = channelMin; };
void SetStopChannel(const cChannel *channelMax) { this->channelMax = channelMax; };
void SetChannelGroup(std::string channelGroup) { this->channelGroup = channelGroup; };
void SetUseTime(bool useTime) { this->useTime = useTime; };
void SetStartTime(int startTime) { this->startTime = startTime; };
void SetStopTime(int stopTime) { this->stopTime = stopTime; };
void SetUseDayOfWeek(bool useDayOfWeek) { this->useDayOfWeek = useDayOfWeek; };
void SetDayOfWeek(int VDRDayOfWeek);
void SetUseDuration(bool useDuration) { this->useDuration = useDuration; };
void SetMinDuration(int minDuration) { this->minDuration = minDuration; };
void SetMaxDuration(int maxDuration) { this->maxDuration = maxDuration; };
void SetUseEpisode(int useEpisode) { this->useEpisode = useEpisode; };
void SetDirectory(std::string directory) { this-> directory = directory; };
void SetDelAfterDays(int delAfterDays) { this->delAfterDays = delAfterDays; };
void SetRecordingsKeep(int recordingsKeep) { this->recordingsKeep = recordingsKeep; };
void SetPauseOnNrRecordings(int pauseOnNrRecordings) { this-> pauseOnNrRecordings = pauseOnNrRecordings; };
void SetPriority(int priority) { this->priority = priority; };
void SetLifetime(int lifetime) { this->lifetime = lifetime; };
void SetMarginStart(int marginStart) { this->marginStart = marginStart; };
void SetMarginStop(int marginStop) { this->marginStop = marginStop; };
void SetUseVPS(bool useVPS) { this->useVPS = useVPS; };
void SetAvoidRepeats(bool avoidRepeats) { this->avoidRepeats = avoidRepeats; };
void SetAllowedRepeats(int allowedRepeats) { this->allowedRepeats = allowedRepeats; };
void SetRepeatsWithinDays(int repeatsWithinDays) { this-> repeatsWithinDays = repeatsWithinDays; };
void SetCompareTitle(bool compareTitle) { this->compareTitle = compareTitle; };
void SetCompareSubtitle(bool compareSubtitle) { this->compareSubtitle = compareSubtitle; };
void SetCompareSummary(bool compareSummary) { this->compareSummary = compareSummary; };
void SetCompareSummaryMatchInPercent(int compareSummaryMatchInPercent) { this->compareSummaryMatchInPercent = compareSummaryMatchInPercent; };
void SetCompareDate(int compareDate) { this->compareDate = compareDate; };
void SetUseInFavorites(bool useInFavorites) { this->useInFavorites = useInFavorites; };
void SetUseAsSearchTimer(bool useAsSearchTimer) { this->useAsSearchTimer = useAsSearchTimer; };
void SetAction(int action) { this->action = action; };
void SetSwitchMinsBefore(int switchMinsBefore) { this->switchMinsBefore = switchMinsBefore; };
void SetUnmuteSoundOnSwitch(bool unmuteSoundOnSwitch) { this->unmuteSoundOnSwitch = unmuteSoundOnSwitch; };
void SetDelMode(bool delMode) { this->delMode = delMode; };
void SetDelAfterCountRecs(bool delAfterCountRecs) { this->delAfterCountRecs = delAfterCountRecs; };
void SetDelAfterDaysOfFirstRec(bool delAfterDaysOfFirstRec) { this->delAfterDaysOfFirstRec = delAfterDaysOfFirstRec; };
//COMMON
int GetNumTimers(void);
int GetNumRecordings(void);
void GetSearchModes(std::vector<std::string> *searchModes);
void GetUseChannelModes(std::vector<std::string> *useChannelModes);
void GetSearchTimerModes(std::vector<std::string> *searchTimerModes);
void GetCompareDateModes(std::vector<std::string> *compareDateModes);
void GetDelModes(std::vector<std::string> *delModes);
void Dump(void);
};
#endif //__TVGUIDE_SEARCHTIMER_H

View File

@@ -1,33 +1,182 @@
#ifndef REMOTETIMERSERVICES_INC /*
#define REMOTETIMERSERVICES_INC * remotetimers.h: Public interface of the plugin's services
*
* Copyright (C) 2008-2013 Frank Schmirler <vdr@schmirler.de>
*
* This file is part of VDR Plugin remotetimers.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
* Or, point your browser to http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*/
#ifndef _SERVICE__H
#define _SERVICE__H
#include <vdr/epg.h>
#include <vdr/timers.h> #include <vdr/timers.h>
#include <vdr/epg.h>
#include <vdr/osdbase.h>
// RemoteTimers services /*
struct RemoteTimers_Event_v1_0 { * If the Data argument is NULL, all service calls return true.
//in * Otherwise the return value indicates success or failure of the service call.
const cEvent *event; *
//out * The service calls are not thread safe and must be called from the VDR main loop.
cTimer *timer; */
cString errorMsg;
/*
* RemoteTimers::InstantRecording-v1.0
* Start an instant recording or pause live TV. VDR needs to be patched to support this.
* The service returns false if a local timer should be used. An error occured if true is returned but the out parameters name and fileName are NULL.
* Data points to the following structure where pause indicates if it is an instant recording or an attempt to pause live TV.
*/
struct RemoteTimers_InstantRecording_v1_0 {
//in
const cTimer *timer;
bool pause;
const cEvent *event;
//out
cString name;
cString fileName;
}; };
/*
* RemoteTimers::RefreshTimers-v1.0
* Fetch timer list from remote VDR. You must call this service before you can use one of the service calls below.
* Data points to a cString which in case of failure (service call returns false) contains an error message.
*/
//out
// cString errorMsg;
/*
* RemoteTimers::ForEachConflict-v1.0
* Iterates the list of remote timer conflicts.
* The service call always returns true.
* Data points to a const char* which must be NULL to return the first conflict. Pass the previously returned conflict to get the next one until const char* is NULL.
*
*/
//in+out
// const char* conflict;
/*
* RemoteTimers::ForEach-v1.0
* Iterates the list of remote timers.
* The service call always returns true.
* Data points to a cTimer* which must be NULL to return the first timer. Pass the previously returned timer to get the next one until cTimer* is NULL.
*
* RemoteTimers::GetTimer-v1.0
* Test if the timer exists as either a remote or a local timer.
* The service call always returns true.
* Data points to a cTimer* which points to the timer you are looking for. If found, cTimer* will point to the timer, otherwise it will be NULL.
*/
//in+out
// cTimer* timer;
/*
* RemoteTimers::GetMatch-v1.0
* Find the remote or local timer which matches the event best.
* The service call always returns true.
* Data points to the following structure:
*/
struct RemoteTimers_GetMatch_v1_0 { struct RemoteTimers_GetMatch_v1_0 {
//in //in
const cEvent *event; const cEvent *event;
//out //out
cTimer *timer; cTimer *timer;
int timerMatch; int timerMatch;
int timerType; int timerType;
bool isRemote; bool isRemote;
}; };
/*
* RemoteTimers::GetTimerByEvent-v1.0
* Find the remote or local timer matching the event.
* If no timer matches, the service call returns false.
* Data points to a RemoteTimers_Event_v1_0 struct.
*
* RemoteTimers::NewTimerByEvent-v1.0
* Add a new timer for an event.
* In case of an error, the service call returns false and the structure includes an error message.
* Data points to a RemoteTimers_Event_v1_0 struct.
*/
struct RemoteTimers_Event_v1_0 {
//in
const cEvent *event;
//out
cTimer *timer;
cString errorMsg;
};
/*
* RemoteTimers::NewTimer-v1.0
* Add a new timer.
* In case of an error, the service call returns false and the structure includes an error message.
* Data points to a RemoteTimers_Timer_v1_0 struct.
*
* RemoteTimers::ModTimer-v1.0
* Change an existing timer.
* In case of an error, the service call returns false and the structure includes an error message.
* Data points to a RemoteTimers_Timer_v1_0 struct.
*
* RemoteTimers::DelTimer-v1.0
* Delete an existing timer.
* In case of an error, the service call returns false and the structure includes an error message.
* Data points to a RemoteTimers_Timer_v1_0 struct.
*/
struct RemoteTimers_Timer_v1_0 { struct RemoteTimers_Timer_v1_0 {
//in+out //in+out
cTimer *timer; cTimer *timer;
//out //out
cString errorMsg; cString errorMsg;
}; };
#endif //REMOTETIMERSERVICES_INC /*
* RemoteTimers::GetTimerById-v1.0
* Get a remote timer by its id (i.e. timer->Index()+1 on remote machine).
* The service call always returns true.
* Data must point to a RemoteTimers_Timer_v1_1 structure. errorMsg is unused.
* NULL is returned as timer if no remote timer exists for the given id locally.
* Note that a timer with this id may exist remotely. This can happen if the
* remote timer's channel doesn't exist on the local machine.
*/
struct RemoteTimers_Timer_v1_1 {
//in+out
cTimer *timer;
int id;
//out
cString errorMsg;
};
/*
* RemoteTimers::Menu-v1.0
* Depending on the state parameter, open the Timers or Schedule menu.
* In case of an error, menu is NULL.
* Data points to a RemoteTimers_Menu_v1_0 struct.
*/
struct RemoteTimers_Menu_v1_0 {
//in
const char *serverIp;
unsigned short serverPort;
eOSState state;
//out
cOsdMenu *menu;
};
#endif //_SERVICE__H

539
setup.c
View File

@@ -1,7 +1,7 @@
#include "setup.h" #include "setup.h"
cTvguideSetup::cTvguideSetup() { cTvguideSetup::cTvguideSetup() {
tmpTvguideConfig = tvguideConfig; tmpConfig = config;
Setup(); Setup();
} }
@@ -9,8 +9,8 @@ cTvguideSetup::~cTvguideSetup() {
geoManager.SetGeometry(cOsd::OsdWidth(), cOsd::OsdHeight(), true); geoManager.SetGeometry(cOsd::OsdWidth(), cOsd::OsdHeight(), true);
fontManager.DeleteFonts(); fontManager.DeleteFonts();
fontManager.SetFonts(); fontManager.SetFonts();
tvguideConfig.LoadTheme(); config.LoadTheme();
tvguideConfig.setDynamicValues(); config.setDynamicValues();
imgCache.Clear(); imgCache.Clear();
imgCache.CreateCache(); imgCache.CreateCache();
} }
@@ -40,15 +40,15 @@ eOSState cTvguideSetup::ProcessKey(eKeys Key) {
if ((Key == kOk && !hadSubMenu)) { if ((Key == kOk && !hadSubMenu)) {
const char* ItemText = Get(Current())->Text(); const char* ItemText = Get(Current())->Text();
if (strcmp(ItemText, tr("General Settings")) == 0) if (strcmp(ItemText, tr("General Settings")) == 0)
state = AddSubMenu(new cMenuSetupGeneral(&tmpTvguideConfig)); state = AddSubMenu(new cMenuSetupGeneral(&tmpConfig));
if (strcmp(ItemText, tr("Screen Presentation")) == 0) if (strcmp(ItemText, tr("Screen Presentation")) == 0)
state = AddSubMenu(new cMenuSetupScreenLayout(&tmpTvguideConfig)); state = AddSubMenu(new cMenuSetupScreenLayout(&tmpConfig));
if (strcmp(ItemText, tr("Fonts and Fontsizes")) == 0) if (strcmp(ItemText, tr("Fonts and Fontsizes")) == 0)
state = AddSubMenu(new cMenuSetupFont(&tmpTvguideConfig)); state = AddSubMenu(new cMenuSetupFont(&tmpConfig));
if (strcmp(ItemText, tr("Recording Menus and Favorites")) == 0) if (strcmp(ItemText, tr("Recording Menus and Favorites")) == 0)
state = AddSubMenu(new cMenuSetupFavorites(&tmpTvguideConfig)); state = AddSubMenu(new cMenuSetupFavorites(&tmpConfig));
if (strcmp(ItemText, tr("Image Loading and Caching")) == 0) if (strcmp(ItemText, tr("Image Loading and Caching")) == 0)
state = AddSubMenu(new cMenuSetupImageCache(&tmpTvguideConfig)); state = AddSubMenu(new cMenuSetupImageCache(&tmpConfig));
} }
} }
return state; return state;
@@ -56,108 +56,111 @@ eOSState cTvguideSetup::ProcessKey(eKeys Key) {
void cTvguideSetup::Store(void) { void cTvguideSetup::Store(void) {
tvguideConfig = tmpTvguideConfig; config = tmpConfig;
SetupStore("debugImageLoading", tvguideConfig.debugImageLoading); SetupStore("debugImageLoading", config.debugImageLoading);
SetupStore("useNopacityTheme", tvguideConfig.useNopacityTheme); SetupStore("useNopacityTheme", config.useNopacityTheme);
SetupStore("themeIndex", tvguideConfig.themeIndex); SetupStore("themeIndex", config.themeIndex);
SetupStore("showMainMenuEntry", tvguideConfig.showMainMenuEntry); SetupStore("useHWAccel", config.useHWAccel);
SetupStore("replaceOriginalSchedule", tvguideConfig.replaceOriginalSchedule); SetupStore("showMainMenuEntry", config.showMainMenuEntry);
SetupStore("displayMode", tvguideConfig.displayMode); SetupStore("replaceOriginalSchedule", config.replaceOriginalSchedule);
SetupStore("showTimeInGrid", tvguideConfig.showTimeInGrid); SetupStore("displayMode", config.displayMode);
SetupStore("displayStatusHeader", tvguideConfig.displayStatusHeader); SetupStore("showTimeInGrid", config.showTimeInGrid);
SetupStore("displayChannelGroups", tvguideConfig.displayChannelGroups); SetupStore("displayStatusHeader", config.displayStatusHeader);
SetupStore("displayTimeBase", tvguideConfig.displayTimeBase); SetupStore("displayChannelGroups", config.displayChannelGroups);
SetupStore("headerHeightPercent", tvguideConfig.headerHeightPercent); SetupStore("displayTimeBase", config.displayTimeBase);
SetupStore("channelGroupsPercent", tvguideConfig.channelGroupsPercent); SetupStore("headerHeightPercent", config.headerHeightPercent);
SetupStore("epgViewBorder", tvguideConfig.epgViewBorder); SetupStore("channelGroupsPercent", config.channelGroupsPercent);
SetupStore("scaleVideo", tvguideConfig.scaleVideo); SetupStore("epgViewBorder", config.epgViewBorder);
SetupStore("decorateVideo", tvguideConfig.decorateVideo); SetupStore("scaleVideo", config.scaleVideo);
SetupStore("roundedCorners", tvguideConfig.roundedCorners); SetupStore("decorateVideo", config.decorateVideo);
SetupStore("timeFormat", tvguideConfig.timeFormat); SetupStore("roundedCorners", config.roundedCorners);
SetupStore("channelCols", tvguideConfig.channelCols); SetupStore("timeFormat", config.timeFormat);
SetupStore("channelRows", tvguideConfig.channelRows); SetupStore("channelCols", config.channelCols);
SetupStore("displayTime", tvguideConfig.displayTime); SetupStore("channelRows", config.channelRows);
SetupStore("displayHorizontalTime", tvguideConfig.displayHorizontalTime); SetupStore("displayTime", config.displayTime);
SetupStore("bigStepHours", tvguideConfig.bigStepHours); SetupStore("displayHorizontalTime", config.displayHorizontalTime);
SetupStore("hugeStepHours", tvguideConfig.hugeStepHours); SetupStore("bigStepHours", config.bigStepHours);
SetupStore("channelJumpMode", tvguideConfig.channelJumpMode); SetupStore("bigStepHoursHorizontal", config.bigStepHoursHorizontal);
SetupStore("blueKeyMode", tvguideConfig.blueKeyMode); SetupStore("hugeStepHours", config.hugeStepHours);
SetupStore("numkeyMode", tvguideConfig.numkeyMode); SetupStore("hugeStepHoursHorizontal", config.hugeStepHoursHorizontal);
SetupStore("useRemoteTimers", tvguideConfig.useRemoteTimers); SetupStore("channelJumpMode", config.channelJumpMode);
SetupStore("closeOnSwitch", tvguideConfig.closeOnSwitch); SetupStore("blueKeyMode", config.blueKeyMode);
SetupStore("hideLastGroup", tvguideConfig.hideLastGroup); SetupStore("numkeyMode", config.numkeyMode);
SetupStore("hideChannelLogos", tvguideConfig.hideChannelLogos); SetupStore("useRemoteTimers", config.useRemoteTimers);
SetupStore("logoExtension", tvguideConfig.logoExtension); SetupStore("closeOnSwitch", config.closeOnSwitch);
SetupStore("logoWidthRatio", tvguideConfig.logoWidthRatio); SetupStore("hideLastGroup", config.hideLastGroup);
SetupStore("logoHeightRatio", tvguideConfig.logoHeightRatio); SetupStore("hideChannelLogos", config.hideChannelLogos);
SetupStore("hideEpgImages", tvguideConfig.hideEpgImages); SetupStore("logoExtension", config.logoExtension);
SetupStore("epgImageWidth", tvguideConfig.epgImageWidth); SetupStore("logoWidthRatio", config.logoWidthRatio);
SetupStore("epgImageHeight", tvguideConfig.epgImageHeight); SetupStore("logoHeightRatio", config.logoHeightRatio);
SetupStore("numAdditionalEPGPictures", tvguideConfig.numAdditionalEPGPictures); SetupStore("hideEpgImages", config.hideEpgImages);
SetupStore("epgImageWidthLarge", tvguideConfig.epgImageWidthLarge); SetupStore("epgImageWidth", config.epgImageWidth);
SetupStore("epgImageHeightLarge", tvguideConfig.epgImageHeightLarge); SetupStore("epgImageHeight", config.epgImageHeight);
SetupStore("detailedViewScrollStep", tvguideConfig.detailedViewScrollStep); SetupStore("numAdditionalEPGPictures", config.numAdditionalEPGPictures);
SetupStore("timeLineWidthPercent", tvguideConfig.timeLineWidthPercent); SetupStore("epgImageWidthLarge", config.epgImageWidthLarge);
SetupStore("timeLineHeightPercent", tvguideConfig.timeLineHeightPercent); SetupStore("epgImageHeightLarge", config.epgImageHeightLarge);
SetupStore("displayChannelName", tvguideConfig.displayChannelName); SetupStore("detailedViewScrollStep", config.detailedViewScrollStep);
SetupStore("channelHeaderWidthPercent", tvguideConfig.channelHeaderWidthPercent); SetupStore("timeLineWidthPercent", config.timeLineWidthPercent);
SetupStore("channelHeaderHeightPercent", tvguideConfig.channelHeaderHeightPercent); SetupStore("timeLineHeightPercent", config.timeLineHeightPercent);
SetupStore("footerHeightPercent", tvguideConfig.footerHeightPercent); SetupStore("displayChannelName", config.displayChannelName);
SetupStore("instRecFolderMode", tvguideConfig.instRecFolderMode); SetupStore("channelHeaderWidthPercent", config.channelHeaderWidthPercent);
SetupStore("instRecFixedFolder", tvguideConfig.instRecFixedFolder.c_str()); SetupStore("channelHeaderHeightPercent", config.channelHeaderHeightPercent);
SetupStore("favWhatsOnNow", tvguideConfig.favWhatsOnNow); SetupStore("footerHeightPercent", config.footerHeightPercent);
SetupStore("favWhatsOnNext", tvguideConfig.favWhatsOnNext); SetupStore("instRecFolderMode", config.instRecFolderMode);
SetupStore("favUseTime1", tvguideConfig.favUseTime1); SetupStore("instRecFixedFolder", config.instRecFixedFolder.c_str());
SetupStore("favUseTime2", tvguideConfig.favUseTime2); SetupStore("favWhatsOnNow", config.favWhatsOnNow);
SetupStore("favUseTime3", tvguideConfig.favUseTime3); SetupStore("favWhatsOnNext", config.favWhatsOnNext);
SetupStore("favUseTime4", tvguideConfig.favUseTime4); SetupStore("favUseTime1", config.favUseTime1);
SetupStore("favTime1", tvguideConfig.favTime1); SetupStore("favUseTime2", config.favUseTime2);
SetupStore("favTime2", tvguideConfig.favTime2); SetupStore("favUseTime3", config.favUseTime3);
SetupStore("favTime3", tvguideConfig.favTime3); SetupStore("favUseTime4", config.favUseTime4);
SetupStore("favTime4", tvguideConfig.favTime4); SetupStore("favTime1", config.favTime1);
SetupStore("descUser1", tvguideConfig.descUser1.c_str()); SetupStore("favTime2", config.favTime2);
SetupStore("descUser2", tvguideConfig.descUser2.c_str()); SetupStore("favTime3", config.favTime3);
SetupStore("descUser3", tvguideConfig.descUser3.c_str()); SetupStore("favTime4", config.favTime4);
SetupStore("descUser4", tvguideConfig.descUser4.c_str()); SetupStore("descUser1", config.descUser1.c_str());
SetupStore("favLimitChannels", tvguideConfig.favLimitChannels); SetupStore("descUser2", config.descUser2.c_str());
SetupStore("favStartChannel", tvguideConfig.favStartChannel); SetupStore("descUser3", config.descUser3.c_str());
SetupStore("favStopChannel", tvguideConfig.favStopChannel); SetupStore("descUser4", config.descUser4.c_str());
SetupStore("switchMode", tvguideConfig.switchMode); SetupStore("favLimitChannels", config.favLimitChannels);
SetupStore("switchMinsBefore", tvguideConfig.switchMinsBefore); SetupStore("favStartChannel", config.favStartChannel);
SetupStore("fontIndex", tvguideConfig.fontIndex); SetupStore("favStopChannel", config.favStopChannel);
SetupStore("FontButtonDelta", tvguideConfig.FontButtonDelta); SetupStore("switchMode", config.switchMode);
SetupStore("FontDetailViewDelta", tvguideConfig.FontDetailViewDelta); SetupStore("switchMinsBefore", config.switchMinsBefore);
SetupStore("FontDetailHeaderDelta", tvguideConfig.FontDetailHeaderDelta); SetupStore("fontIndex", config.fontIndex);
SetupStore("FontMessageBoxDelta", tvguideConfig.FontMessageBoxDelta); SetupStore("FontButtonDelta", config.FontButtonDelta);
SetupStore("FontMessageBoxLargeDelta", tvguideConfig.FontMessageBoxLargeDelta); SetupStore("FontDetailViewDelta", config.FontDetailViewDelta);
SetupStore("FontStatusHeaderDelta", tvguideConfig.FontStatusHeaderDelta); SetupStore("FontDetailHeaderDelta", config.FontDetailHeaderDelta);
SetupStore("FontStatusHeaderLargeDelta", tvguideConfig.FontStatusHeaderLargeDelta); SetupStore("FontMessageBoxDelta", config.FontMessageBoxDelta);
SetupStore("FontChannelHeaderDelta", tvguideConfig.FontChannelHeaderDelta); SetupStore("FontMessageBoxLargeDelta", config.FontMessageBoxLargeDelta);
SetupStore("FontChannelGroupsDelta", tvguideConfig.FontChannelGroupsDelta); SetupStore("FontStatusHeaderDelta", config.FontStatusHeaderDelta);
SetupStore("FontGridDelta", tvguideConfig.FontGridDelta); SetupStore("FontStatusHeaderLargeDelta", config.FontStatusHeaderLargeDelta);
SetupStore("FontGridSmallDelta", tvguideConfig.FontGridSmallDelta); SetupStore("FontChannelHeaderDelta", config.FontChannelHeaderDelta);
SetupStore("FontTimeLineWeekdayDelta", tvguideConfig.FontTimeLineWeekdayDelta); SetupStore("FontChannelGroupsDelta", config.FontChannelGroupsDelta);
SetupStore("FontTimeLineDateDelta", tvguideConfig.FontTimeLineDateDelta); SetupStore("FontGridDelta", config.FontGridDelta);
SetupStore("FontTimeLineTimeDelta", tvguideConfig.FontTimeLineTimeDelta); SetupStore("FontGridSmallDelta", config.FontGridSmallDelta);
SetupStore("FontChannelHeaderHorizontalDelta", tvguideConfig.FontChannelHeaderHorizontalDelta); SetupStore("FontTimeLineWeekdayDelta", config.FontTimeLineWeekdayDelta);
SetupStore("FontChannelGroupsHorizontalDelta", tvguideConfig.FontChannelGroupsHorizontalDelta); SetupStore("FontTimeLineDateDelta", config.FontTimeLineDateDelta);
SetupStore("FontGridHorizontalDelta", tvguideConfig.FontGridHorizontalDelta); SetupStore("FontTimeLineTimeDelta", config.FontTimeLineTimeDelta);
SetupStore("FontGridHorizontalSmallDelta", tvguideConfig.FontGridHorizontalSmallDelta); SetupStore("FontChannelHeaderHorizontalDelta", config.FontChannelHeaderHorizontalDelta);
SetupStore("FontTimeLineDateHorizontalDelta", tvguideConfig.FontTimeLineDateHorizontalDelta); SetupStore("FontChannelGroupsHorizontalDelta", config.FontChannelGroupsHorizontalDelta);
SetupStore("FontTimeLineTimeHorizontalDelta", tvguideConfig.FontTimeLineTimeHorizontalDelta); SetupStore("FontGridHorizontalDelta", config.FontGridHorizontalDelta);
SetupStore("FontRecMenuItemDelta", tvguideConfig.FontRecMenuItemDelta); SetupStore("FontGridHorizontalSmallDelta", config.FontGridHorizontalSmallDelta);
SetupStore("FontRecMenuItemSmallDelta", tvguideConfig.FontRecMenuItemSmallDelta); SetupStore("FontTimeLineDateHorizontalDelta", config.FontTimeLineDateHorizontalDelta);
SetupStore("FontRecMenuItemLargeDelta", tvguideConfig.FontRecMenuItemLargeDelta); SetupStore("FontTimeLineTimeHorizontalDelta", config.FontTimeLineTimeHorizontalDelta);
SetupStore("displayRerunsDetailEPGView", tvguideConfig.displayRerunsDetailEPGView); SetupStore("FontRecMenuItemDelta", config.FontRecMenuItemDelta);
SetupStore("numReruns", tvguideConfig.numReruns); SetupStore("FontRecMenuItemSmallDelta", config.FontRecMenuItemSmallDelta);
SetupStore("useSubtitleRerun", tvguideConfig.useSubtitleRerun); SetupStore("FontRecMenuItemLargeDelta", config.FontRecMenuItemLargeDelta);
SetupStore("numLogosInitial", tvguideConfig.numLogosInitial); SetupStore("displayRerunsDetailEPGView", config.displayRerunsDetailEPGView);
SetupStore("numLogosMax", tvguideConfig.numLogosMax); SetupStore("numReruns", config.numReruns);
SetupStore("limitLogoCache", tvguideConfig.limitLogoCache); SetupStore("useSubtitleRerun", config.useSubtitleRerun);
SetupStore("numLogosInitial", config.numLogosInitial);
SetupStore("numLogosMax", config.numLogosMax);
SetupStore("limitLogoCache", config.limitLogoCache);
} }
cMenuSetupSubMenu::cMenuSetupSubMenu(const char* Title, cTvguideConfig* data) : cOsdMenu(Title, 40) { cMenuSetupSubMenu::cMenuSetupSubMenu(const char* Title, cTVGuideConfig* data) : cOsdMenu(Title, 40) {
tmpTvguideConfig = data; tmpConfig = data;
indent = " "; indent = " ";
} }
@@ -183,7 +186,7 @@ eOSState cMenuSetupSubMenu::ProcessKey(eKeys Key) {
//----- General Settings ------------------------------------------------------------------------------------------------------------- //----- General Settings -------------------------------------------------------------------------------------------------------------
cMenuSetupGeneral::cMenuSetupGeneral(cTvguideConfig* data) : cMenuSetupSubMenu(tr("General Settings"), data) { cMenuSetupGeneral::cMenuSetupGeneral(cTVGuideConfig* data) : cMenuSetupSubMenu(tr("General Settings"), data) {
themes.Load(*cString("tvguide")); themes.Load(*cString("tvguide"));
timeFormatItems[0] = "12h"; timeFormatItems[0] = "12h";
timeFormatItems[1] = "24h"; timeFormatItems[1] = "24h";
@@ -203,47 +206,53 @@ cMenuSetupGeneral::cMenuSetupGeneral(cTvguideConfig* data) : cMenuSetupSubMenu(
void cMenuSetupGeneral::Set(void) { void cMenuSetupGeneral::Set(void) {
int currentItem = Current(); int currentItem = Current();
Clear(); Clear();
Add(new cMenuEditBoolItem(tr("Show Main Menu Entry"), &tmpTvguideConfig->showMainMenuEntry)); Add(new cMenuEditBoolItem(tr("Use workaround for HWAccelerated OSD"), &tmpConfig->useHWAccel));
Add(new cMenuEditBoolItem(tr("Replace VDR Schedules Menu"), &tmpTvguideConfig->replaceOriginalSchedule)); Add(new cMenuEditBoolItem(tr("Show Main Menu Entry"), &tmpConfig->showMainMenuEntry));
Add(new cMenuEditBoolItem(tr("Use appropriate nOpacity Theme"), &tmpTvguideConfig->useNopacityTheme)); Add(new cMenuEditBoolItem(tr("Replace VDR Schedules Menu"), &tmpConfig->replaceOriginalSchedule));
if (!tmpTvguideConfig->useNopacityTheme) { Add(new cMenuEditBoolItem(tr("Use appropriate nOpacity Theme"), &tmpConfig->useNopacityTheme));
if (!tmpConfig->useNopacityTheme) {
if (themes.NumThemes()) if (themes.NumThemes())
Add(new cMenuEditStraItem(cString::sprintf("%s%s", *indent, tr("Theme")), &tmpTvguideConfig->themeIndex, themes.NumThemes(), themes.Descriptions())); Add(new cMenuEditStraItem(cString::sprintf("%s%s", *indent, tr("Theme")), &tmpConfig->themeIndex, themes.NumThemes(), themes.Descriptions()));
} }
if (tmpTvguideConfig->displayMode == eVertical) { if (tmpConfig->displayMode == eVertical) {
Add(new cMenuEditIntItem(tr("Time to display in minutes"), &tmpTvguideConfig->displayTime, 60, 320)); Add(new cMenuEditIntItem(tr("Time to display in minutes"), &tmpConfig->displayTime, 60, 320));
} else if (tmpTvguideConfig->displayMode == eHorizontal) { } else if (tmpConfig->displayMode == eHorizontal) {
Add(new cMenuEditIntItem(tr("Time to display in minutes"), &tmpTvguideConfig->displayHorizontalTime, 60, 320)); Add(new cMenuEditIntItem(tr("Time to display in minutes"), &tmpConfig->displayHorizontalTime, 60, 320));
} }
Add(new cMenuEditBoolItem(tr("Rounded Corners"), &tmpTvguideConfig->roundedCorners)); Add(new cMenuEditBoolItem(tr("Rounded Corners"), &tmpConfig->roundedCorners));
Add(new cMenuEditStraItem(tr("Channel Jump Mode (Keys Green / Yellow)"), &tmpTvguideConfig->channelJumpMode, 2, jumpMode)); Add(new cMenuEditStraItem(tr("Channel Jump Mode (Keys Green / Yellow)"), &tmpConfig->channelJumpMode, 2, jumpMode));
Add(new cMenuEditStraItem(tr("Keys Blue and OK"), &tmpTvguideConfig->blueKeyMode, 3, blueMode)); Add(new cMenuEditStraItem(tr("Keys Blue and OK"), &tmpConfig->blueKeyMode, 3, blueMode));
Add(new cMenuEditBoolItem(tr("Close TVGuide after channel switch"), &tmpTvguideConfig->closeOnSwitch)); Add(new cMenuEditBoolItem(tr("Close TVGuide after channel switch"), &tmpConfig->closeOnSwitch));
Add(new cMenuEditStraItem(tr("Functionality of numeric Keys"), &tmpTvguideConfig->numkeyMode, 2, numMode)); Add(new cMenuEditStraItem(tr("Functionality of numeric Keys"), &tmpConfig->numkeyMode, 2, numMode));
Add(new cMenuEditBoolItem(tr("Hide last Channel Group"), &tmpTvguideConfig->hideLastGroup)); Add(new cMenuEditBoolItem(tr("Hide last Channel Group"), &tmpConfig->hideLastGroup));
Add(new cMenuEditIntItem(tr("Big Step (Keys 1 / 3) in hours"), &tmpTvguideConfig->bigStepHours, 1, 12)); if (tmpConfig->displayMode == eVertical) {
Add(new cMenuEditIntItem(tr("Huge Step (Keys 4 / 6) in hours"), &tmpTvguideConfig->hugeStepHours, 13, 48)); Add(new cMenuEditIntItem(tr("Big Step (Keys 1 / 3) in hours"), &tmpConfig->bigStepHours, 1, 12));
Add(new cMenuEditStraItem(tr("Time Format (12h/24h)"), &tmpTvguideConfig->timeFormat, 2, timeFormatItems)); Add(new cMenuEditIntItem(tr("Huge Step (Keys 4 / 6) in hours"), &tmpConfig->hugeStepHours, 13, 48));
Add(new cMenuEditIntItem(tr("EPG Window Text Scrolling Speed"), &tmpTvguideConfig->detailedViewScrollStep, 1, 30)); } else if (tmpConfig->displayMode == eHorizontal) {
Add(new cMenuEditBoolItem(tr("Display Reruns in detailed EPG View"), &tmpTvguideConfig->displayRerunsDetailEPGView)); Add(new cMenuEditIntItem(tr("Big Step (Keys 1 / 3) in hours"), &tmpConfig->bigStepHoursHorizontal, 1, 12));
if (tmpTvguideConfig->displayRerunsDetailEPGView) { Add(new cMenuEditIntItem(tr("Huge Step (Keys 4 / 6) in hours"), &tmpConfig->hugeStepHoursHorizontal, 13, 48));
Add(new cMenuEditIntItem(cString::sprintf("%s%s", *indent, tr("Number of reruns to display")), &tmpTvguideConfig->numReruns, 1, 10)); }
Add(new cMenuEditStraItem(cString::sprintf("%s%s", *indent, tr("Use Subtitle for reruns")), &tmpTvguideConfig->useSubtitleRerun, 3, useSubtitleRerunTexts)); Add(new cMenuEditStraItem(tr("Time Format (12h/24h)"), &tmpConfig->timeFormat, 2, timeFormatItems));
Add(new cMenuEditIntItem(tr("EPG Window Text Scrolling Speed"), &tmpConfig->detailedViewScrollStep, 1, 30));
Add(new cMenuEditBoolItem(tr("Display Reruns in detailed EPG View"), &tmpConfig->displayRerunsDetailEPGView));
if (tmpConfig->displayRerunsDetailEPGView) {
Add(new cMenuEditIntItem(cString::sprintf("%s%s", *indent, tr("Number of reruns to display")), &tmpConfig->numReruns, 1, 10));
Add(new cMenuEditStraItem(cString::sprintf("%s%s", *indent, tr("Use Subtitle for reruns")), &tmpConfig->useSubtitleRerun, 3, useSubtitleRerunTexts));
} }
SetCurrent(Get(currentItem)); SetCurrent(Get(currentItem));
Display(); Display();
} }
eOSState cMenuSetupGeneral::ProcessKey(eKeys Key) { eOSState cMenuSetupGeneral::ProcessKey(eKeys Key) {
bool olduseNopacityTheme = tmpTvguideConfig->useNopacityTheme; bool olduseNopacityTheme = tmpConfig->useNopacityTheme;
bool olddisplayRerunsDetailEPGView = tmpTvguideConfig->displayRerunsDetailEPGView; bool olddisplayRerunsDetailEPGView = tmpConfig->displayRerunsDetailEPGView;
eOSState state = cOsdMenu::ProcessKey(Key); eOSState state = cOsdMenu::ProcessKey(Key);
if (Key == kOk) { if (Key == kOk) {
state = osBack; state = osBack;
} else if (Key != kNone) { } else if (Key != kNone) {
if (tmpTvguideConfig->useNopacityTheme != olduseNopacityTheme || if (tmpConfig->useNopacityTheme != olduseNopacityTheme ||
tmpTvguideConfig->displayRerunsDetailEPGView != olddisplayRerunsDetailEPGView) { tmpConfig->displayRerunsDetailEPGView != olddisplayRerunsDetailEPGView) {
Set(); Set();
} }
} }
@@ -252,7 +261,7 @@ eOSState cMenuSetupGeneral::ProcessKey(eKeys Key) {
//----- Screen Presentation ------------------------------------------------------------------------------------------------------------- //----- Screen Presentation -------------------------------------------------------------------------------------------------------------
cMenuSetupScreenLayout::cMenuSetupScreenLayout(cTvguideConfig* data) : cMenuSetupSubMenu(tr("Screen Presentation"), data) { cMenuSetupScreenLayout::cMenuSetupScreenLayout(cTVGuideConfig* data) : cMenuSetupSubMenu(tr("Screen Presentation"), data) {
displayModeItems[0] = "vertical"; displayModeItems[0] = "vertical";
displayModeItems[1] = "horizontal"; displayModeItems[1] = "horizontal";
hideChannelLogosItems[0] = trVDR("yes"); hideChannelLogosItems[0] = trVDR("yes");
@@ -266,55 +275,55 @@ void cMenuSetupScreenLayout::Set(void) {
int currentItem = Current(); int currentItem = Current();
Clear(); Clear();
Add(new cMenuEditStraItem(tr("Display Mode"), &tmpTvguideConfig->displayMode, 2, displayModeItems)); Add(new cMenuEditStraItem(tr("Display Mode"), &tmpConfig->displayMode, 2, displayModeItems));
if (tmpTvguideConfig->displayMode == eVertical) { if (tmpConfig->displayMode == eVertical) {
Add(new cMenuEditIntItem(*cString::sprintf("%s%s", *indent, tr("Height of Channel Header (Perc. of osd height)")), &tmpTvguideConfig->channelHeaderHeightPercent, 5, 30)); Add(new cMenuEditIntItem(*cString::sprintf("%s%s", *indent, tr("Height of Channel Header (Perc. of osd height)")), &tmpConfig->channelHeaderHeightPercent, 5, 30));
Add(new cMenuEditIntItem(*cString::sprintf("%s%s", *indent, tr("Width of Timeline (Perc. of osd width)")), &tmpTvguideConfig->timeLineWidthPercent, 5, 30)); Add(new cMenuEditIntItem(*cString::sprintf("%s%s", *indent, tr("Width of Timeline (Perc. of osd width)")), &tmpConfig->timeLineWidthPercent, 5, 30));
Add(new cMenuEditIntItem(*cString::sprintf("%s%s", *indent, tr("Number of Channels to display")), &tmpTvguideConfig->channelCols, 3, 12)); Add(new cMenuEditIntItem(*cString::sprintf("%s%s", *indent, tr("Number of Channels to display")), &tmpConfig->channelCols, 3, 12));
} else if (tmpTvguideConfig->displayMode == eHorizontal) { } else if (tmpConfig->displayMode == eHorizontal) {
Add(new cMenuEditIntItem(*cString::sprintf("%s%s", *indent, tr("Width of Channel Header (Perc. of osd width)")), &tmpTvguideConfig->channelHeaderWidthPercent, 5, 30)); Add(new cMenuEditIntItem(*cString::sprintf("%s%s", *indent, tr("Width of Channel Header (Perc. of osd width)")), &tmpConfig->channelHeaderWidthPercent, 5, 30));
Add(new cMenuEditIntItem(*cString::sprintf("%s%s", *indent, tr("Height of Timeline (Perc. of osd height)")), &tmpTvguideConfig->timeLineHeightPercent, 5, 30)); Add(new cMenuEditIntItem(*cString::sprintf("%s%s", *indent, tr("Height of Timeline (Perc. of osd height)")), &tmpConfig->timeLineHeightPercent, 5, 30));
Add(new cMenuEditIntItem(*cString::sprintf("%s%s", *indent, tr("Number of Channels to display")), &tmpTvguideConfig->channelRows, 3, 12)); Add(new cMenuEditIntItem(*cString::sprintf("%s%s", *indent, tr("Number of Channels to display")), &tmpConfig->channelRows, 3, 12));
Add(new cMenuEditBoolItem(*cString::sprintf("%s%s", *indent, tr("Display time in EPG Grids")), &tmpTvguideConfig->showTimeInGrid));
} }
Add(new cMenuEditIntItem(tr("Height of Headers (Status Header and EPG View, Perc. of osd height)"), &tmpTvguideConfig->headerHeightPercent, 10, 50)); Add(new cMenuEditBoolItem(tr("Display time in EPG Grids"), &tmpConfig->showTimeInGrid));
Add(new cMenuEditIntItem(tr("Height of Footer (Perc. of osd height)"), &tmpTvguideConfig->footerHeightPercent, 3, 20)); Add(new cMenuEditIntItem(tr("Height of Headers (Status Header and EPG View, Perc. of osd height)"), &tmpConfig->headerHeightPercent, 10, 50));
Add(new cMenuEditIntItem(tr("Height of Footer (Perc. of osd height)"), &tmpConfig->footerHeightPercent, 3, 20));
Add(new cMenuEditBoolItem(tr("Display status header"), &tmpTvguideConfig->displayStatusHeader)); Add(new cMenuEditBoolItem(tr("Display status header"), &tmpConfig->displayStatusHeader));
if (tmpTvguideConfig->displayStatusHeader) { if (tmpConfig->displayStatusHeader) {
Add(new cMenuEditBoolItem(*cString::sprintf("%s%s", *indent, tr("Scale video to upper right corner")), &tmpTvguideConfig->scaleVideo)); Add(new cMenuEditBoolItem(*cString::sprintf("%s%s", *indent, tr("Scale video to upper right corner")), &tmpConfig->scaleVideo));
Add(new cMenuEditBoolItem(*cString::sprintf("%s%s", *indent, tr("Rounded corners around video frame")), &tmpTvguideConfig->decorateVideo)); Add(new cMenuEditBoolItem(*cString::sprintf("%s%s", *indent, tr("Rounded corners around video frame")), &tmpConfig->decorateVideo));
} }
Add(new cMenuEditBoolItem(tr("Display Channel Names in Header"), &tmpTvguideConfig->displayChannelName)); Add(new cMenuEditBoolItem(tr("Display Channel Names in Header"), &tmpConfig->displayChannelName));
Add(new cMenuEditBoolItem(tr("Display channel groups"), &tmpTvguideConfig->displayChannelGroups)); Add(new cMenuEditBoolItem(tr("Display channel groups"), &tmpConfig->displayChannelGroups));
if (tmpTvguideConfig->displayChannelGroups) { if (tmpConfig->displayChannelGroups) {
if (tmpTvguideConfig->displayMode == eVertical) { if (tmpConfig->displayMode == eVertical) {
Add(new cMenuEditIntItem(*cString::sprintf("%s%s", *indent, tr("Height of channel groups (Perc. of osd height)")), &tmpTvguideConfig->channelGroupsPercent, 3, 30)); Add(new cMenuEditIntItem(*cString::sprintf("%s%s", *indent, tr("Height of channel groups (Perc. of osd height)")), &tmpConfig->channelGroupsPercent, 3, 30));
} else if (tmpTvguideConfig->displayMode == eHorizontal) { } else if (tmpConfig->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 cMenuEditIntItem(*cString::sprintf("%s%s", *indent, tr("Width of channel groups (Perc. of osd width)")), &tmpConfig->channelGroupsPercent, 3, 30));
} }
} }
Add(new cMenuEditBoolItem(tr("Display current time baseline"), &tmpTvguideConfig->displayTimeBase)); Add(new cMenuEditBoolItem(tr("Display current time baseline"), &tmpConfig->displayTimeBase));
Add(new cMenuEditStraItem(tr("Show Channel Logos"), &tmpTvguideConfig->hideChannelLogos, 2, hideChannelLogosItems)); Add(new cMenuEditStraItem(tr("Show Channel Logos"), &tmpConfig->hideChannelLogos, 2, hideChannelLogosItems));
if (!tmpTvguideConfig->hideChannelLogos) { if (!tmpConfig->hideChannelLogos) {
Add(InfoItem(tr("Logo Path used"), *tvguideConfig.logoPath)); Add(InfoItem(tr("Logo Path used"), *config.logoPath));
Add(new cMenuEditStraItem(*cString::sprintf("%s%s", *indent, tr("Logo Extension")), &tmpTvguideConfig->logoExtension, 2, logoExtensionItems)); Add(new cMenuEditStraItem(*cString::sprintf("%s%s", *indent, tr("Logo Extension")), &tmpConfig->logoExtension, 2, logoExtensionItems));
Add(new cMenuEditIntItem(*cString::sprintf("%s%s", *indent, tr("Logo width ratio")), &tmpTvguideConfig->logoWidthRatio, 1, 1000)); Add(new cMenuEditIntItem(*cString::sprintf("%s%s", *indent, tr("Logo width ratio")), &tmpConfig->logoWidthRatio, 1, 1000));
Add(new cMenuEditIntItem(*cString::sprintf("%s%s", *indent, tr("Logo height ratio")), &tmpTvguideConfig->logoHeightRatio, 1, 1000)); Add(new cMenuEditIntItem(*cString::sprintf("%s%s", *indent, tr("Logo height ratio")), &tmpConfig->logoHeightRatio, 1, 1000));
} }
Add(new cMenuEditIntItem(tr("Text Border in Detailed View (pixel)"), &tmpTvguideConfig->epgViewBorder, 0, 300)); Add(new cMenuEditIntItem(tr("Text Border in Detailed View (pixel)"), &tmpConfig->epgViewBorder, 0, 300));
Add(new cMenuEditStraItem(tr("Show EPG Images"), &tmpTvguideConfig->hideEpgImages, 2, hideChannelLogosItems)); Add(new cMenuEditStraItem(tr("Show EPG Images"), &tmpConfig->hideEpgImages, 2, hideChannelLogosItems));
if (!tmpTvguideConfig->hideEpgImages) { if (!tmpConfig->hideEpgImages) {
Add(InfoItem(tr("EPG Images Path used"), *tvguideConfig.epgImagePath)); Add(InfoItem(tr("EPG Images Path used"), *config.epgImagePath));
Add(new cMenuEditIntItem(*cString::sprintf("%s%s", *indent, tr("EPG Image width")), &tmpTvguideConfig->epgImageWidth, 0, 800)); Add(new cMenuEditIntItem(*cString::sprintf("%s%s", *indent, tr("EPG Image width")), &tmpConfig->epgImageWidth, 0, 800));
Add(new cMenuEditIntItem(*cString::sprintf("%s%s", *indent, tr("EPG Image height")), &tmpTvguideConfig->epgImageHeight, 0, 800)); Add(new cMenuEditIntItem(*cString::sprintf("%s%s", *indent, tr("EPG Image height")), &tmpConfig->epgImageHeight, 0, 800));
Add(new cMenuEditIntItem(*cString::sprintf("%s%s", *indent, tr("Number of additional EPG Images")), &tmpTvguideConfig->numAdditionalEPGPictures, 0, 20)); Add(new cMenuEditIntItem(*cString::sprintf("%s%s", *indent, tr("Number of additional EPG Images")), &tmpConfig->numAdditionalEPGPictures, 0, 20));
Add(new cMenuEditIntItem(*cString::sprintf("%s%s", *indent, tr("Additional EPG Image width")), &tmpTvguideConfig->epgImageWidthLarge, 1, 800)); Add(new cMenuEditIntItem(*cString::sprintf("%s%s", *indent, tr("Additional EPG Image width")), &tmpConfig->epgImageWidthLarge, 1, 800));
Add(new cMenuEditIntItem(*cString::sprintf("%s%s", *indent, tr("Additional EPG Image height")), &tmpTvguideConfig->epgImageHeightLarge, 0, 800)); Add(new cMenuEditIntItem(*cString::sprintf("%s%s", *indent, tr("Additional EPG Image height")), &tmpConfig->epgImageHeightLarge, 0, 800));
} }
SetCurrent(Get(currentItem)); SetCurrent(Get(currentItem));
@@ -322,20 +331,20 @@ void cMenuSetupScreenLayout::Set(void) {
} }
eOSState cMenuSetupScreenLayout::ProcessKey(eKeys Key) { eOSState cMenuSetupScreenLayout::ProcessKey(eKeys Key) {
int olddisplayMode = tmpTvguideConfig->displayMode; int olddisplayMode = tmpConfig->displayMode;
bool olddisplayStatusHeader = tmpTvguideConfig->displayStatusHeader; bool olddisplayStatusHeader = tmpConfig->displayStatusHeader;
bool olddisplayChannelGroups = tmpTvguideConfig->displayChannelGroups; bool olddisplayChannelGroups = tmpConfig->displayChannelGroups;
int oldhideChannelLogos = tmpTvguideConfig->hideChannelLogos; int oldhideChannelLogos = tmpConfig->hideChannelLogos;
int oldhideEpgImages = tmpTvguideConfig->hideEpgImages; int oldhideEpgImages = tmpConfig->hideEpgImages;
eOSState state = cOsdMenu::ProcessKey(Key); eOSState state = cOsdMenu::ProcessKey(Key);
if (Key == kOk) { if (Key == kOk) {
state = osBack; state = osBack;
} else if (Key != kNone) { } else if (Key != kNone) {
if (tmpTvguideConfig->displayMode != olddisplayMode || if (tmpConfig->displayMode != olddisplayMode ||
tmpTvguideConfig->displayStatusHeader != olddisplayStatusHeader || tmpConfig->displayStatusHeader != olddisplayStatusHeader ||
tmpTvguideConfig->displayChannelGroups != olddisplayChannelGroups || tmpConfig->displayChannelGroups != olddisplayChannelGroups ||
tmpTvguideConfig->hideChannelLogos != oldhideChannelLogos || tmpConfig->hideChannelLogos != oldhideChannelLogos ||
tmpTvguideConfig->hideEpgImages != oldhideEpgImages) { tmpConfig->hideEpgImages != oldhideEpgImages) {
Set(); Set();
} }
} }
@@ -344,9 +353,9 @@ eOSState cMenuSetupScreenLayout::ProcessKey(eKeys Key) {
//-----Fonts and Fontsizes ------------------------------------------------------------------------------------------------------- //-----Fonts and Fontsizes -------------------------------------------------------------------------------------------------------
cMenuSetupFont::cMenuSetupFont(cTvguideConfig* data) : cMenuSetupSubMenu(tr("Fonts and Fontsizes"), data) { cMenuSetupFont::cMenuSetupFont(cTVGuideConfig* data) : cMenuSetupSubMenu(tr("Fonts and Fontsizes"), data) {
cFont::GetAvailableFontNames(&fontNames); cFont::GetAvailableFontNames(&fontNames);
fontNames.Insert(strdup(tvguideConfig.fontNameDefault)); fontNames.Insert(strdup(config.fontNameDefault));
Set(); Set();
} }
@@ -354,37 +363,37 @@ void cMenuSetupFont::Set(void) {
int currentItem = Current(); int currentItem = Current();
Clear(); Clear();
Add(new cMenuEditStraItem(tr("Font"), &tmpTvguideConfig->fontIndex, fontNames.Size(), &fontNames[0])); Add(new cMenuEditStraItem(tr("Font"), &tmpConfig->fontIndex, fontNames.Size(), &fontNames[0]));
Add(new cMenuEditIntItem(tr("Status Header Font Size"), &tmpTvguideConfig->FontStatusHeaderDelta, -30, 30)); Add(new cMenuEditIntItem(tr("Status Header Font Size"), &tmpConfig->FontStatusHeaderDelta, -30, 30));
Add(new cMenuEditIntItem(tr("Status Header Large Font Size"), &tmpTvguideConfig->FontStatusHeaderLargeDelta, -30, 30)); Add(new cMenuEditIntItem(tr("Status Header Large Font Size"), &tmpConfig->FontStatusHeaderLargeDelta, -30, 30));
Add(new cMenuEditIntItem(tr("Detail EPG View Font Size"), &tmpTvguideConfig->FontDetailViewDelta, -30, 30)); Add(new cMenuEditIntItem(tr("Detail EPG View Font Size"), &tmpConfig->FontDetailViewDelta, -30, 30));
Add(new cMenuEditIntItem(tr("Detail EPG View Header Font Size"), &tmpTvguideConfig->FontDetailHeaderDelta, -30, 30)); Add(new cMenuEditIntItem(tr("Detail EPG View Header Font Size"), &tmpConfig->FontDetailHeaderDelta, -30, 30));
Add(new cMenuEditIntItem(tr("Message Font Size"), &tmpTvguideConfig->FontMessageBoxDelta, -30, 30)); Add(new cMenuEditIntItem(tr("Message Font Size"), &tmpConfig->FontMessageBoxDelta, -30, 30));
Add(new cMenuEditIntItem(tr("Message Large Font Size"), &tmpTvguideConfig->FontMessageBoxLargeDelta, -30, 30)); Add(new cMenuEditIntItem(tr("Message Large Font Size"), &tmpConfig->FontMessageBoxLargeDelta, -30, 30));
Add(new cMenuEditIntItem(tr("Button Font Size"), &tmpTvguideConfig->FontButtonDelta, -30, 30)); Add(new cMenuEditIntItem(tr("Button Font Size"), &tmpConfig->FontButtonDelta, -30, 30));
if (tmpTvguideConfig->displayMode == eVertical) { if (tmpConfig->displayMode == eVertical) {
Add(new cMenuEditIntItem(tr("Channel Header Font Size"), &tmpTvguideConfig->FontChannelHeaderDelta, -30, 30)); Add(new cMenuEditIntItem(tr("Channel Header Font Size"), &tmpConfig->FontChannelHeaderDelta, -30, 30));
Add(new cMenuEditIntItem(tr("Channel Groups Font Size"), &tmpTvguideConfig->FontChannelGroupsDelta, -30, 30)); Add(new cMenuEditIntItem(tr("Channel Groups Font Size"), &tmpConfig->FontChannelGroupsDelta, -30, 30));
Add(new cMenuEditIntItem(tr("Grid Font Size"), &tmpTvguideConfig->FontGridDelta, -30, 30)); Add(new cMenuEditIntItem(tr("Grid Font Size"), &tmpConfig->FontGridDelta, -30, 30));
Add(new cMenuEditIntItem(tr("Grid Font Small Size"), &tmpTvguideConfig->FontGridSmallDelta, -30, 30)); Add(new cMenuEditIntItem(tr("Grid Font Small Size"), &tmpConfig->FontGridSmallDelta, -30, 30));
Add(new cMenuEditIntItem(tr("Timeline Weekday Font Size"), &tmpTvguideConfig->FontTimeLineWeekdayDelta, -30, 30)); Add(new cMenuEditIntItem(tr("Timeline Weekday Font Size"), &tmpConfig->FontTimeLineWeekdayDelta, -30, 30));
Add(new cMenuEditIntItem(tr("Timeline Date Font Size"), &tmpTvguideConfig->FontTimeLineDateDelta, -30, 30)); Add(new cMenuEditIntItem(tr("Timeline Date Font Size"), &tmpConfig->FontTimeLineDateDelta, -30, 30));
Add(new cMenuEditIntItem(tr("Timeline Time Font Size"), &tmpTvguideConfig->FontTimeLineTimeDelta, -30, 30)); Add(new cMenuEditIntItem(tr("Timeline Time Font Size"), &tmpConfig->FontTimeLineTimeDelta, -30, 30));
} else if (tmpTvguideConfig->displayMode == eHorizontal) { } else if (tmpConfig->displayMode == eHorizontal) {
Add(new cMenuEditIntItem(tr("Channel Header Font Size"), &tmpTvguideConfig->FontChannelHeaderHorizontalDelta, -30, 30)); Add(new cMenuEditIntItem(tr("Channel Header Font Size"), &tmpConfig->FontChannelHeaderHorizontalDelta, -30, 30));
Add(new cMenuEditIntItem(tr("Channel Groups Font Size"), &tmpTvguideConfig->FontChannelGroupsHorizontalDelta, -30, 30)); Add(new cMenuEditIntItem(tr("Channel Groups Font Size"), &tmpConfig->FontChannelGroupsHorizontalDelta, -30, 30));
Add(new cMenuEditIntItem(tr("Grid Font Size"), &tmpTvguideConfig->FontGridHorizontalDelta, -30, 30)); Add(new cMenuEditIntItem(tr("Grid Font Size"), &tmpConfig->FontGridHorizontalDelta, -30, 30));
Add(new cMenuEditIntItem(tr("Grid Font Small Size"), &tmpTvguideConfig->FontGridHorizontalSmallDelta, -30, 30)); Add(new cMenuEditIntItem(tr("Grid Font Small Size"), &tmpConfig->FontGridHorizontalSmallDelta, -30, 30));
Add(new cMenuEditIntItem(tr("Timeline Date Font Size"), &tmpTvguideConfig->FontTimeLineDateHorizontalDelta, -30, 30)); Add(new cMenuEditIntItem(tr("Timeline Date Font Size"), &tmpConfig->FontTimeLineDateHorizontalDelta, -30, 30));
Add(new cMenuEditIntItem(tr("Timeline Time Font Size"), &tmpTvguideConfig->FontTimeLineTimeHorizontalDelta, -30, 30)); Add(new cMenuEditIntItem(tr("Timeline Time Font Size"), &tmpConfig->FontTimeLineTimeHorizontalDelta, -30, 30));
} }
Add(new cMenuEditIntItem(tr("Search & Recording Menu Font Size"), &tmpTvguideConfig->FontRecMenuItemDelta, -30, 30)); Add(new cMenuEditIntItem(tr("Search & Recording Menu Font Size"), &tmpConfig->FontRecMenuItemDelta, -30, 30));
Add(new cMenuEditIntItem(tr("Search & Recording Menu Small Font Size"), &tmpTvguideConfig->FontRecMenuItemSmallDelta, -30, 30)); Add(new cMenuEditIntItem(tr("Search & Recording Menu Small Font Size"), &tmpConfig->FontRecMenuItemSmallDelta, -30, 30));
Add(new cMenuEditIntItem(tr("Search & Recording Menu Header Font Size"), &tmpTvguideConfig->FontRecMenuItemLargeDelta, -30, 30)); Add(new cMenuEditIntItem(tr("Search & Recording Menu Header Font Size"), &tmpConfig->FontRecMenuItemLargeDelta, -30, 30));
SetCurrent(Get(currentItem)); SetCurrent(Get(currentItem));
Display(); Display();
@@ -392,7 +401,7 @@ void cMenuSetupFont::Set(void) {
//----- Recording Menus and Favorites ------------------------------------------------------------------------------------------------------- //----- Recording Menus and Favorites -------------------------------------------------------------------------------------------------------
cMenuSetupFavorites::cMenuSetupFavorites(cTvguideConfig* data) : cMenuSetupSubMenu(tr("Recording Menus and Favorites"), data) { cMenuSetupFavorites::cMenuSetupFavorites(cTVGuideConfig* data) : cMenuSetupSubMenu(tr("Recording Menus and Favorites"), data) {
strn0cpy(description1, data->descUser1.c_str(), sizeof(description1)); strn0cpy(description1, data->descUser1.c_str(), sizeof(description1));
strn0cpy(description2, data->descUser2.c_str(), sizeof(description2)); strn0cpy(description2, data->descUser2.c_str(), sizeof(description2));
strn0cpy(description3, data->descUser3.c_str(), sizeof(description3)); strn0cpy(description3, data->descUser3.c_str(), sizeof(description3));
@@ -411,44 +420,44 @@ void cMenuSetupFavorites::Set(void) {
int currentItem = Current(); int currentItem = Current();
Clear(); Clear();
Add(new cMenuEditStraItem(tr("Folder for instant Recordings"), &tmpTvguideConfig->instRecFolderMode, 3, recFolderMode)); Add(new cMenuEditStraItem(tr("Folder for instant Recordings"), &tmpConfig->instRecFolderMode, 3, recFolderMode));
if (tmpTvguideConfig->instRecFolderMode == eFolderFixed) { if (tmpConfig->instRecFolderMode == eFolderFixed) {
Add(new cMenuEditStrItem(cString::sprintf("%s%s", *indent, tr("Folder")), fixedFolder, sizeof(fixedFolder), trVDR(FileNameChars))); Add(new cMenuEditStrItem(cString::sprintf("%s%s", *indent, tr("Folder")), fixedFolder, sizeof(fixedFolder), trVDR(FileNameChars)));
} }
if (pRemoteTimers) if (pRemoteTimers)
Add(new cMenuEditBoolItem(tr("Use Remotetimers"), &tmpTvguideConfig->useRemoteTimers)); Add(new cMenuEditBoolItem(tr("Use Remotetimers"), &tmpConfig->useRemoteTimers));
Add(new cMenuEditBoolItem(tr("Limit channels in favorites"), &tmpTvguideConfig->favLimitChannels)); Add(new cMenuEditBoolItem(tr("Limit channels in favorites"), &tmpConfig->favLimitChannels));
if (tmpTvguideConfig->favLimitChannels) { if (tmpConfig->favLimitChannels) {
Add(new cMenuEditChanItem(tr("Start Channel"), &tmpTvguideConfig->favStartChannel)); Add(new cMenuEditChanItem(tr("Start Channel"), &tmpConfig->favStartChannel));
Add(new cMenuEditChanItem(tr("Stop Channel"), &tmpTvguideConfig->favStopChannel)); Add(new cMenuEditChanItem(tr("Stop Channel"), &tmpConfig->favStopChannel));
} }
Add(new cMenuEditBoolItem(tr("Use \"What's on now\" in favorites"), &tmpTvguideConfig->favWhatsOnNow)); Add(new cMenuEditBoolItem(tr("Use \"What's on now\" in favorites"), &tmpConfig->favWhatsOnNow));
Add(new cMenuEditBoolItem(tr("Use \"What's on next\" in favorites"), &tmpTvguideConfig->favWhatsOnNext)); Add(new cMenuEditBoolItem(tr("Use \"What's on next\" in favorites"), &tmpConfig->favWhatsOnNext));
Add(new cOsdItem(tr("User defined times in favorites:"), osUnknown, false)); Add(new cOsdItem(tr("User defined times in favorites:"), osUnknown, false));
Add(new cMenuEditBoolItem(tr("Use user defined time 1"), &tmpTvguideConfig->favUseTime1)); Add(new cMenuEditBoolItem(tr("Use user defined time 1"), &tmpConfig->favUseTime1));
if (tmpTvguideConfig->favUseTime1) { if (tmpConfig->favUseTime1) {
Add(new cMenuEditStrItem(cString::sprintf("%s%s", *indent, tr("Description")), description1, sizeof(description1), trVDR(FileNameChars))); Add(new cMenuEditStrItem(cString::sprintf("%s%s", *indent, tr("Description")), description1, sizeof(description1), trVDR(FileNameChars)));
Add(new cMenuEditTimeItem(cString::sprintf("%s%s", *indent, tr("Time")), &tmpTvguideConfig->favTime1)); Add(new cMenuEditTimeItem(cString::sprintf("%s%s", *indent, tr("Time")), &tmpConfig->favTime1));
} }
Add(new cMenuEditBoolItem(tr("Use user defined time 2"), &tmpTvguideConfig->favUseTime2)); Add(new cMenuEditBoolItem(tr("Use user defined time 2"), &tmpConfig->favUseTime2));
if (tmpTvguideConfig->favUseTime2) { if (tmpConfig->favUseTime2) {
Add(new cMenuEditStrItem(cString::sprintf("%s%s", *indent, tr("Description")), description2, sizeof(description2), trVDR(FileNameChars))); Add(new cMenuEditStrItem(cString::sprintf("%s%s", *indent, tr("Description")), description2, sizeof(description2), trVDR(FileNameChars)));
Add(new cMenuEditTimeItem(cString::sprintf("%s%s", *indent, tr("Time")), &tmpTvguideConfig->favTime2)); Add(new cMenuEditTimeItem(cString::sprintf("%s%s", *indent, tr("Time")), &tmpConfig->favTime2));
} }
Add(new cMenuEditBoolItem(tr("Use user defined time 3"), &tmpTvguideConfig->favUseTime3)); Add(new cMenuEditBoolItem(tr("Use user defined time 3"), &tmpConfig->favUseTime3));
if (tmpTvguideConfig->favUseTime3) { if (tmpConfig->favUseTime3) {
Add(new cMenuEditStrItem(cString::sprintf("%s%s", *indent, tr("Description")), description3, sizeof(description3), trVDR(FileNameChars))); Add(new cMenuEditStrItem(cString::sprintf("%s%s", *indent, tr("Description")), description3, sizeof(description3), trVDR(FileNameChars)));
Add(new cMenuEditTimeItem(cString::sprintf("%s%s", *indent, tr("Time")), &tmpTvguideConfig->favTime3)); Add(new cMenuEditTimeItem(cString::sprintf("%s%s", *indent, tr("Time")), &tmpConfig->favTime3));
} }
Add(new cMenuEditBoolItem(tr("Use user defined time 4"), &tmpTvguideConfig->favUseTime4)); Add(new cMenuEditBoolItem(tr("Use user defined time 4"), &tmpConfig->favUseTime4));
if (tmpTvguideConfig->favUseTime4) { if (tmpConfig->favUseTime4) {
Add(new cMenuEditStrItem(cString::sprintf("%s%s", *indent, tr("Description")), description4, sizeof(description4), trVDR(FileNameChars))); Add(new cMenuEditStrItem(cString::sprintf("%s%s", *indent, tr("Description")), description4, sizeof(description4), trVDR(FileNameChars)));
Add(new cMenuEditTimeItem(cString::sprintf("%s%s", *indent, tr("Time")), &tmpTvguideConfig->favTime4)); Add(new cMenuEditTimeItem(cString::sprintf("%s%s", *indent, tr("Time")), &tmpConfig->favTime4));
} }
Add(new cOsdItem(tr("Switchtimer:"), osUnknown, false)); Add(new cOsdItem(tr("Switchtimer:"), osUnknown, false));
Add(new cMenuEditStraItem(tr("Switch Mode"), &tmpTvguideConfig->switchMode, 3, switchModeItems)); Add(new cMenuEditStraItem(tr("Switch Mode"), &tmpConfig->switchMode, 3, switchModeItems));
Add(new cMenuEditIntItem(tr("Switch (x)min before start of the show"), &tmpTvguideConfig->switchMinsBefore, 0, 10)); Add(new cMenuEditIntItem(tr("Switch (x)min before start of the show"), &tmpConfig->switchMinsBefore, 0, 10));
SetCurrent(Get(currentItem)); SetCurrent(Get(currentItem));
@@ -457,21 +466,21 @@ void cMenuSetupFavorites::Set(void) {
eOSState cMenuSetupFavorites::ProcessKey(eKeys Key) { eOSState cMenuSetupFavorites::ProcessKey(eKeys Key) {
int tmpFavUseTime1 = tmpTvguideConfig->favUseTime1; int tmpFavUseTime1 = tmpConfig->favUseTime1;
int tmpFavUseTime2 = tmpTvguideConfig->favUseTime2; int tmpFavUseTime2 = tmpConfig->favUseTime2;
int tmpFavUseTime3 = tmpTvguideConfig->favUseTime3; int tmpFavUseTime3 = tmpConfig->favUseTime3;
int tmpFavUseTime4 = tmpTvguideConfig->favUseTime4; int tmpFavUseTime4 = tmpConfig->favUseTime4;
int tmpFavLimitChannels = tmpTvguideConfig->favLimitChannels; int tmpFavLimitChannels = tmpConfig->favLimitChannels;
int tmpFolderMode = tmpTvguideConfig->instRecFolderMode; int tmpFolderMode = tmpConfig->instRecFolderMode;
eOSState state = cOsdMenu::ProcessKey(Key); eOSState state = cOsdMenu::ProcessKey(Key);
if ((tmpFavUseTime1 != tmpTvguideConfig->favUseTime1) || if ((tmpFavUseTime1 != tmpConfig->favUseTime1) ||
(tmpFavUseTime2 != tmpTvguideConfig->favUseTime2) || (tmpFavUseTime2 != tmpConfig->favUseTime2) ||
(tmpFavUseTime3 != tmpTvguideConfig->favUseTime3) || (tmpFavUseTime3 != tmpConfig->favUseTime3) ||
(tmpFavUseTime4 != tmpTvguideConfig->favUseTime4) || (tmpFavUseTime4 != tmpConfig->favUseTime4) ||
(tmpFavLimitChannels != tmpTvguideConfig->favLimitChannels) || (tmpFavLimitChannels != tmpConfig->favLimitChannels) ||
(tmpFolderMode != tmpTvguideConfig->instRecFolderMode) ) { (tmpFolderMode != tmpConfig->instRecFolderMode) ) {
Set(); Set();
Display(); Display();
} }
@@ -479,10 +488,10 @@ eOSState cMenuSetupFavorites::ProcessKey(eKeys Key) {
if (state == osUnknown) { if (state == osUnknown) {
switch (Key) { switch (Key) {
case kOk: { case kOk: {
tmpTvguideConfig->descUser1 = cString::sprintf("%s", description1); tmpConfig->descUser1 = cString::sprintf("%s", description1);
tmpTvguideConfig->descUser2 = cString::sprintf("%s", description2); tmpConfig->descUser2 = cString::sprintf("%s", description2);
tmpTvguideConfig->descUser3 = cString::sprintf("%s", description3); tmpConfig->descUser3 = cString::sprintf("%s", description3);
tmpTvguideConfig->descUser4 = cString::sprintf("%s", description4); tmpConfig->descUser4 = cString::sprintf("%s", description4);
return osBack; } return osBack; }
default: default:
break; break;
@@ -493,26 +502,26 @@ eOSState cMenuSetupFavorites::ProcessKey(eKeys Key) {
} }
//-----Image Caching------------------------------------------------------------------------------------------------------------- //-----Image Caching-------------------------------------------------------------------------------------------------------------
cMenuSetupImageCache::cMenuSetupImageCache(cTvguideConfig* data) : cMenuSetupSubMenu(tr("Image Loading and Caching"), data) { cMenuSetupImageCache::cMenuSetupImageCache(cTVGuideConfig* data) : cMenuSetupSubMenu(tr("Image Loading and Caching"), data) {
Set(); Set();
} }
void cMenuSetupImageCache::Set(void) { void cMenuSetupImageCache::Set(void) {
int currentItem = Current(); int currentItem = Current();
Clear(); Clear();
Add(new cMenuEditBoolItem(tr("Create Log Messages for image loading"), &tmpTvguideConfig->debugImageLoading)); Add(new cMenuEditBoolItem(tr("Create Log Messages for image loading"), &tmpConfig->debugImageLoading));
Add(new cMenuEditBoolItem(tr("Limit Logo Cache"), &tmpTvguideConfig->limitLogoCache)); Add(new cMenuEditBoolItem(tr("Limit Logo Cache"), &tmpConfig->limitLogoCache));
if (&tmpTvguideConfig->limitLogoCache) { if (&tmpConfig->limitLogoCache) {
Add(new cMenuEditIntItem(cString::sprintf("%s%s", *indent, tr("Maximal number of logos to cache")), &tmpTvguideConfig->numLogosMax, 1, 9999)); Add(new cMenuEditIntItem(cString::sprintf("%s%s", *indent, tr("Maximal number of logos to cache")), &tmpConfig->numLogosMax, 1, 9999));
} }
Add(new cMenuEditIntItem(tr("Number of logos to cache at start"), &tmpTvguideConfig->numLogosInitial, 0, 9999)); Add(new cMenuEditIntItem(tr("Number of logos to cache at start"), &tmpConfig->numLogosInitial, 0, 9999));
Add(InfoItem(tr("Cache Sizes"), "")); Add(InfoItem(tr("Cache Sizes"), ""));
Add(InfoItem(tr("OSD Element Cache"), (imgCache.GetCacheSize(ctOsdElement)).c_str())); Add(InfoItem(tr("OSD Element Cache"), cString::sprintf("\t%s", (imgCache.GetCacheSize(ctOsdElement)).c_str())));
Add(InfoItem(tr("Logo cache"), (imgCache.GetCacheSize(ctLogo)).c_str())); Add(InfoItem(tr("Logo cache"), cString::sprintf("\t%s", (imgCache.GetCacheSize(ctLogo)).c_str())));
Add(InfoItem(tr("EPG Grid Cache"), (imgCache.GetCacheSize(ctGrid)).c_str())); Add(InfoItem(tr("EPG Grid Cache"), cString::sprintf("\t%s", (imgCache.GetCacheSize(ctGrid)).c_str())));
Add(InfoItem(tr("Channel Groups Cache"), (imgCache.GetCacheSize(ctChannelGroup)).c_str())); Add(InfoItem(tr("Channel Groups Cache"), cString::sprintf("\t%s", (imgCache.GetCacheSize(ctChannelGroup)).c_str())));
Add(InfoItem(tr("Recording Menus Icon Cache"), (imgCache.GetCacheSize(ctIcon)).c_str())); Add(InfoItem(tr("Recording Menus Icon Cache"), cString::sprintf("\t%s", (imgCache.GetCacheSize(ctIcon)).c_str())));
SetCurrent(Get(currentItem)); SetCurrent(Get(currentItem));
Display(); Display();

18
setup.h
View File

@@ -4,12 +4,14 @@
#include <vdr/menuitems.h> #include <vdr/menuitems.h>
#include "config.h" #include "config.h"
extern cTVGuideConfig config;
class cTvguideSetup : public cMenuSetupPage { class cTvguideSetup : public cMenuSetupPage {
public: public:
cTvguideSetup(void); cTvguideSetup(void);
virtual ~cTvguideSetup(); virtual ~cTvguideSetup();
private: private:
cTvguideConfig tmpTvguideConfig; cTVGuideConfig tmpConfig;
void Setup(void); void Setup(void);
protected: protected:
virtual eOSState ProcessKey(eKeys Key); virtual eOSState ProcessKey(eKeys Key);
@@ -19,13 +21,13 @@ class cTvguideSetup : public cMenuSetupPage {
class cMenuSetupSubMenu : public cOsdMenu { class cMenuSetupSubMenu : public cOsdMenu {
protected: protected:
cTvguideConfig *tmpTvguideConfig; cTVGuideConfig *tmpConfig;
virtual eOSState ProcessKey(eKeys Key); virtual eOSState ProcessKey(eKeys Key);
virtual void Set(void) = 0; virtual void Set(void) = 0;
cOsdItem *InfoItem(const char *label, const char *value); cOsdItem *InfoItem(const char *label, const char *value);
cString indent; cString indent;
public: public:
cMenuSetupSubMenu(const char *Title, cTvguideConfig *data); cMenuSetupSubMenu(const char *Title, cTVGuideConfig *data);
}; };
class cMenuSetupGeneral : public cMenuSetupSubMenu { class cMenuSetupGeneral : public cMenuSetupSubMenu {
@@ -39,7 +41,7 @@ class cMenuSetupGeneral : public cMenuSetupSubMenu {
const char *useSubtitleRerunTexts[3]; const char *useSubtitleRerunTexts[3];
void Set(void); void Set(void);
public: public:
cMenuSetupGeneral(cTvguideConfig *data); cMenuSetupGeneral(cTVGuideConfig *data);
}; };
class cMenuSetupScreenLayout : public cMenuSetupSubMenu { class cMenuSetupScreenLayout : public cMenuSetupSubMenu {
@@ -50,7 +52,7 @@ class cMenuSetupScreenLayout : public cMenuSetupSubMenu {
const char * logoExtensionItems[2]; const char * logoExtensionItems[2];
void Set(void); void Set(void);
public: public:
cMenuSetupScreenLayout(cTvguideConfig *data); cMenuSetupScreenLayout(cTVGuideConfig *data);
}; };
class cMenuSetupFont : public cMenuSetupSubMenu { class cMenuSetupFont : public cMenuSetupSubMenu {
@@ -58,7 +60,7 @@ class cMenuSetupFont : public cMenuSetupSubMenu {
cStringList fontNames; cStringList fontNames;
void Set(void); void Set(void);
public: public:
cMenuSetupFont(cTvguideConfig *data); cMenuSetupFont(cTVGuideConfig *data);
}; };
class cMenuSetupFavorites : public cMenuSetupSubMenu { class cMenuSetupFavorites : public cMenuSetupSubMenu {
@@ -73,14 +75,14 @@ class cMenuSetupFavorites : public cMenuSetupSubMenu {
void Set(void); void Set(void);
virtual eOSState ProcessKey(eKeys Key); virtual eOSState ProcessKey(eKeys Key);
public: public:
cMenuSetupFavorites(cTvguideConfig *data); cMenuSetupFavorites(cTVGuideConfig *data);
}; };
class cMenuSetupImageCache : public cMenuSetupSubMenu { class cMenuSetupImageCache : public cMenuSetupSubMenu {
protected: protected:
void Set(void); void Set(void);
public: public:
cMenuSetupImageCache(cTvguideConfig *data); cMenuSetupImageCache(cTVGuideConfig *data);
}; };
#endif //__TVGUIDE_SETUP_H #endif //__TVGUIDE_SETUP_H

View File

@@ -1,143 +1,143 @@
#include "tools.h" #include "tools.h"
#include "services/scraper2vdr.h" #include "services/scraper2vdr.h"
#include "imageloader.h" #include "imageloader.h"
#include "statusheader.h" #include "statusheader.h"
cStatusHeader::cStatusHeader(void) { cStatusHeader::cStatusHeader(void) {
color = theme.Color(clrStatusHeader); color = theme.Color(clrStatusHeader);
colorBlending = theme.Color(clrStatusHeaderBlending); colorBlending = theme.Color(clrStatusHeaderBlending);
height = geoManager.statusHeaderHeight; height = geoManager.statusHeaderHeight;
width = geoManager.headerContentWidth; width = geoManager.headerContentWidth;
tvFrameWidth = geoManager.tvFrameWidth; tvFrameWidth = geoManager.tvFrameWidth;
pixmap = osdManager.requestPixmap(1, cRect(0, 0, width, height)); pixmap = osdManager.requestPixmap(1, cRect(0, 0, width, height));
pixmapText = osdManager.requestPixmap(2, cRect(0, 0, width, height)); pixmapText = osdManager.requestPixmap(2, cRect(0, 0, width, height));
pixmapTVFrame = osdManager.requestPixmap(1, cRect(width, 0, tvFrameWidth, height)); pixmapTVFrame = osdManager.requestPixmap(1, cRect(width, 0, tvFrameWidth, height));
} }
cStatusHeader::~cStatusHeader(void) { cStatusHeader::~cStatusHeader(void) {
osdManager.releasePixmap(pixmapText); osdManager.releasePixmap(pixmapText);
osdManager.releasePixmap(pixmapTVFrame); osdManager.releasePixmap(pixmapTVFrame);
if (tvguideConfig.scaleVideo) { if (config.scaleVideo) {
cRect vidWin = cDevice::PrimaryDevice()->CanScaleVideo(cRect::Null); cRect vidWin = cDevice::PrimaryDevice()->CanScaleVideo(cRect::Null);
cDevice::PrimaryDevice()->ScaleVideo(vidWin); cDevice::PrimaryDevice()->ScaleVideo(vidWin);
} }
} }
void cStatusHeader::Draw(void) { void cStatusHeader::Draw(void) {
pixmapText->Fill(clrTransparent); pixmapText->Fill(clrTransparent);
pixmapTVFrame->Fill(clrTransparent); pixmapTVFrame->Fill(clrTransparent);
if (tvguideConfig.style == eStyleGraphical) { if (config.style == eStyleGraphical) {
if (tvguideConfig.scaleVideo) { if (config.scaleVideo) {
drawBackgroundGraphical(bgStatusHeaderWindowed); drawBackgroundGraphical(bgStatusHeaderWindowed);
cImage *tvFrameBack = imgCache.GetOsdElement(oeStatusHeaderTVFrame); cImage *tvFrameBack = imgCache.GetOsdElement(oeStatusHeaderTVFrame);
if (tvFrameBack) if (tvFrameBack)
pixmapTVFrame->DrawImage(cPoint(0,0), *tvFrameBack); pixmapTVFrame->DrawImage(cPoint(0,0), *tvFrameBack);
} else { } else {
drawBackgroundGraphical(bgStatusHeaderFull); drawBackgroundGraphical(bgStatusHeaderFull);
} }
} else { } else {
if (tvguideConfig.decorateVideo) { if (config.decorateVideo) {
DecorateVideoFrame(); DecorateVideoFrame();
} }
drawBackground(); drawBackground();
drawBorder(); drawBorder();
} }
} }
void cStatusHeader::ScaleVideo(void) { void cStatusHeader::ScaleVideo(void) {
if (tvguideConfig.scaleVideo) { if (config.scaleVideo) {
int width = height * 16 / 9; int width = height * 16 / 9;
int x = osdManager.Left() + geoManager.osdWidth - width; int x = osdManager.Left() + geoManager.osdWidth - width;
int y = osdManager.Top(); int y = osdManager.Top();
cRect availableRect(x, y, width, height); cRect availableRect(x, y, width, height);
cRect vidWin = cDevice::PrimaryDevice()->CanScaleVideo(availableRect); cRect vidWin = cDevice::PrimaryDevice()->CanScaleVideo(availableRect);
cDevice::PrimaryDevice()->ScaleVideo(vidWin); cDevice::PrimaryDevice()->ScaleVideo(vidWin);
} }
} }
void cStatusHeader::DrawInfoText(cGrid *grid) { void cStatusHeader::DrawInfoText(cGridElement *grid) {
int border = 10; int border = 10;
int textWidth = 0; int textWidth = 0;
textWidth = width - 2 * border; textWidth = width - 2 * border;
tColor colorTextBack = (tvguideConfig.style == eStyleFlat)?color:clrTransparent; tColor colorTextBack = (config.style == eStyleFlat)?color:clrTransparent;
pixmapText->Fill(clrTransparent); pixmapText->Fill(clrTransparent);
int x = border; int x = border;
int y = border; int y = border;
if (!grid->isDummy()) { if (!grid->isDummy()) {
const cEvent *event = grid->GetEvent(); const cEvent *event = grid->GetEvent();
int newX = DrawPoster(event, x, y, height-2*border, border); int newX = DrawPoster(event, x, y, height-2*border, border);
if (newX > 0) { if (newX > 0) {
textWidth -= (newX - x); textWidth -= (newX - x);
x += newX; x += newX;
} }
cString time = grid->getTimeString(); cString time = grid->getTimeString();
cString title(""); cString title("");
title = cString::sprintf(": %s", event->Title()); title = cString::sprintf(": %s", event->Title());
cString header = cString::sprintf("%s%s", *time, *title); cString header = cString::sprintf("%s%s", *time, *title);
header = CutText(*header, textWidth, fontManager.FontStatusHeaderLarge).c_str(); header = CutText(*header, textWidth, fontManager.FontStatusHeaderLarge).c_str();
pixmapText->DrawText(cPoint(x,y), *header, theme.Color(clrFont), colorTextBack, fontManager.FontStatusHeaderLarge); pixmapText->DrawText(cPoint(x,y), *header, theme.Color(clrFont), colorTextBack, fontManager.FontStatusHeaderLarge);
y += fontManager.FontStatusHeaderLarge->Height() + border; y += fontManager.FontStatusHeaderLarge->Height() + border;
int heightText = pixmapText->ViewPort().Height() - y; int heightText = pixmapText->ViewPort().Height() - y;
cTextWrapper description; cTextWrapper description;
description.Set(event->Description(), fontManager.FontStatusHeader, textWidth); description.Set(event->Description(), fontManager.FontStatusHeader, textWidth);
int lineHeight = fontManager.FontStatusHeader->Height(); int lineHeight = fontManager.FontStatusHeader->Height();
int textLines = description.Lines(); int textLines = description.Lines();
int maxLines = heightText / lineHeight; int maxLines = heightText / lineHeight;
int lines = std::min(textLines, maxLines); int lines = std::min(textLines, maxLines);
for (int i = 0; i < lines-1; i++) { for (int i = 0; i < lines-1; i++) {
pixmapText->DrawText(cPoint(x,y), description.GetLine(i), theme.Color(clrFont), colorTextBack, fontManager.FontStatusHeader); pixmapText->DrawText(cPoint(x,y), description.GetLine(i), theme.Color(clrFont), colorTextBack, fontManager.FontStatusHeader);
y += lineHeight; y += lineHeight;
} }
cString lastLine = description.GetLine(lines-1); cString lastLine = description.GetLine(lines-1);
if (textLines > maxLines) { if (textLines > maxLines) {
lastLine = cString::sprintf("%s...", *lastLine); lastLine = cString::sprintf("%s...", *lastLine);
} }
pixmapText->DrawText(cPoint(x,y), *lastLine, theme.Color(clrFont), colorTextBack, fontManager.FontStatusHeader); pixmapText->DrawText(cPoint(x,y), *lastLine, theme.Color(clrFont), colorTextBack, fontManager.FontStatusHeader);
} else { } else {
int heightText = pixmapText->ViewPort().Height() - y; int heightText = pixmapText->ViewPort().Height() - y;
y += (heightText - fontManager.FontStatusHeaderLarge->Height() - 2*border)/2; y += (heightText - fontManager.FontStatusHeaderLarge->Height() - 2*border)/2;
pixmapText->DrawText(cPoint(x,y), *grid->getText(), theme.Color(clrFont), colorTextBack, fontManager.FontStatusHeaderLarge); pixmapText->DrawText(cPoint(x,y), *grid->getText(), theme.Color(clrFont), colorTextBack, fontManager.FontStatusHeaderLarge);
} }
} }
int cStatusHeader::DrawPoster(const cEvent *event, int x, int y, int height, int border) { int cStatusHeader::DrawPoster(const cEvent *event, int x, int y, int height, int border) {
bool hasPoster = false; bool hasPoster = false;
ScraperGetPoster posterScraper2Vdr; ScraperGetPoster posterScraper2Vdr;
int posterWidth = 0; int posterWidth = 0;
int posterHeight = 0; int posterHeight = 0;
static cPlugin *pScraper = GetScraperPlugin(); static cPlugin *pScraper = GetScraperPlugin();
if (pScraper) { if (pScraper) {
posterScraper2Vdr.event = event; posterScraper2Vdr.event = event;
posterScraper2Vdr.recording = NULL; posterScraper2Vdr.recording = NULL;
if (pScraper->Service("GetPoster", &posterScraper2Vdr)) { if (pScraper->Service("GetPoster", &posterScraper2Vdr)) {
hasPoster = true; hasPoster = true;
int posterWidthOrig = posterScraper2Vdr.poster.width; int posterWidthOrig = posterScraper2Vdr.poster.width;
int posterHeightOrig = posterScraper2Vdr.poster.height; int posterHeightOrig = posterScraper2Vdr.poster.height;
posterHeight = height; posterHeight = height;
posterWidth = posterWidthOrig * ((double)posterHeight / (double)posterHeightOrig); posterWidth = posterWidthOrig * ((double)posterHeight / (double)posterHeightOrig);
} else { } else {
hasPoster = false; hasPoster = false;
} }
} }
if (hasPoster) { if (hasPoster) {
cImageLoader imgLoader; cImageLoader imgLoader;
if (imgLoader.LoadPoster(posterScraper2Vdr.poster.path.c_str(), posterWidth, posterHeight)) { if (imgLoader.LoadPoster(posterScraper2Vdr.poster.path.c_str(), posterWidth, posterHeight)) {
pixmapText->DrawImage(cPoint(x, y), imgLoader.GetImage()); pixmapText->DrawImage(cPoint(x, y), imgLoader.GetImage());
return posterWidth + border; return posterWidth + border;
} }
} }
return 0; return 0;
} }
void cStatusHeader::DecorateVideoFrame(void) { void cStatusHeader::DecorateVideoFrame(void) {
int radius = 16; int radius = 16;
int frame = 2; int frame = 2;
pixmapTVFrame->DrawRectangle(cRect(0, 0, tvFrameWidth, frame), theme.Color(clrBackgroundOSD)); pixmapTVFrame->DrawRectangle(cRect(0, 0, tvFrameWidth, frame), theme.Color(clrBackgroundOSD));
pixmapTVFrame->DrawEllipse(cRect(frame,frame,radius,radius), theme.Color(clrBackgroundOSD), -2); pixmapTVFrame->DrawEllipse(cRect(frame,frame,radius,radius), theme.Color(clrBackgroundOSD), -2);
pixmapTVFrame->DrawRectangle(cRect(tvFrameWidth - frame, frame, frame, height - 2*frame), theme.Color(clrBackgroundOSD)); pixmapTVFrame->DrawRectangle(cRect(tvFrameWidth - frame, frame, frame, height - 2*frame), theme.Color(clrBackgroundOSD));
pixmapTVFrame->DrawEllipse(cRect(tvFrameWidth - radius - frame, frame, radius, radius), theme.Color(clrBackgroundOSD), -1); pixmapTVFrame->DrawEllipse(cRect(tvFrameWidth - radius - frame, frame, radius, radius), theme.Color(clrBackgroundOSD), -1);
pixmapTVFrame->DrawRectangle(cRect(0, frame, frame, height - 2*frame), theme.Color(clrBackgroundOSD)); pixmapTVFrame->DrawRectangle(cRect(0, frame, frame, height - 2*frame), theme.Color(clrBackgroundOSD));
pixmapTVFrame->DrawEllipse(cRect(frame, height - radius - frame, radius, radius), theme.Color(clrBackgroundOSD), -3); pixmapTVFrame->DrawEllipse(cRect(frame, height - radius - frame, radius, radius), theme.Color(clrBackgroundOSD), -3);
pixmapTVFrame->DrawRectangle(cRect(0, height - frame, tvFrameWidth, frame), theme.Color(clrBackgroundOSD)); pixmapTVFrame->DrawRectangle(cRect(0, height - frame, tvFrameWidth, frame), theme.Color(clrBackgroundOSD));
pixmapTVFrame->DrawEllipse(cRect(tvFrameWidth - radius - frame, height - radius - frame, radius, radius), theme.Color(clrBackgroundOSD), -4); pixmapTVFrame->DrawEllipse(cRect(tvFrameWidth - radius - frame, height - radius - frame, radius, radius), theme.Color(clrBackgroundOSD), -4);
} }

View File

@@ -1,25 +1,25 @@
#ifndef __TVGUIDE_STATUSHEADER_H #ifndef __TVGUIDE_STATUSHEADER_H
#define __TVGUIDE_STATUSHEADER_H #define __TVGUIDE_STATUSHEADER_H
#include "styledpixmap.h" #include "styledpixmap.h"
#include "grid.h" #include "gridelement.h"
// --- cStatusHeader ------------------------------------------------------------- // --- cStatusHeader -------------------------------------------------------------
class cStatusHeader : public cStyledPixmap { class cStatusHeader : public cStyledPixmap {
private: private:
int width, height; int width, height;
int tvFrameWidth; int tvFrameWidth;
cPixmap *pixmapText; cPixmap *pixmapText;
cPixmap *pixmapTVFrame; cPixmap *pixmapTVFrame;
int DrawPoster(const cEvent *event, int x, int y, int height, int border); int DrawPoster(const cEvent *event, int x, int y, int height, int border);
void DecorateVideoFrame(void); void DecorateVideoFrame(void);
public: public:
cStatusHeader(void); cStatusHeader(void);
virtual ~cStatusHeader(void); virtual ~cStatusHeader(void);
void Draw(void); void Draw(void);
void ScaleVideo(void); void ScaleVideo(void);
void DrawInfoText(cGrid *grid); void DrawInfoText(cGridElement *grid);
}; };
#endif //__TVGUIDE_STATUSHEADER_H #endif //__TVGUIDE_STATUSHEADER_H

View File

@@ -1,205 +1,205 @@
#include "imageloader.h" #include "imageloader.h"
#include "geometrymanager.h" #include "geometrymanager.h"
#include "styledpixmap.h" #include "styledpixmap.h"
cStyledPixmap::cStyledPixmap(void) { cStyledPixmap::cStyledPixmap(void) {
pixmap = NULL; pixmap = NULL;
} }
cStyledPixmap::cStyledPixmap(cPixmap *pixmap) { cStyledPixmap::cStyledPixmap(cPixmap *pixmap) {
this->pixmap = pixmap; this->pixmap = pixmap;
} }
cStyledPixmap::~cStyledPixmap(void) { cStyledPixmap::~cStyledPixmap(void) {
if (pixmap) if (pixmap)
osdManager.releasePixmap(pixmap); osdManager.releasePixmap(pixmap);
} }
void cStyledPixmap::setPixmap(cPixmap *pixmap) { void cStyledPixmap::setPixmap(cPixmap *pixmap) {
if (pixmap) { if (pixmap) {
this->pixmap = pixmap; this->pixmap = pixmap;
} }
} }
void cStyledPixmap::drawBackground() { void cStyledPixmap::drawBackground() {
if (tvguideConfig.style == eStyleBlendingDefault){ if (config.style == eStyleBlendingDefault){
drawBlendedBackground(); drawBlendedBackground();
} else if (tvguideConfig.style == eStyleBlendingMagick){ } else if (config.style == eStyleBlendingMagick){
drawSparsedBackground(); drawSparsedBackground();
} else { } else {
pixmap->Fill(color); pixmap->Fill(color);
} }
} }
void cStyledPixmap::drawBackgroundGraphical(eBackgroundType type, bool active) { void cStyledPixmap::drawBackgroundGraphical(eBackgroundType type, bool active) {
cImage *back = NULL; cImage *back = NULL;
if (type == bgGrid) { if (type == bgGrid) {
back = imgCache.GetGrid(pixmap->ViewPort().Width(), pixmap->ViewPort().Height(), active); back = imgCache.GetGrid(pixmap->ViewPort().Width(), pixmap->ViewPort().Height(), active);
} else if (type == bgChannelHeader) { } else if (type == bgChannelHeader) {
back = imgCache.GetOsdElement(oeLogoBack); back = imgCache.GetOsdElement(oeLogoBack);
} else if (type == bgChannelGroup) { } else if (type == bgChannelGroup) {
back = imgCache.GetChannelGroup(pixmap->ViewPort().Width(), pixmap->ViewPort().Height()); back = imgCache.GetChannelGroup(pixmap->ViewPort().Width(), pixmap->ViewPort().Height());
} else if (type == bgStatusHeaderWindowed) { } else if (type == bgStatusHeaderWindowed) {
back = imgCache.GetOsdElement(oeStatusHeaderContentWindowed); back = imgCache.GetOsdElement(oeStatusHeaderContentWindowed);
} else if (type == bgStatusHeaderFull) { } else if (type == bgStatusHeaderFull) {
back = imgCache.GetOsdElement(oeStatusHeaderContentFull); back = imgCache.GetOsdElement(oeStatusHeaderContentFull);
} else if (type == bgClock) { } else if (type == bgClock) {
back = imgCache.GetOsdElement(oeClock); back = imgCache.GetOsdElement(oeClock);
} else if (type == bgButton) { } else if (type == bgButton) {
drawBackgroundButton(active); drawBackgroundButton(active);
return; return;
} else if (type == bgRecMenuBack) { } else if (type == bgRecMenuBack) {
cImageLoader imgLoader; cImageLoader imgLoader;
if (imgLoader.LoadOsdElement("recmenu_background", pixmap->ViewPort().Width(), pixmap->ViewPort().Height())) { if (imgLoader.LoadOsdElement("recmenu_background", pixmap->ViewPort().Width(), pixmap->ViewPort().Height())) {
cImage background = imgLoader.GetImage(); cImage background = imgLoader.GetImage();
pixmap->DrawImage(cPoint(0, 0), background); pixmap->DrawImage(cPoint(0, 0), background);
} else { } else {
pixmap->Fill(clrTransparent); pixmap->Fill(clrTransparent);
} }
return; return;
} else if (type == bgChannelJump) { } else if (type == bgChannelJump) {
back = imgCache.GetOsdElement(oeChannelJump); back = imgCache.GetOsdElement(oeChannelJump);
} }
if (back) { if (back) {
pixmap->DrawImage(cPoint(0,0), *back); pixmap->DrawImage(cPoint(0,0), *back);
} else { } else {
pixmap->Fill(clrTransparent); pixmap->Fill(clrTransparent);
} }
} }
void cStyledPixmap::drawBackgroundButton(bool active) { void cStyledPixmap::drawBackgroundButton(bool active) {
std::string buttonName = ""; std::string buttonName = "";
int buttonWidth = pixmap->ViewPort().Width(); int buttonWidth = pixmap->ViewPort().Width();
int buttonHeight = pixmap->ViewPort().Height(); int buttonHeight = pixmap->ViewPort().Height();
if (buttonWidth > geoManager.osdWidth * 50 / 100) { if (buttonWidth > geoManager.osdWidth * 50 / 100) {
if (active) if (active)
buttonName = "button_active_70percent"; buttonName = "button_active_70percent";
else else
buttonName = "button_70percent"; buttonName = "button_70percent";
} else { } else {
if (active) if (active)
buttonName = "button_active_30percent"; buttonName = "button_active_30percent";
else else
buttonName = "button_30percent"; buttonName = "button_30percent";
} }
cImageLoader imgLoader; cImageLoader imgLoader;
if (imgLoader.LoadOsdElement(buttonName.c_str(), buttonWidth, buttonHeight)) { if (imgLoader.LoadOsdElement(buttonName.c_str(), buttonWidth, buttonHeight)) {
cImage button = imgLoader.GetImage(); cImage button = imgLoader.GetImage();
pixmap->DrawImage(cPoint(0, 0), button); pixmap->DrawImage(cPoint(0, 0), button);
} else { } else {
pixmap->Fill(clrTransparent); pixmap->Fill(clrTransparent);
} }
} }
void cStyledPixmap::drawBlendedBackground() { void cStyledPixmap::drawBlendedBackground() {
int width = pixmap->ViewPort().Width(); int width = pixmap->ViewPort().Width();
int height = pixmap->ViewPort().Height(); int height = pixmap->ViewPort().Height();
pixmap->Fill(color); pixmap->Fill(color);
int numSteps = 64; int numSteps = 64;
int alphaStep = 0x04; int alphaStep = 0x04;
if (height < 30) if (height < 30)
return; return;
else if (height < 100) { else if (height < 100) {
numSteps = 32; numSteps = 32;
alphaStep = 0x08; alphaStep = 0x08;
} }
int stepY = 0.5*height / numSteps; int stepY = 0.5*height / numSteps;
if (stepY == 0) stepY = 1; if (stepY == 0) stepY = 1;
int alpha = 0x00; int alpha = 0x00;
tColor clr; tColor clr;
for (int i = 0; i<numSteps; i++) { for (int i = 0; i<numSteps; i++) {
clr = AlphaBlend(color, colorBlending, alpha); clr = AlphaBlend(color, colorBlending, alpha);
pixmap->DrawRectangle(cRect(0,i*stepY,width,stepY), clr); pixmap->DrawRectangle(cRect(0,i*stepY,width,stepY), clr);
alpha += alphaStep; alpha += alphaStep;
} }
} }
void cStyledPixmap::drawSparsedBackground() { void cStyledPixmap::drawSparsedBackground() {
int width = pixmap->ViewPort().Width(); int width = pixmap->ViewPort().Width();
int height = pixmap->ViewPort().Height(); int height = pixmap->ViewPort().Height();
cImageLoader imgLoader; cImageLoader imgLoader;
if (imgLoader.DrawBackground(colorBlending, color, width, height)) if (imgLoader.DrawBackground(colorBlending, color, width, height))
pixmap->DrawImage(cPoint(0,0), imgLoader.GetImage()); pixmap->DrawImage(cPoint(0,0), imgLoader.GetImage());
} }
void cStyledPixmap::drawBorder() { void cStyledPixmap::drawBorder() {
int width = pixmap->ViewPort().Width(); int width = pixmap->ViewPort().Width();
int height = pixmap->ViewPort().Height(); int height = pixmap->ViewPort().Height();
drawDefaultBorder(width, height); drawDefaultBorder(width, height);
if (tvguideConfig.roundedCorners) { if (config.roundedCorners) {
int borderRadius = 12; int borderRadius = 12;
drawRoundedCorners(width, height, borderRadius); drawRoundedCorners(width, height, borderRadius);
} }
} }
void cStyledPixmap::drawDefaultBorder(int width, int height) { void cStyledPixmap::drawDefaultBorder(int width, int height) {
pixmap->DrawRectangle(cRect(0,0,width,2), clrTransparent); //top pixmap->DrawRectangle(cRect(0,0,width,2), clrTransparent); //top
pixmap->DrawRectangle(cRect(0,0,2,height), clrTransparent); //left pixmap->DrawRectangle(cRect(0,0,2,height), clrTransparent); //left
pixmap->DrawRectangle(cRect(0,height-2,width,2), clrTransparent); //bottom pixmap->DrawRectangle(cRect(0,height-2,width,2), clrTransparent); //bottom
pixmap->DrawRectangle(cRect(width-2,0,2,height), clrTransparent); //right pixmap->DrawRectangle(cRect(width-2,0,2,height), clrTransparent); //right
pixmap->DrawRectangle(cRect(2,2,width-4,1), theme.Color(clrBorder)); //top pixmap->DrawRectangle(cRect(2,2,width-4,1), theme.Color(clrBorder)); //top
pixmap->DrawRectangle(cRect(2,2,1,height-4), theme.Color(clrBorder)); //left pixmap->DrawRectangle(cRect(2,2,1,height-4), theme.Color(clrBorder)); //left
pixmap->DrawRectangle(cRect(2,height-3,width-4,1), theme.Color(clrBorder)); //bottom pixmap->DrawRectangle(cRect(2,height-3,width-4,1), theme.Color(clrBorder)); //bottom
pixmap->DrawRectangle(cRect(width-3,2,1,height-4), theme.Color(clrBorder)); //right pixmap->DrawRectangle(cRect(width-3,2,1,height-4), theme.Color(clrBorder)); //right
} }
void cStyledPixmap::drawBoldBorder() { void cStyledPixmap::drawBoldBorder() {
int width = pixmap->ViewPort().Width(); int width = pixmap->ViewPort().Width();
int height = pixmap->ViewPort().Height(); int height = pixmap->ViewPort().Height();
pixmap->DrawRectangle(cRect(0,0,width,2), theme.Color(clrBorder)); //top pixmap->DrawRectangle(cRect(0,0,width,2), theme.Color(clrBorder)); //top
pixmap->DrawRectangle(cRect(0,0,2,height), theme.Color(clrBorder)); //left pixmap->DrawRectangle(cRect(0,0,2,height), theme.Color(clrBorder)); //left
pixmap->DrawRectangle(cRect(0,height-2,width,2), theme.Color(clrBorder)); //bottom pixmap->DrawRectangle(cRect(0,height-2,width,2), theme.Color(clrBorder)); //bottom
pixmap->DrawRectangle(cRect(width-2,0,2,height), theme.Color(clrBorder)); //right pixmap->DrawRectangle(cRect(width-2,0,2,height), theme.Color(clrBorder)); //right
} }
void cStyledPixmap::drawRoundedCorners(int width, int height, int radius) { void cStyledPixmap::drawRoundedCorners(int width, int height, int radius) {
pixmap->DrawEllipse(cRect(2,2,radius,radius), theme.Color(clrBorder), -2); pixmap->DrawEllipse(cRect(2,2,radius,radius), theme.Color(clrBorder), -2);
pixmap->DrawEllipse(cRect(1,1,radius,radius), clrTransparent, -2); pixmap->DrawEllipse(cRect(1,1,radius,radius), clrTransparent, -2);
pixmap->DrawEllipse(cRect(width-radius - 2,2,radius,radius), theme.Color(clrBorder), -1); pixmap->DrawEllipse(cRect(width-radius - 2,2,radius,radius), theme.Color(clrBorder), -1);
pixmap->DrawEllipse(cRect(width-radius - 1,1,radius,radius), clrTransparent, -1); pixmap->DrawEllipse(cRect(width-radius - 1,1,radius,radius), clrTransparent, -1);
if( height > 2*radius) { if( height > 2*radius) {
pixmap->DrawEllipse(cRect(2,height-radius - 2,radius,radius), theme.Color(clrBorder), -3); pixmap->DrawEllipse(cRect(2,height-radius - 2,radius,radius), theme.Color(clrBorder), -3);
pixmap->DrawEllipse(cRect(1,height-radius - 1,radius,radius), clrTransparent, -3); pixmap->DrawEllipse(cRect(1,height-radius - 1,radius,radius), clrTransparent, -3);
pixmap->DrawEllipse(cRect(width-radius - 2,height-radius - 2,radius,radius), theme.Color(clrBorder), -4); pixmap->DrawEllipse(cRect(width-radius - 2,height-radius - 2,radius,radius), theme.Color(clrBorder), -4);
pixmap->DrawEllipse(cRect(width-radius - 1,height-radius - 1,radius,radius), clrTransparent, -4); pixmap->DrawEllipse(cRect(width-radius - 1,height-radius - 1,radius,radius), clrTransparent, -4);
} }
} }
void cStyledPixmap::drawVerticalLine(int x, int yStart, int yStop, tColor col) { void cStyledPixmap::drawVerticalLine(int x, int yStart, int yStop, tColor col) {
for (int y = yStart; y <= yStop; y++) { for (int y = yStart; y <= yStop; y++) {
pixmap->DrawPixel(cPoint(x,y), col); pixmap->DrawPixel(cPoint(x,y), col);
} }
} }
void cStyledPixmap::drawHorizontalLine(int y, int xStart, int xStop, tColor col) { void cStyledPixmap::drawHorizontalLine(int y, int xStart, int xStop, tColor col) {
for (int x = xStart; x <= xStop; x++) { for (int x = xStart; x <= xStop; x++) {
pixmap->DrawPixel(cPoint(x,y), col); pixmap->DrawPixel(cPoint(x,y), col);
} }
} }
void cStyledPixmap::DrawText(const cPoint &Point, const char *s, tColor ColorFg, tColor ColorBg, const cFont *Font) { void cStyledPixmap::DrawText(const cPoint &Point, const char *s, tColor ColorFg, tColor ColorBg, const cFont *Font) {
pixmap->DrawText(Point, s, ColorFg, ColorBg, Font); pixmap->DrawText(Point, s, ColorFg, ColorBg, Font);
} }
void cStyledPixmap::DrawImage(const cPoint &Point, const cImage &Image) { void cStyledPixmap::DrawImage(const cPoint &Point, const cImage &Image) {
pixmap->DrawImage(Point, Image); pixmap->DrawImage(Point, Image);
} }
void cStyledPixmap::DrawRectangle(const cRect &Rect, tColor Color) { void cStyledPixmap::DrawRectangle(const cRect &Rect, tColor Color) {
pixmap->DrawRectangle(Rect,Color); pixmap->DrawRectangle(Rect,Color);
} }
void cStyledPixmap::DrawEllipse(const cRect &Rect, tColor Color, int Quadrant) { void cStyledPixmap::DrawEllipse(const cRect &Rect, tColor Color, int Quadrant) {
pixmap->DrawEllipse(Rect,Color,Quadrant); pixmap->DrawEllipse(Rect,Color,Quadrant);
} }
void cStyledPixmap::SetViewPort(const cRect &Rect) { void cStyledPixmap::SetViewPort(const cRect &Rect) {
pixmap->SetViewPort(Rect); pixmap->SetViewPort(Rect);
} }

View File

@@ -1,58 +1,58 @@
#ifndef __TVGUIDE_STYLEDPIXMAP_H #ifndef __TVGUIDE_STYLEDPIXMAP_H
#define __TVGUIDE_STYLEDPIXMAP_H #define __TVGUIDE_STYLEDPIXMAP_H
#include <vdr/osd.h> #include <vdr/osd.h>
#include <vdr/epg.h> #include <vdr/epg.h>
#include "timer.h" #include "timemanager.h"
#include "config.h" #include "config.h"
enum eBackgroundType { enum eBackgroundType {
bgGrid, bgGrid,
bgStatusHeaderFull, bgStatusHeaderFull,
bgStatusHeaderWindowed, bgStatusHeaderWindowed,
bgChannelHeader, bgChannelHeader,
bgChannelGroup, bgChannelGroup,
bgClock, bgClock,
bgButton, bgButton,
bgRecMenuBack, bgRecMenuBack,
bgChannelJump, bgChannelJump,
}; };
// --- cStyledPixmap ------------------------------------------------------------- // --- cStyledPixmap -------------------------------------------------------------
class cStyledPixmap { class cStyledPixmap {
private: private:
void drawVerticalLine(int x, int yStart, int yStop, tColor col); void drawVerticalLine(int x, int yStart, int yStop, tColor col);
void drawHorizontalLine(int y, int xStart, int xStop, tColor col); void drawHorizontalLine(int y, int xStart, int xStop, tColor col);
void drawBackgroundButton(bool active); void drawBackgroundButton(bool active);
protected: protected:
cPixmap *pixmap; cPixmap *pixmap;
tColor color; tColor color;
tColor colorBlending; tColor colorBlending;
void setPixmap(cPixmap *pixmap); void setPixmap(cPixmap *pixmap);
public: public:
cStyledPixmap(void); cStyledPixmap(void);
cStyledPixmap(cPixmap *pixmap); cStyledPixmap(cPixmap *pixmap);
virtual ~cStyledPixmap(void); virtual ~cStyledPixmap(void);
void drawBackground(); void drawBackground();
void drawBackgroundGraphical(eBackgroundType type, bool active = false); void drawBackgroundGraphical(eBackgroundType type, bool active = false);
void drawBlendedBackground(); void drawBlendedBackground();
void drawSparsedBackground(); void drawSparsedBackground();
void drawBorder(); void drawBorder();
void drawBoldBorder(); void drawBoldBorder();
void drawDefaultBorder(int width, int height); void drawDefaultBorder(int width, int height);
void drawRoundedCorners(int width, int height, int radius); void drawRoundedCorners(int width, int height, int radius);
void setColor(tColor color, tColor colorBlending) {this->color = color; this->colorBlending = colorBlending;}; void setColor(tColor color, tColor colorBlending) {this->color = color; this->colorBlending = colorBlending;};
void SetAlpha(int alpha) {pixmap->SetAlpha(alpha);}; void SetAlpha(int alpha) {pixmap->SetAlpha(alpha);};
void SetLayer(int layer) {pixmap->SetLayer(layer);}; void SetLayer(int layer) {pixmap->SetLayer(layer);};
void Fill(tColor clr) {pixmap->Fill(clr);}; void Fill(tColor clr) {pixmap->Fill(clr);};
void DrawText(const cPoint &Point, const char *s, tColor ColorFg, tColor ColorBg, const cFont *Font); void DrawText(const cPoint &Point, const char *s, tColor ColorFg, tColor ColorBg, const cFont *Font);
void DrawImage(const cPoint &Point, const cImage &Image); void DrawImage(const cPoint &Point, const cImage &Image);
void DrawRectangle(const cRect &Rect, tColor Color); void DrawRectangle(const cRect &Rect, tColor Color);
void DrawEllipse(const cRect &Rect, tColor Color, int Quadrant); void DrawEllipse(const cRect &Rect, tColor Color, int Quadrant);
void SetViewPort(const cRect &Rect); void SetViewPort(const cRect &Rect);
int Width() {return pixmap->ViewPort().Width();}; int Width() {return pixmap->ViewPort().Width();};
int Height() {return pixmap->ViewPort().Height();}; int Height() {return pixmap->ViewPort().Height();};
}; };
#endif //__TVGUIDE_STYLEDPIXMAP_H #endif //__TVGUIDE_STYLEDPIXMAP_H

View File

@@ -6,15 +6,13 @@ cSwitchTimers SwitchTimers;
cSwitchTimer::cSwitchTimer(void) { cSwitchTimer::cSwitchTimer(void) {
eventID = 0; eventID = 0;
startTime = 0; startTime = 0;
switchMinsBefore = tvguideConfig.switchMinsBefore; switchMinsBefore = config.switchMinsBefore;
switchMode = tvguideConfig.switchMode; switchMode = config.switchMode;
} }
cSwitchTimer::cSwitchTimer(const cEvent* Event) { cSwitchTimer::cSwitchTimer(const cEvent* Event) {
eventID = 0; eventID = 0;
startTime = 0; startTime = 0;
// switchMinsBefore = tvguideConfig.switchMinsBefore;
// switchModes = tvguideConfig.switchModes;
if (Event) { if (Event) {
eventID = Event->EventID(); eventID = Event->EventID();
channelID = Event->ChannelID(); channelID = Event->ChannelID();

View File

@@ -1,282 +1,276 @@
#include "imageloader.h" #include "imageloader.h"
#include "timeline.h" #include "timeline.h"
cTimeLine::cTimeLine(cMyTime *myTime) { cTimeLine::cTimeLine(cTimeManager *timeManager) {
this->myTime = myTime; this->timeManager = timeManager;
if (tvguideConfig.displayMode == eVertical) { lastClock = "";
dateViewer = new cStyledPixmap(osdManager.requestPixmap(1, cRect(0, timeBase = NULL;
geoManager.statusHeaderHeight + geoManager.clockHeight, int x11, x21, y11, y21, x12, x22, y12, y22;
geoManager.dateVieverWidth, if (config.displayMode == eVertical) {
geoManager.dateVieverHeight))); x11 = 0;
timeline = osdManager.requestPixmap(2, cRect(0, x21 = geoManager.dateVieverWidth;
geoManager.statusHeaderHeight + geoManager.channelHeaderHeight + geoManager.channelGroupsHeight, y11 = geoManager.statusHeaderHeight + geoManager.clockHeight;
geoManager.timeLineWidth, y21 = geoManager.dateVieverHeight;
geoManager.osdHeight - geoManager.statusHeaderHeight - geoManager.channelHeaderHeight - geoManager.channelGroupsHeight - geoManager.footerHeight) x12 = 0;
, cRect(0, x22 = geoManager.timeLineWidth;
0, y12 = geoManager.statusHeaderHeight + geoManager.channelHeaderHeight + geoManager.channelGroupsHeight;
geoManager.timeLineWidth, y22 = geoManager.osdHeight - geoManager.statusHeaderHeight - geoManager.channelHeaderHeight - geoManager.channelGroupsHeight - geoManager.footerHeight;
1440*geoManager.minutePixel)); } else if (config.displayMode == eHorizontal) {
timeBase = osdManager.requestPixmap(3, cRect(0, x11 = geoManager.clockWidth;
geoManager.statusHeaderHeight + geoManager.channelGroupsHeight + geoManager.channelHeaderHeight, x21 = geoManager.dateVieverWidth;
geoManager.osdWidth, y11 = geoManager.statusHeaderHeight;
geoManager.timeLineGridHeight)); y21 = geoManager.dateVieverHeight;
} else if (tvguideConfig.displayMode == eHorizontal) { x12 = geoManager.channelHeaderWidth + geoManager.channelGroupsWidth;
dateViewer = new cStyledPixmap(osdManager.requestPixmap(1, cRect(geoManager.clockWidth, x22 = geoManager.osdWidth - geoManager.channelHeaderWidth - geoManager.channelGroupsWidth;
geoManager.statusHeaderHeight, y12 = geoManager.statusHeaderHeight;
geoManager.dateVieverWidth, y22 = geoManager.timeLineHeight;
geoManager.dateVieverHeight))); }
timeline = osdManager.requestPixmap(2, cRect(geoManager.channelHeaderWidth + geoManager.channelGroupsWidth, dateViewer = new cStyledPixmap(osdManager.requestPixmap(1, cRect(x11, y11, x21, y21)));
geoManager.statusHeaderHeight, timeline = osdManager.requestPixmap(2, cRect(x12, y12, x22, y22));
geoManager.osdWidth - geoManager.channelHeaderWidth - geoManager.channelGroupsWidth, clock = new cStyledPixmap(osdManager.requestPixmap(3, cRect(0,
geoManager.timeLineHeight) geoManager.statusHeaderHeight,
, cRect(0, geoManager.clockWidth,
0, geoManager.clockHeight)));
1440*geoManager.minutePixel, }
geoManager.timeLineHeight));
timeBase = osdManager.requestPixmap(3, cRect(geoManager.channelGroupsWidth + geoManager.channelHeaderWidth, cTimeLine::~cTimeLine(void) {
geoManager.statusHeaderHeight, if (clock)
geoManager.timeLineGridWidth, delete clock;
geoManager.timeLineHeight + tvguideConfig.channelRows * geoManager.rowHeight)); osdManager.releasePixmap(timeBase);
} osdManager.releasePixmap(timeline);
timeBase->Fill(clrTransparent); if (dateViewer)
int clockY; delete dateViewer;
int clockX; }
if (tvguideConfig.displayMode == eVertical) {
clockY = geoManager.statusHeaderHeight; void cTimeLine::DrawDateViewer(void) {
clockX = 0; cString weekDay = timeManager->GetWeekday();
} cString date = timeManager->GetDate();
else { if (config.style != eStyleGraphical) {
clockY = geoManager.statusHeaderHeight; dateViewer->setColor(theme.Color(clrHeader), theme.Color(clrHeaderBlending));
clockX = 0; dateViewer->drawBackground();
} dateViewer->drawBorder();
clock = new cStyledPixmap(osdManager.requestPixmap(3, cRect(clockX,
clockY, } else {
geoManager.clockWidth, cImage *imgBack = imgCache.GetOsdElement(oeDateViewer);
geoManager.clockHeight))); if (imgBack)
} dateViewer->DrawImage(cPoint(0,0), *imgBack);
else
cTimeLine::~cTimeLine(void) { dateViewer->Fill(clrTransparent);
delete dateViewer; }
osdManager.releasePixmap(timeline); tColor colorFont = theme.Color(clrButtonYellow);
if (clock) tColor colorFontBack = (config.style == eStyleFlat) ? theme.Color(clrHeader) : clrTransparent;
delete clock;
} if (config.displayMode == eVertical) {
int textHeightWeekday = fontManager.FontTimeLineWeekday->Height();
void cTimeLine::drawDateViewer() { int textHeightDate = fontManager.FontTimeLineDate->Height();
cString weekDay = myTime->GetWeekday(); int weekdayWidth = fontManager.FontTimeLineWeekday->Width(*weekDay);
cString date = myTime->GetDate(); int dateWidth = fontManager.FontTimeLineDate->Width(*date);
if (tvguideConfig.style != eStyleGraphical) { int y = ((geoManager.dateVieverHeight - textHeightWeekday - textHeightDate) / 2);
dateViewer->setColor(theme.Color(clrHeader), theme.Color(clrHeaderBlending)); dateViewer->DrawText(cPoint((geoManager.timeLineWidth - weekdayWidth) / 2, y), *weekDay, colorFont, colorFontBack, fontManager.FontTimeLineWeekday);
dateViewer->drawBackground(); dateViewer->DrawText(cPoint((geoManager.timeLineWidth - dateWidth) / 2, y + textHeightWeekday), *date, colorFont, colorFontBack, fontManager.FontTimeLineDate);
dateViewer->drawBorder(); } else if (config.displayMode == eHorizontal) {
cString strDate = cString::sprintf("%s %s", *weekDay, *date);
} else { int x = ((dateViewer->Width() - fontManager.FontTimeLineDateHorizontal->Width(*strDate)) / 2);
cImage *imgBack = imgCache.GetOsdElement(oeDateViewer); int y = ((dateViewer->Height() - fontManager.FontTimeLineDateHorizontal->Height()) / 2);
if (imgBack) dateViewer->DrawText(cPoint(x, y), *strDate, colorFont, colorFontBack, fontManager.FontTimeLineDateHorizontal);
dateViewer->DrawImage(cPoint(0,0), *imgBack); }
else }
dateViewer->Fill(clrTransparent);
} void cTimeLine::DrawTimeline(void) {
tColor colorFont = theme.Color(clrButtonYellow); // timeline->SetTile(true);
tColor colorFontBack = (tvguideConfig.style == eStyleFlat) ? theme.Color(clrHeader) : clrTransparent; timeline->Fill(clrTransparent);
tColor colorFont, colorBackground;
if (tvguideConfig.displayMode == eVertical) {
int textHeightWeekday = fontManager.FontTimeLineWeekday->Height(); int imgWidth = geoManager.timeLineGridWidth;
int textHeightDate = fontManager.FontTimeLineDate->Height(); int imgHeight = geoManager.timeLineGridHeight;
int weekdayWidth = fontManager.FontTimeLineWeekday->Width(*weekDay); const cImage *img1 = NULL;
int dateWidth = fontManager.FontTimeLineDate->Width(*date); const cImage *img2 = NULL;
int y = ((geoManager.dateVieverHeight - textHeightWeekday - textHeightDate) / 2); if (config.style == eStyleGraphical) {
dateViewer->DrawText(cPoint((geoManager.timeLineWidth - weekdayWidth) / 2, y), *weekDay, colorFont, colorFontBack, fontManager.FontTimeLineWeekday); img1 = imgCache.GetOsdElement(oeTimeline1);
dateViewer->DrawText(cPoint((geoManager.timeLineWidth - dateWidth) / 2, y + textHeightWeekday), *date, colorFont, colorFontBack, fontManager.FontTimeLineDate); img2 = imgCache.GetOsdElement(oeTimeline2);
} else if (tvguideConfig.displayMode == eHorizontal) { } else {
cString strDate = cString::sprintf("%s %s", *weekDay, *date); img1 = CreateBackgroundImage(imgWidth, imgHeight, theme.Color(clrTimeline1), theme.Color(clrTimeline1Blending));
int x = ((dateViewer->Width() - fontManager.FontTimeLineDateHorizontal->Width(*strDate)) / 2); img2 = CreateBackgroundImage(imgWidth, imgHeight, theme.Color(clrTimeline2), theme.Color(clrTimeline2Blending));
int y = ((dateViewer->Height() - fontManager.FontTimeLineDateHorizontal->Height()) / 2); }
dateViewer->DrawText(cPoint(x, y), *strDate, colorFont, colorFontBack, fontManager.FontTimeLineDateHorizontal); const cImage *img = NULL;
} if (!img1 || !img2)
} return;
int textWidth, posX, posY;
void cTimeLine::drawTimeline() { char timetext[10];
timeline->SetTile(true);
timeline->Fill(clrTransparent); int halfHours;
tColor colorFont, colorBackground; if (config.displayMode == eVertical)
halfHours = config.displayTime / 30 + 1;
int imgWidth = geoManager.timeLineGridWidth; else
int imgHeight = geoManager.timeLineGridHeight; halfHours = config.displayHorizontalTime / 30 + 1;
const cImage *img1 = NULL;
const cImage *img2 = NULL; time_t tStart = timeManager->GetStart();
if (tvguideConfig.style == eStyleGraphical) { tm *t = localtime ( &tStart );
img1 = imgCache.GetOsdElement(oeTimeline1);
img2 = imgCache.GetOsdElement(oeTimeline2); int x = 2 * t->tm_hour + ((t->tm_min == 0) ? 0 : 1);
} else { for (int j = x; j < (x + halfHours); j++) {
img1 = createBackgroundImage(imgWidth, imgHeight, theme.Color(clrTimeline1), theme.Color(clrTimeline1Blending)); int i = (j >= 48) ? (j - 48) : j;
img2 = createBackgroundImage(imgWidth, imgHeight, theme.Color(clrTimeline2), theme.Color(clrTimeline2Blending)); if (i % 2 == 0) {
} img = img1;
const cImage *img = NULL; colorFont = theme.Color(clrTimeline2);
if (!img1 || !img2) colorBackground = (config.style == eStyleFlat)?theme.Color(clrTimeline1):clrTransparent;
return; if (config.timeFormat == e12Hours) {
int textWidth, posX, posY; if (i == 0)
char timetext[10]; sprintf(timetext, "12:00 PM");
else if (i/2 < 13)
for (int i=0; i<48; i++) { sprintf(timetext, "%d:00 AM", i / 2);
if (i%2==0) { else
img = img1; sprintf(timetext, "%d:00 PM", i / 2 - 12);
colorFont = theme.Color(clrTimeline2); } else {
colorBackground = (tvguideConfig.style == eStyleFlat)?theme.Color(clrTimeline1):clrTransparent; sprintf(timetext, "%d:00", i / 2);
if (tvguideConfig.timeFormat == e12Hours) { }
if (i == 0) } else {
sprintf(timetext, "12:00 PM"); img = img2;
else if (i/2 < 13) colorFont = theme.Color(clrTimeline1);
sprintf(timetext, "%d:00 AM", i/2); colorBackground = (config.style == eStyleFlat)?theme.Color(clrTimeline2):clrTransparent;
else if (config.timeFormat == e12Hours) {
sprintf(timetext, "%d:00 PM", i/2-12); if (i == 1)
} else { sprintf(timetext, "12:30 PM");
sprintf(timetext, "%d:00", i/2); else if (i/2 < 13)
} sprintf(timetext, "%d:30 AM", i / 2);
} else { else
img = img2; sprintf(timetext, "%d:30 PM", i / 2 - 12);
colorFont = theme.Color(clrTimeline1); } else {
colorBackground = (tvguideConfig.style == eStyleFlat)?theme.Color(clrTimeline2):clrTransparent; sprintf(timetext, "%d:30", i / 2);
if (tvguideConfig.timeFormat == e12Hours) { }
if (i == 1) }
sprintf(timetext, "12:30 PM"); if (config.displayMode == eVertical) {
else if (i/2 < 13) posY = (j - x) * geoManager.minutePixel * 30;
sprintf(timetext, "%d:30 AM", i/2); timeline->DrawImage(cPoint(0, posY), *img);
else if (config.style != eStyleGraphical) {
sprintf(timetext, "%d:30 PM", i/2-12); DecorateTile(0, posY, imgWidth + 2, imgHeight);
} else { }
sprintf(timetext, "%d:30", i/2); textWidth = fontManager.FontTimeLineTime->Width(timetext);
} timeline->DrawText(cPoint((geoManager.timeLineWidth-textWidth) / 2, posY + 5), timetext, colorFont, colorBackground, fontManager.FontTimeLineTime);
} } else if (config.displayMode == eHorizontal) {
if (tvguideConfig.displayMode == eVertical) { posX = (j - x) * geoManager.minutePixel * 30;
posY = i*geoManager.minutePixel*30; timeline->DrawImage(cPoint(posX, 0), *img);
timeline->DrawImage(cPoint(0, posY), *img); if (config.style != eStyleGraphical) {
if (tvguideConfig.style != eStyleGraphical) { DecorateTile(posX, 0, imgWidth, imgHeight + 2);
decorateTile(0, posY, imgWidth+2, imgHeight); }
} timeline->DrawText(cPoint(posX + 15, (dateViewer->Height() - fontManager.FontTimeLineTimeHorizontal->Height()) / 2), timetext, colorFont, colorBackground, fontManager.FontTimeLineTimeHorizontal);
textWidth = fontManager.FontTimeLineTime->Width(timetext); }
timeline->DrawText(cPoint((geoManager.timeLineWidth-textWidth)/2, posY + 5), timetext, colorFont, colorBackground, fontManager.FontTimeLineTime); }
} else if (tvguideConfig.displayMode == eHorizontal) { DrawTimeIndicator();
posX = i*geoManager.minutePixel*30; if (config.style != eStyleGraphical) {
timeline->DrawImage(cPoint(posX, 0), *img); delete img1;
if (tvguideConfig.style != eStyleGraphical) { delete img2;
decorateTile(posX, 0, imgWidth, imgHeight+2); }
} }
timeline->DrawText(cPoint(posX + 15, (dateViewer->Height() - fontManager.FontTimeLineTimeHorizontal->Height())/2), timetext, colorFont, colorBackground, fontManager.FontTimeLineTimeHorizontal);
} void cTimeLine::DecorateTile(int posX, int posY, int tileWidth, int tileHeight) {
} timeline->DrawRectangle(cRect(posX,posY,tileWidth,2), clrTransparent); //top
setTimeline(); timeline->DrawRectangle(cRect(posX,posY,2,tileHeight), clrTransparent); //left
if (tvguideConfig.style != eStyleGraphical) { timeline->DrawRectangle(cRect(posX,posY + tileHeight-2,tileWidth,2), clrTransparent); //bottom
delete img1; timeline->DrawRectangle(cRect(posX + tileWidth-2,posY,2,tileHeight), clrTransparent); //right
delete img2;
} timeline->DrawRectangle(cRect(2+posX,posY+2,tileWidth-4,1), theme.Color(clrBorder)); //top
} timeline->DrawRectangle(cRect(2+posX,posY+2,1,tileHeight-4), theme.Color(clrBorder)); //left
timeline->DrawRectangle(cRect(2+posX,posY+tileHeight-3,tileWidth-4,1), theme.Color(clrBorder)); //bottom
void cTimeLine::decorateTile(int posX, int posY, int tileWidth, int tileHeight) { timeline->DrawRectangle(cRect(posX+tileWidth-3,posY+2,1,tileHeight-4), theme.Color(clrBorder)); //right
timeline->DrawRectangle(cRect(posX,posY,tileWidth,2), clrTransparent); //top
timeline->DrawRectangle(cRect(posX,posY,2,tileHeight), clrTransparent); //left if (config.roundedCorners) {
timeline->DrawRectangle(cRect(posX,posY + tileHeight-2,tileWidth,2), clrTransparent); //bottom int borderRadius = 12;
timeline->DrawRectangle(cRect(posX + tileWidth-2,posY,2,tileHeight), clrTransparent); //right DrawRoundedCorners(posX, posY, tileWidth, tileHeight, borderRadius);
}
timeline->DrawRectangle(cRect(2+posX,posY+2,tileWidth-4,1), theme.Color(clrBorder)); //top }
timeline->DrawRectangle(cRect(2+posX,posY+2,1,tileHeight-4), theme.Color(clrBorder)); //left
timeline->DrawRectangle(cRect(2+posX,posY+tileHeight-3,tileWidth-4,1), theme.Color(clrBorder)); //bottom void cTimeLine::DrawRoundedCorners(int posX, int posY, int width, int height, int radius) {
timeline->DrawRectangle(cRect(posX+tileWidth-3,posY+2,1,tileHeight-4), theme.Color(clrBorder)); //right timeline->DrawEllipse(cRect(posX+2,posY+2,radius,radius), theme.Color(clrBorder), -2);
timeline->DrawEllipse(cRect(posX+1,posY+1,radius,radius), clrTransparent, -2);
if (tvguideConfig.roundedCorners) {
int borderRadius = 12; timeline->DrawEllipse(cRect(posX+width-radius - 2,posY+2,radius,radius), theme.Color(clrBorder), -1);
drawRoundedCorners(posX, posY, tileWidth, tileHeight, borderRadius); timeline->DrawEllipse(cRect(posX+width-radius - 1,posY+1,radius,radius), clrTransparent, -1);
}
} if( height > 2*radius) {
timeline->DrawEllipse(cRect(posX+2,posY+height-radius - 2,radius,radius), theme.Color(clrBorder), -3);
void cTimeLine::drawRoundedCorners(int posX, int posY, int width, int height, int radius) { timeline->DrawEllipse(cRect(posX+1,posY+height-radius - 1,radius,radius), clrTransparent, -3);
timeline->DrawEllipse(cRect(posX+2,posY+2,radius,radius), theme.Color(clrBorder), -2);
timeline->DrawEllipse(cRect(posX+1,posY+1,radius,radius), clrTransparent, -2); timeline->DrawEllipse(cRect(posX+width-radius - 2,posY+height-radius - 2,radius,radius), theme.Color(clrBorder), -4);
timeline->DrawEllipse(cRect(posX+width-radius - 1,posY+height-radius - 1,radius,radius), clrTransparent, -4);
timeline->DrawEllipse(cRect(posX+width-radius - 2,posY+2,radius,radius), theme.Color(clrBorder), -1); }
timeline->DrawEllipse(cRect(posX+width-radius - 1,posY+1,radius,radius), clrTransparent, -1); }
if( height > 2*radius) { void cTimeLine::DrawTimeIndicator(void) {
timeline->DrawEllipse(cRect(posX+2,posY+height-radius - 2,radius,radius), theme.Color(clrBorder), -3); if (!config.displayTimeBase)
timeline->DrawEllipse(cRect(posX+1,posY+height-radius - 1,radius,radius), clrTransparent, -3); return;
if (!timeManager->NowVisible()) {
timeline->DrawEllipse(cRect(posX+width-radius - 2,posY+height-radius - 2,radius,radius), theme.Color(clrBorder), -4); if (timeBase)
timeline->DrawEllipse(cRect(posX+width-radius - 1,posY+height-radius - 1,radius,radius), clrTransparent, -4); timeBase->Fill(clrTransparent);
} return;
} }
int deltaTime = (time(0) - timeManager->GetStart()) / 60 * geoManager.minutePixel;
void cTimeLine::drawCurrentTimeBase(void) { osdManager.releasePixmap(timeBase);
timeBase->Fill(clrTransparent); int x1, x2, y1, y2;
bool nowVisible = myTime->NowVisible(); if (config.displayMode == eVertical) {
if (!nowVisible) x1 = 0;
return; y1 = geoManager.statusHeaderHeight + geoManager.channelGroupsHeight + geoManager.channelHeaderHeight + deltaTime - 2;
int deltaTime = (myTime->GetNow() - myTime->GetStart()) / 60 * geoManager.minutePixel; x2 = geoManager.osdWidth;
if (tvguideConfig.displayMode == eVertical) { y2 = 4;
timeBase->DrawRectangle(cRect(0, deltaTime - 2, timeBase->ViewPort().Width(), 4), theme.Color(clrTimeBase)); } else {
} else { x1 = geoManager.channelGroupsWidth + geoManager.channelHeaderWidth + deltaTime - 2;
timeBase->DrawRectangle(cRect(deltaTime-2, 0, 4, timeBase->ViewPort().Height()), theme.Color(clrTimeBase)); y1 = geoManager.statusHeaderHeight;
} x2 = 4;
} y2 = geoManager.timeLineHeight + config.channelRows * geoManager.rowHeight;
}
timeBase = osdManager.requestPixmap(3, cRect(x1, y1, x2, y2));
cImage *cTimeLine::createBackgroundImage(int width, int height, tColor clrBgr, tColor clrBlend) { timeBase->Fill(clrTransparent);
cImage *image = NULL; timeBase->DrawRectangle(cRect(0, 0, timeBase->ViewPort().Width(), timeBase->ViewPort().Height()), theme.Color(clrTimeBase));
if (tvguideConfig.style == eStyleBlendingDefault) { }
image = new cImage(cSize(width, height));
image->Fill(clrBgr); cImage *cTimeLine::CreateBackgroundImage(int width, int height, tColor clrBgr, tColor clrBlend) {
int stepY = 0.5*height / 64; cImage *image = NULL;
int alpha = 0x00; if (config.style == eStyleBlendingDefault) {
tColor clr; image = new cImage(cSize(width, height));
for (int i = 0; i<64; i++) { image->Fill(clrBgr);
clr = AlphaBlend(clrBgr, clrBlend, alpha); int stepY = 0.5*height / 64;
for (int y = i*stepY; y < (i+1)*stepY; y++) { int alpha = 0x00;
for (int x=0; x<width; x++) { tColor clr;
image->SetPixel(cPoint(x,y), clr); for (int i = 0; i<64; i++) {
} clr = AlphaBlend(clrBgr, clrBlend, alpha);
} for (int y = i*stepY; y < (i+1)*stepY; y++) {
alpha += 0x04; for (int x=0; x<width; x++) {
} image->SetPixel(cPoint(x,y), clr);
} else if (tvguideConfig.style == eStyleBlendingMagick) { }
cImageLoader imgLoader; }
if (imgLoader.DrawBackground(clrBgr, clrBlend, width, height)) { alpha += 0x04;
image = new cImage(imgLoader.GetImage()); }
} } else if (config.style == eStyleBlendingMagick) {
} else { cImageLoader imgLoader;
image = new cImage(cSize(width, height)); if (imgLoader.DrawBackground(clrBgr, clrBlend, width, height)) {
image->Fill(clrBgr); image = new cImage(imgLoader.GetImage());
} }
return image; } else {
} image = new cImage(cSize(width, height));
image->Fill(clrBgr);
void cTimeLine::setTimeline() { }
int offset = myTime->GetTimelineOffset(); return image;
int xNew, yNew; }
if (tvguideConfig.displayMode == eVertical) {
xNew = 0; bool cTimeLine::DrawClock(void) {
yNew = -offset*geoManager.minutePixel; cString currentTime = timeManager->GetCurrentTime();
} else if (tvguideConfig.displayMode == eHorizontal) { if (strcmp(currentTime, lastClock)) {
xNew = -offset*geoManager.minutePixel; clock->Fill(clrTransparent);
yNew = 0; const cFont *font = (config.displayMode == eVertical) ? fontManager.FontTimeLineTime : fontManager.FontTimeLineTimeHorizontal;
} int textHeight = font->Height();
timeline->SetDrawPortPoint(cPoint(xNew, yNew)); int clockTextWidth = font->Width(*currentTime);
if (tvguideConfig.displayTimeBase) tColor colorFontBack = (config.style == eStyleFlat) ? theme.Color(clrHeader) : clrTransparent;
drawCurrentTimeBase(); if (config.style == eStyleGraphical) {
} clock->drawBackgroundGraphical(bgClock);
} else {
void cTimeLine::drawClock() { clock->setColor(theme.Color(clrHeader), theme.Color(clrHeaderBlending));
if (tvguideConfig.displayMode == eVertical) clock->drawBackground();
clock->Fill(clrTransparent); clock->drawBorder();
cString currentTime = myTime->GetCurrentTime(); }
const cFont *font = (tvguideConfig.displayMode == eVertical)?fontManager.FontTimeLineTime:fontManager.FontTimeLineTimeHorizontal; clock->DrawText(cPoint((geoManager.clockWidth - clockTextWidth) / 2, (geoManager.clockHeight - textHeight) / 2), *currentTime, theme.Color(clrFont), colorFontBack, font);
int textHeight = font->Height(); lastClock = currentTime;
int clockTextWidth = font->Width(*currentTime); DrawTimeIndicator();
tColor colorFontBack = (tvguideConfig.style == eStyleFlat)?theme.Color(clrHeader):clrTransparent; return true;
if (tvguideConfig.style == eStyleGraphical) { }
clock->drawBackgroundGraphical(bgClock); return false;
} else { }
clock->setColor(theme.Color(clrHeader), theme.Color(clrHeaderBlending));
clock->drawBackground();
clock->drawBorder();
}
clock->DrawText(cPoint((geoManager.clockWidth-clockTextWidth)/2, (geoManager.clockHeight-textHeight)/2), *currentTime, theme.Color(clrFont), colorFontBack, font);
}

View File

@@ -1,29 +1,29 @@
#ifndef __TVGUIDE_TIMELINE_H #ifndef __TVGUIDE_TIMELINE_H
#define __TVGUIDE_TIMELINE_H #define __TVGUIDE_TIMELINE_H
#include "timer.h" #include "timemanager.h"
#include "styledpixmap.h" #include "styledpixmap.h"
// --- cTimeLine ------------------------------------------------------------- // --- cTimeLine -------------------------------------------------------------
class cTimeLine { class cTimeLine {
private: private:
cMyTime *myTime; cTimeManager *timeManager;
cStyledPixmap *dateViewer; cStyledPixmap *dateViewer;
cPixmap *timeline; cPixmap *timeline;
cStyledPixmap *clock; cStyledPixmap *clock;
cPixmap *timeBase; cPixmap *timeBase;
void decorateTile(int posX, int posY, int tileWidth, int tileHeight); cString lastClock;
void drawRoundedCorners(int posX, int posY, int width, int height, int radius); void DecorateTile(int posX, int posY, int tileWidth, int tileHeight);
cImage *createBackgroundImage(int width, int height, tColor clrBgr, tColor clrBlend); void DrawRoundedCorners(int posX, int posY, int width, int height, int radius);
void drawCurrentTimeBase(void); cImage *CreateBackgroundImage(int width, int height, tColor clrBgr, tColor clrBlend);
public: public:
cTimeLine(cMyTime *myTime); cTimeLine(cTimeManager *timeManager);
virtual ~cTimeLine(void); virtual ~cTimeLine(void);
void setTimeline(); void DrawDateViewer(void);
void drawDateViewer(); void DrawTimeline(void);
void drawTimeline(); void DrawTimeIndicator(void);
void drawClock(); bool DrawClock(void);
}; };
#endif //__TVGUIDE_TIMELINE_H #endif //__TVGUIDE_TIMELINE_H

View File

@@ -1,178 +1,178 @@
#include <time.h> #include <time.h>
#include <vdr/tools.h> #include <vdr/tools.h>
#include "config.h" #include "config.h"
#include "timer.h" #include "timemanager.h"
cMyTime::~cMyTime(void) { cTimeManager::cTimeManager(void) {
} if (config.displayMode == eVertical) {
displaySeconds = (geoManager.osdHeight - geoManager.statusHeaderHeight - geoManager.channelHeaderHeight - geoManager.channelGroupsHeight - geoManager.footerHeight) / geoManager.minutePixel * 60;
cString cMyTime::printTime(time_t displayTime) { } else if (config.displayMode == eHorizontal) {
struct tm *ts; displaySeconds = (geoManager.osdWidth - geoManager.channelHeaderWidth - geoManager.channelGroupsWidth) / geoManager.minutePixel * 60;
ts = localtime(&displayTime); }
cString strTime = cString::sprintf("%d.%d-%d:%d.%d", ts->tm_mday, ts->tm_mon+1, ts->tm_hour, ts->tm_min, ts->tm_sec); }
return strTime;
} cTimeManager::~cTimeManager(void) {
}
void cMyTime::Now() { cString cTimeManager::printTime(time_t displayTime) {
t = time(0); struct tm *ts;
tStart = t; ts = localtime(&displayTime);
tStart = GetRounded(); cString strTime = cString::sprintf("%d.%d-%d:%d.%d", ts->tm_mday, ts->tm_mon+1, ts->tm_hour, ts->tm_min, ts->tm_sec);
if (tvguideConfig.displayMode == eVertical) { return strTime;
tEnd = tStart + (geoManager.osdHeight - geoManager.statusHeaderHeight - geoManager.channelHeaderHeight - geoManager.channelGroupsHeight - geoManager.footerHeight)/geoManager.minutePixel*60; }
} else if (tvguideConfig.displayMode == eHorizontal) {
tEnd = tStart + (geoManager.osdWidth - geoManager.channelHeaderWidth - geoManager.channelGroupsWidth)/geoManager.minutePixel*60;
} void cTimeManager::Now() {
} t = time(0);
tStart = t;
void cMyTime::AddStep(int step) { tStart = GetRounded();
tStart += step*60; tEnd = tStart + displaySeconds;
tEnd += step*60; }
}
void cTimeManager::AddStep(int step) {
bool cMyTime::DelStep(int step) { tStart += step * 60;
if ((tStart - step*60)+30*60 < t) { tEnd = tStart + displaySeconds;
return true; }
}
tStart -= step*60; void cTimeManager::DelStep(int step) {
tEnd -= step*60; if ((tStart - step * 60) + 30 * 60 < t) {
return false; Now();
} } else {
tStart -= step * 60;
void cMyTime::SetTime(time_t newTime) { tEnd = tStart + displaySeconds;
tStart = newTime; }
if (tvguideConfig.displayMode == eVertical) { }
tEnd = tStart + (geoManager.osdHeight - geoManager.statusHeaderHeight - geoManager.channelHeaderHeight - geoManager.channelGroupsHeight - geoManager.footerHeight)/geoManager.minutePixel*60;
} else if (tvguideConfig.displayMode == eHorizontal) { void cTimeManager::SetTime(time_t newTime) {
tEnd = tStart + (geoManager.osdWidth - geoManager.channelHeaderWidth - geoManager.channelGroupsWidth)/geoManager.minutePixel*60; tStart = newTime;
} tEnd = tStart + displaySeconds;
} }
time_t cMyTime::getPrevPrimetime(time_t current) { time_t cTimeManager::getPrevPrimetime(time_t current) {
tm *st = localtime(&current); tm *st = localtime(&current);
if (st->tm_hour < 21) { if (st->tm_hour < 21) {
current -= 24 * 60* 60; current -= 24 * 60 * 60;
st = localtime(&current); st = localtime(&current);
} }
st->tm_hour = 20; st->tm_hour = 20;
st->tm_min = 0; st->tm_min = 0;
time_t primeTime = mktime(st); time_t primeTime = mktime(st);
return primeTime; return primeTime;
} }
time_t cMyTime::getNextPrimetime(time_t current){ time_t cTimeManager::getNextPrimetime(time_t current){
tm *st = localtime(&current); tm *st = localtime(&current);
if (st->tm_hour > 19) { if (st->tm_hour > 19) {
current += 24 * 60* 60; current += 24 * 60 * 60;
st = localtime(&current); st = localtime(&current);
} }
st->tm_hour = 20; st->tm_hour = 20;
st->tm_min = 0; st->tm_min = 0;
time_t primeTime = mktime(st); time_t primeTime = mktime(st);
return primeTime; return primeTime;
} }
bool cMyTime::tooFarInPast(time_t current) { bool cTimeManager::tooFarInPast(time_t current) {
if (current < t) { if (current < t) {
return true; return true;
} }
return false; return false;
} }
cString cMyTime::GetCurrentTime() { cString cTimeManager::GetCurrentTime() {
char buf[25]; char buf[25];
t = time(0); t = time(0);
tm *st = localtime(&t); tm *st = localtime(&t);
//snprintf(text, sizeof(text), "%d:%02d", st->tm_hour, st->tm_min); //snprintf(text, sizeof(text), "%d:%02d", st->tm_hour, st->tm_min);
if (tvguideConfig.timeFormat == e12Hours) { if (config.timeFormat == e12Hours) {
strftime(buf, sizeof(buf), "%I:%M %p", st); strftime(buf, sizeof(buf), "%I:%M %p", st);
} else if (tvguideConfig.timeFormat == e24Hours) } else if (config.timeFormat == e24Hours)
strftime(buf, sizeof(buf), "%H:%M", st); strftime(buf, sizeof(buf), "%H:%M", st);
return buf; return buf;
} }
cString cMyTime::GetDate() { cString cTimeManager::GetDate() {
char text[6]; char text[6];
tm *st = localtime(&tStart); tm *st = localtime(&tStart);
snprintf(text, sizeof(text), "%d.%d", st->tm_mday, st->tm_mon+1); snprintf(text, sizeof(text), "%d.%d", st->tm_mday, st->tm_mon+1);
return text; return text;
} }
cString cMyTime::GetWeekday() { cString cTimeManager::GetWeekday() {
return WeekDayName(tStart); return WeekDayName(tStart);
} }
int cMyTime::GetTimelineOffset() { int cTimeManager::GetTimelineOffset() {
tm *st = localtime(&tStart); tm *st = localtime(&tStart);
int offset = st->tm_hour*60; int offset = st->tm_hour*60;
offset += st->tm_min; offset += st->tm_min;
return offset; return offset;
} }
time_t cMyTime::GetRounded() { time_t cTimeManager::GetRounded() {
tm *rounded = localtime ( &tStart ); tm *rounded = localtime ( &tStart );
rounded->tm_sec = 0; rounded->tm_sec = 0;
if (rounded->tm_min > 29) if (rounded->tm_min > 29)
rounded->tm_min = 30; rounded->tm_min = 30;
else else
rounded->tm_min = 0; rounded->tm_min = 0;
return mktime(rounded); return mktime(rounded);
} }
bool cMyTime::NowVisible(void) { bool cTimeManager::NowVisible(void) {
if (t > tStart) if (t > tStart)
return true; return true;
return false; return false;
} }
void cMyTime::debug() { void cTimeManager::debug() {
esyslog("t: %s, tStart: %s, tEnd: %s", *TimeString(t), *TimeString(tStart), *TimeString(tEnd)); esyslog("t: %s, tStart: %s, tEnd: %s", *TimeString(t), *TimeString(tStart), *TimeString(tEnd));
} }
// --- cTimeInterval ------------------------------------------------------------- // --- cTimeInterval -------------------------------------------------------------
cTimeInterval::cTimeInterval(time_t start, time_t stop) { cTimeInterval::cTimeInterval(time_t start, time_t stop) {
this->start = start; this->start = start;
this->stop = stop; this->stop = stop;
} }
cTimeInterval::~cTimeInterval(void) { cTimeInterval::~cTimeInterval(void) {
} }
cTimeInterval *cTimeInterval::Intersect(cTimeInterval *interval) { cTimeInterval *cTimeInterval::Intersect(cTimeInterval *interval) {
time_t startIntersect, stopIntersect; time_t startIntersect, stopIntersect;
if ((stop <= interval->Start()) || (interval->Stop() <= start)) { if ((stop <= interval->Start()) || (interval->Stop() <= start)) {
return NULL; return NULL;
} }
if (start <= interval->Start()) { if (start <= interval->Start()) {
startIntersect = interval->Start(); startIntersect = interval->Start();
} else { } else {
startIntersect = start; startIntersect = start;
} }
if (stop <= interval->Stop()) { if (stop <= interval->Stop()) {
stopIntersect = stop; stopIntersect = stop;
} else { } else {
stopIntersect = interval->Stop(); stopIntersect = interval->Stop();
} }
return new cTimeInterval(startIntersect, stopIntersect); return new cTimeInterval(startIntersect, stopIntersect);
} }
cTimeInterval *cTimeInterval::Union(cTimeInterval *interval) { cTimeInterval *cTimeInterval::Union(cTimeInterval *interval) {
time_t startUnion, stopUnion; time_t startUnion, stopUnion;
if (start <= interval->Start()) { if (start <= interval->Start()) {
startUnion = start; startUnion = start;
} else { } else {
startUnion = interval->Start(); startUnion = interval->Start();
} }
if (stop <= interval->Stop()) { if (stop <= interval->Stop()) {
stopUnion = interval->Stop(); stopUnion = interval->Stop();
} else { } else {
stopUnion = stop; stopUnion = stop;
} }
return new cTimeInterval(startUnion, stopUnion); return new cTimeInterval(startUnion, stopUnion);
} }

View File

@@ -1,52 +1,56 @@
#ifndef __TVGUIDE_TIMER_H #ifndef __TVGUIDE_TIMEMANAGER_H
#define __TVGUIDE_TIMER_H #define __TVGUIDE_TIMEMANAGER_H
#include <vdr/tools.h> #include <vdr/tools.h>
#include "config.h"
// --- cMyTime -------------------------------------------------------------
// --- cTimeManager -------------------------------------------------------------
class cMyTime {
private: class cTimeManager {
time_t t; private:
time_t tStart; time_t t;
time_t tEnd; time_t tStart;
public: time_t tEnd;
cMyTime(){}; int displaySeconds;
virtual ~cMyTime(void); eTimeFormat timeFormat;
static cString printTime(time_t displayTime); public:
void Now(); cTimeManager();
time_t GetNow() { return t; }; virtual ~cTimeManager(void);
void AddStep(int step); static cString printTime(time_t displayTime);
bool DelStep(int step); void Now();
void SetTime(time_t newTime); time_t GetNow() { return t; };
time_t Get() {return t;}; void AddStep(int step);
time_t GetStart() {return tStart;}; void DelStep(int step);
time_t GetEnd() {return tEnd;}; void SetTime(time_t newTime);
cString GetCurrentTime(); time_t Get() {return t;};
cString GetDate(); time_t GetStart() {return tStart;};
cString GetWeekday(); time_t GetEnd() {return tEnd;};
time_t getPrevPrimetime(time_t current); cString GetCurrentTime();
time_t getNextPrimetime(time_t current); cString GetDate();
bool tooFarInPast(time_t current); cString GetWeekday();
int GetTimelineOffset(); time_t getPrevPrimetime(time_t current);
time_t GetRounded(); time_t getNextPrimetime(time_t current);
bool NowVisible(void); bool tooFarInPast(time_t current);
void debug(); int GetTimelineOffset();
}; time_t GetRounded();
bool NowVisible(void);
// --- cTimeInterval ------------------------------------------------------------- int GetDisplaySeconds(void) { return displaySeconds; };
void debug();
class cTimeInterval { };
private:
time_t start; // --- cTimeInterval -------------------------------------------------------------
time_t stop;
public: class cTimeInterval {
cTimeInterval(time_t start, time_t stop); private:
virtual ~cTimeInterval(void); time_t start;
time_t Start(void) { return start; }; time_t stop;
time_t Stop(void) { return stop; }; public:
cTimeInterval *Intersect(cTimeInterval *interval); cTimeInterval(time_t start, time_t stop);
cTimeInterval *Union(cTimeInterval *interval); virtual ~cTimeInterval(void);
}; time_t Start(void) { return start; };
time_t Stop(void) { return stop; };
#endif //__TVGUIDE_TIMER_H cTimeInterval *Intersect(cTimeInterval *interval);
cTimeInterval *Union(cTimeInterval *interval);
};
#endif //__TVGUIDE_TIMEMANAGER_H

View File

@@ -2,7 +2,7 @@
#include <vector> #include <vector>
#include <vdr/timers.h> #include <vdr/timers.h>
#include "tools.h" #include "tools.h"
#include "timer.h" #include "timemanager.h"
#include "timerconflict.h" #include "timerconflict.h"
cTVGuideTimerConflict::cTVGuideTimerConflict(void) { cTVGuideTimerConflict::cTVGuideTimerConflict(void) {

36
tools.c
View File

@@ -24,31 +24,23 @@ cPlugin *GetScraperPlugin(void) {
* CUTTEXT * CUTTEXT
****************************************************************************************/ ****************************************************************************************/
std::string CutText(std::string text, int width, const cFont *font) { std::string CutText(std::string text, int width, const cFont *font) {
if (width <= font->Size()) int actWidth = font->Width(text.c_str());
if (actWidth <= width) {
return text.c_str(); return text.c_str();
if (font->Width(text.c_str()) < width) } else {
return text.c_str(); int i = std::max((actWidth - width) / font->Size(), 1);
cTextWrapper twText; do {
twText.Set(text.c_str(), font, width); text = text.substr(0, text.length() - i);
std::string cuttedTextNative = twText.GetLine(0); std::stringstream sstrText;
std::stringstream sstrText; sstrText << text << "....";
sstrText << cuttedTextNative << "..."; actWidth = font->Width(sstrText.str().c_str());
std::string cuttedText = sstrText.str(); i = 1;
int actWidth = font->Width(cuttedText.c_str());
if (actWidth > width) {
int overlap = actWidth - width;
int charWidth = font->Width(".");
if (charWidth == 0)
charWidth = 1;
int cutChars = overlap / charWidth;
if (cutChars > 0) {
cuttedTextNative = cuttedTextNative.substr(0, cuttedTextNative.length() - cutChars);
std::stringstream sstrText2;
sstrText2 << cuttedTextNative << "...";
cuttedText = sstrText2.str();
} }
while ((actWidth > width) && (text.length() > 0));
std::stringstream sstrText2;
sstrText2 << text << "...";
return sstrText2.str();
} }
return cuttedText;
} }
/**************************************************************************************** /****************************************************************************************

View File

@@ -12,6 +12,7 @@
#include <vdr/plugin.h> #include <vdr/plugin.h>
#include <vdr/device.h> #include <vdr/device.h>
#include <vdr/menu.h> #include <vdr/menu.h>
#include <Magick++.h>
#define DEFINE_CONFIG 1 #define DEFINE_CONFIG 1
#include "geometrymanager.h" #include "geometrymanager.h"
@@ -26,7 +27,7 @@
#error "VDR-2.0.0 API version or greater is required!" #error "VDR-2.0.0 API version or greater is required!"
#endif #endif
static const char *VERSION = "1.2.9"; static const char *VERSION = "1.2.16";
static const char *DESCRIPTION = tr("A fancy 2d EPG Viewer"); static const char *DESCRIPTION = tr("A fancy 2d EPG Viewer");
static const char *MAINMENUENTRY = "Tvguide"; static const char *MAINMENUENTRY = "Tvguide";
@@ -45,7 +46,7 @@ public:
virtual void MainThreadHook(void); virtual void MainThreadHook(void);
virtual cString Active(void); virtual cString Active(void);
virtual time_t WakeupTime(void); virtual time_t WakeupTime(void);
virtual const char *MainMenuEntry(void) { return (tvguideConfig.showMainMenuEntry)?MAINMENUENTRY:NULL; } virtual const char *MainMenuEntry(void) { return (config.showMainMenuEntry) ? MAINMENUENTRY : NULL; }
virtual cOsdObject *MainMenuAction(void); virtual cOsdObject *MainMenuAction(void);
virtual cMenuSetupPage *SetupMenu(void); virtual cMenuSetupPage *SetupMenu(void);
virtual bool SetupParse(const char *Name, const char *Value); virtual bool SetupParse(const char *Name, const char *Value);
@@ -78,13 +79,13 @@ bool cPluginTvguide::ProcessArgs(int argc, char *argv[]) {
while ((c = getopt_long(argc, argv, "e:i:l:", long_options, NULL)) != -1) { while ((c = getopt_long(argc, argv, "e:i:l:", long_options, NULL)) != -1) {
switch (c) { switch (c) {
case 'e': case 'e':
tvguideConfig.SetImagesPath(cString(optarg)); config.SetImagesPath(cString(optarg));
break; break;
case 'i': case 'i':
tvguideConfig.SetIconsPath(cString(optarg)); config.SetIconsPath(cString(optarg));
break; break;
case 'l': case 'l':
tvguideConfig.SetLogoPath(cString(optarg)); config.SetLogoPath(cString(optarg));
break; break;
default: default:
return false; return false;
@@ -93,11 +94,15 @@ bool cPluginTvguide::ProcessArgs(int argc, char *argv[]) {
return true; return true;
} }
__attribute__((constructor)) static void init(void) {
Magick::InitializeMagick(NULL);
}
bool cPluginTvguide::Initialize(void) { bool cPluginTvguide::Initialize(void) {
tvguideConfig.SetDefaultPathes(); config.SetDefaultPathes();
tvguideConfig.LoadTheme(); config.LoadTheme();
tvguideConfig.SetStyle(); config.SetStyle();
tvguideConfig.setDynamicValues(); config.setDynamicValues();
geoManager.SetGeometry(cOsd::OsdWidth(), cOsd::OsdHeight()); geoManager.SetGeometry(cOsd::OsdWidth(), cOsd::OsdHeight());
fontManager.SetFonts(); fontManager.SetFonts();
imgCache.CreateCache(); imgCache.CreateCache();
@@ -134,11 +139,11 @@ cMenuSetupPage *cPluginTvguide::SetupMenu(void) {
} }
bool cPluginTvguide::SetupParse(const char *Name, const char *Value) { bool cPluginTvguide::SetupParse(const char *Name, const char *Value) {
return tvguideConfig.SetupParse(Name, Value); return config.SetupParse(Name, Value);
} }
bool cPluginTvguide::Service(const char *Id, void *Data) { bool cPluginTvguide::Service(const char *Id, void *Data) {
if (strcmp(Id, "MainMenuHooksPatch-v1.0::osSchedule") == 0 && tvguideConfig.replaceOriginalSchedule != 0) { if (strcmp(Id, "MainMenuHooksPatch-v1.0::osSchedule") == 0 && config.replaceOriginalSchedule != 0) {
if (Data == NULL) if (Data == NULL)
return true; return true;
cOsdObject **guide = (cOsdObject**) Data; cOsdObject **guide = (cOsdObject**) Data;

File diff suppressed because it is too large Load Diff

View File

@@ -1,65 +1,66 @@
#ifndef __TVGUIDE_TVGUIDEOSD_H #ifndef __TVGUIDE_TVGUIDEOSD_H
#define __TVGUIDE_TVGUIDEOSD_H #define __TVGUIDE_TVGUIDEOSD_H
#include "timer.h" #include "timemanager.h"
#include "grid.h" #include "gridelement.h"
#include "channelcolumn.h" #include "channelepg.h"
#include "statusheader.h" #include "statusheader.h"
#include "detailview.h" #include "detailview.h"
#include "timeline.h" #include "timeline.h"
#include "channelgroups.h" #include "channelgroups.h"
#include "footer.h" #include "footer.h"
#include "recmenumanager.h" #include "recmenuview.h"
#include "channeljump.h" #include "channeljump.h"
// --- cTvGuideOsd ------------------------------------------------------------- // --- cTvGuideOsd -------------------------------------------------------------
class cTvGuideOsd : public cOsdObject { class cTvGuideOsd : public cOsdObject {
private: private:
cMyTime *myTime; cTimeManager *timeManager;
cList<cChannelColumn> columns; cList<cChannelEpg> columns;
cGrid *activeGrid; cGridElement *activeGrid;
cStatusHeader *statusHeader; cStatusHeader *statusHeader;
cDetailView *detailView; cDetailView *detailView;
cTimeLine *timeLine; cTimeLine *timeLine;
cChannelGroups *channelGroups; cChannelGroups *channelGroups;
cFooter *footer; cFooter *footer;
cRecMenuManager *recMenuManager; cRecMenuView *recMenuView;
cChannelJump *channelJumper; cChannelJump *channelJumper;
bool detailViewActive; int GetLastValidChannel(void);
void drawOsd(); bool detailViewActive;
void readChannels(const cChannel *channelStart); void drawOsd();
void drawGridsChannelJump(int offset = 0); void readChannels(const cChannel *channelStart);
void drawGridsTimeJump(); void drawGridsChannelJump(int offset = 0);
void processKeyUp(); void drawGridsTimeJump(bool last = false);
void processKeyDown(); void processKeyUp();
void processKeyLeft(); void processKeyDown();
void processKeyRight(); void processKeyLeft();
void processKeyRed(); void processKeyRight();
void processKeyGreen(); void processKeyRed();
void processKeyYellow(); void processKeyGreen();
eOSState processKeyBlue(bool *alreadyUnlocked); void processKeyYellow();
eOSState processKeyOk(bool *alreadyUnlocked); eOSState processKeyBlue(bool *alreadyUnlocked);
void processNumKey(int numKey); eOSState processKeyOk(bool *alreadyUnlocked);
void TimeJump(int mode); void processNumKey(int numKey);
void ChannelJump(int num); void TimeJump(int mode);
void CheckTimeout(void); void ChannelJump(int num);
void setNextActiveGrid(cGrid *next); void CheckTimeout(void);
void channelForward(); void setNextActiveGrid(cGridElement *next);
void channelBack(); void channelForward();
void timeForward(); void channelBack();
void timeBack(); void timeForward();
void ScrollForward(); void timeBack();
void ScrollBack(); void ScrollForward();
eOSState ChannelSwitch(bool *alreadyUnlocked); void ScrollBack();
void DetailedEPG(); eOSState ChannelSwitch(bool *alreadyUnlocked);
void SetTimers(); void DetailedEPG();
void dump(); void SetTimers();
public: void dump();
cTvGuideOsd(void); public:
virtual ~cTvGuideOsd(void); cTvGuideOsd(void);
virtual void Show(void); virtual ~cTvGuideOsd(void);
virtual eOSState ProcessKey(eKeys Key); virtual void Show(void);
}; virtual eOSState ProcessKey(eKeys Key);
};
#endif //__TVGUIDE_TVGUIDEOSD_H
#endif //__TVGUIDE_TVGUIDEOSD_H

2124
view.c

File diff suppressed because it is too large Load Diff

298
view.h
View File

@@ -1,149 +1,149 @@
#ifndef __TVGUIDE_VIEW_H #ifndef __TVGUIDE_VIEW_H
#define __TVGUIDE_VIEW_H #define __TVGUIDE_VIEW_H
#include <vector> #include <vector>
#include <string> #include <string>
#include <sstream> #include <sstream>
#include <vdr/skins.h> #include <vdr/skins.h>
#include "services/scraper2vdr.h" #include "services/scraper2vdr.h"
#include "services/epgsearch.h" #include "services/epgsearch.h"
#include "services/remotetimers.h" #include "services/remotetimers.h"
#include "config.h" #include "config.h"
#include "imagecache.h" #include "imagecache.h"
#include "imageloader.h" #include "imageloader.h"
#include "tools.h" #include "tools.h"
enum eEPGViewTabs { enum eEPGViewTabs {
evtInfo = 0, evtInfo = 0,
evtAddInfo, evtAddInfo,
evtImages, evtImages,
evtCount evtCount
}; };
enum eMediaViewTabs { enum eMediaViewTabs {
mvtInfo = 0, mvtInfo = 0,
mvtAddInfo, mvtAddInfo,
mvtCast, mvtCast,
mvtOnlineInfo, mvtOnlineInfo,
mvtImages, mvtImages,
mvtCount mvtCount
}; };
class cView : public cThread { class cView : public cThread {
protected: protected:
const cEvent *event; const cEvent *event;
cPixmap *pixmapBackground; cPixmap *pixmapBackground;
cStyledPixmap *pixmapHeader; cStyledPixmap *pixmapHeader;
cPixmap *pixmapHeaderLogo; cPixmap *pixmapHeaderLogo;
cPixmap *pixmapContent; cPixmap *pixmapContent;
cPixmap *pixmapScrollbar; cPixmap *pixmapScrollbar;
cPixmap *pixmapScrollbarBack; cPixmap *pixmapScrollbarBack;
cPixmap *pixmapTabs; cPixmap *pixmapTabs;
cFont *font, *fontSmall, *fontHeader, *fontHeaderLarge; cFont *font, *fontSmall, *fontHeader, *fontHeaderLarge;
cImage *imgScrollBar; cImage *imgScrollBar;
int activeView; int activeView;
bool scrollable; bool scrollable;
bool tabbed; bool tabbed;
int x, y; int x, y;
int width, height; int width, height;
int border; int border;
int headerWidth, headerHeight; int headerWidth, headerHeight;
int contentHeight; int contentHeight;
int tabHeight; int tabHeight;
int scrollbarWidth; int scrollbarWidth;
std::vector<std::string> tabs; std::vector<std::string> tabs;
std::string title; std::string title;
std::string subTitle; std::string subTitle;
std::string dateTime; std::string dateTime;
std::string infoText; std::string infoText;
std::string addInfoText; std::string addInfoText;
const cChannel *channel; const cChannel *channel;
int eventID; int eventID;
bool headerDrawn; bool headerDrawn;
void DrawHeader(void); void DrawHeader(void);
void ClearContent(void); void ClearContent(void);
void CreateContent(int fullHeight); void CreateContent(int fullHeight);
void DrawContent(std::string *text); void DrawContent(std::string *text);
void DrawFloatingContent(std::string *infoText, cTvMedia *img, cTvMedia *img2 = NULL); void DrawFloatingContent(std::string *infoText, cTvMedia *img, cTvMedia *img2 = NULL);
void CreateFloatingTextWrapper(cTextWrapper *twNarrow, cTextWrapper *twFull, std::string *text, int widthImg, int heightImg); void CreateFloatingTextWrapper(cTextWrapper *twNarrow, cTextWrapper *twFull, std::string *text, int widthImg, int heightImg);
void DrawActors(std::vector<cActor> *actors); void DrawActors(std::vector<cActor> *actors);
void ClearScrollbar(void); void ClearScrollbar(void);
void ClearScrollbarImage(void); void ClearScrollbarImage(void);
cImage *CreateScrollbarImage(int width, int height, tColor clrBgr, tColor clrBlend); cImage *CreateScrollbarImage(int width, int height, tColor clrBgr, tColor clrBlend);
virtual void SetTabs(void) {}; virtual void SetTabs(void) {};
void DrawTabs(void); void DrawTabs(void);
public: public:
cView(void); cView(void);
virtual ~cView(void); virtual ~cView(void);
void SetTitle(const char *t) { title = t ? t : ""; }; void SetTitle(const char *t) { title = t ? t : ""; };
void SetSubTitle(const char *s) { subTitle = s ? s : ""; }; void SetSubTitle(const char *s) { subTitle = s ? s : ""; };
void SetDateTime(const char *dt) { dateTime = dt; }; void SetDateTime(const char *dt) { dateTime = dt; };
void SetInfoText(const char *i) { infoText = i ? i : ""; }; void SetInfoText(const char *i) { infoText = i ? i : ""; };
void SetAdditionalInfoText(std::string addInfo) { addInfoText = addInfo; }; void SetAdditionalInfoText(std::string addInfo) { addInfoText = addInfo; };
void SetChannel(const cChannel *c) { channel = c; }; void SetChannel(const cChannel *c) { channel = c; };
void SetEventID(int id) { eventID = id; }; void SetEventID(int id) { eventID = id; };
void SetEvent(const cEvent *event) { this->event = event; }; void SetEvent(const cEvent *event) { this->event = event; };
virtual void LoadMedia(void) {}; virtual void LoadMedia(void) {};
void SetGeometry(void); void SetGeometry(void);
void SetFonts(void); void SetFonts(void);
virtual bool KeyUp(void); virtual bool KeyUp(void);
virtual bool KeyDown(void); virtual bool KeyDown(void);
virtual void KeyLeft(void) {}; virtual void KeyLeft(void) {};
virtual void KeyRight(void) {}; virtual void KeyRight(void) {};
void DrawScrollbar(void); void DrawScrollbar(void);
virtual void Action(void) {}; virtual void Action(void) {};
}; };
class cEPGView : public cView { class cEPGView : public cView {
protected: protected:
std::vector<std::string> epgPics; std::vector<std::string> epgPics;
int numEPGPics; int numEPGPics;
int numTabs; int numTabs;
void SetTabs(void); void SetTabs(void);
void CheckEPGImages(void); void CheckEPGImages(void);
void DrawImages(void); void DrawImages(void);
public: public:
cEPGView(void); cEPGView(void);
virtual ~cEPGView(void); virtual ~cEPGView(void);
void KeyLeft(void); void KeyLeft(void);
void KeyRight(void); void KeyRight(void);
void Action(void); void Action(void);
}; };
class cSeriesView : public cView { class cSeriesView : public cView {
protected: protected:
int seriesId; int seriesId;
int episodeId; int episodeId;
cSeries series; cSeries series;
std::string tvdbInfo; std::string tvdbInfo;
void SetTabs(void); void SetTabs(void);
void CreateTVDBInfo(void); void CreateTVDBInfo(void);
void DrawImages(void); void DrawImages(void);
int GetRandomPoster(void); int GetRandomPoster(void);
public: public:
cSeriesView(int seriesId, int episodeId); cSeriesView(int seriesId, int episodeId);
virtual ~cSeriesView(void); virtual ~cSeriesView(void);
void LoadMedia(void); void LoadMedia(void);
void KeyLeft(void); void KeyLeft(void);
void KeyRight(void); void KeyRight(void);
void Action(void); void Action(void);
}; };
class cMovieView : public cView { class cMovieView : public cView {
protected: protected:
int movieId; int movieId;
cMovie movie; cMovie movie;
std::string movieDBInfo; std::string movieDBInfo;
void SetTabs(void); void SetTabs(void);
void CreateMovieDBInfo(void); void CreateMovieDBInfo(void);
void DrawImages(void); void DrawImages(void);
public: public:
cMovieView(int movieId); cMovieView(int movieId);
virtual ~cMovieView(void); virtual ~cMovieView(void);
void LoadMedia(void); void LoadMedia(void);
void KeyLeft(void); void KeyLeft(void);
void KeyRight(void); void KeyRight(void);
void Action(void); void Action(void);
}; };
#endif //__TVGUIDE_VIEW_H #endif //__TVGUIDE_VIEW_H