Compare commits

..

No commits in common. "master" and "v1.2.6" have entirely different histories.

73 changed files with 9848 additions and 10968 deletions

120
HISTORY
View File

@ -181,123 +181,3 @@ Version 1.2.6
- Channelgroup in cRecMenuSearchTimerEdit
(Create and modify of channelgroups isn't yet possible, should be done in epgsearch)
- Change channel icon size in cRecMenuSearchTimerEdit
Version 1.2.7
- Eliminate a "invalid lock sequence report" in tvguideosd.c
- Optical changes in favorites and searchtimer menu
- Changes in README
Version 1.2.8
- Some refactoring
- Update i18n
- Add almost all search timer options to cRecMenuSearchTimerEdit,
only one is missing: "Use content descriptor"
(Create and modify of channelgroups and blacklists isn't possible,
because the epgsearch service interface doesn't support that,
should be done in epgsearch)
Version 1.2.9
- Correct plugin options in README and CommandLineHelp
- Change locking in cTVGuideSearchTimer::cTVGuideSearchTimer
- 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
Version 1.2.17
- Final fix for utf8 CutText
- Fixed a remote timer problem
- Add episode to manual timer
Version 1.3.0
- last version with <VDR-2.3.1 compatibility
- Fixed a possible seqfault in DisplayTimerConflict
- Show numTimersToday in timeline
- Fixed stopIndex in cRecMenu::JumpBegin
- Fixed horizontal alignment in timeline
- Fixed messages in DisplayTimerConflict
Version 1.3.1
- Fixes for <VDR-2.3.1 compatibility
- Fixed a segfault while starting tvguide
Version 1.3.2
- Fixed display groupname in cChannelGroupGrid::DrawHorizontal
- Center some channel logos
- Add "Timer On/Off" to recmenu
- Wrap title in detailview header
- Optional deactivation of the timer confirmation messages
Version 1.3.3
- Bugfix
Version 1.3.4
- Fix for gcc11
Version 1.3.5
- Fix for VDR-2.5.4
- Update iceblue theme
Version 1.3.6
- Fix segfault when tvscraper returns "call->type = tNone"
- In menu "Search Recordins" get ChannelName from 'RecInfo'
- Display errors in search recordings
- Fixed possible segfault when showing scrollbar in search result lists
- Adapt epgsearch "allow empty" for searchtimer
- some rework
- optical optimization

View File

@ -60,7 +60,7 @@ endif
### The object files (add further files here):
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
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
### The main target:

14
README
View File

@ -1,14 +1,10 @@
This is a "plugin" for the Video Disk Recorder (VDR).
TVGuide on GitLab: https://gitlab.com/kamel5/tvguide
Written by: Louis Braun <louis DOT braun AT gmx DOT de>
Original Written by: Louis Braun <louis DOT braun AT gmx DOT de>
Project's homepage: http://projects.vdr-developer.org/projects/plg-tvguide
Original Project's homepage: http://projects.vdr-developer.org/projects/plg-tvguide
Latest version available at: https://gitlab.com/kamel5/tvguide
Original version available at: http://projects.vdr-developer.org/projects/plg-tvguide/files
Latest version available at: http://projects.vdr-developer.org/projects/plg-tvguide/files
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
@ -44,13 +40,13 @@ After "normal" Plugin installation you have to care about the paths for the
used Icons, the channel logos and epg images. The following paths can be set
at startup:
-l path, --logopath=path
-l path, --logodir=path
Path to the logos (Default: <ResourceDirectory>/plugins/tvguide/channellogos/).
-e path, --epgimages=path
Path to the epgimages (Default: <CacheDirectory>/plugins/tvguide/epgimages/).
-i path, --iconpath=path
-i path, --icons=path
Path to the icons directory (Default: <ResourceDirectory>/plugins/tvguide/epgimages/).
<ResourceDirectory> and <CacheDirectory> is taken from your VDR configuration

View File

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

View File

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

View File

@ -36,60 +36,61 @@ void cChannelGroupGrid::SetBackground() {
void cChannelGroupGrid::SetGeometry(int start, int end) {
int x, y, width, height;
if (config.displayMode == eVertical) {
if (tvguideConfig.displayMode == eVertical) {
x = geoManager.timeLineWidth + start*geoManager.colWidth;
y = geoManager.statusHeaderHeight;
width = (end - start + 1) * geoManager.colWidth;
height = geoManager.channelGroupsHeight;
} else if (config.displayMode == eHorizontal) {
} else if (tvguideConfig.displayMode == eHorizontal) {
x = 0;
y = geoManager.statusHeaderHeight + geoManager.timeLineHeight + start*geoManager.rowHeight;
width = geoManager.channelGroupsWidth;
height = (end - start + 1) * geoManager.rowHeight;
}
pixmap = osdManager.CreatePixmap(1, cRect(x, y, width, height));
pixmap = osdManager.requestPixmap(1, cRect(x, y, width, height));
}
void cChannelGroupGrid::Draw(void) {
if (config.style == eStyleGraphical) {
if (tvguideConfig.style == eStyleGraphical) {
drawBackgroundGraphical(bgChannelGroup);
} else {
drawBackground();
drawBorder();
}
tColor colorText = theme.Color(clrFont);
tColor colorTextBack = (config.style == eStyleFlat)?color:clrTransparent;
if (config.displayMode == eVertical) {
tColor colorTextBack = (tvguideConfig.style == eStyleFlat)?color:clrTransparent;
if (tvguideConfig.displayMode == eVertical) {
DrawVertical(colorText, colorTextBack);
} else if (config.displayMode == eHorizontal) {
} else if (tvguideConfig.displayMode == eHorizontal) {
DrawHorizontal(colorText, colorTextBack);
}
}
void cChannelGroupGrid::DrawVertical(tColor colorText, tColor colorTextBack) {
int textY = (Height() - fontManager.FontChannelGroups->Height()) / 2;
cString text = cString::sprintf("%s", 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 x = (Width() - textWidth) / 2;
pixmap->DrawText(cPoint(x, textY), *text, colorText, colorTextBack, fontManager.FontChannelGroups);
}
void cChannelGroupGrid::DrawHorizontal(tColor colorText, tColor colorTextBack) {
std::string groupName = name;
int numChars = groupName.length();
std::string nameUpper = name;
std::transform(nameUpper.begin(), nameUpper.end(),nameUpper.begin(), ::toupper);
int numChars = nameUpper.length();
int charHeight = fontManager.FontChannelGroupsHorizontal->Height();
int textHeight = numChars * charHeight;
int y = 5;
if ((textHeight + 5) < Height()) {
if ((textHeight +5) < Height()) {
y = (Height() - textHeight) / 2;
}
for (int i = 0; i < numChars; i++) {
if (((y + 2 * charHeight) > Height()) && ((i + 1) < numChars)) {
for (int i=0; i < numChars; i++) {
if (((y + 2*charHeight) > Height()) && ((i+1)<numChars)) {
int x = (Width() - fontManager.FontChannelGroupsHorizontal->Width("...")) / 2;
pixmap->DrawText(cPoint(x, y), "...", colorText, colorTextBack, fontManager.FontChannelGroupsHorizontal);
break;
}
cString currentChar = cString::sprintf("%s", utf8_substr(groupName.c_str(), i, 1).c_str());
cString currentChar = cString::sprintf("%c", nameUpper.at(i));
int x = (Width() - fontManager.FontChannelGroupsHorizontal->Width(*currentChar)) / 2;
pixmap->DrawText(cPoint(x, y), *currentChar, colorText, colorTextBack, fontManager.FontChannelGroupsHorizontal);
y += fontManager.FontChannelGroupsHorizontal->Height();

View File

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

View File

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

View File

@ -6,33 +6,42 @@
#include "channelgroups.h"
#include "channeljump.h"
cChannelJump::cChannelJump(cChannelGroups *channelGroups, int lastValidChannel) {
cChannelJump::cChannelJump(cChannelGroups *channelGroups) {
this->channelGroups = channelGroups;
pixmapText = NULL;
channel = 0;
maxChannels = lastValidChannel;
if (!tvguideConfig.hideLastGroup) {
#if VDRVERSNUM >= 20301
LOCK_CHANNELS_READ;
maxChannels = Channels->MaxNumber();
#else
maxChannels = Channels.MaxNumber();
#endif
} else {
maxChannels = channelGroups->GetLastValidChannel();
}
timeout = Setup.ChannelEntryTimeout;
startTime = 0;
startTime = cTimeMs::Now();
SetPixmaps();
Draw();
}
cChannelJump::~cChannelJump(void) {
osdManager.DestroyPixmap(pixmapBack);
osdManager.DestroyPixmap(pixmapText);
osdManager.releasePixmap(pixmapBack);
osdManager.releasePixmap(pixmapText);
}
void cChannelJump::SetPixmaps(void) {
int x = (geoManager.osdWidth - geoManager.channelJumpWidth)/2;
int y = (geoManager.osdHeight - geoManager.channelJumpHeight)/2;
pixmapBack = osdManager.CreatePixmap(4, cRect(x, y, geoManager.channelJumpWidth, geoManager.channelJumpHeight));
pixmap = osdManager.CreatePixmap(5, cRect(x, y, geoManager.channelJumpWidth, geoManager.channelJumpHeight));
pixmapText = osdManager.CreatePixmap(6, cRect(x, y, geoManager.channelJumpWidth, geoManager.channelJumpHeight));
pixmapBack = osdManager.requestPixmap(4, cRect(x, y, geoManager.channelJumpWidth, geoManager.channelJumpHeight));
pixmap = osdManager.requestPixmap(5, cRect(x, y, geoManager.channelJumpWidth, geoManager.channelJumpHeight));
pixmapText = osdManager.requestPixmap(6, cRect(x, y, geoManager.channelJumpWidth, geoManager.channelJumpHeight));
}
void cChannelJump::Draw(void) {
if (config.style == eStyleGraphical) {
if (tvguideConfig.style == eStyleGraphical) {
drawBackgroundGraphical(bgChannelJump);
} else {
pixmap->Fill(theme.Color(clrBackground));

View File

@ -18,7 +18,7 @@ private:
void Draw(void);
cString BuildChannelString(void);
public:
cChannelJump(cChannelGroups *channelGroups, int lastValidChannel);
cChannelJump(cChannelGroups *channelGroups);
virtual ~cChannelJump(void);
void Set(int num);
void DrawText(void);

View File

@ -1,8 +1,7 @@
#include <string>
#include "config.h"
cTVGuideConfig::cTVGuideConfig() {
useHWAccel = false;
cTvguideConfig::cTvguideConfig() {
debugImageLoading = 0;
showMainMenuEntry = 1;
replaceOriginalSchedule = 0;
@ -10,8 +9,8 @@ cTVGuideConfig::cTVGuideConfig() {
showTimeInGrid = 1;
channelCols = 5;
channelRows = 10;
displayTime = 180;
displayHorizontalTime = 180;
displayTime = 160;
displayHorizontalTime = 160;
displayStatusHeader = 1;
displayChannelGroups = 1;
displayTimeBase = 1;
@ -28,14 +27,10 @@ cTVGuideConfig::cTVGuideConfig() {
footerHeightPercent = 7;
stepMinutes = 30;
bigStepHours = 3;
bigStepHoursHorizontal = 3;
hugeStepHours = 24;
hugeStepHoursHorizontal = 24;
channelJumpMode = eNumJump;
jumpChannels = 0;
blueKeyMode = 2;
addSubtitleToTimer = 1;
timerMessage = 1;
closeOnSwitch = 1;
numkeyMode = 0;
useRemoteTimers = 0;
@ -100,7 +95,6 @@ cTVGuideConfig::cTVGuideConfig() {
FontRecMenuItemLargeDelta = 0;
timeFormat = 1;
useNopacityTheme = 1;
useNopacityThemeCurrent = -1;
themeIndex = -1;
themeIndexCurrent = -1;
themeName = "";
@ -118,26 +112,25 @@ cTVGuideConfig::cTVGuideConfig() {
iconsPathSet = false;
}
cTVGuideConfig::~cTVGuideConfig() {
cTvguideConfig::~cTvguideConfig() {
}
void cTVGuideConfig::setDynamicValues() {
void cTvguideConfig::setDynamicValues() {
numGrids = (displayMode == eVertical)?channelCols:channelRows;
jumpChannels = numGrids;
}
bool cTVGuideConfig::LoadTheme() {
bool cTvguideConfig::LoadTheme() {
//is correct theme already loaded?
if (nOpacityTheme.size() == 0)
nOpacityTheme = Setup.OSDTheme;
if ((themeIndex > -1) && (themeIndex == themeIndexCurrent) && (useNopacityTheme == useNopacityThemeCurrent)) {
if ((themeIndex > -1) && (themeIndex == themeIndexCurrent)) {
if (!nOpacityTheme.compare(Setup.OSDTheme)) {
return false;
} else {
nOpacityTheme = Setup.OSDTheme;
}
}
esyslog("tvguide: loading new Theme");
//Load available Themes
cThemes themes;
themes.Load(*cString("tvguide"));
@ -174,7 +167,6 @@ bool cTVGuideConfig::LoadTheme() {
themeIndex = 0;
themeIndexCurrent = themeIndex;
useNopacityThemeCurrent = useNopacityTheme;
const char *themePath = themes.FileName(themeIndex);
if (access(themePath, F_OK) == 0) {
@ -186,7 +178,7 @@ bool cTVGuideConfig::LoadTheme() {
}
void cTVGuideConfig::SetStyle(void) {
void cTvguideConfig::SetStyle(void) {
if (theme.Color(clrStyle) == CLR_STYLE_FLAT) {
style = eStyleFlat;
esyslog("tvguide: set flat style");
@ -203,25 +195,25 @@ void cTVGuideConfig::SetStyle(void) {
}
void cTVGuideConfig::SetLogoPath(cString path) {
void cTvguideConfig::SetLogoPath(cString path) {
logoPath = checkSlashAtEnd(*path);
logoPathSet = true;
esyslog("tvguide: Logo Path set to %s", *logoPath);
}
void cTVGuideConfig::SetImagesPath(cString path) {
void cTvguideConfig::SetImagesPath(cString path) {
epgImagePath = checkSlashAtEnd(*path);
imagesPathSet = true;
esyslog("tvguide: EPG Image Path set to %s", *epgImagePath);
}
void cTVGuideConfig::SetIconsPath(cString path) {
void cTvguideConfig::SetIconsPath(cString path) {
iconPath = checkSlashAtEnd(*path);
iconsPathSet = true;
esyslog("tvguide: Icon Path set to %s", *iconPath);
}
void cTVGuideConfig::SetDefaultPathes(void) {
void cTvguideConfig::SetDefaultPathes(void) {
logoPathDefault = cString::sprintf("%s/logos/", cPlugin::ResourceDirectory(PLUGIN_NAME_I18N));
iconPathDefault = cString::sprintf("%s/icons/", cPlugin::ResourceDirectory(PLUGIN_NAME_I18N));
epgImagePathDefault = cString::sprintf("%s/epgimages/", cPlugin::CacheDirectory(PLUGIN_NAME_I18N));
@ -237,7 +229,7 @@ void cTVGuideConfig::SetDefaultPathes(void) {
}
}
cString cTVGuideConfig::checkSlashAtEnd(std::string path) {
cString cTvguideConfig::checkSlashAtEnd(std::string path) {
try {
if (!(path.at(path.size()-1) == '/'))
return cString::sprintf("%s/", path.c_str());
@ -245,10 +237,9 @@ cString cTVGuideConfig::checkSlashAtEnd(std::string path) {
return path.c_str();
}
bool cTVGuideConfig::SetupParse(const char *Name, const char *Value) {
bool cTvguideConfig::SetupParse(const char *Name, const char *Value) {
if (strcmp(Name, "timeFormat") == 0) timeFormat = atoi(Value);
else if (strcmp(Name, "debugImageLoading") == 0) debugImageLoading = atoi(Value);
else if (strcmp(Name, "useHWAccel") == 0) useHWAccel = atoi(Value);
else if (strcmp(Name, "showMainMenuEntry") == 0) showMainMenuEntry = atoi(Value);
else if (strcmp(Name, "replaceOriginalSchedule") == 0) replaceOriginalSchedule = atoi(Value);
else if (strcmp(Name, "useNopacityTheme") == 0) useNopacityTheme = atoi(Value);
@ -273,9 +264,7 @@ bool cTVGuideConfig::SetupParse(const char *Name, const char *Value) {
else if (strcmp(Name, "logoWidthRatio") == 0) logoWidthRatio = atoi(Value);
else if (strcmp(Name, "logoHeightRatio") == 0) logoHeightRatio = atoi(Value);
else if (strcmp(Name, "bigStepHours") == 0) bigStepHours = atoi(Value);
else if (strcmp(Name, "bigStepHoursHorizontal") == 0) bigStepHoursHorizontal = atoi(Value);
else if (strcmp(Name, "hugeStepHours") == 0) hugeStepHours = atoi(Value);
else if (strcmp(Name, "hugeStepHoursHorizontal") == 0) hugeStepHoursHorizontal = atoi(Value);
else if (strcmp(Name, "channelJumpMode") == 0) channelJumpMode = atoi(Value);
else if (strcmp(Name, "blueKeyMode") == 0) blueKeyMode = atoi(Value);
else if (strcmp(Name, "numkeyMode") == 0) numkeyMode = atoi(Value);
@ -297,8 +286,6 @@ bool cTVGuideConfig::SetupParse(const char *Name, const char *Value) {
else if (strcmp(Name, "footerHeightPercent") == 0) footerHeightPercent = atoi(Value);
else if (strcmp(Name, "instRecFolderMode") == 0) instRecFolderMode = atoi(Value);
else if (strcmp(Name, "instRecFixedFolder") == 0) instRecFixedFolder = Value;
else if (strcmp(Name, "addSubtitleToTimer") == 0) addSubtitleToTimer = atoi(Value);
else if (strcmp(Name, "timerMessage") == 0) timerMessage = atoi(Value);
else if (strcmp(Name, "favWhatsOnNow") == 0) favWhatsOnNow = atoi(Value);
else if (strcmp(Name, "favWhatsOnNext") == 0) favWhatsOnNext = atoi(Value);
else if (strcmp(Name, "favUseTime1") == 0) favUseTime1 = atoi(Value);

View File

@ -8,7 +8,7 @@
#include "fontmanager.h"
#include "imagecache.h"
enum eTimeFormat {
enum {
e12Hours,
e24Hours
};
@ -43,19 +43,12 @@ enum eInstRecFolderMode {
eFolderFixed
};
typedef enum {
addSubtitleNever = 0,
addSubtitleSmart,
addSubtitleAlways
} addSubtitleToTimerMode;
class cTVGuideConfig {
class cTvguideConfig {
private:
cString checkSlashAtEnd(std::string path);
public:
cTVGuideConfig();
~cTVGuideConfig();
int useHWAccel;
cTvguideConfig();
~cTvguideConfig();
int debugImageLoading;
int showMainMenuEntry;
int replaceOriginalSchedule;
@ -82,14 +75,10 @@ class cTVGuideConfig {
int footerHeightPercent;
int stepMinutes;
int bigStepHours;
int bigStepHoursHorizontal;
int hugeStepHours;
int hugeStepHoursHorizontal;
int channelJumpMode;
int jumpChannels;
int blueKeyMode;
int timerMessage;
int addSubtitleToTimer;
int closeOnSwitch;
int numkeyMode;
int useRemoteTimers;
@ -160,7 +149,6 @@ class cTVGuideConfig {
int FontRecMenuItemLargeDelta;
int timeFormat;
int useNopacityTheme;
int useNopacityThemeCurrent;
int themeIndex;
int themeIndexCurrent;
cString themeName;
@ -187,7 +175,7 @@ class cTVGuideConfig {
};
#ifdef DEFINE_CONFIG
cTVGuideConfig config;
cTvguideConfig tvguideConfig;
cOsdManager osdManager;
cGeometryManager geoManager;
cFontManager fontManager;
@ -195,7 +183,7 @@ class cTVGuideConfig {
cTheme theme;
cPlugin* pRemoteTimers = NULL;
#else
extern cTVGuideConfig config;
extern cTvguideConfig tvguideConfig;
extern cOsdManager osdManager;
extern cGeometryManager geoManager;
extern cFontManager fontManager;

View File

@ -1,12 +1,12 @@
#include "detailview.h"
cDetailView::cDetailView(const cEvent *event, cFooter *footer) : cThread("DetailView") {
cDetailView::cDetailView(const cEvent *event, cFooter *footer) {
this->event = event;
this->footer = footer;
}
cDetailView::~cDetailView(void){
Cancel(3);
Cancel(-1);
while (Active())
cCondWait::SleepMs(10);
#if VDRVERSNUM >= 20301
@ -32,8 +32,6 @@ void cDetailView::InitiateView(void) {
view = new cMovieView(call.movieId);
} else if (call.type == tSeries) {
view = new cSeriesView(call.seriesId, call.episodeId);
} else {
view = new cEPGView();
}
} else {
view = new cEPGView();
@ -76,8 +74,8 @@ std::string cDetailView::LoadReruns(void) {
Epgsearch_searchresults_v1_0 data;
std::string strQuery = event->Title();
if (config.displayRerunsDetailEPGView > 0) {
if (config.useSubtitleRerun == 2 && !isempty(event->ShortText())) {
if (tvguideConfig.displayRerunsDetailEPGView > 0) {
if (tvguideConfig.useSubtitleRerun == 2 && !isempty(event->ShortText())) {
strQuery += "~";
strQuery += event->ShortText();
}
@ -97,7 +95,7 @@ std::string cDetailView::LoadReruns(void) {
if (list && (list->Count() > 1)) {
foundRerun = true;
int i = 0;
for (Epgsearch_searchresults_v1_0::cServiceSearchResult *r = list->First(); r && i < config.numReruns; r = list->Next(r)) {
for (Epgsearch_searchresults_v1_0::cServiceSearchResult *r = list->First(); r && i < tvguideConfig.numReruns; r = list->Next(r)) {
if ((event->ChannelID() == r->event->ChannelID()) && (event->StartTime() == r->event->StartTime()))
continue;
i++;
@ -149,14 +147,14 @@ eOSState cDetailView::ProcessKey(eKeys Key) {
bool scrolled = view->KeyUp();
if (scrolled) {
view->DrawScrollbar();
osdManager.Flush();
osdManager.flush();
}
break; }
case kDown: {
bool scrolled = view->KeyDown();
if (scrolled) {
view->DrawScrollbar();
osdManager.Flush();
osdManager.flush();
}
break; }
case kLeft:

View File

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

View File

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

103
epggrid.c
View File

@ -1,9 +1,9 @@
#include "services/remotetimers.h"
#include "channelepg.h"
#include "channelcolumn.h"
#include "tools.h"
#include "epggrid.h"
cEpgGrid::cEpgGrid(cChannelEpg *c, const cEvent *event) : cGridElement(c) {
cEpgGrid::cEpgGrid(cChannelColumn *c, const cEvent *event) : cGrid(c) {
this->event = event;
extText = new cTextWrapper();
hasTimer = false;
@ -20,9 +20,9 @@ cEpgGrid::~cEpgGrid(void) {
void cEpgGrid::SetViewportHeight() {
int viewportHeightOld = viewportHeight;
if ( column->Start() > StartTime() ) {
viewportHeight = (std::min((int)EndTime(), column->Stop()) - column->Start()) / 60;
viewportHeight = (min((int)EndTime(), column->Stop()) - column->Start()) /60;
} else if ( column->Stop() < EndTime() ) {
viewportHeight = (column->Stop() - StartTime()) / 60;
viewportHeight = (column->Stop() - StartTime()) /60;
if (viewportHeight < 0) viewportHeight = 0;
} else {
viewportHeight = Duration() / 60;
@ -33,27 +33,27 @@ void cEpgGrid::SetViewportHeight() {
}
void cEpgGrid::PositionPixmap() {
if (config.displayMode == eVertical) {
if (tvguideConfig.displayMode == eVertical) {
int x0 = column->getX();
int y0 = geoManager.statusHeaderHeight + geoManager.channelHeaderHeight + geoManager.channelGroupsHeight;
if ( column->Start() < StartTime() ) {
y0 += (StartTime() - column->Start()) / 60 * geoManager.minutePixel;
y0 += (StartTime() - column->Start())/60*geoManager.minutePixel;
}
if (!pixmap) {
pixmap = osdManager.CreatePixmap(-1, cRect(x0, y0, geoManager.colWidth, viewportHeight),
cRect(0, 0, geoManager.colWidth, Duration() / 60 * geoManager.minutePixel));
pixmap = osdManager.requestPixmap(-1, cRect(x0, y0, geoManager.colWidth, viewportHeight),
cRect(0, 0, geoManager.colWidth, Duration()/60*geoManager.minutePixel));
} else {
pixmap->SetViewPort(cRect(x0, y0, geoManager.colWidth, viewportHeight));
}
} else if (config.displayMode == eHorizontal) {
} else if (tvguideConfig.displayMode == eHorizontal) {
int x0 = geoManager.channelHeaderWidth + geoManager.channelGroupsWidth;
int y0 = column->getY();
if ( column->Start() < StartTime() ) {
x0 += (StartTime() - column->Start()) / 60 * geoManager.minutePixel;
x0 += (StartTime() - column->Start())/60*geoManager.minutePixel;
}
if (!pixmap) {
pixmap = osdManager.CreatePixmap(-1, cRect(x0, y0, viewportHeight, geoManager.rowHeight),
cRect(0, 0, Duration() / 60 * geoManager.minutePixel, geoManager.rowHeight));
pixmap = osdManager.requestPixmap(-1, cRect(x0, y0, viewportHeight, geoManager.rowHeight),
cRect(0, 0, Duration()/60*geoManager.minutePixel, geoManager.rowHeight));
} else {
pixmap->SetViewPort(cRect(x0, y0, viewportHeight, geoManager.rowHeight ));
}
@ -63,7 +63,7 @@ void cEpgGrid::PositionPixmap() {
void cEpgGrid::SetTimer() {
hasTimer = false;
if (config.useRemoteTimers && pRemoteTimers) {
if (tvguideConfig.useRemoteTimers && pRemoteTimers) {
RemoteTimers_Event_v1_0 rt;
rt.event = event;
if (pRemoteTimers->Service("RemoteTimers::GetTimerByEvent-v1.0", &rt))
@ -91,53 +91,54 @@ void cEpgGrid::SetSwitchTimer() {
}
void cEpgGrid::setText() {
if (config.displayMode == eVertical) {
text->Set(event->Title(), fontManager.FontGrid, geoManager.colWidth - 2 * borderWidth);
extText->Set(event->ShortText(), fontManager.FontGridSmall, geoManager.colWidth - 2 * borderWidth);
}
if (config.showTimeInGrid) {
timeString = cString::sprintf("%s - %s:", *(event->GetTimeString()), *(event->GetEndTimeString()));
if (tvguideConfig.displayMode == eVertical) {
cString strText;
strText = cString::sprintf("%s - %s:\n%s", *(event->GetTimeString()), *(event->GetEndTimeString()), event->Title());
text->Set(*(strText), fontManager.FontGrid, geoManager.colWidth-2*borderWidth);
extText->Set(event->ShortText(), fontManager.FontGridSmall, geoManager.colWidth-2*borderWidth);
} else if (tvguideConfig.displayMode == eHorizontal) {
timeString = cString::sprintf("%s - %s", *(event->GetTimeString()), *(event->GetEndTimeString()));
}
}
void cEpgGrid::drawText() {
tColor colorText = (active) ? theme.Color(clrFontActive) : theme.Color(clrFont);
tColor colorText = (active)?theme.Color(clrFontActive):theme.Color(clrFont);
tColor colorTextBack;
if (config.style == eStyleFlat)
if (tvguideConfig.style == eStyleFlat)
colorTextBack = color;
else if (config.style == eStyleGraphical)
colorTextBack = (active) ? theme.Color(clrGridActiveFontBack) : theme.Color(clrGridFontBack);
else if (tvguideConfig.style == eStyleGraphical)
colorTextBack = (active)?theme.Color(clrGridActiveFontBack):theme.Color(clrGridFontBack);
else
colorTextBack = clrTransparent;
if (config.displayMode == eVertical) {
if (Height() / geoManager.minutePixel < 6)
if (tvguideConfig.displayMode == eVertical) {
if (Height()/geoManager.minutePixel < 6)
return;
int textHeight = fontManager.FontGrid->Height();
int textHeightSmall = fontManager.FontGridSmall->Height();
int textLines = text->Lines();
int titleY = borderWidth;
if (config.showTimeInGrid) { // mit Zeitangabe im Grid
pixmap->DrawText(cPoint(borderWidth, borderWidth), *timeString, colorText, colorTextBack, fontManager.FontGridSmall);
titleY += textHeightSmall;
}
for (int i = 0; i < textLines; i++) {
pixmap->DrawText(cPoint(borderWidth, titleY + i * textHeight), text->GetLine(i), colorText, colorTextBack, fontManager.FontGrid);
for (int i=0; i<textLines; i++) {
pixmap->DrawText(cPoint(borderWidth, borderWidth + i*textHeight), text->GetLine(i), colorText, colorTextBack, fontManager.FontGrid);
}
int extTextLines = extText->Lines();
int offset = titleY + (textLines + 0.5) * textHeight;
if ((Height() - textHeightSmall - 10) > offset) {
for (int i = 0; i < extTextLines; i++) {
pixmap->DrawText(cPoint(borderWidth, offset + i * textHeightSmall), extText->GetLine(i), colorText, colorTextBack, fontManager.FontGridSmall);
int offset = (textLines+1)*textHeight - 0.5*textHeight;
textHeight = fontManager.FontGridSmall->Height();
if ((Height()-textHeight-10) > offset) {
for (int i=0; i<extTextLines; i++) {
pixmap->DrawText(cPoint(borderWidth, borderWidth + offset + i*textHeight), extText->GetLine(i), colorText, colorTextBack, fontManager.FontGridSmall);
}
}
} else if (config.displayMode == eHorizontal) {
cString strTitle = CutText(event->Title(), viewportHeight - borderWidth, fontManager.FontGridHorizontal).c_str();
} else if (tvguideConfig.displayMode == eHorizontal) {
if (Width()/geoManager.minutePixel < 10) {
int titleY = (geoManager.rowHeight - fontManager.FontGridHorizontal->Height())/2;
pixmap->DrawText(cPoint(borderWidth - 2, titleY), "...", colorText, colorTextBack, fontManager.FontGridHorizontal);
return;
}
cString strTitle = CutText(event->Title(), viewportHeight, fontManager.FontGridHorizontal).c_str();
int titleY = 0;
if (config.showTimeInGrid) { // mit Zeitangabe im Grid
if (tvguideConfig.showTimeInGrid) {
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 {
titleY = (geoManager.rowHeight - fontManager.FontGridHorizontal->Height()) / 2;
titleY = (geoManager.rowHeight - fontManager.FontGridHorizontal->Height())/2;
}
pixmap->DrawText(cPoint(borderWidth, titleY), *strTitle, colorText, colorTextBack, fontManager.FontGridHorizontal);
}
@ -169,17 +170,13 @@ void cEpgGrid::drawText() {
void cEpgGrid::drawIcon(cString iconText, tColor color) {
const cFont *font = (config.displayMode == eVertical) ? fontManager.FontGrid : fontManager.FontGridHorizontalSmall;
int textWidth = font->Width(*iconText) + 2 * borderWidth;
int textHeight = font->Height() + 10;
if ((config.displayMode == eHorizontal) && ((Width() - 2 * textWidth) < 0))
pixmap->DrawEllipse( cRect(Width() - textHeight / 2 - borderWidth, Height() - textHeight - borderWidth, textHeight / 2, textHeight / 2), color);
else if ((config.displayMode == eVertical) && ((Height() - 2 * textHeight) < 0))
pixmap->DrawEllipse( cRect(Width() - textHeight / 2 - borderWidth, borderWidth, textHeight / 2, textHeight / 2), color);
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);
}
const cFont *font = (tvguideConfig.displayMode == eVertical)
?fontManager.FontGrid
:fontManager.FontGridHorizontalSmall;
int textWidth = font->Width(*iconText)+2*borderWidth;
int textHeight = font->Height()+10;
pixmap->DrawRectangle( cRect(Width() - textWidth - borderWidth, Height() - textHeight - borderWidth, textWidth, textHeight), color);
pixmap->DrawText(cPoint(Width() - textWidth, Height() - textHeight - borderWidth/2), *iconText, theme.Color(clrFont), color, font);
}
cString cEpgGrid::getTimeString(void) {

View File

@ -2,11 +2,11 @@
#define __TVGUIDE_EPGGRID_H
#include <vdr/epg.h>
#include "gridelement.h"
#include "grid.h"
// --- cEpgGrid -------------------------------------------------------------
class cEpgGrid : public cGridElement {
class cEpgGrid : public cGrid {
private:
const cTimer *timer;
const cEvent *event;
@ -16,7 +16,7 @@ private:
void drawIcon(cString iconText, tColor color);
time_t Duration(void) { return event->Duration(); };
public:
cEpgGrid(cChannelEpg *c, const cEvent *event);
cEpgGrid(cChannelColumn *c, const cEvent *event);
virtual ~cEpgGrid(void);
void SetViewportHeight();
void PositionPixmap();

View File

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

View File

@ -8,7 +8,7 @@ cFooter::cFooter(cChannelGroups *channelGroups) {
currentGroup = -1;
buttonY = (geoManager.footerHeight - geoManager.buttonHeight)/2;
SetButtonPositions();
footer = osdManager.CreatePixmap(2, cRect( 0,
footer = osdManager.requestPixmap(2, cRect( 0,
geoManager.footerY,
geoManager.osdWidth,
geoManager.footerHeight),
@ -17,7 +17,7 @@ cFooter::cFooter(cChannelGroups *channelGroups) {
}
cFooter::~cFooter(void) {
osdManager.DestroyPixmap(footer);
osdManager.releasePixmap(footer);
}
void cFooter::drawRedButton() {
@ -26,7 +26,7 @@ void cFooter::drawRedButton() {
}
void cFooter::drawGreenButton() {
cString text = cString::sprintf("%d %s", config.jumpChannels, tr("Channels back"));
cString text = cString::sprintf("%d %s", tvguideConfig.jumpChannels, tr("Channels back"));
DrawButton(*text, theme.Color(clrButtonGreen), theme.Color(clrButtonGreenBorder), oeButtonGreen, positionButtons[1]);
}
@ -36,7 +36,7 @@ void cFooter::drawGreenButton(const char *text) {
}
void cFooter::drawYellowButton() {
cString text = cString::sprintf("%d %s", config.jumpChannels, tr("Channels forward"));
cString text = cString::sprintf("%d %s", tvguideConfig.jumpChannels, tr("Channels forward"));
DrawButton(*text, theme.Color(clrButtonYellow), theme.Color(clrButtonYellowBorder), oeButtonYellow, positionButtons[2]);
}
@ -47,14 +47,14 @@ void cFooter::drawYellowButton(const char *text) {
void cFooter::drawBlueButton(bool detailedEPG) {
cString text;
if (config.blueKeyMode == eBlueKeySwitch)
if (tvguideConfig.blueKeyMode == eBlueKeySwitch)
text = tr("Switch to Channel");
else if (config.blueKeyMode == eBlueKeyEPG) {
else if (tvguideConfig.blueKeyMode == eBlueKeyEPG) {
if (!detailedEPG)
text = tr("Detailed EPG");
else
text = tr("Close detailed EPG");
} else if (config.blueKeyMode == eBlueKeyFavorites) {
} else if (tvguideConfig.blueKeyMode == eBlueKeyFavorites) {
if (!detailedEPG)
text = tr("Favorites");
else
@ -80,7 +80,7 @@ void cFooter::SetDetailedViewMode(bool fromRecMenu) {
if (fromRecMenu) {
ClearButton(positionButtons[0]);
ClearButton(positionButtons[3]);
} else if (config.blueKeyMode != eBlueKeySwitch) {
} else if (tvguideConfig.blueKeyMode != eBlueKeySwitch) {
ClearButton(positionButtons[3]);
drawBlueButton(true);
}
@ -89,7 +89,7 @@ void cFooter::SetDetailedViewMode(bool fromRecMenu) {
void cFooter::LeaveDetailedViewMode(const cChannel *channel) {
drawRedButton();
drawBlueButton();
if (config.channelJumpMode == eNumJump) {
if (tvguideConfig.channelJumpMode == eNumJump) {
drawGreenButton();
drawYellowButton();
} else {
@ -128,20 +128,20 @@ void cFooter::SetButtonPositions(void) {
}
void cFooter::DrawButton(const char *text, tColor color, tColor borderColor, eOsdElementType buttonType, int num) {
tColor colorTextBack = (config.style == eStyleFlat)?color:clrTransparent;
tColor colorTextBack = (tvguideConfig.style == eStyleFlat)?color:clrTransparent;
int left = num * geoManager.buttonWidth + (2 * num + 1) * geoManager.buttonBorder;
if ((config.style == eStyleBlendingMagick) || (config.style == eStyleBlendingDefault)) {
if ((tvguideConfig.style == eStyleBlendingMagick) || (tvguideConfig.style == eStyleBlendingDefault)) {
cImageLoader imgLoader;
imgLoader.DrawBackground(theme.Color(clrButtonBlend), color, geoManager.buttonWidth-4, geoManager.buttonHeight-4);
footer->DrawRectangle(cRect(left, buttonY, geoManager.buttonWidth, geoManager.buttonHeight), borderColor);
footer->DrawImage(cPoint(left+2, buttonY+2), imgLoader.GetImage());
if (config.roundedCorners) {
if (tvguideConfig.roundedCorners) {
int borderRadius = 12;
int borderWidth = 2;
DrawRoundedCorners(footer, left, buttonY, geoManager.buttonWidth, geoManager.buttonHeight, borderRadius, borderWidth, borderColor);
}
} else if (config.style == eStyleGraphical) {
} else if (tvguideConfig.style == eStyleGraphical) {
cImage *button = imgCache.GetOsdElement(buttonType);
if (button) {
footer->DrawImage(cPoint(left, buttonY), *button);
@ -149,7 +149,7 @@ void cFooter::DrawButton(const char *text, tColor color, tColor borderColor, eOs
} else {
footer->DrawRectangle(cRect(left, buttonY, geoManager.buttonWidth, geoManager.buttonHeight), borderColor);
footer->DrawRectangle(cRect(left+1, buttonY+1, geoManager.buttonWidth-2, geoManager.buttonHeight-2), color);
if (config.roundedCorners) {
if (tvguideConfig.roundedCorners) {
int borderRadius = 12;
int borderWidth = 1;
DrawRoundedCorners(footer, left, buttonY, geoManager.buttonWidth, geoManager.buttonHeight, borderRadius, borderWidth, borderColor);

View File

@ -20,39 +20,39 @@ bool cGeometryManager::SetGeometry(int osdWidth, int osdHeight, bool force) {
this->osdHeight = osdHeight;
esyslog("tvguide: Set OSD to %d x %d px", osdWidth, osdHeight);
statusHeaderHeight = (config.displayStatusHeader) ? (config.headerHeightPercent * osdHeight / 100) : 0;
statusHeaderHeight = (tvguideConfig.displayStatusHeader)?(tvguideConfig.headerHeightPercent * osdHeight / 100):0;
tvFrameWidth = statusHeaderHeight * 16 / 9;
headerContentWidth = (config.scaleVideo) ? (osdWidth - tvFrameWidth):osdWidth;
channelGroupsWidth = (config.displayChannelGroups) ? (config.channelGroupsPercent * osdWidth / 100) : 0;
channelGroupsHeight = (config.displayChannelGroups) ? (config.channelGroupsPercent * osdHeight / 100) : 0;
channelHeaderWidth = config.channelHeaderWidthPercent * osdWidth / 100;
channelHeaderHeight = config.channelHeaderHeightPercent * osdHeight / 100;
timeLineWidth = config.timeLineWidthPercent * osdWidth / 100;
timeLineHeight = config.timeLineHeightPercent * osdHeight / 100;
footerHeight = config.footerHeightPercent * osdHeight / 100;
headerContentWidth = (tvguideConfig.scaleVideo)?(osdWidth - tvFrameWidth):osdWidth;
channelGroupsWidth = (tvguideConfig.displayChannelGroups)?(tvguideConfig.channelGroupsPercent * osdWidth / 100):0;
channelGroupsHeight = (tvguideConfig.displayChannelGroups)?(tvguideConfig.channelGroupsPercent * osdHeight / 100):0;
channelHeaderWidth = tvguideConfig.channelHeaderWidthPercent * osdWidth / 100;
channelHeaderHeight = tvguideConfig.channelHeaderHeightPercent * osdHeight / 100;
timeLineWidth = tvguideConfig.timeLineWidthPercent * osdWidth / 100;
timeLineHeight = tvguideConfig.timeLineHeightPercent * osdHeight / 100;
footerHeight = tvguideConfig.footerHeightPercent * osdHeight / 100;
footerY = osdHeight - footerHeight;
if (config.displayMode == eVertical) {
colWidth = (osdWidth - timeLineWidth) / config.channelCols;
if (tvguideConfig.displayMode == eVertical) {
colWidth = (osdWidth - timeLineWidth) / tvguideConfig.channelCols;
rowHeight = 0;
minutePixel = (double)(osdHeight - statusHeaderHeight - channelGroupsHeight - channelHeaderHeight - footerHeight) / (double)config.displayTime;
minutePixel = (osdHeight - statusHeaderHeight - channelGroupsHeight - channelHeaderHeight - footerHeight) / tvguideConfig.displayTime;
channelLogoWidth = colWidth;
channelLogoHeight = channelHeaderHeight;
logoWidth = channelLogoWidth / 2 - 15;
logoHeight = logoWidth * config.logoHeightRatio / config.logoWidthRatio;
logoWidth = channelLogoWidth/2 - 15;
logoHeight = logoWidth * tvguideConfig.logoHeightRatio / tvguideConfig.logoWidthRatio;
timeLineGridWidth = timeLineWidth;
timeLineGridHeight = minutePixel * 30;
dateVieverWidth = timeLineWidth;
dateVieverHeight = (channelHeaderHeight + channelGroupsHeight) * 2 / 3;
clockWidth = dateVieverWidth;
clockHeight = (channelHeaderHeight + channelGroupsHeight) - dateVieverHeight;
} else if (config.displayMode == eHorizontal) {
} else if (tvguideConfig.displayMode == eHorizontal) {
colWidth = 0;
rowHeight = (osdHeight - statusHeaderHeight - timeLineHeight - footerHeight) / config.channelRows;
minutePixel = (double)(osdWidth - channelHeaderWidth - channelGroupsWidth) / (double)config.displayHorizontalTime;
rowHeight = (osdHeight - statusHeaderHeight - timeLineHeight - footerHeight) / tvguideConfig.channelRows;
minutePixel = (osdWidth - channelHeaderWidth - channelGroupsWidth) / tvguideConfig.displayHorizontalTime;
channelLogoWidth = channelHeaderWidth;
channelLogoHeight = rowHeight;
logoWidth = channelLogoHeight * config.logoWidthRatio / config.logoHeightRatio;
logoWidth = channelLogoHeight * tvguideConfig.logoWidthRatio / tvguideConfig.logoHeightRatio;
logoHeight = channelLogoHeight;
timeLineGridWidth = geoManager.minutePixel * 30;
timeLineGridHeight = geoManager.timeLineHeight;
@ -65,7 +65,7 @@ bool cGeometryManager::SetGeometry(int osdWidth, int osdHeight, bool force) {
buttonWidth = osdWidth / 4 - 2 * buttonBorder;
buttonHeight = footerHeight - 3 * buttonBorder;
epgViewHeaderHeight = config.headerHeightPercent * osdHeight / 100;
epgViewHeaderHeight = tvguideConfig.headerHeightPercent * osdHeight / 100;
borderRecMenus = 10;

View File

@ -24,7 +24,7 @@ public:
//Content
int colWidth;
int rowHeight;
double minutePixel;
int minutePixel;
int channelLogoWidth;
int channelLogoHeight;
//Timeline

View File

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

View File

@ -4,11 +4,11 @@
#include <vdr/tools.h>
#include "styledpixmap.h"
class cChannelEpg;
class cChannelColumn;
// --- cEpgGrid -------------------------------------------------------------
class cGridElement : public cListObject, public cStyledPixmap {
class cGrid : public cListObject, public cStyledPixmap {
protected:
cTextWrapper *text;
int viewportHeight;
@ -19,14 +19,14 @@ protected:
bool dirty;
bool hasTimer;
bool hasSwitchTimer;
bool intersects(cGridElement *neighbor);
bool intersects(cGrid *neighbor);
virtual time_t Duration(void) { return 0; };
virtual void drawText(void) {};
bool dummy;
public:
cGridElement(cChannelEpg *c);
virtual ~cGridElement(void);
cChannelEpg *column;
cGrid(cChannelColumn *c);
virtual ~cGrid(void);
cChannelColumn *column;
virtual void SetViewportHeight(void) {};
virtual void PositionPixmap(void) {};
virtual void setText(void) {};
@ -43,7 +43,7 @@ public:
virtual time_t EndTime(void) { return 0; };
virtual void SetStartTime(time_t start) {};
virtual void SetEndTime(time_t end) {};
int calcOverlap(cGridElement *neighbor);
int calcOverlap(cGrid *neighbor);
virtual void SetTimer(void) {};
virtual void SetSwitchTimer(void) {};
virtual cString getText(void) { return cString("");};
@ -51,7 +51,7 @@ public:
bool Active(void) { return active; };
bool HasTimer(void) {return hasTimer;};
bool HasSwitchTimer(void) {return hasSwitchTimer;};
bool IsDummy(void) { return dummy; };
bool isDummy(void) { return dummy; };
virtual void debug() {};
};

View File

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

View File

@ -1,11 +1,11 @@
#ifndef __TVGUIDE_HEADERGRID_H
#define __TVGUIDE_HEADERGRID_H
#include "gridelement.h"
#include "grid.h"
// --- cHeaderGrid -------------------------------------------------------------
class cHeaderGrid : public cGridElement {
class cHeaderGrid : public cGrid {
private:
cPixmap *pixmapLogo;
void drawChannelHorizontal(const cChannel *channel);

View File

@ -28,25 +28,25 @@ cImageCache::~cImageCache() {
}
void cImageCache::CreateCache(void) {
if (config.style != eStyleGraphical)
if (tvguideConfig.style != eStyleGraphical)
return;
esyslog("tvguide: Creating Image Cache");
int start = cTimeMs::Now();
int startNext = cTimeMs::Now();
CreateOsdIconCache();
esyslog("tvguide: Osd Icon Cache created in %d ms", int(cTimeMs::Now()-startNext));
esyslog("tvguide: Osd Icon Cash created in %d ms", int(cTimeMs::Now()-startNext));
startNext = cTimeMs::Now();
PrepareGridIconCache();
CreateGridIconCache();
esyslog("tvguide: Grid Icon Cache created in %d ms", int(cTimeMs::Now()-startNext));
esyslog("tvguide: Grid Icon Cash created in %d ms", int(cTimeMs::Now()-startNext));
startNext = cTimeMs::Now();
CreateChannelGroupCache();
esyslog("tvguide: Channelgroup Cache created in %d ms", int(cTimeMs::Now()-startNext));
esyslog("tvguide: Channelgroup Cash created in %d ms", int(cTimeMs::Now()-startNext));
startNext = cTimeMs::Now();
CreateLogoCache();
esyslog("tvguide: Logo Cache created in %d ms", int(cTimeMs::Now()-startNext));
esyslog("tvguide: Logo Cash created in %d ms", int(cTimeMs::Now()-startNext));
startNext = cTimeMs::Now();
esyslog("tvguide: Complete Image Cache created in %d ms", int(cTimeMs::Now()-start));
esyslog("tvguide: Complete Image Cash created in %d ms", int(cTimeMs::Now()-start));
}
void cImageCache::CreateOsdIconCache(void) {
@ -85,7 +85,7 @@ void cImageCache::CreateOsdIconCache(void) {
InsertIntoOsdElementCache(oeButtonBlue, geoManager.buttonWidth, geoManager.buttonHeight);
//Channel Logo Background
if (config.displayMode == eHorizontal) {
if (tvguideConfig.displayMode == eHorizontal) {
success = LoadIcon("osdElements/channellogoback_horizontal");
} else {
success = LoadIcon("osdElements/channellogoback_vertical");
@ -95,7 +95,7 @@ void cImageCache::CreateOsdIconCache(void) {
//Timeline Elements
std::string imgTimeline1, imgTimeline2, imgDateViewer;
if (config.displayMode == eHorizontal) {
if (tvguideConfig.displayMode == eHorizontal) {
imgTimeline1 = "osdElements/timeline1_horizontal";
imgTimeline2 = "osdElements/timeline2_horizontal";
imgDateViewer = "osdElements/timeline2_horizontal";
@ -129,7 +129,7 @@ void cImageCache::PrepareGridIconCache(void) {
//Create Buffers for Background
gridsAvailable = true;
std::string grid, grid_active;
if (config.displayMode == eHorizontal) {
if (tvguideConfig.displayMode == eHorizontal) {
grid = "osdElements/grid_horizontal";
grid_active = "osdElements/grid_active_horizontal";
} else {
@ -158,7 +158,7 @@ void cImageCache::PrepareGridIconCache(void) {
imgBottom = NULL;
imgBottomActive = NULL;
if (config.displayMode == eHorizontal) {
if (tvguideConfig.displayMode == eHorizontal) {
std::string left = "osdElements/grid_left";
std::string right = "osdElements/grid_right";
std::string left_active = "osdElements/grid_active_left";
@ -214,7 +214,7 @@ void cImageCache::PrepareGridIconCache(void) {
}
void cImageCache::CreateGridIconCache(void) {
if (config.displayMode == eHorizontal) {
if (tvguideConfig.displayMode == eHorizontal) {
int gridHeight = geoManager.rowHeight;
for (int minutes = 5; minutes <= 120; minutes += 5) {
GetGrid(minutes * geoManager.minutePixel, gridHeight, false);
@ -233,7 +233,7 @@ void cImageCache::CreateChannelGroupCache(void) {
groupsBottom = NULL;
groupsLeft = NULL;
groupsRight = NULL;
if (config.displayMode == eHorizontal) {
if (tvguideConfig.displayMode == eHorizontal) {
std::string channelGroupHead = "osdElements/channelgroup_head";
std::string channelGroupBottom = "osdElements/channelgroup_bottom";
int width = geoManager.channelGroupsWidth;
@ -249,7 +249,7 @@ void cImageCache::CreateChannelGroupCache(void) {
if (success && heightHeadBottom) {
groupsBottom = CreateImage(width, heightHeadBottom, false);
}
for (int size = 1; size <= config.numGrids; ++size) {
for (int size = 1; size <= tvguideConfig.numGrids; ++size) {
InsertIntoGroupsCacheHorizontal(size);
}
} else {
@ -268,7 +268,7 @@ void cImageCache::CreateChannelGroupCache(void) {
if (success && widthHeadBottom) {
groupsRight = CreateImage(widthHeadBottom, height, false);
}
for (int size = 1; size <= config.numGrids; ++size) {
for (int size = 1; size <= tvguideConfig.numGrids; ++size) {
InsertIntoGroupsCacheVertical(size);
}
}
@ -276,9 +276,9 @@ void cImageCache::CreateChannelGroupCache(void) {
}
void cImageCache::CreateLogoCache(void) {
if (config.hideChannelLogos)
if (tvguideConfig.hideChannelLogos)
return;
if (config.numLogosInitial > 0) {
if (tvguideConfig.numLogosInitial > 0) {
int channelsCached = 0;
#if VDRVERSNUM >= 20301
LOCK_CHANNELS_READ;
@ -286,7 +286,7 @@ void cImageCache::CreateLogoCache(void) {
#else
for (const cChannel *channel = Channels.First(); channel; channel = Channels.Next(channel)) {
#endif
if (channelsCached >= config.numLogosInitial)
if (channelsCached >= tvguideConfig.numLogosInitial)
break;
if (!channel->GroupSep()) {
bool success = LoadLogo(channel);
@ -351,13 +351,13 @@ cImage *cImageCache::GetLogo(const cChannel *channel) {
} else {
bool success = LoadLogo(channel);
if (success) {
if ((config.limitLogoCache) && ((int)logoCache.size() >= config.numLogosMax)) {
if ((tvguideConfig.limitLogoCache) && ((int)logoCache.size() >= tvguideConfig.numLogosMax)) {
//logo cache is full, don't cache anymore
if (tempStaticLogo) {
delete tempStaticLogo;
tempStaticLogo = NULL;
}
tempStaticLogo = CreateImage(geoManager.logoWidth * 0.8, geoManager.logoHeight * 0.8);
tempStaticLogo = CreateImage(geoManager.logoWidth, geoManager.logoHeight);
return tempStaticLogo;
} else {
//add requested logo to cache
@ -403,7 +403,7 @@ void cImageCache::InsertIntoOsdElementCache(eOsdElementType type, int width, int
void cImageCache::InsertIntoGridCache(std::string name, int width, int height, bool active) {
cImage *image = CreateGrid(width, height, active);
if (image) {
if (config.displayMode == eHorizontal) {
if (tvguideConfig.displayMode == eHorizontal) {
AddCornersHorizontal(image, active);
} else {
AddCornersVertical(image, active);
@ -553,25 +553,25 @@ void cImageCache::AddCornersGroupVertical(cImage *img) {
bool cImageCache::LoadIcon(std::string name) {
bool success = false;
if (config.iconsPathSet) {
cString iconPathTheme = cString::sprintf("%s%s/", *config.iconPath, *config.themeName);
if (tvguideConfig.iconsPathSet) {
cString iconPathTheme = cString::sprintf("%s%s/", *tvguideConfig.iconPath, *tvguideConfig.themeName);
success = LoadImage(name, *iconPathTheme, "png");
if (success) {
return true;
} else {
success = LoadImage(name, *config.iconPath, "png");
success = LoadImage(name, *tvguideConfig.iconPath, "png");
if (success) {
return true;
}
}
}
if (!success) {
cString iconPathTheme = cString::sprintf("%s%s/", *config.iconPathDefault, *config.themeName);
cString iconPathTheme = cString::sprintf("%s%s/", *tvguideConfig.iconPathDefault, *tvguideConfig.themeName);
success = LoadImage(name, *iconPathTheme, "png");
if (success) {
return true;
} else {
success = LoadImage(name, *config.iconPathDefault, "png");
success = LoadImage(name, *tvguideConfig.iconPathDefault, "png");
if (success) {
return true;
}
@ -587,29 +587,29 @@ bool cImageCache::LoadLogo(const cChannel *channel) {
std::string logoLower = StrToLowerCase(channel->Name());
bool success = false;
cString extension;
if (config.logoExtension == 0) {
if (tvguideConfig.logoExtension == 0) {
extension = "png";
} else if (config.logoExtension == 1) {
} else if (tvguideConfig.logoExtension == 1) {
extension = "jpg";
}
if (config.logoPathSet) {
success = LoadImage(channelID.c_str(), *config.logoPath, *extension);
if (tvguideConfig.logoPathSet) {
success = LoadImage(channelID.c_str(), *tvguideConfig.logoPath, *extension);
if (success)
return true;
success = LoadImage(logoLower.c_str(), *config.logoPath, *extension);
success = LoadImage(logoLower.c_str(), *tvguideConfig.logoPath, *extension);
if (success)
return true;
}
success = LoadImage(channelID.c_str(), *config.logoPathDefault, *extension);
success = LoadImage(channelID.c_str(), *tvguideConfig.logoPathDefault, *extension);
if (success)
return true;
success = LoadImage(logoLower.c_str(), *config.logoPathDefault, *extension);
success = LoadImage(logoLower.c_str(), *tvguideConfig.logoPathDefault, *extension);
return success;
}
void cImageCache::InsertIntoLogoCache(std::string channelID) {
cImage *image = CreateImage(geoManager.logoWidth * 0.8, geoManager.logoHeight * 0.8);
cImage *image = CreateImage(geoManager.logoWidth, geoManager.logoHeight);
logoCache.insert(std::pair<std::string, cImage*>(channelID, image));
}

View File

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

View File

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

View File

@ -2,21 +2,12 @@
#include "osdmanager.h"
cOsdManager::cOsdManager(void) {
osd = NULL;
}
void cOsdManager::Lock(void) {
mutex.Lock();
}
void cOsdManager::Unlock(void) {
mutex.Unlock();
}
bool cOsdManager::CreateOsd(void) {
bool cOsdManager::setOsd() {
osd = cOsdProvider::NewOsd(cOsd::OsdLeft(), cOsd::OsdTop());
if (osd) {
tArea Area = { 0, 0, cOsd::OsdWidth() - 1, cOsd::OsdHeight() - 1, 32 };
tArea Area = { 0, 0, cOsd::OsdWidth(), cOsd::OsdHeight(), 32 };
if (osd->SetAreas(&Area, 1) == oeOk) {
return true;
}
@ -24,16 +15,9 @@ bool cOsdManager::CreateOsd(void) {
return false;
}
void cOsdManager::DeleteOsd(void) {
Lock();
delete osd;
osd = NULL;
Unlock();
}
void cOsdManager::setBackground() {
void cOsdManager::SetBackground(void) {
if (config.displayStatusHeader && config.scaleVideo) {
if (tvguideConfig.displayStatusHeader && tvguideConfig.scaleVideo) {
int widthStatus = cOsd::OsdWidth() - geoManager.statusHeaderHeight * 16 / 9;
osd->DrawRectangle(0, 0, widthStatus, geoManager.statusHeaderHeight, theme.Color(clrBackgroundOSD));
osd->DrawRectangle(0, geoManager.statusHeaderHeight, Width(), Height(), theme.Color(clrBackgroundOSD));
@ -43,20 +27,12 @@ void cOsdManager::SetBackground(void) {
}
cPixmap *cOsdManager::CreatePixmap(int Layer, const cRect &ViewPort, const cRect &DrawPort) {
if (osd)
cPixmap *cOsdManager::requestPixmap(int Layer, const cRect &ViewPort, const cRect &DrawPort) {
return osd->CreatePixmap(Layer, ViewPort, DrawPort);
return NULL;
}
void cOsdManager::DestroyPixmap(cPixmap *pixmap) {
if (!osd || !pixmap)
void cOsdManager::releasePixmap(cPixmap *pixmap) {
if (!pixmap)
return;
osd->DestroyPixmap(pixmap);
}
void cOsdManager::Flush(void) {
if (osd) {
osd->Flush();
}
}

View File

@ -4,23 +4,20 @@
#include <vdr/osd.h>
class cOsdManager {
private:
private:
cOsd *osd;
cMutex mutex;
public:
public:
cOsdManager(void);
void Lock(void);
void Unlock(void);
bool CreateOsd(void);
void DeleteOsd(void);
void SetBackground(void);
cPixmap *CreatePixmap(int Layer, const cRect &ViewPort, const cRect &DrawPort = cRect::Null);
void DestroyPixmap(cPixmap *pixmap);
void Flush(void);
int Width(void) { return osd->Width(); };
int Height(void) { return osd->Height(); };
int Top(void) { return osd->Top(); };
int Left(void) { return osd->Left(); };
bool setOsd();
void setBackground();
void flush() {osd->Flush();};
cPixmap *requestPixmap(int Layer, const cRect &ViewPort, const cRect &DrawPort = cRect::Null);
void releasePixmap(cPixmap *pixmap);
void deleteOsd() {delete osd;};
int Width() { return osd->Width(); };
int Height() { return osd->Height(); };
int Top() { return osd->Top(); };
int Left() { return osd->Left(); };
};
#endif //__TVGUIDE_OSDMANAGER_H

View File

@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: vdr-tvguide 0.0.1\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2022-04-29 16:05+0200\n"
"POT-Creation-Date: 2019-04-12 14:35+0200\n"
"PO-Revision-Date: 2013-09-21 17:49+0200\n"
"Last-Translator: My friend <Sampep> Thanks David <Gabychan> <gbonich@gmail.com>\n"
"Language-Team: \n"
@ -25,7 +25,7 @@ msgid "min"
msgstr "min"
msgid "Reruns of "
msgstr "Reemissions "
msgstr ""
msgid "No reruns found"
msgstr ""
@ -57,9 +57,6 @@ msgstr ""
msgid "images"
msgstr ""
msgid "tvguide: RemoteTimerModifications failed"
msgstr ""
msgid "root video folder"
msgstr "Directori principal per a vídeo"
@ -75,15 +72,6 @@ msgstr "tots els canals"
msgid "unknown channel"
msgstr "canal desconegut"
msgid "with"
msgstr ""
msgid "errors"
msgstr ""
msgid "error"
msgstr ""
msgid "Duration"
msgstr "Durada"
@ -111,18 +99,21 @@ msgstr ""
msgid "recordings done"
msgstr ""
msgid "What's on now"
msgstr ""
msgid "What's on next"
msgstr ""
msgid "Instant Record"
msgstr "Enregistra a l'instant"
msgid "Timer On/Off"
msgstr "Temporitzador On/Off"
msgid "Delete Timer"
msgstr "Esborra temporitzador"
msgid "Edit Timer"
msgstr "Edita temporitzador"
msgid "Delete Timer"
msgstr "Esborra temporitzador"
msgid "Timer Timeline"
msgstr ""
@ -153,9 +144,6 @@ msgstr "Cerca a les gravacions"
msgid "Set Folder for"
msgstr "Programa carpeta per"
msgid "Timer changed"
msgstr ""
msgid "Timer created"
msgstr "Temporitzador creat"
@ -180,14 +168,14 @@ msgstr "Sí"
msgid "No"
msgstr "No"
msgid "Timer Conflicts"
msgstr "Conflicte al temporitzador"
msgid "One"
msgstr "Un"
msgid "detected"
msgstr "detectat"
msgid "Ignore Conflicts"
msgstr "Ignora conflictes"
msgid "Timer Conflicts"
msgstr "Conflicte al temporitzador"
msgid "Show conflict"
msgstr "Mostra conflicte"
@ -195,6 +183,9 @@ msgstr "Mostra conflicte"
msgid "timers involved"
msgstr "temporitzadors involucrats"
msgid "Ignore Conflicts"
msgstr "Ignora conflictes"
msgid "Ignore Conflict"
msgstr "Ignora conflicte"
@ -225,12 +216,6 @@ msgstr ""
msgid "replaced by rerun"
msgstr ""
msgid "Save"
msgstr "Desa"
msgid "Cancel"
msgstr "Cancel·la"
msgid "Timer Active"
msgstr "Temporitzador actiu"
@ -255,11 +240,14 @@ msgstr ""
msgid "New Folder"
msgstr ""
msgid "Create Series Timer based on:"
msgstr "Programa enregistrament de Sèries segons:"
msgid "Save"
msgstr "Desa"
msgid "Create Timer"
msgstr "Crea temporitzador"
msgid "Cancel"
msgstr "Cancel·la"
msgid "Create Series Timer based on"
msgstr "Programa enregistrament de Sèries segons"
msgid "Series Timer start time"
msgstr "Inici temporitzador Sèries"
@ -273,6 +261,9 @@ msgstr "Dies a enregistrar"
msgid "Day to start"
msgstr "Dia d'inici"
msgid "Create Timer"
msgstr "Crea temporitzador"
msgid "Series Timer created"
msgstr "Sèrie programada"
@ -282,17 +273,17 @@ msgstr "Inici"
msgid "Stop"
msgstr "Final"
msgid "Configure Search Timer based on:"
msgstr "Configura cerca de temporitzadors segons:"
msgid "Continue"
msgstr "Continua"
msgid "Configure Search Timer based on"
msgstr "Configura cerca de temporitzadors segons"
msgid "Search Expression:"
msgstr "Cerca expressió:"
msgid "Configure Search Timer for Search String:"
msgstr "Configura cerca de temporitzadors amb text:"
msgid "Continue"
msgstr "Continua"
msgid "Configure Search Timer for Search String"
msgstr "Configura cerca de temporitzadors amb text"
msgid "Manually configure Options"
msgstr "Opcions de configuració manual"
@ -312,44 +303,71 @@ msgstr ""
msgid "Save Search Timer"
msgstr ""
msgid "Search term"
msgid "Search String"
msgstr ""
msgid "Active"
msgstr ""
msgid "Search mode"
msgstr ""
msgid "Search Mode"
msgstr "Mode de cerca"
msgid "Tolerance"
msgstr ""
msgid "Match case"
msgstr ""
msgid "Use title"
msgid "Use Title"
msgstr "Utilitza títol"
msgid "Use subtitle"
msgid "Use Subtitle"
msgstr "Utilitza subtítol"
msgid "Use description"
msgid "Use Description"
msgstr "Utilitza descripció"
msgid "Use channel"
msgid "Limit Channels"
msgstr "Canals restringits"
msgid "from channel"
msgstr "Inicia canal"
msgid "Use Time"
msgstr "Utilitza temps"
msgid "to channel"
msgstr "Atura canal"
msgid "Channel group"
msgid "Display advanced Options"
msgstr ""
msgid "Use time"
msgstr "Utilitza temps"
msgid "Limit Days of the Week"
msgstr ""
msgid "Time margin for start in minutes"
msgstr ""
msgid "Time margin for stop in minutes"
msgstr ""
msgid "Series Recording"
msgstr ""
msgid "Folder"
msgstr ""
msgid "Use VPS"
msgstr ""
msgid "Avoid Repeats"
msgstr ""
msgid "Use in Favorites"
msgstr ""
msgid "Hide advanced Options"
msgstr ""
msgid "Display Results for Search Timer"
msgstr "Mostra resultats de la cerca"
msgid "Start Channel"
msgstr "Inicia canal"
msgid "Stop Channel"
msgstr "Atura canal"
msgid "Channel Group"
msgstr ""
msgid "Start after"
msgstr "Comença després"
@ -357,61 +375,10 @@ msgstr "Comença després"
msgid "Start before"
msgstr "Comença abans"
msgid "Use duration"
msgstr "Utilitza Durada"
msgid "Min. duration"
msgid "Select Days"
msgstr ""
msgid "Max. duration"
msgstr ""
msgid "Use day of week"
msgstr ""
msgid "Day of week"
msgstr ""
msgid "Use in Favorites"
msgstr ""
msgid "Use as search timer"
msgstr ""
msgid "Action"
msgstr ""
msgid "Switch ... minutes before start"
msgstr ""
msgid "Unmute sound"
msgstr ""
msgid "Ask ... minutes before start"
msgstr ""
msgid "Series Recording"
msgstr ""
msgid "Directory"
msgstr ""
msgid "Delete recordings after ... days"
msgstr ""
msgid "Keep ... recordings"
msgstr ""
msgid "Pause when ... recordings exist"
msgstr ""
msgid "Avoid Repeats"
msgstr ""
msgid "Allowed repeats"
msgstr ""
msgid "Only repeats within ... days"
msgid "Number of allowed repeats"
msgstr ""
msgid "Compare Title"
@ -423,33 +390,6 @@ msgstr ""
msgid "Compare Description"
msgstr ""
msgid "Min. match in %"
msgstr ""
msgid "Compare date"
msgstr ""
msgid "Time margin for start in minutes"
msgstr ""
msgid "Time margin for stop in minutes"
msgstr ""
msgid "Use VPS"
msgstr ""
msgid "Auto delete"
msgstr ""
msgid "after ... recordings"
msgstr ""
msgid "after ... days after first rec."
msgstr ""
msgid "Display Results for Search Timer"
msgstr "Mostra resultats de la cerca"
msgid "Really delete Search Timer"
msgstr ""
@ -459,7 +399,7 @@ msgstr ""
msgid "Delete Search Timer and created Timers"
msgstr ""
msgid "Search Timer sucessfully created"
msgid "Search Timer sucessfully created."
msgstr "S'ha creat cerca de temporitzador"
msgid "Search Timer update initialised"
@ -483,12 +423,12 @@ msgstr "Utilitza una altra plantilla"
msgid "search results for Favorite"
msgstr ""
msgid "search results for Search Timer"
msgstr "cerca resultats per temporitzador"
msgid "search result for Favorite"
msgstr ""
msgid "search results for Search Timer"
msgstr "cerca resultats per temporitzador"
msgid "search result for Search Timer"
msgstr "cerca resultat per temporitzador"
@ -498,8 +438,8 @@ msgstr "No s'ha trobat la cadena de text"
msgid "Configure Options for Switchtimer"
msgstr "Opcions de configuració de canvi de temporitzador"
msgid "Create"
msgstr "Crea"
msgid "Minutes before switching"
msgstr "Minuts abans del canvi"
msgid "switch"
msgstr "canvia"
@ -510,12 +450,12 @@ msgstr "només anunci"
msgid "ask for switch"
msgstr "pregunta pel canvi"
msgid "Minutes before switching"
msgstr "Minuts abans del canvi"
msgid "Switch Mode"
msgstr "Mode de canvi"
msgid "Create"
msgstr "Crea"
msgid "Switch Timer sucessfully created"
msgstr "Canvi de temporitzador creat"
@ -525,12 +465,6 @@ msgstr "No s'ha creat el canvi de temporitzador"
msgid "Switch Timer deleted"
msgstr "Canvi de temporitzador esborrat"
msgid "Perform Search"
msgstr "Realitza la cerca"
msgid "Search Mode"
msgstr "Mode de cerca"
msgid "Channel to Search"
msgstr "Canal a cercar"
@ -546,6 +480,9 @@ msgstr "Cerca a la descripció"
msgid "Show Search Options"
msgstr "Mostra opcions de cerca"
msgid "Perform Search"
msgstr "Realitza la cerca"
msgid "search results for"
msgstr "resultats de cerca per"
@ -561,12 +498,12 @@ msgstr ""
msgid "Found"
msgstr "Trobada"
msgid "recordings"
msgstr "gravacions"
msgid "recording"
msgstr "gravació"
msgid "recordings"
msgstr "gravacions"
msgid "for"
msgstr "per"
@ -576,12 +513,6 @@ msgstr "No s'han trobat gravacions per"
msgid "No Favorites available"
msgstr ""
msgid "What's on now"
msgstr ""
msgid "What's on next"
msgstr ""
msgid "whole term must appear"
msgstr "expressió completa"
@ -597,57 +528,12 @@ msgstr "coincidència exacta"
msgid "regular expression"
msgstr "expressió regular"
msgid "fuzzy"
msgstr ""
msgid "allow empty"
msgstr ""
msgid "Interval"
msgstr ""
msgid "Channel Group"
msgstr ""
msgid "only FTA"
msgstr ""
msgid "same day"
msgstr ""
msgid "same week"
msgstr ""
msgid "same month"
msgstr ""
msgid "Record"
msgstr ""
msgid "Announce by OSD"
msgstr ""
msgid "Switch only"
msgstr ""
msgid "Announce and switch"
msgstr ""
msgid "Announce by mail"
msgstr ""
msgid "Inactive record"
msgstr ""
msgid "no"
msgstr ""
msgid "count recordings"
msgstr ""
msgid "count days"
msgstr ""
msgid "General Settings"
msgstr "Preferències"
@ -693,9 +579,6 @@ msgstr "si existeix"
msgid "always"
msgstr "sempre"
msgid "Use workaround for HWAccelerated OSD"
msgstr ""
msgid "Show Main Menu Entry"
msgstr "Mostra entrada del menú principal"
@ -772,7 +655,7 @@ msgid "Display time in EPG Grids"
msgstr "Mostra el temps a l'EPG"
msgid "Height of Headers (Status Header and EPG View, Perc. of osd height)"
msgstr "Alçada capçalera d'estat (% alçada OSD)"
msgstr ""
msgid "Height of Footer (Perc. of osd height)"
msgstr ""
@ -903,39 +786,15 @@ msgstr ""
msgid "Use fixed folder"
msgstr ""
msgid "smart"
msgstr ""
msgid "Instant recording:"
msgstr ""
msgid "Folder for instant Recordings"
msgstr "Utilitza carpetes per gravacions a l'instant"
msgid "Folder"
msgstr ""
msgid "Add episode to manual timers"
msgstr ""
msgid "Use Remotetimers"
msgstr "Utilitza temporitzadors remots"
msgid "Show timer confirmation messages"
msgstr ""
msgid "Favorites:"
msgstr ""
msgid "Limit channels in favorites"
msgstr ""
msgid "Start Channel"
msgstr "Inicia canal"
msgid "Stop Channel"
msgstr "Atura canal"
msgid "Use \"What's on now\" in favorites"
msgstr ""
@ -1012,7 +871,7 @@ msgid "EPG Info"
msgstr ""
msgid "Reruns"
msgstr "Reemissions"
msgstr ""
msgid "Recording Information"
msgstr ""
@ -1071,6 +930,9 @@ msgstr ""
msgid "yes"
msgstr ""
msgid "no"
msgstr ""
msgid "Adult"
msgstr ""

View File

@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: vdr-tvguide 0.0.1\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2022-04-29 16:05+0200\n"
"POT-Creation-Date: 2019-04-12 14:35+0200\n"
"PO-Revision-Date: 2012-08-25 17:49+0200\n"
"Last-Translator: Horst\n"
"Language-Team: \n"
@ -54,9 +54,6 @@ msgstr "Favoriten"
msgid "images"
msgstr "Bilder"
msgid "tvguide: RemoteTimerModifications failed"
msgstr ""
msgid "root video folder"
msgstr "Video Hauptverzeichnis"
@ -72,15 +69,6 @@ msgstr "alle Kanäle"
msgid "unknown channel"
msgstr "unbekannter Kanal"
msgid "with"
msgstr "mit"
msgid "errors"
msgstr "Fehler"
msgid "error"
msgstr "Fehler"
msgid "Duration"
msgstr "Dauer"
@ -108,18 +96,21 @@ msgstr "aktive Timer"
msgid "recordings done"
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"
msgstr "Aufnahme"
msgid "Timer On/Off"
msgstr "Timer Ein/Aus"
msgid "Delete Timer"
msgstr "Timer löschen"
msgid "Edit Timer"
msgstr "Timer bearbeiten"
msgid "Delete Timer"
msgstr "Timer löschen"
msgid "Timer Timeline"
msgstr "Timer Tagesübersicht"
@ -150,9 +141,6 @@ msgstr "In Aufnahmen suchen"
msgid "Set Folder for"
msgstr "Verzeichnis festlegen für"
msgid "Timer changed"
msgstr "Timer geändert"
msgid "Timer created"
msgstr "Timer angelegt"
@ -177,14 +165,14 @@ msgstr "Ja"
msgid "No"
msgstr "Nein"
msgid "Timer Conflicts"
msgstr "Timerkonflikte"
msgid "One"
msgstr "Ein"
msgid "detected"
msgstr "gefunden"
msgid "Ignore Conflicts"
msgstr "Konflikte ignorieren"
msgid "Timer Conflicts"
msgstr "Timerkonflikte"
msgid "Show conflict"
msgstr "Konflikt zeigen"
@ -192,6 +180,9 @@ msgstr "Konflikt zeigen"
msgid "timers involved"
msgstr "Timer beteiligt"
msgid "Ignore Conflicts"
msgstr "Konflikte ignorieren"
msgid "Ignore Conflict"
msgstr "Konflikt ignorieren"
@ -222,12 +213,6 @@ msgstr "Timer für"
msgid "replaced by rerun"
msgstr "ersetzt durch Wiederholung"
msgid "Save"
msgstr "Speichern"
msgid "Cancel"
msgstr "Abbrechen"
msgid "Timer Active"
msgstr "Timer aktiv"
@ -252,11 +237,14 @@ msgstr "Timer Datei"
msgid "New Folder"
msgstr "Neues Verzeichnis"
msgid "Create Series Timer based on:"
msgstr "Serientimer anlegen basierend auf:"
msgid "Save"
msgstr "Speichern"
msgid "Create Timer"
msgstr "Timer anlegen"
msgid "Cancel"
msgstr "Abbrechen"
msgid "Create Series Timer based on"
msgstr "Serientimer anlegen basierend auf"
msgid "Series Timer start time"
msgstr "Serientimer Start Zeit"
@ -270,6 +258,9 @@ msgstr "Tage"
msgid "Day to start"
msgstr "Beginnen am"
msgid "Create Timer"
msgstr "Timer anlegen"
msgid "Series Timer created"
msgstr "Serientimer angelegt"
@ -279,17 +270,17 @@ msgstr "Start"
msgid "Stop"
msgstr "Stop"
msgid "Configure Search Timer based on:"
msgstr "Suchtimer konfigurieren basierend auf:"
msgid "Continue"
msgstr "Weiter"
msgid "Configure Search Timer based on"
msgstr "Suchtimer konfigurieren basierend auf"
msgid "Search Expression:"
msgstr "Suchausdruck:"
msgid "Configure Search Timer for Search String:"
msgstr "Suchtimer konfigurieren für Suchbegriff:"
msgid "Continue"
msgstr "Weiter"
msgid "Configure Search Timer for Search String"
msgstr "Suchtimer konfigurieren für Suchbegriff"
msgid "Manually configure Options"
msgstr "Optionen manuell konfigurieren"
@ -309,143 +300,92 @@ msgstr "Suchtimer konfigurieren"
msgid "Save Search Timer"
msgstr "Suchtimer speichern"
msgid "Search term"
msgid "Search String"
msgstr "Suchbegriff"
msgid "Active"
msgstr "Aktiv"
msgid "Search mode"
msgid "Search Mode"
msgstr "Suchmodus"
msgid "Tolerance"
msgstr "Toleranz"
msgid "Use Title"
msgstr "Titel benutzen"
msgid "Match case"
msgstr "Groß/klein"
msgid "Use Subtitle"
msgstr "Untertitel benutzen"
msgid "Use title"
msgstr "Verwende Titel"
msgid "Use Description"
msgstr "Beschreibung benutzen"
msgid "Use subtitle"
msgstr "Verwende Untertitel"
msgid "Limit Channels"
msgstr "Kanäle einschränken"
msgid "Use description"
msgstr "Verwende Beschreibung"
msgid "Use Time"
msgstr "Zeit benutzen"
msgid "Use channel"
msgstr "Verwende Kanal"
msgid "Display advanced Options"
msgstr "Erweiterte Optionen anzeigen"
msgid "from channel"
msgstr "von Kanal"
msgid "Limit Days of the Week"
msgstr "Wochentage beschränken"
msgid "to channel"
msgstr "bis Kanal"
msgid "Time margin for start in minutes"
msgstr "Zeit vor Start in Minuten"
msgid "Channel group"
msgid "Time margin for stop in minutes"
msgstr "Zeit nach Ende in Minuten"
msgid "Series Recording"
msgstr "Serienaufnahme"
msgid "Folder"
msgstr "Verzeichnis"
msgid "Use VPS"
msgstr "VPS benutzen"
msgid "Avoid Repeats"
msgstr "Wiederholungen vermeiden"
msgid "Use in Favorites"
msgstr "Als Favorit benutzen"
msgid "Hide advanced Options"
msgstr "Erweiterte Optionen ausblenden"
msgid "Display Results for Search Timer"
msgstr "Ergebnisse für Suchtimer anzeigen"
msgid "Start Channel"
msgstr "Startkanal"
msgid "Stop Channel"
msgstr "Stopkanal"
msgid "Channel Group"
msgstr "Kanalgruppe"
msgid "Use time"
msgstr "Verwende Uhrzeit"
msgid "Start after"
msgstr "Beginn nach"
msgid "Start before"
msgstr "Beginn vor"
msgid "Use duration"
msgstr "Verwende Dauer"
msgid "Select Days"
msgstr "Tage bestimmen"
msgid "Min. duration"
msgstr "Min. Dauer"
msgid "Max. duration"
msgstr "Max. Dauer"
msgid "Use day of week"
msgstr "Verwende Wochentag"
msgid "Day of week"
msgstr "Wochentag"
msgid "Use in Favorites"
msgstr "Als Favorit benutzen"
msgid "Use as search timer"
msgstr "Als Suchtimer verwenden"
msgid "Action"
msgstr "Aktion"
msgid "Switch ... minutes before start"
msgstr "Umschalten ... Minuten vor Start"
msgid "Unmute sound"
msgstr "Ton anschalten"
msgid "Ask ... minutes before start"
msgstr "Nachfrage ... Minuten vor Start"
msgid "Series Recording"
msgstr "Serienaufnahme"
msgid "Directory"
msgstr "Verzeichnis"
msgid "Delete recordings after ... days"
msgstr "Aufn. nach ... Tagen löschen"
msgid "Keep ... recordings"
msgstr "Behalte ... Aufnahmen"
msgid "Pause when ... recordings exist"
msgstr "Pause, wenn ... Aufnahmen exist."
msgid "Avoid Repeats"
msgstr "Vermeide Wiederholung"
msgid "Allowed repeats"
msgstr "Erlaubte Wiederholungen"
msgid "Only repeats within ... days"
msgstr "Nur Wiederh. innerhalb von ... Tagen"
msgid "Number of allowed repeats"
msgstr "Anzahl erlaubter Wiederholungen"
msgid "Compare Title"
msgstr "Vergleiche Titel"
msgstr "Titel vergleichen"
msgid "Compare Subtitle"
msgstr "Vergleiche Untertitel"
msgstr "Untertitel vergleichen"
msgid "Compare Description"
msgstr "Vergleiche Beschreibung"
msgid "Min. match in %"
msgstr "Min. Übereinstimmung in %"
msgid "Compare date"
msgstr "Vergleiche Zeitpunkt"
msgid "Time margin for start in minutes"
msgstr "Vorlauf zum Timer-Beginn (min)"
msgid "Time margin for stop in minutes"
msgstr "Nachlauf zum Timer-Ende (min)"
msgid "Use VPS"
msgstr "Verwende VPS"
msgid "Auto delete"
msgstr "automatisch löschen"
msgid "after ... recordings"
msgstr "nach ... Aufnahmen"
msgid "after ... days after first rec."
msgstr "nach ... Tagen nach erster Aufn."
msgid "Display Results for Search Timer"
msgstr "Ergebnisse für Suchtimer anzeigen"
msgstr "Beschreibung vergleichen"
msgid "Really delete Search Timer"
msgstr "Suchtimer wirklich löschen"
@ -456,7 +396,7 @@ msgstr "Nur Suchtimer löschen"
msgid "Delete Search Timer and created Timers"
msgstr "Suchtimer und erzeugte Timer löschen"
msgid "Search Timer sucessfully created"
msgid "Search Timer sucessfully created."
msgstr "Suchtimer erfolgreich angelegt"
msgid "Search Timer update initialised"
@ -480,12 +420,12 @@ msgstr "Anderes Template benutzen"
msgid "search results for Favorite"
msgstr "Suchergebnisse für Favorit"
msgid "search results for Search Timer"
msgstr "Treffer für Suchtimer"
msgid "search result for Favorite"
msgstr "Suchergebnis für Favorit"
msgid "search results for Search Timer"
msgstr "Treffer für Suchtimer"
msgid "search result for Search Timer"
msgstr "Treffer für Suchtimer"
@ -495,8 +435,8 @@ msgstr "Keine Treffer für Suchbegriff"
msgid "Configure Options for Switchtimer"
msgstr "Optionen für Umschalttimer konfigurieren"
msgid "Create"
msgstr "Anlegen"
msgid "Minutes before switching"
msgstr "Minuten vor umschalten"
msgid "switch"
msgstr "umschalten"
@ -507,12 +447,12 @@ msgstr "nur ankündigen"
msgid "ask for switch"
msgstr "vor umschalten fragen"
msgid "Minutes before switching"
msgstr "Minuten vor umschalten"
msgid "Switch Mode"
msgstr "Umschaltmodus"
msgid "Create"
msgstr "Anlegen"
msgid "Switch Timer sucessfully created"
msgstr "Umschalttimer erfolgreich angelegt"
@ -522,12 +462,6 @@ msgstr "Umschalttimer NICHT erfolgreich angelegt"
msgid "Switch Timer deleted"
msgstr "Umschalttimer gelöscht"
msgid "Perform Search"
msgstr "Suche ausführen"
msgid "Search Mode"
msgstr "Suchmodus"
msgid "Channel to Search"
msgstr "Suche auf Kanal"
@ -543,6 +477,9 @@ msgstr "In Beschreibung suchen"
msgid "Show Search Options"
msgstr "Suchoptionen anzeigen"
msgid "Perform Search"
msgstr "Suche ausführen"
msgid "search results for"
msgstr "Suchergebnisse für"
@ -558,12 +495,12 @@ msgstr "Suchausdruck muss mindestens drei Zeichen haben"
msgid "Found"
msgstr " "
msgid "recordings"
msgstr "Aufnahmen gefunden"
msgid "recording"
msgstr "Aufnahme gefunden"
msgid "recordings"
msgstr "Aufnahmen gefunden"
msgid "for"
msgstr "für"
@ -573,12 +510,6 @@ msgstr "Keine Aufnahmen gefunden für"
msgid "No Favorites available"
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"
msgstr "vollständiger Ausdruck"
@ -594,57 +525,12 @@ msgstr "exakt"
msgid "regular expression"
msgstr "Regulärer Ausdruck"
msgid "fuzzy"
msgstr "unscharf"
msgid "allow empty"
msgstr "erlaube leere"
msgid "Interval"
msgstr "Bereich"
msgid "Channel Group"
msgstr "Kanalgruppe"
msgid "only FTA"
msgstr "ohne PayTV"
msgid "same day"
msgstr "gleicher Tag"
msgid "same week"
msgstr "gleiche Woche"
msgid "same month"
msgstr "gleicher Monat"
msgid "Record"
msgstr "Aufnehmen"
msgid "Announce by OSD"
msgstr "per OSD ankündigen"
msgid "Switch only"
msgstr "Nur umschalten"
msgid "Announce and switch"
msgstr "Ankündigen und Umschalten"
msgid "Announce by mail"
msgstr "per Mail ankündigen"
msgid "Inactive record"
msgstr "inaktive Aufnahme"
msgid "no"
msgstr "Nein"
msgid "count recordings"
msgstr "Anzahl Aufnahmen"
msgid "count days"
msgstr "Anzahl Tage"
msgid "General Settings"
msgstr "Allgemeine Einstellungen"
@ -690,9 +576,6 @@ msgstr "falls vorhanden"
msgid "always"
msgstr "immer"
msgid "Use workaround for HWAccelerated OSD"
msgstr ""
msgid "Show Main Menu Entry"
msgstr "Hauptmenüeintrag anzeigen"
@ -900,39 +783,15 @@ msgstr "Verzeichnis aus Liste auswählen"
msgid "Use fixed folder"
msgstr "Festes Verzeichnis benutzen"
msgid "smart"
msgstr "intelligent"
msgid "Instant recording:"
msgstr "Sofortaufnahmen:"
msgid "Folder for instant Recordings"
msgstr "Verzeichnis für Sofortaufnahmen"
msgid "Folder"
msgstr "Verzeichnis"
msgid "Add episode to manual timers"
msgstr "Untertitel in manuellen Timern"
msgid "Use Remotetimers"
msgstr "RemoteTimers benutzen"
msgid "Show timer confirmation messages"
msgstr "Timer Bestätigungsmeldungen anzeigen"
msgid "Favorites:"
msgstr "Favoriten:"
msgid "Limit channels in favorites"
msgstr "Kanäle in Favoriten beschränken"
msgid "Start Channel"
msgstr "von Kanal"
msgid "Stop Channel"
msgstr "bis Kanal"
msgid "Use \"What's on now\" in favorites"
msgstr "\"Was läuft jetzt\" in Favoriten benutzen"
@ -970,7 +829,7 @@ msgid "Create Log Messages for image loading"
msgstr "Log Nachrichten für das Laden der Bilder erzeugen"
msgid "Limit Logo Cache"
msgstr "Logo Cache beschränken"
msgstr "Logo Cash beschränken"
msgid "Maximal number of logos to cache"
msgstr "Maximale Anzahl Logos"
@ -1012,7 +871,7 @@ msgid "Reruns"
msgstr "Wiederholungen"
msgid "Recording Information"
msgstr "Aufnahme Information"
msgstr ""
msgid "Image Galery"
msgstr "Bildergalerie"
@ -1068,6 +927,9 @@ msgstr "Überblick"
msgid "yes"
msgstr "Ja"
msgid "no"
msgstr "Nein"
msgid "Adult"
msgstr "Nur für Erwachsene"
@ -1097,9 +959,3 @@ msgstr "TheMovieDB Popularität"
msgid "TheMovieDB Vote Average"
msgstr "TheMovieDB durchschnittliche Bewertung"
#~ msgid "Display advanced Options"
#~ msgstr "Erweiterte Optionen anzeigen"
#~ msgid "Hide advanced Options"
#~ msgstr "Erweiterte Optionen ausblenden"

View File

@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: vdr-tvguide 0.0.1\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2022-04-29 16:05+0200\n"
"POT-Creation-Date: 2019-04-12 14:35+0200\n"
"PO-Revision-Date: 2012-08-25 17:49+0200\n"
"Last-Translator: fiveten_59\n"
"Language-Team: \n"
@ -54,9 +54,6 @@ msgstr "Favoriti"
msgid "images"
msgstr "Immagini"
msgid "tvguide: RemoteTimerModifications failed"
msgstr ""
msgid "root video folder"
msgstr "cartella video di root"
@ -72,15 +69,6 @@ msgstr "Tutti i Canali"
msgid "unknown channel"
msgstr "Canale sconosciuto"
msgid "with"
msgstr ""
msgid "errors"
msgstr ""
msgid "error"
msgstr ""
msgid "Duration"
msgstr "Durata"
@ -108,18 +96,21 @@ msgstr "Timers attivi"
msgid "recordings done"
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"
msgstr "Registrazione immediata"
msgid "Timer On/Off"
msgstr "Timer On/Off"
msgid "Delete Timer"
msgstr "Cancella il Timer"
msgid "Edit Timer"
msgstr "Edita il Timer"
msgid "Delete Timer"
msgstr "Cancella il Timer"
msgid "Timer Timeline"
msgstr "Scadenza del Timer"
@ -150,9 +141,6 @@ msgstr "Cerca nelle registrazioni"
msgid "Set Folder for"
msgstr "Crea cartella per"
msgid "Timer changed"
msgstr ""
msgid "Timer created"
msgstr "Timer creato"
@ -177,14 +165,14 @@ msgstr "Si"
msgid "No"
msgstr "No"
msgid "Timer Conflicts"
msgstr "Conflitti del Timer"
msgid "One"
msgstr "Uno"
msgid "detected"
msgstr "rilevato"
msgid "Ignore Conflicts"
msgstr "Ignora conflitti"
msgid "Timer Conflicts"
msgstr "Conflitti del Timer"
msgid "Show conflict"
msgstr "Mostra conflitto"
@ -192,6 +180,9 @@ msgstr "Mostra conflitto"
msgid "timers involved"
msgstr "Timers impegnati"
msgid "Ignore Conflicts"
msgstr "Ignora conflitti"
msgid "Ignore Conflict"
msgstr "Ignora conflitto"
@ -222,12 +213,6 @@ msgstr "Timer per"
msgid "replaced by rerun"
msgstr "rimosso dal riavvio"
msgid "Save"
msgstr "Salva"
msgid "Cancel"
msgstr "Cancella"
msgid "Timer Active"
msgstr "Timer attivo"
@ -252,11 +237,14 @@ msgstr "File del Timer"
msgid "New Folder"
msgstr "Nuova cartella"
msgid "Create Series Timer based on:"
msgstr "Crea il Series Timer basato su:"
msgid "Save"
msgstr "Salva"
msgid "Create Timer"
msgstr "Crea il Timer"
msgid "Cancel"
msgstr "Cancella"
msgid "Create Series Timer based on"
msgstr "Crea il Series Timer basato su"
msgid "Series Timer start time"
msgstr "Ora d'avvio del Series Timer"
@ -270,6 +258,9 @@ msgstr "Giorni da registrare"
msgid "Day to start"
msgstr "Giorno d'inizio"
msgid "Create Timer"
msgstr "Crea il Timer"
msgid "Series Timer created"
msgstr "Series Timer creato"
@ -279,17 +270,17 @@ msgstr "Avvio"
msgid "Stop"
msgstr "Ferma"
msgid "Configure Search Timer based on:"
msgstr "Configura il Search Timer in serie basato su:"
msgid "Continue"
msgstr "Continua"
msgid "Configure Search Timer based on"
msgstr "Configura il Search Timer in serie basato su"
msgid "Search Expression:"
msgstr "Cerca espressione:"
msgid "Configure Search Timer for Search String:"
msgstr "Configura il Search Timer basato su Search String:"
msgid "Continue"
msgstr "Continua"
msgid "Configure Search Timer for Search String"
msgstr "Configura il Search Timer basato su Search String"
msgid "Manually configure Options"
msgstr "Configura manualmente le Opzioni"
@ -309,107 +300,83 @@ msgstr "Configura le opzione del Search Timer"
msgid "Save Search Timer"
msgstr "Salva il Search Timer"
msgid "Search term"
msgstr ""
msgid "Search String"
msgstr "Suchbegriff"
msgid "Active"
msgstr "Attivo"
msgid "Search mode"
msgid "Search Mode"
msgstr "Modalità di ricerca"
msgid "Tolerance"
msgstr ""
msgid "Match case"
msgstr ""
msgid "Use title"
msgid "Use Title"
msgstr "Usa Titolo"
msgid "Use subtitle"
msgid "Use Subtitle"
msgstr "Usa Sottotitolo"
msgid "Use description"
msgid "Use Description"
msgstr "Usa Descrizione"
msgid "Use channel"
msgid "Limit Channels"
msgstr "Limite Canale"
msgid "from channel"
msgid "Use Time"
msgstr "Utilizza Time"
msgid "Display advanced Options"
msgstr "Mostra Opzioni avanzate"
msgid "Limit Days of the Week"
msgstr "Limite dei giorni della settimana"
msgid "Time margin for start in minutes"
msgstr "Margine di tempo per l'avvio in minuti"
msgid "Time margin for stop in minutes"
msgstr "Margine di tempo per lo stop in minuti"
msgid "Series Recording"
msgstr "Serie di registrazioni"
msgid "Folder"
msgstr "Cartella"
msgid "Use VPS"
msgstr "Utilizza VPS"
msgid "Avoid Repeats"
msgstr "Evita ripetizioni"
msgid "Use in Favorites"
msgstr "Utilizza nei favoriti"
msgid "Hide advanced Options"
msgstr "Nascondi Opzioni avanzate"
msgid "Display Results for Search Timer"
msgstr "Mostra risultati per il Search Timer"
msgid "Start Channel"
msgstr "Avvia il Canale"
msgid "to channel"
msgid "Stop Channel"
msgstr "Ferma il Canale"
msgid "Channel group"
msgid "Channel Group"
msgstr ""
msgid "Use time"
msgstr "Utilizza Time"
msgid "Start after"
msgstr "Avvia dopo"
msgid "Start before"
msgstr "Avvia prima"
msgid "Use duration"
msgstr ""
msgid "Min. duration"
msgstr ""
msgid "Max. duration"
msgstr ""
msgid "Use day of week"
msgstr "Usa giorno feriale"
msgid "Day of week"
msgid "Select Days"
msgstr "Seleziona i giorni"
msgid "Use in Favorites"
msgstr "Utilizza nei favoriti"
msgid "Use as search timer"
msgstr ""
msgid "Action"
msgstr ""
msgid "Switch ... minutes before start"
msgstr ""
msgid "Unmute sound"
msgstr ""
msgid "Ask ... minutes before start"
msgstr ""
msgid "Series Recording"
msgstr "Serie di registrazioni"
msgid "Directory"
msgstr ""
msgid "Delete recordings after ... days"
msgstr ""
msgid "Keep ... recordings"
msgstr ""
msgid "Pause when ... recordings exist"
msgstr ""
msgid "Avoid Repeats"
msgstr "Evita ripetizioni"
msgid "Allowed repeats"
msgstr ""
msgid "Only repeats within ... days"
msgstr ""
msgid "Number of allowed repeats"
msgstr "Numero di ripetizioni permesse"
msgid "Compare Title"
msgstr "Confonta Titolo"
@ -420,33 +387,6 @@ msgstr "Confonta Sottotitolo"
msgid "Compare Description"
msgstr "Confonta Descrizione"
msgid "Min. match in %"
msgstr ""
msgid "Compare date"
msgstr ""
msgid "Time margin for start in minutes"
msgstr "Margine di tempo per l'avvio in minuti"
msgid "Time margin for stop in minutes"
msgstr "Margine di tempo per lo stop in minuti"
msgid "Use VPS"
msgstr "Utilizza VPS"
msgid "Auto delete"
msgstr ""
msgid "after ... recordings"
msgstr ""
msgid "after ... days after first rec."
msgstr ""
msgid "Display Results for Search Timer"
msgstr "Mostra risultati per il Search Timer"
msgid "Really delete Search Timer"
msgstr "Veramente eliminare il Search Timer"
@ -456,7 +396,7 @@ msgstr "Elimina solo il Search Timer"
msgid "Delete Search Timer and created Timers"
msgstr "Elimina il Search Timer e Timers creati"
msgid "Search Timer sucessfully created"
msgid "Search Timer sucessfully created."
msgstr "Search Timer creato con successo"
msgid "Search Timer update initialised"
@ -480,12 +420,12 @@ msgstr "Anderes Template benutzen"
msgid "search results for Favorite"
msgstr "Suchergebnisse für Favorit"
msgid "search results for Search Timer"
msgstr "Treffer für Suchtimer"
msgid "search result for Favorite"
msgstr "Suchergebnis für Favorit"
msgid "search results for Search Timer"
msgstr "Treffer für Suchtimer"
msgid "search result for Search Timer"
msgstr "Treffer für Suchtimer"
@ -495,8 +435,8 @@ msgstr "Keine Treffer für Suchbegriff"
msgid "Configure Options for Switchtimer"
msgstr "Optionen für Umschalttimer konfigurieren"
msgid "Create"
msgstr "Creare"
msgid "Minutes before switching"
msgstr "Minuten vor umschalten"
msgid "switch"
msgstr "cambio"
@ -507,12 +447,12 @@ msgstr "Segnala solamente"
msgid "ask for switch"
msgstr "chiedi per cambiare"
msgid "Minutes before switching"
msgstr "Minuten vor umschalten"
msgid "Switch Mode"
msgstr "Modalità Switch"
msgid "Create"
msgstr "Creare"
msgid "Switch Timer sucessfully created"
msgstr "Switch Timer creato con successo"
@ -522,12 +462,6 @@ msgstr "Switch Timer NON creato"
msgid "Switch Timer deleted"
msgstr "Switch Timer eliminato"
msgid "Perform Search"
msgstr "Fai una ricerca"
msgid "Search Mode"
msgstr "Modalità di ricerca"
msgid "Channel to Search"
msgstr "Canale da cercare"
@ -543,6 +477,9 @@ msgstr "Cerca nella descrizione"
msgid "Show Search Options"
msgstr "Mostra opzioni di ricerca"
msgid "Perform Search"
msgstr "Fai una ricerca"
msgid "search results for"
msgstr "cerca risultati per"
@ -558,12 +495,12 @@ msgstr "Search String deve avere almeno tre lettere"
msgid "Found"
msgstr "Trovato"
msgid "recordings"
msgstr "registrazioni"
msgid "recording"
msgstr "registrazione"
msgid "recordings"
msgstr "registrazioni"
msgid "for"
msgstr "per"
@ -573,12 +510,6 @@ msgstr "Nessuna registrazione trovata per"
msgid "No Favorites available"
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"
msgstr "vollständiger Ausdruck"
@ -594,57 +525,12 @@ msgstr "exakt"
msgid "regular expression"
msgstr "Regulärer Ausdruck"
msgid "fuzzy"
msgstr ""
msgid "allow empty"
msgstr ""
msgid "Interval"
msgstr ""
msgid "Channel Group"
msgstr ""
msgid "only FTA"
msgstr ""
msgid "same day"
msgstr ""
msgid "same week"
msgstr ""
msgid "same month"
msgstr ""
msgid "Record"
msgstr ""
msgid "Announce by OSD"
msgstr ""
msgid "Switch only"
msgstr ""
msgid "Announce and switch"
msgstr ""
msgid "Announce by mail"
msgstr ""
msgid "Inactive record"
msgstr ""
msgid "no"
msgstr "No"
msgid "count recordings"
msgstr ""
msgid "count days"
msgstr ""
msgid "General Settings"
msgstr "Allgemeine Einstellungen"
@ -690,9 +576,6 @@ msgstr "se esiste"
msgid "always"
msgstr "sempre"
msgid "Use workaround for HWAccelerated OSD"
msgstr ""
msgid "Show Main Menu Entry"
msgstr "Hauptmenüeintrag anzeigen"
@ -900,39 +783,15 @@ msgstr "Scegli dall'elenco cartelle"
msgid "Use fixed folder"
msgstr "Usa cartella fissa"
msgid "smart"
msgstr "intelligente"
msgid "Instant recording:"
msgstr ""
msgid "Folder for instant Recordings"
msgstr "Cartella per la registrazione immediata"
msgid "Folder"
msgstr "Cartella"
msgid "Add episode to manual timers"
msgstr "Aggiungi episodi ai timer manuali"
msgid "Use Remotetimers"
msgstr "Usa Remotetimers"
msgid "Show timer confirmation messages"
msgstr ""
msgid "Favorites:"
msgstr ""
msgid "Limit channels in favorites"
msgstr "Limite dei canali nei favoriti"
msgid "Start Channel"
msgstr "Avvia il Canale"
msgid "Stop Channel"
msgstr "Ferma il Canale"
msgid "Use \"What's on now\" in favorites"
msgstr "Usa \"In programma ora\" nei favoriti"
@ -1068,6 +927,9 @@ msgstr "Überblick"
msgid "yes"
msgstr "Si"
msgid "no"
msgstr "No"
msgid "Adult"
msgstr "Per adulti"
@ -1097,12 +959,3 @@ msgstr "TheMovieDB Popularità"
msgid "TheMovieDB Vote Average"
msgstr "Voto medio di TheMovieDB"
#~ msgid "Number of allowed repeats"
#~ msgstr "Numero di ripetizioni permesse"
#~ msgid "Display advanced Options"
#~ msgstr "Mostra Opzioni avanzate"
#~ msgid "Hide advanced Options"
#~ msgstr "Nascondi Opzioni avanzate"

View File

@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: vdr-tvguide 1.0.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2022-04-29 16:05+0200\n"
"POT-Creation-Date: 2019-04-12 14:35+0200\n"
"PO-Revision-Date: 2013-09-25 17:49+0400\n"
"Last-Translator: AmiD, ilya\n"
"Language-Team: Russia-Cherepovets(wm.amid@gmail.com)\n"
@ -22,7 +22,7 @@ msgid "min"
msgstr "мин"
msgid "Reruns of "
msgstr "ПОВТОРЫ ЭТОЙ "
msgstr ""
msgid "No reruns found"
msgstr ""
@ -54,9 +54,6 @@ msgstr ""
msgid "images"
msgstr ""
msgid "tvguide: RemoteTimerModifications failed"
msgstr ""
msgid "root video folder"
msgstr "Главная видео директория"
@ -72,15 +69,6 @@ msgstr "все каналы"
msgid "unknown channel"
msgstr "неизвестный канал"
msgid "with"
msgstr ""
msgid "errors"
msgstr ""
msgid "error"
msgstr ""
msgid "Duration"
msgstr "Продолжительность"
@ -108,18 +96,21 @@ msgstr ""
msgid "recordings done"
msgstr ""
msgid "What's on now"
msgstr ""
msgid "What's on next"
msgstr ""
msgid "Instant Record"
msgstr "Записать"
msgid "Timer On/Off"
msgstr "таймер Вкл/Выкл"
msgid "Delete Timer"
msgstr "Удалить таймер"
msgid "Edit Timer"
msgstr "Редактировать таймер"
msgid "Delete Timer"
msgstr "Удалить таймер"
msgid "Timer Timeline"
msgstr ""
@ -150,9 +141,6 @@ msgstr "Искать в записях"
msgid "Set Folder for"
msgstr "Укажите каталог для"
msgid "Timer changed"
msgstr ""
msgid "Timer created"
msgstr "Таймер создан"
@ -177,14 +165,14 @@ msgstr "Да"
msgid "No"
msgstr "Нет"
msgid "Timer Conflicts"
msgstr "Таймер-конфликты"
msgid "One"
msgstr "Один"
msgid "detected"
msgstr "обнаружен"
msgid "Ignore Conflicts"
msgstr "Игнорировать конфликты"
msgid "Timer Conflicts"
msgstr "Таймер-конфликты"
msgid "Show conflict"
msgstr "Показать конфликты"
@ -192,6 +180,9 @@ msgstr "Показать конфликты"
msgid "timers involved"
msgstr "Таймер"
msgid "Ignore Conflicts"
msgstr "Игнорировать конфликты"
msgid "Ignore Conflict"
msgstr "Игнорировать конфликт"
@ -222,12 +213,6 @@ msgstr ""
msgid "replaced by rerun"
msgstr ""
msgid "Save"
msgstr "Сохранить"
msgid "Cancel"
msgstr "Отменить"
msgid "Timer Active"
msgstr "Таймер активен"
@ -252,11 +237,14 @@ msgstr ""
msgid "New Folder"
msgstr ""
msgid "Create Series Timer based on:"
msgstr "Настроить циклический таймер:"
msgid "Save"
msgstr "Сохранить"
msgid "Create Timer"
msgstr "Создать"
msgid "Cancel"
msgstr "Отменить"
msgid "Create Series Timer based on"
msgstr "Настроить циклический таймер"
msgid "Series Timer start time"
msgstr "Время с"
@ -270,6 +258,9 @@ msgstr "Дни недели"
msgid "Day to start"
msgstr "Начиная с"
msgid "Create Timer"
msgstr "Создать"
msgid "Series Timer created"
msgstr "Циклический таймер создан"
@ -279,17 +270,17 @@ msgstr "Старт"
msgid "Stop"
msgstr "Стоп"
msgid "Configure Search Timer based on:"
msgstr "Настроить поисковый таймер:"
msgid "Continue"
msgstr "Продолжить"
msgid "Configure Search Timer based on"
msgstr "Настроить поисковый таймер"
msgid "Search Expression:"
msgstr "Искать выражение:"
msgid "Configure Search Timer for Search String:"
msgstr "Настройка таймера поиска по ключевым словам:"
msgid "Continue"
msgstr "Продолжить"
msgid "Configure Search Timer for Search String"
msgstr "Настройка таймера поиска по ключевым словам"
msgid "Manually configure Options"
msgstr "Ручная настройка параметров"
@ -304,111 +295,87 @@ msgid "No Search Timers Configured"
msgstr ""
msgid "Configure Search Timer Options"
msgstr "Настроить параметры таймера"
msgstr ""
msgid "Save Search Timer"
msgstr ""
msgid "Search term"
msgid "Search String"
msgstr ""
msgid "Active"
msgstr ""
msgid "Search mode"
msgstr ""
msgid "Search Mode"
msgstr "Режим поиска"
msgid "Tolerance"
msgstr ""
msgid "Match case"
msgstr ""
msgid "Use title"
msgid "Use Title"
msgstr "Искать в названиях"
msgid "Use subtitle"
msgid "Use Subtitle"
msgstr "Искать в эпизодах"
msgid "Use description"
msgid "Use Description"
msgstr "Искать в описаниях"
msgid "Use channel"
msgid "Limit Channels"
msgstr "Ограничить список каналов"
msgid "from channel"
msgstr ""
msgid "to channel"
msgstr ""
msgid "Channel group"
msgstr ""
msgid "Use time"
msgid "Use Time"
msgstr "Время"
msgid "Display advanced Options"
msgstr ""
msgid "Limit Days of the Week"
msgstr ""
msgid "Time margin for start in minutes"
msgstr ""
msgid "Time margin for stop in minutes"
msgstr ""
msgid "Series Recording"
msgstr ""
msgid "Folder"
msgstr ""
msgid "Use VPS"
msgstr ""
msgid "Avoid Repeats"
msgstr ""
msgid "Use in Favorites"
msgstr ""
msgid "Hide advanced Options"
msgstr ""
msgid "Display Results for Search Timer"
msgstr "Тест"
msgid "Start Channel"
msgstr "С канала"
msgid "Stop Channel"
msgstr "По канал"
msgid "Channel Group"
msgstr ""
msgid "Start after"
msgstr "С"
msgid "Start before"
msgstr "До"
msgid "Use duration"
msgid "Select Days"
msgstr ""
msgid "Min. duration"
msgstr ""
msgid "Max. duration"
msgstr ""
msgid "Use day of week"
msgstr ""
msgid "Day of week"
msgstr ""
msgid "Use in Favorites"
msgstr ""
msgid "Use as search timer"
msgstr ""
msgid "Action"
msgstr ""
msgid "Switch ... minutes before start"
msgstr ""
msgid "Unmute sound"
msgstr ""
msgid "Ask ... minutes before start"
msgstr ""
msgid "Series Recording"
msgstr ""
msgid "Directory"
msgstr ""
msgid "Delete recordings after ... days"
msgstr ""
msgid "Keep ... recordings"
msgstr ""
msgid "Pause when ... recordings exist"
msgstr ""
msgid "Avoid Repeats"
msgstr ""
msgid "Allowed repeats"
msgstr ""
msgid "Only repeats within ... days"
msgid "Number of allowed repeats"
msgstr ""
msgid "Compare Title"
@ -420,33 +387,6 @@ msgstr ""
msgid "Compare Description"
msgstr ""
msgid "Min. match in %"
msgstr ""
msgid "Compare date"
msgstr ""
msgid "Time margin for start in minutes"
msgstr ""
msgid "Time margin for stop in minutes"
msgstr ""
msgid "Use VPS"
msgstr ""
msgid "Auto delete"
msgstr ""
msgid "after ... recordings"
msgstr ""
msgid "after ... days after first rec."
msgstr ""
msgid "Display Results for Search Timer"
msgstr "Тест"
msgid "Really delete Search Timer"
msgstr ""
@ -456,7 +396,7 @@ msgstr ""
msgid "Delete Search Timer and created Timers"
msgstr ""
msgid "Search Timer sucessfully created"
msgid "Search Timer sucessfully created."
msgstr "Поисковый таймер создан"
msgid "Search Timer update initialised"
@ -480,12 +420,12 @@ msgstr "Использовать другие шаблоны"
msgid "search results for Favorite"
msgstr ""
msgid "search results for Search Timer"
msgstr "Совпадений найдено"
msgid "search result for Favorite"
msgstr ""
msgid "search results for Search Timer"
msgstr "Совпадений найдено"
msgid "search result for Search Timer"
msgstr "Совпадение найдено"
@ -495,8 +435,8 @@ msgstr "Совпадений НЕ найдено"
msgid "Configure Options for Switchtimer"
msgstr "Настройка таймера переключения"
msgid "Create"
msgstr "Создать"
msgid "Minutes before switching"
msgstr "Минут до события"
msgid "switch"
msgstr "Переключить"
@ -507,12 +447,12 @@ msgstr "Только предупредить"
msgid "ask for switch"
msgstr "Спросить о переключении"
msgid "Minutes before switching"
msgstr "Минут до события"
msgid "Switch Mode"
msgstr "Режим переключения"
msgid "Create"
msgstr "Создать"
msgid "Switch Timer sucessfully created"
msgstr "Таймер переключения создан"
@ -522,12 +462,6 @@ msgstr "Таймер переключения НЕ был создан!"
msgid "Switch Timer deleted"
msgstr "Таймер переключения удален"
msgid "Perform Search"
msgstr "Найти"
msgid "Search Mode"
msgstr "Режим поиска"
msgid "Channel to Search"
msgstr "Канал для поиска"
@ -543,6 +477,9 @@ msgstr "Искать в описаниях"
msgid "Show Search Options"
msgstr "Показать параметры поиска"
msgid "Perform Search"
msgstr "Найти"
msgid "search results for"
msgstr "Найдено по запросу"
@ -558,12 +495,12 @@ msgstr ""
msgid "Found"
msgstr "Найдено"
msgid "recordings"
msgstr "записей"
msgid "recording"
msgstr "запись"
msgid "recordings"
msgstr "записей"
msgid "for"
msgstr "для"
@ -573,12 +510,6 @@ msgstr "Не найдено записей:"
msgid "No Favorites available"
msgstr ""
msgid "What's on now"
msgstr ""
msgid "What's on next"
msgstr ""
msgid "whole term must appear"
msgstr "фраза"
@ -594,57 +525,12 @@ msgstr "точное совпадение"
msgid "regular expression"
msgstr "регулярные выражения"
msgid "fuzzy"
msgstr ""
msgid "allow empty"
msgstr ""
msgid "Interval"
msgstr ""
msgid "Channel Group"
msgstr ""
msgid "only FTA"
msgstr ""
msgid "same day"
msgstr ""
msgid "same week"
msgstr ""
msgid "same month"
msgstr ""
msgid "Record"
msgstr ""
msgid "Announce by OSD"
msgstr ""
msgid "Switch only"
msgstr ""
msgid "Announce and switch"
msgstr ""
msgid "Announce by mail"
msgstr ""
msgid "Inactive record"
msgstr ""
msgid "no"
msgstr ""
msgid "count recordings"
msgstr ""
msgid "count days"
msgstr ""
msgid "General Settings"
msgstr "Основные настройки"
@ -690,9 +576,6 @@ msgstr "если существует"
msgid "always"
msgstr "всегда"
msgid "Use workaround for HWAccelerated OSD"
msgstr ""
msgid "Show Main Menu Entry"
msgstr "Показывать пункт в главном меню"
@ -769,7 +652,7 @@ msgid "Display time in EPG Grids"
msgstr "Показывать время в сетке EPG"
msgid "Height of Headers (Status Header and EPG View, Perc. of osd height)"
msgstr "Высота верхней панели (% от высоты OSD)"
msgstr ""
msgid "Height of Footer (Perc. of osd height)"
msgstr ""
@ -900,39 +783,15 @@ msgstr ""
msgid "Use fixed folder"
msgstr ""
msgid "smart"
msgstr ""
msgid "Instant recording:"
msgstr ""
msgid "Folder for instant Recordings"
msgstr "Использовать директории для быстрой записи"
msgid "Folder"
msgstr ""
msgid "Add episode to manual timers"
msgstr ""
msgid "Use Remotetimers"
msgstr "RemoteTimers benutzen"
msgid "Show timer confirmation messages"
msgstr ""
msgid "Favorites:"
msgstr ""
msgid "Limit channels in favorites"
msgstr ""
msgid "Start Channel"
msgstr "С канала"
msgid "Stop Channel"
msgstr "По канал"
msgid "Use \"What's on now\" in favorites"
msgstr ""
@ -1009,7 +868,7 @@ msgid "EPG Info"
msgstr ""
msgid "Reruns"
msgstr "ПОВТОРЫ"
msgstr ""
msgid "Recording Information"
msgstr ""
@ -1068,6 +927,9 @@ msgstr ""
msgid "yes"
msgstr ""
msgid "no"
msgstr ""
msgid "Adult"
msgstr ""

View File

@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: vdr-tvguide 1.1.0\n"
"Report-Msgid-Bugs-To: <see README>\n"
"POT-Creation-Date: 2022-04-29 16:05+0200\n"
"POT-Creation-Date: 2019-04-12 14:35+0200\n"
"PO-Revision-Date: 2013-09-15 00:12+0100\n"
"Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n"
"Language-Team: \n"
@ -22,7 +22,7 @@ msgid "min"
msgstr "min"
msgid "Reruns of "
msgstr "Repríza tohto "
msgstr ""
msgid "No reruns found"
msgstr ""
@ -54,9 +54,6 @@ msgstr ""
msgid "images"
msgstr ""
msgid "tvguide: RemoteTimerModifications failed"
msgstr ""
msgid "root video folder"
msgstr "Hlavný video adresár"
@ -72,15 +69,6 @@ msgstr "v
msgid "unknown channel"
msgstr "neznámy Kanal"
msgid "with"
msgstr ""
msgid "errors"
msgstr ""
msgid "error"
msgstr ""
msgid "Duration"
msgstr "Då¾ka"
@ -108,18 +96,21 @@ msgstr ""
msgid "recordings done"
msgstr ""
msgid "What's on now"
msgstr ""
msgid "What's on next"
msgstr ""
msgid "Instant Record"
msgstr "Okam¾ite nahra»"
msgid "Timer On/Off"
msgstr "Zap./Vyp. plán nahrávania"
msgid "Delete Timer"
msgstr "Vymaza» plán nahrávania"
msgid "Edit Timer"
msgstr "Upravi» plán nahrávania"
msgid "Delete Timer"
msgstr "Vymaza» plán nahrávania"
msgid "Timer Timeline"
msgstr ""
@ -150,9 +141,6 @@ msgstr "Vyh
msgid "Set Folder for"
msgstr "Nastavi» adresár pre"
msgid "Timer changed"
msgstr ""
msgid "Timer created"
msgstr "Plán vytvorený"
@ -177,14 +165,14 @@ msgstr "
msgid "No"
msgstr "Nie"
msgid "Timer Conflicts"
msgstr "Konflikty plánov"
msgid "One"
msgstr "Jeden"
msgid "detected"
msgstr "nájdených"
msgid "Ignore Conflicts"
msgstr "Ignorova» konflikty"
msgid "Timer Conflicts"
msgstr "Konflikty plánov"
msgid "Show conflict"
msgstr "Zobrazi» konflikt"
@ -192,6 +180,9 @@ msgstr "Zobrazi
msgid "timers involved"
msgstr "plány komplikované"
msgid "Ignore Conflicts"
msgstr "Ignorova» konflikty"
msgid "Ignore Conflict"
msgstr "Ignorova» konflikt"
@ -222,12 +213,6 @@ msgstr ""
msgid "replaced by rerun"
msgstr ""
msgid "Save"
msgstr "Ulo¾i»"
msgid "Cancel"
msgstr "Zru¹i»"
msgid "Timer Active"
msgstr "Plán aktívny"
@ -252,11 +237,14 @@ msgstr ""
msgid "New Folder"
msgstr ""
msgid "Create Series Timer based on:"
msgstr "Vytvorenie plánu na základe série:"
msgid "Save"
msgstr "Ulo¾i»"
msgid "Create Timer"
msgstr "Vytvori» plán"
msgid "Cancel"
msgstr "Zru¹i»"
msgid "Create Series Timer based on"
msgstr "Vytvorenie plánu na základe série"
msgid "Series Timer start time"
msgstr "Sériový plán zaèína"
@ -270,6 +258,9 @@ msgstr "Dni"
msgid "Day to start"
msgstr "Zaèína dòa"
msgid "Create Timer"
msgstr "Vytvori» plán"
msgid "Series Timer created"
msgstr "Vytvorený sériový plán"
@ -279,17 +270,17 @@ msgstr "
msgid "Stop"
msgstr "Stop"
msgid "Configure Search Timer based on:"
msgstr "Vyhµadávanie plánu nastavi» na základe:"
msgid "Continue"
msgstr "Ïal¹ie"
msgid "Configure Search Timer based on"
msgstr "Vyhµadávanie plánu nastavi» na základe"
msgid "Search Expression:"
msgstr "Hµadaný výraz:"
msgid "Configure Search Timer for Search String:"
msgstr "Konfigurácia vyhµadávania plánu pre hµadané kµúèové slovo:"
msgid "Continue"
msgstr "Ïal¹ie"
msgid "Configure Search Timer for Search String"
msgstr "Konfigurácia vyhµadávania plánu pre hµadané kµúèové slovo "
msgid "Manually configure Options"
msgstr "Ruène konfigurova» mo¾nosti"
@ -309,106 +300,82 @@ msgstr ""
msgid "Save Search Timer"
msgstr ""
msgid "Search term"
msgid "Search String"
msgstr ""
msgid "Active"
msgstr ""
msgid "Search mode"
msgstr ""
msgid "Search Mode"
msgstr "Re¾im vyhµadávania"
msgid "Tolerance"
msgstr ""
msgid "Match case"
msgstr ""
msgid "Use title"
msgid "Use Title"
msgstr "Pou¾i» názov"
msgid "Use subtitle"
msgid "Use Subtitle"
msgstr "Pou¾i» titulky"
msgid "Use description"
msgid "Use Description"
msgstr "Pou¾i» popis"
msgid "Use channel"
msgid "Limit Channels"
msgstr "Obmedzi» kanály"
msgid "from channel"
msgstr ""
msgid "to channel"
msgstr ""
msgid "Channel group"
msgstr ""
msgid "Use time"
msgid "Use Time"
msgstr "Pou¾i» èas"
msgid "Display advanced Options"
msgstr ""
msgid "Limit Days of the Week"
msgstr ""
msgid "Time margin for start in minutes"
msgstr ""
msgid "Time margin for stop in minutes"
msgstr ""
msgid "Series Recording"
msgstr ""
msgid "Folder"
msgstr ""
msgid "Use VPS"
msgstr ""
msgid "Avoid Repeats"
msgstr ""
msgid "Use in Favorites"
msgstr ""
msgid "Hide advanced Options"
msgstr ""
msgid "Display Results for Search Timer"
msgstr "Pozrie» výsledky pre vyhµadávanie plánov"
msgid "Start Channel"
msgstr "Od kanálu"
msgid "Stop Channel"
msgstr "Po kanál"
msgid "Channel Group"
msgstr ""
msgid "Start after"
msgstr "Zaèiatok po"
msgid "Start before"
msgstr "Zaèiatok pred"
msgid "Use duration"
msgid "Select Days"
msgstr ""
msgid "Min. duration"
msgstr ""
msgid "Max. duration"
msgstr ""
msgid "Use day of week"
msgstr ""
msgid "Day of week"
msgstr ""
msgid "Use in Favorites"
msgstr ""
msgid "Use as search timer"
msgstr ""
msgid "Action"
msgstr ""
msgid "Switch ... minutes before start"
msgstr ""
msgid "Unmute sound"
msgstr ""
msgid "Ask ... minutes before start"
msgstr ""
msgid "Series Recording"
msgstr ""
msgid "Directory"
msgstr ""
msgid "Delete recordings after ... days"
msgstr ""
msgid "Keep ... recordings"
msgstr ""
msgid "Pause when ... recordings exist"
msgstr ""
msgid "Avoid Repeats"
msgstr ""
msgid "Allowed repeats"
msgstr ""
msgid "Only repeats within ... days"
msgid "Number of allowed repeats"
msgstr ""
msgid "Compare Title"
@ -420,33 +387,6 @@ msgstr ""
msgid "Compare Description"
msgstr ""
msgid "Min. match in %"
msgstr ""
msgid "Compare date"
msgstr ""
msgid "Time margin for start in minutes"
msgstr ""
msgid "Time margin for stop in minutes"
msgstr ""
msgid "Use VPS"
msgstr ""
msgid "Auto delete"
msgstr ""
msgid "after ... recordings"
msgstr ""
msgid "after ... days after first rec."
msgstr ""
msgid "Display Results for Search Timer"
msgstr "Pozrie» výsledky pre vyhµadávanie plánov"
msgid "Really delete Search Timer"
msgstr ""
@ -456,8 +396,8 @@ msgstr ""
msgid "Delete Search Timer and created Timers"
msgstr ""
msgid "Search Timer sucessfully created"
msgstr "Vyhµadávaè plánu vytvorený"
msgid "Search Timer sucessfully created."
msgstr "Vyhµadávaè plánu vytvorený."
msgid "Search Timer update initialised"
msgstr "Vyhladávaè plánu inicializovaný"
@ -480,12 +420,12 @@ msgstr "Pou
msgid "search results for Favorite"
msgstr ""
msgid "search results for Search Timer"
msgstr "nájdené výsledky vyhµadávania plánu"
msgid "search result for Favorite"
msgstr ""
msgid "search results for Search Timer"
msgstr "nájdené výsledky vyhµadávania plánu"
msgid "search result for Search Timer"
msgstr "nájdený výsledok vyhµadávania plánu"
@ -495,8 +435,8 @@ msgstr "H
msgid "Configure Options for Switchtimer"
msgstr "Konfigurova» mo¾nosti pre prepínací plán"
msgid "Create"
msgstr "Vytvori»"
msgid "Minutes before switching"
msgstr "Minúty pred prepnutím"
msgid "switch"
msgstr "Prepnú»"
@ -507,12 +447,12 @@ msgstr "iba ozn
msgid "ask for switch"
msgstr "opýta» sa na prepnutie"
msgid "Minutes before switching"
msgstr "Minúty pred prepnutím"
msgid "Switch Mode"
msgstr "Prepínací re¾im"
msgid "Create"
msgstr "Vytvori»"
msgid "Switch Timer sucessfully created"
msgstr "Prepnutie je naplánované"
@ -522,12 +462,6 @@ msgstr "Pl
msgid "Switch Timer deleted"
msgstr "Plán prepnutia vymazaný"
msgid "Perform Search"
msgstr "Vykona» vyhµadávanie"
msgid "Search Mode"
msgstr "Re¾im vyhµadávania"
msgid "Channel to Search"
msgstr "Hµada» na kanále"
@ -543,6 +477,9 @@ msgstr "H
msgid "Show Search Options"
msgstr "Zobrazi» mo¾nosti vyhµadávania"
msgid "Perform Search"
msgstr "Vykona» vyhµadávanie"
msgid "search results for"
msgstr "vyhµadané výsledky pre"
@ -558,12 +495,12 @@ msgstr ""
msgid "Found"
msgstr "Nájdené"
msgid "recordings"
msgstr "nahrávky"
msgid "recording"
msgstr "nahrávka"
msgid "recordings"
msgstr "nahrávky"
msgid "for"
msgstr "pre"
@ -573,12 +510,6 @@ msgstr "Nena
msgid "No Favorites available"
msgstr ""
msgid "What's on now"
msgstr ""
msgid "What's on next"
msgstr ""
msgid "whole term must appear"
msgstr "kompletný výraz"
@ -594,57 +525,12 @@ msgstr "presn
msgid "regular expression"
msgstr "regulárny výraz"
msgid "fuzzy"
msgstr ""
msgid "allow empty"
msgstr ""
msgid "Interval"
msgstr ""
msgid "Channel Group"
msgstr ""
msgid "only FTA"
msgstr ""
msgid "same day"
msgstr ""
msgid "same week"
msgstr ""
msgid "same month"
msgstr ""
msgid "Record"
msgstr ""
msgid "Announce by OSD"
msgstr ""
msgid "Switch only"
msgstr ""
msgid "Announce and switch"
msgstr ""
msgid "Announce by mail"
msgstr ""
msgid "Inactive record"
msgstr ""
msgid "no"
msgstr ""
msgid "count recordings"
msgstr ""
msgid "count days"
msgstr ""
msgid "General Settings"
msgstr "V¹eobecné nastavenia"
@ -690,9 +576,6 @@ msgstr "ak s
msgid "always"
msgstr "v¾dy"
msgid "Use workaround for HWAccelerated OSD"
msgstr ""
msgid "Show Main Menu Entry"
msgstr "Zobrazi» v hlavnom menu"
@ -769,7 +652,7 @@ msgid "Display time in EPG Grids"
msgstr "Zobrazi» èas v EPG mrie¾ke"
msgid "Height of Headers (Status Header and EPG View, Perc. of osd height)"
msgstr "Vý¹ka stavovej hlavièky (% z OSD vý¹ky)"
msgstr ""
msgid "Height of Footer (Perc. of osd height)"
msgstr ""
@ -900,39 +783,15 @@ msgstr ""
msgid "Use fixed folder"
msgstr ""
msgid "smart"
msgstr "chytrý"
msgid "Instant recording:"
msgstr ""
msgid "Folder for instant Recordings"
msgstr "Pou¾i» adresáre pre okam¾ité nahrávky"
msgid "Folder"
msgstr ""
msgid "Add episode to manual timers"
msgstr "Prida¿ epizódy do ru¿ného ¿asova¿a"
msgid "Use Remotetimers"
msgstr "Pou¾i» vzdialený plánovaè"
msgid "Show timer confirmation messages"
msgstr ""
msgid "Favorites:"
msgstr ""
msgid "Limit channels in favorites"
msgstr ""
msgid "Start Channel"
msgstr "Od kanálu"
msgid "Stop Channel"
msgstr "Po kanál"
msgid "Use \"What's on now\" in favorites"
msgstr ""
@ -1009,7 +868,7 @@ msgid "EPG Info"
msgstr ""
msgid "Reruns"
msgstr "Repríza"
msgstr ""
msgid "Recording Information"
msgstr ""
@ -1068,6 +927,9 @@ msgstr ""
msgid "yes"
msgstr ""
msgid "no"
msgstr ""
msgid "Adult"
msgstr ""

View File

@ -1,4 +1,4 @@
#define DISABLE_TEMPLATES_COLLIDING_WITH_STL
#define __STL_CONFIG_H
#include <string>
#include <sstream>
@ -44,7 +44,7 @@ bool cRecManager::RefreshRemoteTimers(void) {
bool cRecManager::CheckEventForTimer(const cEvent *event) {
bool hasTimer = false;
if (config.useRemoteTimers && pRemoteTimers) {
if (tvguideConfig.useRemoteTimers && pRemoteTimers) {
RemoteTimers_GetMatch_v1_0 rtMatch;
rtMatch.event = event;
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 *timer = NULL;
if (config.useRemoteTimers && pRemoteTimers) {
if (tvguideConfig.useRemoteTimers && pRemoteTimers) {
RemoteTimers_GetMatch_v1_0 rtMatch;
rtMatch.event = event;
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 *timer = NULL;
if (config.useRemoteTimers && pRemoteTimers) {
if (tvguideConfig.useRemoteTimers && pRemoteTimers) {
timer = createRemoteTimer(event, path);
} else {
timer = createLocalTimer(event, path);
@ -96,15 +96,13 @@ cTimer *cRecManager::createTimer(const cEvent *event, std::string path) {
cTimer *cRecManager::createLocalTimer(const cEvent *event, std::string path) {
cTimer *timer = new cTimer(event);
#if VDRVERSNUM >= 20301
LOCK_TIMERS_WRITE;
cTimers* timers = Timers;
timers->SetExplicitModify();
if (Setup.SVDRPPeering && *Setup.SVDRPDefaultHost)
timer->SetRemote(Setup.SVDRPDefaultHost);
((cTimer*)timer)->SetRemote(Setup.SVDRPDefaultHost);
LOCK_TIMERS_WRITE;
cTimer *t = Timers->GetTimer(timer);
#else
cTimers* timers = &Timers;
cTimer *t = Timers.GetTimer(timer);
#endif
cTimer *t = timers->GetTimer(timer);
if (t) {
t->OnOff();
#if VDRVERSNUM >= 20301
@ -116,21 +114,20 @@ cTimer *cRecManager::createLocalTimer(const cEvent *event, std::string path) {
timer = t;
isyslog("timer %s reactivated", *t->ToDescr());
} else {
SetTimerPath(timer, event, path);
timers->Add(timer);
timers->SetModified();
#if VDRVERSNUM >= 20301
if (!HandleRemoteTimerModifications(timer)) {
timers->Del(timer);
esyslog(tr("tvguide: RemoteTimerModifications failed"));
} else {
isyslog("timer %s added (active)", *timer->ToDescr());
}
Timers->Add(timer);
#else
isyslog("timer %s added (active)", *timer->ToDescr());
Timers.Add(timer);
#endif
isyslog("timer %s added (active)", *timer->ToDescr());
}
return timers->GetTimer(timer);
SetTimerPath(timer, event, path);
#if VDRVERSNUM >= 20301
Timers->SetModified();
#else
Timers.SetModified();
#endif
return timer;
}
cTimer *cRecManager::createRemoteTimer(const cEvent *event, std::string path) {
@ -153,9 +150,9 @@ cTimer *cRecManager::createRemoteTimer(const cEvent *event, std::string path) {
}
void cRecManager::SetTimerPath(cTimer *timer, const cEvent *event, std::string path) {
if (config.instRecFolderMode == eFolderFixed) {
if (tvguideConfig.instRecFolderMode == eFolderFixed) {
Epgsearch_services_v1_2 *epgSearch = new Epgsearch_services_v1_2;
std::string recDir = config.instRecFixedFolder;
std::string recDir = tvguideConfig.instRecFixedFolder;
std::replace(recDir.begin(), recDir.end(), '/', '~');
if (strchr(recDir.c_str(), '%') != NULL) {
if (epgSearchPlugin->Service("Epgsearch-services-v1.1", epgSearch)) {
@ -175,33 +172,35 @@ void cRecManager::SetTimerPath(cTimer *timer, const cEvent *event, std::string p
return;
}
//Set choosen path
bool addSubtitle = false;
if (!isempty(event->ShortText())) { // add subtitle if present
addSubtitle = (config.addSubtitleToTimer != addSubtitleNever);
if (config.addSubtitleToTimer == addSubtitleSmart)
if (event->Duration() > 80 * 60)
addSubtitle = false;
}
cString newFileName;
if (path.size() > 0) {
std::replace(path.begin(), path.end(), '/', '~');
if (addSubtitle)
newFileName = cString::sprintf("%s~%s~%s", path.c_str(), event->Title(), event->ShortText());
else
newFileName = cString::sprintf("%s~%s", path.c_str(), timer->File());
} else {
if (addSubtitle)
newFileName = cString::sprintf("%s~%s", event->Title(), event->ShortText());
else
newFileName = event->Title();
}
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) {
if (!event)
return;
if (config.useRemoteTimers && pRemoteTimers) {
if (tvguideConfig.useRemoteTimers && pRemoteTimers) {
DeleteRemoteTimer(event);
} else {
DeleteLocalTimer(event);
@ -227,19 +226,12 @@ void cRecManager::DeleteTimer(const cTimer *timer) {
#if VDRVERSNUM >= 20301
LOCK_TIMERS_WRITE;
cTimers* timers = Timers;
if (timer && timer->Remote() && !timer->Recording()) {
if (HandleRemoteTimerModifications(NULL, (cTimer*)timer)) {
timers->Del((cTimer*)timer);
}
timers->SetModified();
}
cTimer* t = timers->GetTimer(timer);
#else
cTimers* timers = &Timers;
cTimer* t = timers->GetTimer((cTimer*)timer);
#endif
if (!t)
return;
if (t->Recording()) {
t->Skip();
#if VDRVERSNUM >= 20301
@ -267,51 +259,24 @@ void cRecManager::DeleteRemoteTimer(const cEvent *event) {
}
}
void cRecManager::OnOffTimer(const cEvent *event) {
const cTimer *t;
#if VDRVERSNUM >= 20301
{
LOCK_TIMERS_READ;
t = Timers->GetMatch(event);
}
#else
t = Timers.GetMatch(event);
#endif
if (!t)
return;
SaveTimer(t);
}
void cRecManager::SaveTimer(const cTimer *t, cTimer *newTimerSettings) {
void cRecManager::SaveTimer(const cTimer *t, cTimer newTimerSettings) {
if (!t)
return;
#if VDRVERSNUM >= 20301
LOCK_TIMERS_WRITE;
cTimers* timers = Timers;
timers->SetExplicitModify();
if (t && t->Remote()) {
if (!HandleRemoteTimerModifications(newTimerSettings, (cTimer *)t)) {
esyslog(tr("tvguide: RemoteTimerModifications failed"));
}
}
cTimer *timer = timers->GetTimer(t);
cTimer *timer = Timers->GetTimer(t);
#else
cTimers* timers = &Timers;
cTimer *timer = timers->GetTimer((cTimer *)t);
cTimer *timer = Timers.GetTimer((cTimer*)t);
#endif
if (!timer) {
return;
}
bool active = true;
if (newTimerSettings) {
int prio = newTimerSettings->Priority();
int lifetime = newTimerSettings->Lifetime();
time_t day = newTimerSettings->Day();
int start = newTimerSettings->Start();
int stop = newTimerSettings->Stop();
std::string fileName = newTimerSettings->File();
bool active = newTimerSettings.HasFlags(tfActive);
int prio = newTimerSettings.Priority();
int lifetime = newTimerSettings.Lifetime();
time_t day = newTimerSettings.Day();
int start = newTimerSettings.Start();
int stop = newTimerSettings.Stop();
std::string fileName = newTimerSettings.File();
timer->SetDay(day);
timer->SetStart(start);
@ -320,29 +285,30 @@ void cRecManager::SaveTimer(const cTimer *t, cTimer *newTimerSettings) {
timer->SetLifetime(lifetime);
timer->SetFile(fileName.c_str());
active = newTimerSettings->HasFlags(tfActive);
} else
active = !timer->HasFlags(tfActive);
if (active)
timer->SetFlags(tfActive);
else
if (timer->HasFlags(tfActive) && !active)
timer->ClrFlags(tfActive);
else if (!timer->HasFlags(tfActive) && active)
timer->SetFlags(tfActive);
#if VDRVERSNUM < 20300
timer->SetEventFromSchedule();
#endif
if (config.useRemoteTimers && pRemoteTimers) {
if (tvguideConfig.useRemoteTimers && pRemoteTimers) {
RemoteTimers_Timer_v1_0 rt;
rt.timer = timer;
if (!pRemoteTimers->Service("RemoteTimers::ModTimer-v1.0", &rt))
rt.timer = NULL;
RefreshRemoteTimers();
} else {
timers->SetModified();
#if VDRVERSNUM >= 20301
Timers->SetModified();
#else
Timers.SetModified();
#endif
}
}
bool cRecManager::IsRecorded(const cEvent *event) {
#if VDRVERSNUM >= 20301
LOCK_TIMERS_WRITE;
@ -375,10 +341,11 @@ cTVGuideTimerConflicts *cRecManager::CheckTimerConflict(void) {
}
void cRecManager::CreateSeriesTimer(cTimer *seriesTimer) {
#if VDRVERSNUM < 20300
#if VDRVERSNUM >= 20301
#else
seriesTimer->SetEventFromSchedule();
#endif
if (config.useRemoteTimers && pRemoteTimers) {
if (tvguideConfig.useRemoteTimers && pRemoteTimers) {
RemoteTimers_Timer_v1_0 rt;
rt.timer = seriesTimer;
if (!pRemoteTimers->Service("RemoteTimers::NewTimer-v1.0", &rt))
@ -388,11 +355,12 @@ void cRecManager::CreateSeriesTimer(cTimer *seriesTimer) {
#if VDRVERSNUM >= 20301
LOCK_TIMERS_WRITE;
cTimers* timers = Timers;
#else
cTimers* timers = &Timers;
#endif
timers->Add(seriesTimer);
timers->SetModified();
#else
Timers.Add(seriesTimer);
Timers.SetModified();
#endif
}
}
@ -527,52 +495,22 @@ void cRecManager::GetSearchTimers(std::vector<cTVGuideSearchTimer> *searchTimer)
std::sort(searchTimer->begin(), searchTimer->end());
}
void cRecManager::GetSearchExtCats(std::vector<std::string> *searchExtCats) {
if (!epgSearchAvailable) {
return;
}
Epgsearch_services_v1_1 *epgSearch = new Epgsearch_services_v1_1;
if (epgSearchPlugin->Service("Epgsearch-services-v1.1", epgSearch)) {
std::list<std::string> list;
list = epgSearch->handler->ExtEPGInfoList();
for (std::list<std::string>::iterator it = list.begin(); it != list.end(); it++) {
searchExtCats->push_back(*it);
}
}
}
void cRecManager::GetChannelGroups(std::vector<std::string> *channelGroups) {
if (!epgSearchAvailable) {
return;
}
Epgsearch_services_v1_1 *epgSearch = new Epgsearch_services_v1_1;
if (epgSearchPlugin->Service("Epgsearch-services-v1.1", epgSearch)) {
std::list<std::string> list;
list = epgSearch->handler->ChanGrpList();
std::list<std::string> channelGroupList;
channelGroupList = epgSearch->handler->ChanGrpList();
for (std::list<std::string>::iterator it = list.begin(); it != list.end(); it++) {
for (std::list<std::string>::iterator it = channelGroupList.begin(); it != channelGroupList.end(); it++) {
channelGroups->push_back(*it);
}
}
std::sort(channelGroups->begin(), channelGroups->end());
}
void cRecManager::GetBlacklists(std::vector<std::string> *blacklists) {
if (!epgSearchAvailable) {
return;
}
Epgsearch_services_v1_1 *epgSearch = new Epgsearch_services_v1_1;
if (epgSearchPlugin->Service("Epgsearch-services-v1.1", epgSearch)) {
std::list<std::string> list;
list = epgSearch->handler->BlackList();
for (std::list<std::string>::iterator it = list.begin(); it != list.end(); it++) {
blacklists->push_back(*it);
}
}
}
int cRecManager::CreateSearchTimer(std::string epgSearchString) {
int timerID = -1;
if (!epgSearchAvailable)
@ -629,7 +567,7 @@ void cRecManager::DeleteSearchTimer(cTVGuideSearchTimer *searchTimer, bool delTi
timers = &Timers;
#endif
cTimer *timer = timers->First();
while (timer) {
while(timer) {
if (!timer->Recording()) {
char* searchID = GetAuxValue(timer, "s-id");
if (searchID) {
@ -653,9 +591,9 @@ void cRecManager::DeleteSearchTimer(cTVGuideSearchTimer *searchTimer, bool delTi
if (epgSearchPlugin->Service("Epgsearch-services-v1.1", epgSearch)) {
bool success = epgSearch->handler->DelSearchTimer(searchTimerID);
if (success) {
esyslog("tvguide: search timer \"%s\" sucessfully deleted", searchTimer->GetSearchString().c_str());
esyslog("tvguide: search timer \"%s\" sucessfully deleted", searchTimer->SearchString().c_str());
} else {
esyslog("tvguide: error deleting search timer \"%s\"", searchTimer->GetSearchString().c_str());
esyslog("tvguide: error deleting search timer \"%s\"", searchTimer->SearchString().c_str());
}
}
}
@ -758,8 +696,8 @@ const cEvent **cRecManager::LoadReruns(const cEvent *event, int &numResults) {
if (epgSearchAvailable && !isempty(event->Title())) {
Epgsearch_searchresults_v1_0 data;
std::string strQuery = event->Title();
if (config.useSubtitleRerun > 0) {
if (config.useSubtitleRerun == 2 || !isempty(event->ShortText()))
if (tvguideConfig.useSubtitleRerun > 0) {
if (tvguideConfig.useSubtitleRerun == 2 || !isempty(event->ShortText()))
strQuery += "~";
if (!isempty(event->ShortText()))
strQuery += event->ShortText();
@ -821,23 +759,31 @@ const cEvent **cRecManager::WhatsOnNow(bool nowOrNext, int &numResults) {
std::vector<const cEvent*> tmpResults;
#if VDRVERSNUM >= 20301
LOCK_CHANNELS_READ;
const cChannels* channels = Channels;
LOCK_SCHEDULES_READ;
const cSchedules* schedules = Schedules;
#else
cChannels* channels = &Channels;
cSchedulesLock schedulesLock;
const cSchedules *schedules = cSchedules::Schedules(schedulesLock);
#endif
const cChannel *startChannel = NULL, *stopChannel = NULL;
if (config.favLimitChannels) {
startChannel = channels->GetByNumber(config.favStartChannel);
stopChannel = channels->GetByNumber(config.favStopChannel);
if (tvguideConfig.favLimitChannels) {
#if VDRVERSNUM >= 20301
startChannel = Channels->GetByNumber(tvguideConfig.favStartChannel);
stopChannel = Channels->GetByNumber(tvguideConfig.favStopChannel);
}
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;
const cSchedule *Schedule = schedules->GetSchedule(channel);
if (!Schedule) continue;
@ -866,13 +812,13 @@ const cEvent **cRecManager::UserDefinedTime(int userTime, int &numResults) {
std::vector<const cEvent*> tmpResults;
int favTime = 0;
if (userTime == 1) {
favTime = config.favTime1;
favTime = tvguideConfig.favTime1;
} else if (userTime == 2) {
favTime = config.favTime2;
favTime = tvguideConfig.favTime2;
} else if (userTime == 3) {
favTime = config.favTime3;
favTime = tvguideConfig.favTime3;
} else if (userTime == 4) {
favTime = config.favTime4;
favTime = tvguideConfig.favTime4;
}
time_t now = time(0);
@ -889,23 +835,32 @@ const cEvent **cRecManager::UserDefinedTime(int userTime, int &numResults) {
#if VDRVERSNUM >= 20301
LOCK_CHANNELS_READ;
const cChannels* channels = Channels;
LOCK_SCHEDULES_READ;
// const cChannels* channels = Channels;
const cSchedules* schedules = Schedules;
#else
cChannels* channels = &Channels;
cSchedulesLock schedulesLock;
const cSchedules *schedules = cSchedules::Schedules(schedulesLock);
#endif
const cChannel *startChannel = NULL, *stopChannel = NULL;
if (config.favLimitChannels) {
startChannel = channels->GetByNumber(config.favStartChannel);
stopChannel = channels->GetByNumber(config.favStopChannel);
if (tvguideConfig.favLimitChannels) {
#if VDRVERSNUM >= 20301
startChannel = Channels->GetByNumber(tvguideConfig.favStartChannel);
stopChannel = Channels->GetByNumber(tvguideConfig.favStopChannel);
}
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;
const cSchedule *Schedule = schedules->GetSchedule(channel);
if (!Schedule) continue;

View File

@ -33,12 +33,12 @@ public:
cTimer *createLocalTimer(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 OnOffTimer(const cEvent *event);
void DeleteTimer(const cTimer *timer);
void DeleteTimer(int timerID);
void DeleteTimer(const cEvent *event);
void DeleteLocalTimer(const cEvent *event);
void DeleteRemoteTimer(const cEvent *event);
void SaveTimer(const cTimer *timer, cTimer *newTimerSettings = NULL);
void SaveTimer(const cTimer *timer, cTimer newTimerSettings);
bool IsRecorded(const cEvent *event);
cTVGuideTimerConflicts *CheckTimerConflict(void);
void CreateSeriesTimer(cTimer *seriesTimer);
@ -46,9 +46,7 @@ public:
const cEvent **PerformSearch(Epgsearch_searchresults_v1_0 data, int &numResults);
void ReadEPGSearchTemplates(std::vector<TVGuideEPGSearchTemplate> *epgTemplates);
void GetSearchTimers(std::vector<cTVGuideSearchTimer> *timers);
void GetSearchExtCats(std::vector<std::string> *searchExtCats);
void GetChannelGroups(std::vector<std::string> *channelGroups);
void GetBlacklists(std::vector<std::string> *blacklists);
int CreateSearchTimer(std::string epgSearchString);
bool SaveSearchTimer(cTVGuideSearchTimer *searchTimer);
void DeleteSearchTimer(cTVGuideSearchTimer *searchTimer, bool delTimers);

128
recmenu.c
View File

@ -5,7 +5,7 @@
cRecMenu::cRecMenu(void) {
border = geoManager.borderRecMenus;
height = 2 * border;
height = 2*border;
headerHeight = 0;
footerHeight = 0;
currentHeight = 0;
@ -28,7 +28,7 @@ cRecMenu::~cRecMenu(void) {
if (footer)
delete footer;
if (pixmapScrollBar)
osdManager.DestroyPixmap(pixmapScrollBar);
osdManager.releasePixmap(pixmapScrollBar);
if (imgScrollBar)
delete imgScrollBar;
}
@ -54,53 +54,49 @@ int cRecMenu::CalculateOptimalWidth(void) {
}
bool cRecMenu::CalculateHeight(bool reDraw) {
int newHeight = 2 * border;
bool returnvalue = false;
if (header) {
int newHeight = 2*border;
if (header)
newHeight += headerHeight;
}
for (std::list<cRecMenuItem*>::iterator item = menuItems.begin(); item != menuItems.end(); item++) {
newHeight += (*item)->GetHeight();
}
if (footer) {
if (footer)
newHeight += footerHeight;
}
y = (geoManager.osdHeight - newHeight) / 2;
if (newHeight != height) {
height = newHeight;
returnvalue = true;
}
if (scrollable && !reDraw) {
width += scrollbarWidth + border;
returnvalue = true;
}
return returnvalue;
return true;
}
return false;
}
void cRecMenu::CreatePixmap(void) {
if (pixmap)
osdManager.DestroyPixmap(pixmap);
pixmap = osdManager.CreatePixmap(3, cRect(x, y, width, height));
osdManager.releasePixmap(pixmap);
pixmap = osdManager.requestPixmap(3, cRect(x, y, width, height));
if (scrollable) {
int scrollBarX = x + width - scrollbarWidth - border;
int scrollBarY = y + border + headerHeight;
int scrollBarHeight = height - headerHeight - footerHeight - 2 * border;
if (pixmapScrollBar)
osdManager.DestroyPixmap(pixmapScrollBar);
pixmapScrollBar = osdManager.CreatePixmap(4, cRect(scrollBarX, scrollBarY, scrollbarWidth, scrollBarHeight));
osdManager.releasePixmap(pixmapScrollBar);
pixmapScrollBar = osdManager.requestPixmap(4, cRect(scrollBarX, scrollBarY, scrollbarWidth, scrollBarHeight));
} else
pixmapScrollBar = NULL;
}
void cRecMenu::AddHeader(cRecMenuItem *header) {
void cRecMenu::SetHeader(cRecMenuItem *header) {
this->header = header;
headerHeight = header->GetHeight();
height += headerHeight;
}
void cRecMenu::AddFooter(cRecMenuItem *footer) {
void cRecMenu::SetFooter(cRecMenuItem *footer) {
this->footer = footer;
footerHeight = footer->GetHeight();
height += footerHeight;
@ -121,11 +117,12 @@ void cRecMenu::InitMenu(bool complete) {
numItems = 0;
if (scrollable) {
width -= scrollbarWidth + border;
osdManager.DestroyPixmap(pixmapScrollBar);
osdManager.releasePixmap(pixmapScrollBar);
pixmapScrollBar = NULL;
DELETENULL(imgScrollBar);
delete imgScrollBar;
imgScrollBar = NULL;
}
osdManager.DestroyPixmap(pixmap);
osdManager.releasePixmap(pixmap);
pixmap = NULL;
for (std::list<cRecMenuItem*>::iterator it = menuItems.begin(); it != menuItems.end(); it++) {
if (deleteMenuItems)
@ -144,6 +141,7 @@ void cRecMenu::InitMenu(bool complete) {
}
void cRecMenu::AddMenuItem(cRecMenuItem *item, bool inFront) {
item->Show();
if (!inFront)
@ -155,7 +153,7 @@ void cRecMenu::AddMenuItem(cRecMenuItem *item, bool inFront) {
bool cRecMenu::AddMenuItemInitial(cRecMenuItem *item, bool inFront) {
currentHeight += item->GetHeight();
int totalHeight = headerHeight + footerHeight + currentHeight + 2*border;
if (totalHeight >= geoManager.osdHeight - 80) {
if (totalHeight >= geoManager.osdHeight - 10) {
scrollable = true;
currentHeight -= item->GetHeight();
if (deleteMenuItems) {
@ -178,14 +176,14 @@ void cRecMenu::Activate(cRecMenuItem *itemOld, cRecMenuItem *item) {
itemOld->setInactive();
itemOld->setBackground();
itemOld->Draw();
item->SetActive();
item->setActive();
item->setBackground();
item->Draw();
}
bool cRecMenu::ActivatePrev(void) {
cRecMenuItem *activeItem = GetActiveMenuItem();
if (!scrollable && footer && footer->IsActive()) {
if (!scrollable && footer && footer->isActive()) {
if (menuItems.size() > 0) {
cRecMenuItem *itemLast = menuItems.back();
Activate(footer, itemLast);
@ -216,7 +214,7 @@ bool cRecMenu::ActivatePrev(void) {
}
bool cRecMenu::ScrollUp(void) {
if (footer && footer->IsActive()) {
if (footer && footer->isActive()) {
if (menuItems.size() > 0)
Activate(footer, menuItems.back());
} else {
@ -274,7 +272,7 @@ bool cRecMenu::ActivateNext(void) {
if (next) {
Activate(activeItem , next);
return true;
} else if (!scrollable && footer && footer->isSelectable() && !footer->IsActive()) {
} else if (!scrollable && footer && footer->isSelectable() && !footer->isActive()) {
Activate(activeItem , footer);
return true;
}
@ -312,7 +310,7 @@ bool cRecMenu::ScrollDown(void) {
ActivateNext();
} else {
//last item reached, activate footer if not already active
if ((footer) && !(footer->IsActive())) {
if ((footer) && !(footer->isActive())) {
cRecMenuItem *activeItem = GetActiveMenuItem();
Activate(activeItem , footer);
} else {
@ -334,7 +332,7 @@ void cRecMenu::PageUp(void) {
Activate(footer, menuItems.front());
return;
}
int newActive = GetNumActive() - numItems;
int newActive = GetActive() - numItems;
if (newActive < 0)
newActive = 0;
activeItem->setInactive();
@ -347,7 +345,7 @@ void cRecMenu::PageUp(void) {
bool spaceLeft = true;
while (newItem = GetMenuItem(startIndex-1)) {
if (startIndex-1 == newActive)
newItem->SetActive();
newItem->setActive();
spaceLeft = AddMenuItemInitial(newItem, true);
if (!spaceLeft)
break;
@ -359,8 +357,8 @@ void cRecMenu::PageUp(void) {
break;
}
}
if (GetNumActive() == numItems)
menuItems.front()->SetActive();
if (GetActive() == numItems)
menuItems.front()->setActive();
if (CalculateHeight(true))
CreatePixmap();
Arrange(deleteMenuItems);
@ -378,7 +376,7 @@ void cRecMenu::PageDown(void) {
JumpEnd();
return;
}
int newActive = GetNumActive() + numItems;
int newActive = GetActive() + numItems;
activeItem->setInactive();
activeItem->setBackground();
ClearMenuItems();
@ -389,7 +387,7 @@ void cRecMenu::PageDown(void) {
bool spaceLeft = true;
while (newItem = GetMenuItem(stopIndex)) {
if (stopIndex == newActive)
newItem->SetActive();
newItem->setActive();
spaceLeft = AddMenuItemInitial(newItem);
if (!spaceLeft)
break;
@ -401,8 +399,8 @@ void cRecMenu::PageDown(void) {
break;
}
}
if (GetNumActive() == GetTotalNumMenuItems())
menuItems.back()->SetActive();
if (GetActive() == GetTotalNumMenuItems())
menuItems.back()->setActive();
if (CalculateHeight(true))
CreatePixmap();
Arrange(deleteMenuItems);
@ -436,16 +434,14 @@ void cRecMenu::JumpBegin(void) {
if (currentItem >= numItems)
break;
}
if (CalculateHeight(true))
CreatePixmap();
Arrange(false);
Arrange(true);
startIndex = 0;
stopIndex = currentItem;
stopIndex = numItems-1;
cRecMenuItem *first = menuItems.front();
first->SetActive();
first->setActive();
first->setBackground();
first->Draw();
Display(false);
Display(true);
}
}
@ -474,7 +470,7 @@ void cRecMenu::JumpEnd(void) {
activeItem->setBackground();
ClearMenuItems();
int totalNumItems = GetTotalNumMenuItems();
int currentItem = totalNumItems - 1;
int currentItem = totalNumItems-1;
int itemsAdded = 0;
cRecMenuItem *newItem = NULL;
while (newItem = GetMenuItem(currentItem)) {
@ -484,22 +480,20 @@ void cRecMenu::JumpEnd(void) {
if (itemsAdded >= numItems)
break;
}
if (CalculateHeight(true))
CreatePixmap();
Arrange(false);
Arrange(true);
stopIndex = totalNumItems;
startIndex = stopIndex - numItems;
if (footer) {
footer->SetActive();
footer->setActive();
footer->setBackground();
footer->Draw();
} else {
cRecMenuItem *last = menuItems.back();
last->SetActive();
last->setActive();
last->setBackground();
last->Draw();
}
Display(false);
Display(true);
}
}
@ -531,7 +525,7 @@ void cRecMenu::Arrange(bool scroll) {
}
void cRecMenu::Display(bool scroll) {
if (config.style == eStyleGraphical) {
if (tvguideConfig.style == eStyleGraphical) {
drawBackgroundGraphical(bgRecMenuBack);
} else {
pixmap->Fill(theme.Color(clrBackground));
@ -588,17 +582,13 @@ void cRecMenu::UpdateActiveMenuItem(void) {
void cRecMenu::DrawScrollBar(void) {
if (!pixmapScrollBar)
return;
pixmapScrollBar->Fill(theme.Color(clrBorder));
pixmapScrollBar->DrawRectangle(cRect(2, 2, pixmapScrollBar->ViewPort().Width() - 4, pixmapScrollBar->ViewPort().Height() - 4), theme.Color(clrBackground));
pixmapScrollBar->DrawRectangle(cRect(2,2,pixmapScrollBar->ViewPort().Width()-4, pixmapScrollBar->ViewPort().Height() - 4), theme.Color(clrBackground));
int totalNumItems = GetTotalNumMenuItems();
if (!totalNumItems)
return;
if (!imgScrollBar) {
if (imgScrollBar == NULL) {
int scrollBarImgHeight = (pixmapScrollBar->ViewPort().Height() - 8) * numItems / totalNumItems;
imgScrollBar = createScrollbar(pixmapScrollBar->ViewPort().Width() - 8, scrollBarImgHeight, theme.Color(clrHighlight), theme.Color(clrHighlightBlending));
imgScrollBar = createScrollbar(pixmapScrollBar->ViewPort().Width()-8, scrollBarImgHeight, theme.Color(clrHighlight), theme.Color(clrHighlightBlending));
}
int offset = (pixmapScrollBar->ViewPort().Height() - 8) * startIndex / totalNumItems;
pixmapScrollBar->DrawImage(cPoint(4, 2 + offset), *imgScrollBar);
@ -606,10 +596,10 @@ void cRecMenu::DrawScrollBar(void) {
cRecMenuItem *cRecMenu::GetActiveMenuItem(void) {
for (std::list<cRecMenuItem*>::iterator item = menuItems.begin(); item != menuItems.end(); item++) {
if ((*item)->IsActive())
if ((*item)->isActive())
return *item;
}
if (footer && footer->IsActive())
if (footer && footer->isActive())
return footer;
return NULL;
}
@ -624,10 +614,10 @@ cRecMenuItem *cRecMenu::GetMenuItemAt(int num) {
return NULL;
}
int cRecMenu::GetNumActive(void) {
int cRecMenu::GetActive(void) {
int numActive = startIndex;
for (std::list<cRecMenuItem*>::iterator item = menuItems.begin(); item != menuItems.end(); item++) {
if ((*item)->IsActive()) {
if ((*item)->isActive()) {
break;
}
numActive++;
@ -677,21 +667,25 @@ eRecMenuState cRecMenu::ProcessKey(eKeys Key) {
cImage *cRecMenu::createScrollbar(int width, int height, tColor clrBgr, tColor clrBlend) {
cImage *image = new cImage(cSize(width, height));
image->Fill(clrBgr);
if (height >= 32 && config.style != eStyleFlat) {
if (tvguideConfig.style != eStyleFlat) {
int numSteps = 64;
int alphaStep = 0x03;
if (height < 100) {
if (height < 30)
return image;
else if (height < 100) {
numSteps = 32;
alphaStep = 0x06;
}
int stepY = std::max(1, (int)(0.5 * height / numSteps));
int stepY = 0.5*height / numSteps;
if (stepY == 0)
stepY = 1;
int alpha = 0x40;
tColor clr;
for (int i = 0; i < numSteps; i++) {
for (int i = 0; i<numSteps; i++) {
clr = AlphaBlend(clrBgr, clrBlend, alpha);
for (int y = i * stepY; y < (i + 1) * stepY; y++) {
for (int x = 0; x < width; x++) {
image->SetPixel(cPoint(x, y), clr);
for (int y = i*stepY; y < (i+1)*stepY; y++) {
for (int x=0; x<width; x++) {
image->SetPixel(cPoint(x,y), clr);
}
}
alpha += alphaStep;

View File

@ -37,8 +37,8 @@ protected:
int CalculateOptimalWidth(void);
bool CalculateHeight(bool reDraw = false);
void CreatePixmap(void);
void AddHeader(cRecMenuItem *header);
void AddFooter(cRecMenuItem *footer);
void SetHeader(cRecMenuItem *header);
void SetFooter(cRecMenuItem *footer);
void ClearMenuItems(bool destructor = false);
void InitMenu(bool complete);
bool AddMenuItemInitial(cRecMenuItem *item, bool inFront = false);
@ -53,7 +53,7 @@ protected:
virtual int GetTotalNumMenuItems(void) { return 0; };
virtual void CreateMenuItems(void) {};
int GetStartIndex(void) { return startIndex; };
int GetNumActive(void);
int GetActive(void);
public:
cRecMenu(void);
virtual ~cRecMenu(void);

File diff suppressed because it is too large Load Diff

View File

@ -25,7 +25,6 @@ enum eRecMenuState {
rmsSearchRerunsTimerConflictMenu,
rmsSaveTimerConflictMenu,
rmsTimerConflictShowInfo,
rmsOnOffTimer,
rmsDeleteTimer,
rmsDeleteTimerConfirmation,
rmsEditTimer,
@ -47,6 +46,7 @@ enum eRecMenuState {
rmsSearchTimerOptions,
rmsSearchTimers,
rmsSearchTimerEdit,
rmsSearchTimerEditAdvanced,
rmsSearchTimerTest,
rmsSearchTimerSave,
rmsSearchTimerCreateWithTemplate,
@ -110,10 +110,10 @@ public:
virtual int GetHeight(void) { return height; };
virtual int GetWidth(void) { return 0; };
virtual void CalculateHeight(int textWidth) {};
virtual void SetActive(void) { this->active = true; }
virtual void setActive(void) { this->active = true; }
virtual void setInactive(void) { this->active = false; }
bool isSelectable(void) { return selectable; }
bool IsActive(void) { return active; }
bool isActive(void) { return active; }
virtual void setBackground(void);
virtual void Draw(void) {};
virtual void Hide(void) { if (pixmap) pixmap->SetLayer(-1);};
@ -122,7 +122,8 @@ public:
virtual time_t GetTimeValue(void) { return 0; };
virtual bool GetBoolValue(void) { return false; };
virtual cString GetStringValue(void) { return cString(""); };
virtual const cEvent *GetEvent(void) { return NULL; };
virtual const cEvent *GetEventValue(void) { return NULL; };
virtual const cTimer *GetTimerValue(void) { return NULL; };
virtual eRecMenuState ProcessKey(eKeys Key) { return rmsNotConsumed; };
};
@ -174,18 +175,12 @@ public:
// --- cRecMenuItemInfo -------------------------------------------------------
class cRecMenuItemInfo : public cRecMenuItem {
private:
int numLines;
cString text;
std::string line1;
std::string line2;
std::string line3;
std::string line4;
cTextWrapper wrapper;
int border;
const cFont *fontInfo;
public:
cRecMenuItemInfo(const char *text, bool largeFont = false);
cRecMenuItemInfo(std::string line1, int numLines = 1, std::string line2 = "", std::string line3 = "", std::string line4 = "", int width = 80, bool largeFont = false);
virtual ~cRecMenuItemInfo(void);
void setBackground(void);
void CalculateHeight(int textWidth);
@ -205,6 +200,7 @@ private:
void DrawValue(void);
public:
cRecMenuItemInt(cString text,
int initialVal,
int minVal,
int maxVal,
bool active = false,
@ -231,15 +227,11 @@ private:
void DrawValue(void);
public:
cRecMenuItemBool(cString text,
bool initialVal,
bool refresh = false,
bool active = false,
bool *callback = NULL,
eRecMenuState action = rmsNotConsumed,
bool refresh = false);
cRecMenuItemBool(cString text,
bool active = false,
int *callback = NULL,
eRecMenuState action = rmsNotConsumed,
bool refresh = false);
eRecMenuState action = rmsNotConsumed);
virtual ~cRecMenuItemBool(void);
void SetPixmaps(void);
void Hide(void);
@ -263,6 +255,7 @@ private:
public:
cRecMenuItemSelect(cString text,
std::vector<std::string> Strings,
int initialVal,
bool active = false,
int *callback = NULL,
eRecMenuState action = rmsNotConsumed,
@ -349,6 +342,7 @@ private:
void DrawValue(char *newValue);
public:
cRecMenuItemText(cString title,
char *initialVal,
int length,
bool active = false,
char *callback = NULL);
@ -377,6 +371,7 @@ private:
void DrawValue(void);
public:
cRecMenuItemTime(cString text,
int initialVal,
bool active = false,
int *callback = NULL,
eRecMenuState action = rmsNotConsumed);
@ -399,6 +394,7 @@ private:
void DrawValue(void);
public:
cRecMenuItemDay(cString text,
time_t initialVal,
bool active = false,
time_t *callback = NULL,
eRecMenuState action = rmsNotConsumed);
@ -486,7 +482,7 @@ public:
void SetPixmaps(void);
void Hide(void);
void Show(void);
const cEvent *GetEvent(void) { return event; };
const cEvent *GetEventValue(void) { return event; };
eRecMenuState ProcessKey(eKeys Key);
void Draw(void);
};
@ -495,13 +491,6 @@ public:
class cRecMenuItemChannelChooser : public cRecMenuItem {
private:
cString text;
#if VDRVERSNUM >= 20301
const cChannels *channels;
const cChannel *chanNew;
#else
cChannels *channels;
cChannel *chanNew;
#endif
const cChannel *channel;
int channelNumber;
int *callback;
@ -511,6 +500,7 @@ private:
void DrawValue(void);
public:
cRecMenuItemChannelChooser (cString text,
const cChannel *initialChannel,
bool active = false,
int *callback = NULL,
eRecMenuState action = rmsNotConsumed);
@ -544,6 +534,7 @@ private:
bool WeekDaySet(unsigned day);
public:
cRecMenuItemDayChooser (cString text,
int weekdays,
bool active = false,
int *callback = NULL);
virtual ~cRecMenuItemDayChooser(void);
@ -579,21 +570,19 @@ private:
cPixmap *pixmapTimeline;
cPixmap *pixmapTimerInfo;
cPixmap *pixmapTimerConflicts;
float width5Mins;
int width5Mins;
int x0;
int numTimersToday;
bool timelineDrawn;
void DrawTimeline(void);
void DrawTimerConflicts(void);
void DrawCurrentTimer(void);
public:
cRecMenuItemTimelineHeader(time_t day, int numTimersToday, std::vector<cTVGuideTimerConflict*> conflictsToday);
cRecMenuItemTimelineHeader(time_t day, std::vector<cTVGuideTimerConflict*> conflictsToday);
virtual ~cRecMenuItemTimelineHeader(void);
void SetDay(time_t day) { this->day = day; };
void SetPixmaps(void);
void SetCurrentTimer(const cTimer *timer) { this->timer = timer; };
void UnsetCurrentTimer(void) { timer = NULL; };
void SetNumTimersToday(int numTimersToday) { this->numTimersToday = numTimersToday; };
void RefreshTimerDisplay(void);
void Hide(void);
void Show(void);
@ -609,7 +598,7 @@ private:
cPixmap *pixmapTimerConflicts;
cRecMenuItemTimelineHeader *header;
int x0;
float width5Mins;
int width5Mins;
time_t start;
time_t stop;
void DrawBackground(void);
@ -620,13 +609,13 @@ private:
public:
cRecMenuItemTimelineTimer(const cTimer *timer, time_t start, time_t stop, std::vector<cTVGuideTimerConflict*> conflictsToday, cRecMenuItemTimelineHeader *header, bool active);
virtual ~cRecMenuItemTimelineTimer(void);
void SetActive(void);
void setActive(void);
void setInactive(void);
void SetPixmaps(void);
void Hide(void);
void Show(void);
void Draw(void);
const cTimer *GetTimer(void);
const cTimer *GetTimerValue(void);
eRecMenuState ProcessKey(eKeys Key);
};

View File

@ -2,9 +2,9 @@
#include "recmenus.h"
#include "switchtimer.h"
#include "timerconflict.h"
#include "recmenuview.h"
#include "recmenumanager.h"
cRecMenuView::cRecMenuView(void) {
cRecMenuManager::cRecMenuManager(void) {
footer = NULL;
active = false;
activeMenu = NULL;
@ -16,7 +16,7 @@ cRecMenuView::cRecMenuView(void) {
detailViewActive = false;
}
cRecMenuView::~cRecMenuView(void) {
cRecMenuManager::~cRecMenuManager(void) {
if (activeMenu) {
active = false;
delete activeMenu;
@ -29,7 +29,7 @@ cRecMenuView::~cRecMenuView(void) {
delete recManager;
}
void cRecMenuView::Start(const cEvent *event) {
void cRecMenuManager::Start(const cEvent *event) {
active = true;
activeMenuBuffer = NULL;
detailViewActive = false;
@ -37,10 +37,10 @@ void cRecMenuView::Start(const cEvent *event) {
this->event = event;
activeMenu = new cRecMenuMain(recManager->EpgSearchAvailable(), recManager->CheckEventForTimer(event), SwitchTimers.EventInSwitchList(event));
activeMenu->Display();
osdManager.Flush();
osdManager.flush();
}
void cRecMenuView::StartFavorites(void) {
void cRecMenuManager::StartFavorites(void) {
active = true;
activeMenuBuffer = NULL;
detailViewActive = false;
@ -49,11 +49,11 @@ void cRecMenuView::StartFavorites(void) {
recManager->GetFavorites(&favorites);
activeMenu = new cRecMenuFavorites(favorites);
activeMenu->Display();
osdManager.Flush();
osdManager.flush();
}
void cRecMenuView::Close(void) {
void cRecMenuManager::Close(void) {
event = NULL;
active = false;
if (activeMenu) {
@ -67,12 +67,12 @@ void cRecMenuView::Close(void) {
DeleteBackground();
}
void cRecMenuView::SetBackground(void) {
void cRecMenuManager::SetBackground(void) {
int backgroundWidth = geoManager.osdWidth;
int backgroundHeight = geoManager.osdHeight;
pixmapBackground = osdManager.CreatePixmap(3, cRect(0, 0, backgroundWidth, backgroundHeight));
pixmapBackground = osdManager.requestPixmap(3, cRect(0, 0, backgroundWidth, backgroundHeight));
pixmapBackground->Fill(theme.Color(clrRecMenuBackground));
if (config.scaleVideo) {
if (tvguideConfig.scaleVideo) {
int tvHeight = geoManager.statusHeaderHeight;
int tvWidth = tvHeight * 16 / 9;
int tvX = geoManager.osdWidth - tvWidth;
@ -80,83 +80,16 @@ void cRecMenuView::SetBackground(void) {
}
}
void cRecMenuView::DeleteBackground(void) {
osdManager.DestroyPixmap(pixmapBackground);
void cRecMenuManager::DeleteBackground(void) {
osdManager.releasePixmap(pixmapBackground);
}
void cRecMenuView::DisplaySearchTimerList(void) {
delete activeMenu;
std::vector<cTVGuideSearchTimer> searchTimers;
recManager->GetSearchTimers(&searchTimers);
activeMenu = new cRecMenuSearchTimers(searchTimers);
activeMenu->Display();
}
bool cRecMenuView::DisplayTimerConflict(const cTimer *timer) {
#if VDRVERSNUM >= 20301
LOCK_TIMERS_READ;
for (const cTimer *t = Timers->First(); t; t = Timers->Next(t)) {
if (t == timer)
return DisplayTimerConflict(timer->Id() - 1);
#else
int timerID = 0;
for (const cTimer *t = Timers.First(); t; t = Timers.Next(t)) {
if (t == timer)
return DisplayTimerConflict(timerID);
timerID++;
#endif
}
return false;
}
bool cRecMenuView::DisplayTimerConflict(int timerID) {
if (timerConflicts)
delete timerConflicts;
timerConflicts = recManager->CheckTimerConflict();
if (!timerConflicts)
return false;
int showTimerConflict = timerConflicts->GetCorrespondingConflict(timerID);
if (showTimerConflict > -1) {
timerConflicts->SetCurrentConflict(showTimerConflict);
cTVGuideTimerConflict *conflict = timerConflicts->GetCurrentConflict();
if (!conflict)
return false;
delete activeMenu;
activeMenu = new cRecMenuTimerConflict(conflict, rmsIgnoreTimerConflict);
activeMenu->Display();
return true;
}
return false;
}
void cRecMenuView::DisplayFavoriteResults(std::string header, const cEvent **result, int numResults) {
if (numResults) {
activeMenuBuffer = activeMenu;
activeMenuBuffer->Hide();
activeMenu = new cRecMenuSearchTimerResults(header, result, numResults, "", rmsFavoritesRecord);
activeMenu->Display();
} else {
activeMenuBuffer = activeMenu;
activeMenuBuffer->Hide();
activeMenu = new cRecMenuSearchTimerNothingFound(header);
activeMenu->Display();
}
}
void cRecMenuView::DisplayDetailedView(const cEvent *ev) {
activeMenu->Hide();
detailView = new cDetailView(ev, footer);
footer->SetDetailedViewMode(true);
detailView->Start();
detailViewActive = true;
}
eOSState cRecMenuView::StateMachine(eRecMenuState nextState) {
eOSState cRecMenuManager::StateMachine(eRecMenuState nextState) {
eOSState state = osContinue;
switch (nextState) {
/***************************************************************************************
* INSTANT RECORDING
****************************************************************************************/
/***************************************************************************************
* INSTANT RECORDING
****************************************************************************************/
case rmsInstantRecord: {
//caller: main menu or folder chooser
//Creating timer for active Event, if no conflict, confirm and exit
@ -164,16 +97,11 @@ eOSState cRecMenuView::StateMachine(eRecMenuState nextState) {
if (cRecMenuAskFolder *menu = dynamic_cast<cRecMenuAskFolder*>(activeMenu)) {
recFolder = menu->GetFolder();
}
delete activeMenu;
cTimer *timer = recManager->createTimer(event, recFolder);
if (!DisplayTimerConflict(timer)) {
if (config.timerMessage) {
delete activeMenu;
activeMenu = new cRecMenuConfirmTimer(event);
activeMenu->Display();
} else {
Close();
state = osEnd;
}
}
break; }
case rmsInstantRecordFolder:
@ -183,83 +111,12 @@ eOSState cRecMenuView::StateMachine(eRecMenuState nextState) {
activeMenu = new cRecMenuAskFolder(event, rmsInstantRecord);
activeMenu->Display();
break;
case rmsOnOffTimer: {
//caller: main menu
//De/Activate timer for active event
recManager->OnOffTimer(event);
if (config.timerMessage) {
delete activeMenu;
activeMenu = new cRecMenuConfirmTimer(event, true);
activeMenu->Display();
} else {
Close();
state = osEnd;
}
break; }
case rmsDeleteTimer: {
//caller: main menu
//delete timer for active event
if (recManager->IsRecorded(event)) {
delete activeMenu;
activeMenu = new cRecMenuAskDeleteTimer(event);
activeMenu->Display();
} else {
recManager->DeleteTimer(event);
if (config.timerMessage) {
delete activeMenu;
activeMenu = new cRecMenuConfirmDeleteTimer(event);
activeMenu->Display();
} else {
Close();
state = osEnd;
}
}
break; }
case rmsDeleteTimerConfirmation: {
//delete running timer for active event
recManager->DeleteTimer(event);
if (config.timerMessage) {
delete activeMenu;
activeMenu = new cRecMenuConfirmDeleteTimer(event);
activeMenu->Display();
} else {
Close();
state = osEnd;
}
break; }
case rmsEditTimer: {
//edit timer for active event
const cTimer *timer = recManager->GetTimerForEvent(event);
if (timer) {
delete activeMenu;
activeMenu = new cRecMenuEditTimer(timer, rmsSaveTimer);
activeMenu->Display();
}
break; }
case rmsSaveTimer: {
//caller: cRecMenuEditTimer
//save timer for active event
cTimer *timerModified;
const cTimer *originalTimer;
if (cRecMenuEditTimer *menu = dynamic_cast<cRecMenuEditTimer*>(activeMenu)) {
timerModified = menu->GetTimer();
originalTimer = menu->GetOriginalTimer();
} else break;
recManager->SaveTimer(originalTimer, timerModified);
Close();
state = osEnd;
break; }
case rmsIgnoreTimerConflict:
//caller: cRecMenuTimerConflict
//Confirming created Timer
if (config.timerMessage) {
delete activeMenu;
activeMenu = new cRecMenuConfirmTimer(event);
activeMenu->Display();
} else {
Close();
state = osEnd;
}
break;
case rmsTimerConflictShowInfo: {
//caller: cRecMenuTimerConflict
@ -267,18 +124,12 @@ eOSState cRecMenuView::StateMachine(eRecMenuState nextState) {
if (cRecMenuTimerConflict *menu = dynamic_cast<cRecMenuTimerConflict*>(activeMenu)) {
timerIndex = menu->GetTimerConflictIndex();
} else break;
const cTimers* timers;
#if VDRVERSNUM >= 20301
int timerID = timerConflicts->GetCurrentConflictTimerID(timerIndex) + 1;
{
LOCK_TIMERS_READ;
timers = Timers;
}
const cTimer *t = timers->GetById(timerID);
#else
int timerID = timerConflicts->GetCurrentConflictTimerID(timerIndex);
timers = &Timers;
const cTimer *t = timers->Get(timerID);
#if VDRVERSNUM >= 20301
LOCK_TIMERS_READ;
const cTimer *t = Timers->Get(timerID);
#else
cTimer *t = Timers.Get(timerID);
#endif
if (t) {
const cEvent *ev = t->Event();
@ -290,34 +141,17 @@ eOSState cRecMenuView::StateMachine(eRecMenuState nextState) {
case rmsDeleteTimerConflictMenu: {
//caller: cRecMenuTimerConflict
//delete timer out of current timer conflict
dsyslog ("%s %s %d\n", __FILE__, __func__, __LINE__);
int timerIndex;
if (cRecMenuTimerConflict *menu = dynamic_cast<cRecMenuTimerConflict*>(activeMenu)) {
timerIndex = menu->GetTimerConflictIndex();
} else break;
const cTimers* timers;
const cEvent *event;
#if VDRVERSNUM >= 20301
int timerID = timerConflicts->GetCurrentConflictTimerID(timerIndex) + 1;
{
LOCK_TIMERS_READ;
timers = Timers;
}
event = timers->GetById(timerID)->Event();
#else
int timerID = timerConflicts->GetCurrentConflictTimerID(timerIndex);
timers = &Timers;
event = timers->Get(timerID)->Event();
#endif
recManager->DeleteTimer(event);
if (!DisplayTimerConflict(timerID)) {
if (config.timerMessage) {
recManager->DeleteTimer(timerID);
delete activeMenu;
activeMenu = new cRecMenuConfirmDeleteTimer(event);
if (!DisplayTimerConflict(timerID)) {
activeMenu = new cRecMenuConfirmTimer(event);
activeMenu->Display();
} else {
Close();
state = osEnd;
}
}
break; }
case rmsEditTimerConflictMenu: {
@ -327,18 +161,12 @@ eOSState cRecMenuView::StateMachine(eRecMenuState nextState) {
if (cRecMenuTimerConflict *menu = dynamic_cast<cRecMenuTimerConflict*>(activeMenu)) {
timerIndex = menu->GetTimerConflictIndex();
} else break;
const cTimers* timers;
#if VDRVERSNUM >= 20301
int timerID = timerConflicts->GetCurrentConflictTimerID(timerIndex) + 1;
{
LOCK_TIMERS_READ;
timers = Timers;
}
const cTimer *timer = timers->GetById(timerID);
#else
int timerID = timerConflicts->GetCurrentConflictTimerID(timerIndex);
timers = &Timers;
const cTimer *timer = timers->Get(timerID);
#if VDRVERSNUM >= 20301
LOCK_TIMERS_READ;
const cTimer *timer = Timers->Get(timerID);
#else
const cTimer *timer = Timers.Get(timerID);
#endif
if (timer) {
delete activeMenu;
@ -349,27 +177,72 @@ eOSState cRecMenuView::StateMachine(eRecMenuState nextState) {
case rmsSaveTimerConflictMenu: {
//caller: cRecMenuEditTimer
//save timer from current timer conflict
cTimer *timerModified;
cTimer timerModified;
const cTimer *originalTimer;
if (cRecMenuEditTimer *menu = dynamic_cast<cRecMenuEditTimer*>(activeMenu)) {
timerModified = menu->GetTimer();
originalTimer = menu->GetOriginalTimer();
} else break;
recManager->SaveTimer(originalTimer, timerModified);
if (!DisplayTimerConflict(originalTimer)) {
if (config.timerMessage) {
delete activeMenu;
activeMenu = new cRecMenuConfirmTimer(originalTimer->Event(), true);
if (!DisplayTimerConflict(originalTimer)) {
activeMenu = new cRecMenuConfirmTimer(event);
activeMenu->Display();
} else {
Close();
state = osEnd;
}
}
break; }
/***************************************************************************************
* SERIES TIMER
****************************************************************************************/
case rmsDeleteTimer:
//caller: main menu
//delete timer for active event
dsyslog ("%s %s %d\n", __FILE__, __func__, __LINE__);
delete activeMenu;
if (recManager->IsRecorded(event)) {
activeMenu = new cRecMenuAskDeleteTimer(event);
} else {
recManager->DeleteTimer(event);
activeMenu = new cRecMenuConfirmDeleteTimer(event);
}
activeMenu->Display();
break;
case rmsDeleteTimerConfirmation:
//delete running timer for active event
recManager->DeleteTimer(event);
delete activeMenu;
activeMenu = new cRecMenuConfirmDeleteTimer(event);
activeMenu->Display();
break;
case rmsEditTimer: {
//edit timer for active event
const cTimer *timer;
#if VDRVERSNUM >= 20301
{
LOCK_TIMERS_READ;
timer = recManager->GetTimerForEvent(event);
}
#else
timer = recManager->GetTimerForEvent(event);
#endif
if (timer) {
delete activeMenu;
activeMenu = new cRecMenuEditTimer(timer, rmsSaveTimer);
activeMenu->Display();
}
break; }
case rmsSaveTimer: {
//caller: cRecMenuEditTimer
//save timer for active event
cTimer timerModified;
const cTimer *originalTimer;
if (cRecMenuEditTimer *menu = dynamic_cast<cRecMenuEditTimer*>(activeMenu)) {
timerModified = menu->GetTimer();
originalTimer = menu->GetOriginalTimer();
} else break;
recManager->SaveTimer(originalTimer, timerModified);
state = osEnd;
Close();
break; }
/***************************************************************************************
* SERIES TIMER
****************************************************************************************/
case rmsSeriesTimer: {
//caller: main menu oder folder chooser
std::string recFolder = "";
@ -404,9 +277,9 @@ eOSState cRecMenuView::StateMachine(eRecMenuState nextState) {
activeMenu = new cRecMenuConfirmSeriesTimer(seriesTimer);
activeMenu->Display();
break; }
/**********************************************************************************************
* SEARCH TIMER
***********************************************************************************************/
/**********************************************************************************************
* SEARCH TIMER
***********************************************************************************************/
case rmsSearchTimer:
//Caller: main menu
//set search String for search timer
@ -440,7 +313,7 @@ eOSState cRecMenuView::StateMachine(eRecMenuState nextState) {
} else {
std::vector<std::string> channelGroups;
recManager->GetChannelGroups(&channelGroups);
activeMenu = new cRecMenuSearchTimerEdit(searchTimer, channelGroups);
activeMenu = new cRecMenuSearchTimerEdit(searchTimer, false, channelGroups);
}
}
activeMenu->Display();
@ -449,20 +322,23 @@ eOSState cRecMenuView::StateMachine(eRecMenuState nextState) {
//caller: main menu
DisplaySearchTimerList();
break; }
case rmsSearchTimerEdit: {
case rmsSearchTimerEdit:
case rmsSearchTimerEditAdvanced: {
//caller: cRecMenuSearchTimers, cRecMenuSearchTimerEdit, cRecMenuSearchTimerTemplates
cTVGuideSearchTimer searchTimer;
bool advancedOptions = false;
if (cRecMenuSearchTimers *menu = dynamic_cast<cRecMenuSearchTimers*>(activeMenu)) {
searchTimer = menu->GetSearchTimer();
} else if (cRecMenuSearchTimerEdit *menu = dynamic_cast<cRecMenuSearchTimerEdit*>(activeMenu)) {
searchTimer = menu->GetSearchTimer();
advancedOptions = (nextState == rmsSearchTimerEditAdvanced) ? true : false;
} else if (cRecMenuSearchTimerTemplates *menu = dynamic_cast<cRecMenuSearchTimerTemplates*>(activeMenu)) {
searchTimer = menu->GetSearchTimer();
} else break;
delete activeMenu;
std::vector<std::string> channelGroups;
recManager->GetChannelGroups(&channelGroups);
activeMenu = new cRecMenuSearchTimerEdit(searchTimer, channelGroups);
activeMenu = new cRecMenuSearchTimerEdit(searchTimer, advancedOptions, channelGroups);
activeMenu->Display();
break; }
case rmsSearchTimerTest: {
@ -491,13 +367,14 @@ eOSState cRecMenuView::StateMachine(eRecMenuState nextState) {
if (numSearchResults) {
activeMenuBuffer = activeMenu;
activeMenuBuffer->Hide();
activeMenu = new cRecMenuSearchTimerResults(searchTimer.GetSearchString(), searchResult, numSearchResults, "", recState);
activeMenu = new cRecMenuSearchTimerResults(searchTimer.SearchString(), searchResult, numSearchResults, "", recState);
activeMenu->Display();
} else {
activeMenuBuffer = activeMenu;
activeMenuBuffer->Hide();
activeMenu = new cRecMenuSearchTimerNothingFound(searchTimer.GetSearchString());
}
activeMenu = new cRecMenuSearchTimerNothingFound(searchTimer.SearchString());
activeMenu->Display();
}
break; }
case rmsSearchTimerSave: {
//caller: cRecMenuSearchTimerEdit, cRecMenuSearchTimerTemplatesCreate
@ -576,9 +453,66 @@ eOSState cRecMenuView::StateMachine(eRecMenuState nextState) {
activeMenu = new cRecMenuSearchConfirmTimer(ev, rmsFavoritesRecordConfirm);
activeMenu->Display();
break; }
/**********************************************************************************************
* SEARCH
***********************************************************************************************/
/**********************************************************************************************
* SWITCH TIMER
***********************************************************************************************/
case rmsSwitchTimer:
delete activeMenu;
activeMenu = new cRecMenuSwitchTimer();
activeMenu->Display();
break;
case rmsSwitchTimerCreate: {
cSwitchTimer switchTimer;
if (cRecMenuSwitchTimer *menu = dynamic_cast<cRecMenuSwitchTimer*>(activeMenu)) {
switchTimer = menu->GetSwitchTimer();
} else break;
bool success = recManager->CreateSwitchTimer(event, switchTimer);
delete activeMenu;
activeMenu = new cRecMenuSwitchTimerConfirm(success);
activeMenu->Display();
break; }
case rmsSwitchTimerDelete:
recManager->DeleteSwitchTimer(event);
delete activeMenu;
activeMenu = new cRecMenuSwitchTimerDelete();
activeMenu->Display();
break;
/**********************************************************************************************
* RECORDINGS SEARCH
***********************************************************************************************/
case rmsRecordingSearch: {
//caller: main menu or rmsRecordingSearchResult
std::string searchString = event->Title();
if (cRecMenuRecordingSearchResults *menu = dynamic_cast<cRecMenuRecordingSearchResults*>(activeMenu)) {
searchString = menu->GetSearchString();
};
delete activeMenu;
activeMenu = new cRecMenuRecordingSearch(searchString);
activeMenu->Display();
break; }
case rmsRecordingSearchResult: {
//caller: cRecMenuRecordingSearch
std::string searchString;
if (cRecMenuRecordingSearch *menu = dynamic_cast<cRecMenuRecordingSearch*>(activeMenu)) {
searchString = menu->GetSearchString();
} else break;
delete activeMenu;
if (searchString.size() < 4) {
activeMenu = new cRecMenuRecordingSearch(searchString);
} else {
int numSearchResults = 0;
const cRecording **searchResult = recManager->SearchForRecordings(searchString, numSearchResults);
if (numSearchResults == 0) {
activeMenu = new cRecMenuRecordingSearchNotFound(searchString);
} else {
activeMenu = new cRecMenuRecordingSearchResults(searchString, searchResult, numSearchResults);
}
}
activeMenu->Display();
break; }
/**********************************************************************************************
* SEARCH
***********************************************************************************************/
case rmsSearch:
case rmsSearchWithOptions: {
//caller: main menu, cRecMenuSearch, cRecMenuSearchResults
@ -658,33 +592,9 @@ eOSState cRecMenuView::StateMachine(eRecMenuState nextState) {
activeMenu->UpdateActiveMenuItem();
activeMenu->Show();
break;
/**********************************************************************************************
* SWITCH TIMER
***********************************************************************************************/
case rmsSwitchTimer:
delete activeMenu;
activeMenu = new cRecMenuSwitchTimer();
activeMenu->Display();
break;
case rmsSwitchTimerCreate: {
cSwitchTimer switchTimer;
if (cRecMenuSwitchTimer *menu = dynamic_cast<cRecMenuSwitchTimer*>(activeMenu)) {
switchTimer = menu->GetSwitchTimer();
} else break;
bool success = recManager->CreateSwitchTimer(event, switchTimer);
delete activeMenu;
activeMenu = new cRecMenuSwitchTimerConfirm(success);
activeMenu->Display();
break; }
case rmsSwitchTimerDelete:
recManager->DeleteSwitchTimer(event);
delete activeMenu;
activeMenu = new cRecMenuSwitchTimerDelete();
activeMenu->Display();
break;
/**********************************************************************************************
* CHECK FOR TIMER CONFLICTS
***********************************************************************************************/
/**********************************************************************************************
* CHECK FOR TIMER CONFLICTS
***********************************************************************************************/
case rmsTimerConflicts: {
//caller: main menu
//Show timer conflict
@ -712,7 +622,7 @@ eOSState cRecMenuView::StateMachine(eRecMenuState nextState) {
} else break;
timerConflicts->SetCurrentConflict(timerConflict);
delete activeMenu;
activeMenu = new cRecMenuTimerConflict(timerConflicts->GetCurrentConflict(), rmsTimerConflicts);
activeMenu = new cRecMenuTimerConflict(timerConflicts->GetCurrentConflict());
activeMenu->Display();
break; }
case rmsSearchRerunsTimerConflictMenu: {
@ -724,18 +634,12 @@ eOSState cRecMenuView::StateMachine(eRecMenuState nextState) {
if (cRecMenuTimerConflict *menu = dynamic_cast<cRecMenuTimerConflict*>(activeMenu)) {
timerConflict = menu->GetTimerConflictIndex();
} else break;
const cTimers* timers;
#if VDRVERSNUM >= 20301
int timerID = timerConflicts->GetCurrentConflictTimerID(timerConflict) + 1;
{
LOCK_TIMERS_READ;
timers = Timers;
}
const cTimer *timer = timers->GetById(timerID);
#else
int timerID = timerConflicts->GetCurrentConflictTimerID(timerConflict);
timers = &Timers;
const cTimer *timer = timers->Get(timerID);
#if VDRVERSNUM >= 20301
LOCK_TIMERS_READ;
const cTimer *timer = Timers->Get(timerID);
#else
cTimer *timer = Timers.Get(timerID);
#endif
if (timer) {
const cEvent *event = timer->Event();
@ -746,14 +650,15 @@ eOSState cRecMenuView::StateMachine(eRecMenuState nextState) {
activeMenuBuffer = activeMenu;
activeMenuBuffer->Hide();
activeMenu = new cRecMenuRerunResults(event, reruns, numReruns);
activeMenu->Display();
} else {
activeMenuBuffer = activeMenu;
activeMenuBuffer->Hide();
activeMenu = new cRecMenuNoRerunsFound((event->Title()) ? event->Title() : "");
}
activeMenu = new cRecMenuNoRerunsFound((event->Title())?event->Title():"");
activeMenu->Display();
}
}
}
break; }
case rmsTimerConflictIgnoreReruns: {
delete activeMenu;
@ -777,16 +682,12 @@ eOSState cRecMenuView::StateMachine(eRecMenuState nextState) {
originalConflictIndex = menu->GetTimerConflictIndex();
} else break;
int originalTimerID = timerConflicts->GetCurrentConflictTimerID(originalConflictIndex);
const cTimers* timers;
#if VDRVERSNUM >= 20301
{
LOCK_TIMERS_READ;
timers = Timers;
}
const cTimer *timerOriginal = Timers->Get(originalTimerID);
#else
timers = &Timers;
cTimer *timerOriginal = Timers.Get(originalTimerID);
#endif
const cTimer *timerOriginal = timers->Get(originalTimerID);
if (replace && timerOriginal) {
recManager->DeleteTimer(timerOriginal->Event());
recManager->createTimer(replace);
@ -799,9 +700,9 @@ eOSState cRecMenuView::StateMachine(eRecMenuState nextState) {
activeMenu->Display();
}
break; }
/**********************************************************************************************
* TIMELINE
***********************************************************************************************/
/**********************************************************************************************
* TIMELINE
***********************************************************************************************/
case rmsTimeline: {
if (timerConflicts) {
delete timerConflicts;
@ -823,7 +724,7 @@ eOSState cRecMenuView::StateMachine(eRecMenuState nextState) {
}
break;}
case rmsTimelineTimerSave: {
cTimer *timerModified;
cTimer timerModified;
const cTimer *originalTimer;
if (cRecMenuEditTimer *menu = dynamic_cast<cRecMenuEditTimer*>(activeMenu)) {
timerModified = menu->GetTimer();
@ -843,7 +744,14 @@ eOSState cRecMenuView::StateMachine(eRecMenuState nextState) {
if (cRecMenuEditTimer *menu = dynamic_cast<cRecMenuEditTimer*>(activeMenu)) {
timer = menu->GetOriginalTimer();
} else break;
recManager->DeleteTimer(timer);
#if VDRVERSNUM >= 20301
{
LOCK_TIMERS_WRITE;
recManager->DeleteTimer(Timers->GetTimer(timer));
}
#else
recManager->DeleteTimer(Timers.GetTimer((cTimer*)timer));
#endif
delete activeMenu;
if (timerConflicts) {
delete timerConflicts;
@ -852,42 +760,9 @@ eOSState cRecMenuView::StateMachine(eRecMenuState nextState) {
activeMenu = new cRecMenuTimeline(timerConflicts);
activeMenu->Display();
break; }
/**********************************************************************************************
* RECORDINGS SEARCH
***********************************************************************************************/
case rmsRecordingSearch: {
//caller: main menu or rmsRecordingSearchResult
std::string searchString = event->Title();
if (cRecMenuRecordingSearchResults *menu = dynamic_cast<cRecMenuRecordingSearchResults*>(activeMenu)) {
searchString = menu->GetSearchString();
};
delete activeMenu;
activeMenu = new cRecMenuRecordingSearch(searchString);
activeMenu->Display();
break; }
case rmsRecordingSearchResult: {
//caller: cRecMenuRecordingSearch
std::string searchString;
if (cRecMenuRecordingSearch *menu = dynamic_cast<cRecMenuRecordingSearch*>(activeMenu)) {
searchString = menu->GetSearchString();
} else break;
delete activeMenu;
if (searchString.size() < 4) {
activeMenu = new cRecMenuRecordingSearch(searchString);
} else {
int numSearchResults = 0;
const cRecording **searchResult = recManager->SearchForRecordings(searchString, numSearchResults);
if (numSearchResults == 0) {
activeMenu = new cRecMenuRecordingSearchNotFound(searchString);
} else {
activeMenu = new cRecMenuRecordingSearchResults(searchString, searchResult, numSearchResults);
}
}
activeMenu->Display();
break; }
/**********************************************************************************************
* FAVORITES
*********************************************************************************************/
/**********************************************************************************************
* FAVORITES
*********************************************************************************************/
case rmsFavoritesRecord: {
//caller: cRecMenuSearchTimerResults
const cEvent *ev = NULL;
@ -927,27 +802,27 @@ eOSState cRecMenuView::StateMachine(eRecMenuState nextState) {
case rmsFavoritesUser1: {
int numResults = 0;
const cEvent **result = recManager->UserDefinedTime(1, numResults);
DisplayFavoriteResults(config.descUser1, result, numResults);
DisplayFavoriteResults(tvguideConfig.descUser1, result, numResults);
break; }
case rmsFavoritesUser2: {
int numResults = 0;
const cEvent **result = recManager->UserDefinedTime(2, numResults);
DisplayFavoriteResults(config.descUser2, result, numResults);
DisplayFavoriteResults(tvguideConfig.descUser2, result, numResults);
break; }
case rmsFavoritesUser3: {
int numResults = 0;
const cEvent **result = recManager->UserDefinedTime(3, numResults);
DisplayFavoriteResults(config.descUser3, result, numResults);
DisplayFavoriteResults(tvguideConfig.descUser3, result, numResults);
break; }
case rmsFavoritesUser4: {
int numResults = 0;
const cEvent **result = recManager->UserDefinedTime(4, numResults);
DisplayFavoriteResults(config.descUser4, result, numResults);
DisplayFavoriteResults(tvguideConfig.descUser4, result, numResults);
break; }
/**********************************************************************************************
* COMMON
*********************************************************************************************/
/**********************************************************************************************
* COMMON
*********************************************************************************************/
case rmsClose: {
if (activeMenuBuffer == NULL) {
state = osEnd;
@ -967,7 +842,71 @@ eOSState cRecMenuView::StateMachine(eRecMenuState nextState) {
return state;
}
eOSState cRecMenuView::ProcessKey(eKeys Key) {
void cRecMenuManager::DisplayFavoriteResults(std::string header, const cEvent **result, int numResults) {
if (numResults) {
activeMenuBuffer = activeMenu;
activeMenuBuffer->Hide();
activeMenu = new cRecMenuSearchTimerResults(header, result, numResults, "", rmsFavoritesRecord);
activeMenu->Display();
} else {
activeMenuBuffer = activeMenu;
activeMenuBuffer->Hide();
activeMenu = new cRecMenuSearchTimerNothingFound(header);
activeMenu->Display();
}
}
void cRecMenuManager::DisplaySearchTimerList(void) {
delete activeMenu;
std::vector<cTVGuideSearchTimer> searchTimers;
recManager->GetSearchTimers(&searchTimers);
activeMenu = new cRecMenuSearchTimers(searchTimers);
activeMenu->Display();
}
bool cRecMenuManager::DisplayTimerConflict(const cTimer *timer) {
int timerID = 0;
#if VDRVERSNUM >= 20301
LOCK_TIMERS_READ;
for (const cTimer *t = Timers->First(); t; t = Timers->Next(t)) {
#else
for (const cTimer *t = Timers.First(); t; t = Timers.Next(t)) {
#endif
if (t == timer)
return DisplayTimerConflict(timerID);
timerID++;
}
return false;
}
bool cRecMenuManager::DisplayTimerConflict(int timerID) {
if (timerConflicts)
delete timerConflicts;
timerConflicts = recManager->CheckTimerConflict();
if (!timerConflicts)
return false;
int showTimerConflict = timerConflicts->GetCorrespondingConflict(timerID);
if (showTimerConflict > -1) {
timerConflicts->SetCurrentConflict(showTimerConflict);
cTVGuideTimerConflict *conflict = timerConflicts->GetCurrentConflict();
if (!conflict)
return false;
activeMenu = new cRecMenuTimerConflict(conflict);
activeMenu->Display();
return true;
}
return false;
}
void cRecMenuManager::DisplayDetailedView(const cEvent *ev) {
activeMenu->Hide();
detailView = new cDetailView(ev, footer);
footer->SetDetailedViewMode(true);
detailView->Start();
detailViewActive = true;
}
eOSState cRecMenuManager::ProcessKey(eKeys Key) {
eOSState state = osContinue;
eRecMenuState nextState = rmsContinue;
if (!activeMenu)
@ -994,12 +933,12 @@ eOSState cRecMenuView::ProcessKey(eKeys Key) {
activeMenu->UpdateActiveMenuItem();
activeMenu->Show();
state = osContinue;
osdManager.Flush();
osdManager.flush();
}
return state;
}
state = StateMachine(nextState);
}
osdManager.Flush();
osdManager.flush();
return state;
}

View File

@ -1,13 +1,13 @@
#ifndef __TVGUIDE_RECMENUVIEW_H
#define __TVGUIDE_RECMENUVIEW_H
#ifndef __TVGUIDE_RECMENUMANAGER_H
#define __TVGUIDE_RECMENUMANAGER_H
#include "recmenu.h"
#include "recmanager.h"
#include "services/epgsearch.h"
#include "footer.h"
// --- cRecMenuView -------------------------------------------------------------
class cRecMenuView {
// --- cRecMenuManager -------------------------------------------------------------
class cRecMenuManager {
private:
cFooter *footer;
bool active;
@ -30,14 +30,14 @@ private:
void DisplayFavoriteResults(std::string header, const cEvent **result, int numResults);
eOSState StateMachine(eRecMenuState nextState);
public:
cRecMenuView(void);
virtual ~cRecMenuView(void);
void AddFooter(cFooter *footer) { this->footer = footer; };
bool IsActive(void) { return active; };
cRecMenuManager(void);
virtual ~cRecMenuManager(void);
void SetFooter(cFooter *footer) { this->footer = footer; };
bool isActive(void) { return active; };
void Start(const cEvent *event);
void StartFavorites(void);
void Close(void);
eOSState ProcessKey(eKeys Key);
};
#endif //__TVGUIDE_RECMENUVIEW_H
#endif //__TVGUIDE_RECMENUMANAGER_H

1461
recmenus.c

File diff suppressed because it is too large Load Diff

View File

@ -10,15 +10,6 @@
#include "switchtimer.h"
#include "recmanager.h"
typedef enum {
searchTimerActionRecord = 0,
searchTimerActionAnnounceViaOSD,
searchTimerActionSwitchOnly,
searchTimerActionAnnounceAndSwitch,
searchTimerActionAnnounceViaMail,
searchTimerActionInactiveRecord
} searchTimerAction;
// --- cRecMenuMain ---------------------------------------------------------
class cRecMenuMain : public cRecMenu {
public:
@ -47,7 +38,7 @@ public:
// --- cRecMenuConfirmTimer ---------------------------------------------------------
class cRecMenuConfirmTimer: public cRecMenu {
public:
cRecMenuConfirmTimer(const cEvent *event, bool timerChanged = false);
cRecMenuConfirmTimer(const cEvent *event);
virtual ~cRecMenuConfirmTimer(void) {};
};
@ -77,12 +68,11 @@ public:
class cRecMenuTimerConflict: public cRecMenu {
private:
cTVGuideTimerConflict *conflict;
int totalNumMenuItems;
public:
cRecMenuTimerConflict(cTVGuideTimerConflict *conflict, eRecMenuState nextAction = rmsClose);
virtual ~cRecMenuTimerConflict(void) {};
cRecMenuTimerConflict(cTVGuideTimerConflict *conflict);
cRecMenuItem *GetMenuItem(int number);
int GetTotalNumMenuItems(void);
virtual ~cRecMenuTimerConflict(void) {};
int GetTimerConflictIndex(void);
};
@ -137,7 +127,7 @@ public:
cRecMenuEditTimer(const cTimer *timer, eRecMenuState nextState);
const cTimer *GetOriginalTimer(void);
virtual ~cRecMenuEditTimer(void) {};
cTimer *GetTimer(void);
cTimer GetTimer(void);
};
/******************************************************************************************
@ -205,46 +195,68 @@ class cRecMenuSearchTimers: public cRecMenu {
private:
int numSearchTimers;
std::vector<cTVGuideSearchTimer> searchTimers;
void SetMenuItems(void);
public:
cRecMenuSearchTimers(std::vector<cTVGuideSearchTimer> searchTimers);
virtual ~cRecMenuSearchTimers(void) {};
cRecMenuItem *GetMenuItem(int number);
int GetTotalNumMenuItems(void);
cTVGuideSearchTimer GetSearchTimer(void);
virtual ~cRecMenuSearchTimers(void);
};
// --- cRecMenuSearchTimerEdit ---------------------------------------------------------
class cRecMenuSearchTimerEdit: public cRecMenu {
private:
cTVGuideSearchTimer sT;
std::vector<std::string> searchModes;
std::vector<std::string> subTitleModes;
std::vector<std::string> useChannelModes;
bool advancedOptions;
cTVGuideSearchTimer searchTimer;
std::vector<std::string> channelGroups;
std::vector<std::string> compareDateModes;
std::vector<std::string> searchTimerModes;
std::vector<std::string> delModes;
std::vector<std::string> channelgroups;
std::vector<cRecMenuItem*> mainMenuItems;
cString indent;
bool init;
std::vector<cRecMenuItem*> useChannelSubMenu;
std::vector<cRecMenuItem*> useGroupSubMenu;
std::vector<cRecMenuItem*> useTimeSubMenu;
std::vector<cRecMenuItem*> useDayOfWeekSubMenu;
std::vector<cRecMenuItem*> avoidRepeatSubMenu;
std::vector<cRecMenuItem*> currentMenuItems;
int numMenuItems;
int useChannelPos;
int useTimePos;
int useDayOfWeekPos;
int DayOfWeek(int dayofWeek = 0);
int SetDayOfWeek(int VDRDayOfWeek);
int avoidRepeatsPos;
char searchString[TEXTINPUTLENGTH];
bool timerActive;
int mode;
bool useTitle;
bool useSubtitle;
bool useDescription;
int useChannel;
int startChannel;
int stopChannel;
std::string channelGroup;
std::vector<std::string> channelgroups;
int channelgroupIndex;
bool useTime;
int startTime;
int stopTime;
bool useDayOfWeek;
int dayOfWeek;
int priority;
int lifetime;
bool useEpisode;
char directory[TEXTINPUTLENGTH];
int marginStart;
int marginStop;
bool useVPS;
bool avoidRepeats;
int allowedRepeats;
bool compareTitle;
bool compareSubtitle;
bool compareSummary;
bool useInFavorites;
void InitMenuItems(void);
void AddSubMenu(std::vector<cRecMenuItem*> *subMenu);
int SplitChannelGroups(std::vector<std::string> *channelGroups, std::vector<std::string> *channelgroups);
public:
cRecMenuSearchTimerEdit(cTVGuideSearchTimer searchTimer, std::vector<std::string> channelGroups);
cRecMenuSearchTimerEdit(cTVGuideSearchTimer searchTimer, bool advancedOptions, std::vector<std::string> channelGroups);
void CreateMenuItems(void);
virtual ~cRecMenuSearchTimerEdit(void);
cTVGuideSearchTimer GetSearchTimer(void);
@ -258,7 +270,7 @@ private:
cTVGuideSearchTimer searchTimer;
public:
cRecMenuSearchTimerDeleteConfirm(cTVGuideSearchTimer searchTimer);
virtual ~cRecMenuSearchTimerDeleteConfirm(void) {};
virtual ~cRecMenuSearchTimerDeleteConfirm(void);
cTVGuideSearchTimer GetSearchTimer(void);
};

View File

@ -17,11 +17,9 @@ cTVGuideSearchTimer::cTVGuideSearchTimer(void) {
stopTime = 2359;
useChannel = false;
#if VDRVERSNUM >= 20301
{
LOCK_CHANNELS_READ;
channelMin = Channels->GetByNumber(cDevice::CurrentChannel());
channelMax = Channels->GetByNumber(cDevice::CurrentChannel());
}
#else
channelMin = Channels.GetByNumber(cDevice::CurrentChannel());
channelMax = Channels.GetByNumber(cDevice::CurrentChannel());
@ -40,7 +38,7 @@ cTVGuideSearchTimer::cTVGuideSearchTimer(void) {
dayOfWeek = 0;
directory = "";
useEpisode = 0;
priority = 50;
priority = 99;
lifetime = 99;
marginStart = 5;
marginStop = 5;
@ -49,21 +47,19 @@ cTVGuideSearchTimer::cTVGuideSearchTimer(void) {
useExtEPGInfo = 0;
extEPGInfoValues = "";
avoidRepeats = 1;
compareTitle = 1;
compareSubtitle = 1;
compareSummary = 1;
compareSummaryMatchInPercent = 90;
compareDate = 0;
allowedRepeats = 1;
compareTitle = 1;
compareSubtitle = 2;
compareSummary = 1;
catvaluesAvoidRepeat = 0;
repeatsWithinDays = 0;
delAfterDays = 0;
recordingsKeep = 0;
switchMinsBefore = 1;
switchMinsBefore = 0;
pauseOnNrRecordings = 0;
blacklistMode = 0;
blacklists = "";
fuzzyTolerance = 1;
fuzzyTolerance = 0;
useInFavorites = 0;
menuTemplate = 0;
delMode = 0;
@ -73,14 +69,16 @@ cTVGuideSearchTimer::cTVGuideSearchTimer(void) {
useAsSearchTimerTil = 0;
ignoreMissingEPGCats = 0;
unmuteSoundOnSwitch = 0;
compareSummaryMatchInPercent = 0;
contentsFilter = "";
compareDate = 0;
}
cTVGuideSearchTimer::~cTVGuideSearchTimer(void) {
}
bool cTVGuideSearchTimer::operator < (const cTVGuideSearchTimer& other) const {
std::string searchStringOther = other.GetSearchString();
std::string searchStringOther = other.SearchString();
searchStringOther = StrToLowerCase(searchStringOther);
std::string thisSearchString = StrToLowerCase(searchString);
int comp = thisSearchString.compare(searchStringOther);
@ -97,6 +95,31 @@ void cTVGuideSearchTimer::SetTemplate(std::string tmpl) {
strTimer = searchTimerString.str();
}
int cTVGuideSearchTimer::DayOfWeek(void) {
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;
}
void cTVGuideSearchTimer::SetDayOfWeek(int VDRDayOfWeek) {
int epgSearchDayOfWeek = 0;
for (int i=0; i < 7; i++) {
if (VDRDayOfWeek & (1 << i)) {
epgSearchDayOfWeek += pow(2, (i+1)%7);
}
}
this->dayOfWeek = epgSearchDayOfWeek * (-1);
}
/*
0 - unique search timer id
1 - the search term
@ -497,12 +520,13 @@ std::string cTVGuideSearchTimer::BuildSearchString(void) {
return strTimer;
}
bool cTVGuideSearchTimer::IsActive(void) {
bool cTVGuideSearchTimer::Active(void) {
if (useAsSearchTimer)
return true;
return false;
}
int cTVGuideSearchTimer::GetNumTimers(void) {
int numTimers = 0;
if (ID < 0)
@ -551,42 +575,6 @@ void cTVGuideSearchTimer::GetSearchModes(std::vector<std::string> *searchModes)
searchModes->push_back(tr("one term must exist"));
searchModes->push_back(tr("exact match"));
searchModes->push_back(tr("regular expression"));
searchModes->push_back(tr("fuzzy"));
}
void cTVGuideSearchTimer::GetSubTitleModes(std::vector<std::string> *subTitleModes) {
subTitleModes->push_back(trVDR("no"));
subTitleModes->push_back(trVDR("yes"));
subTitleModes->push_back(tr("allow empty"));
}
void cTVGuideSearchTimer::GetUseChannelModes(std::vector<std::string> *useChannelModes) {
useChannelModes->push_back(tr("No"));
useChannelModes->push_back(tr("Interval"));
useChannelModes->push_back(tr("Channel Group"));
useChannelModes->push_back(tr("only FTA"));
}
void cTVGuideSearchTimer::GetCompareDateModes(std::vector<std::string> *compareDateModes) {
compareDateModes->push_back(tr("No"));
compareDateModes->push_back(tr("same day"));
compareDateModes->push_back(tr("same week"));
compareDateModes->push_back(tr("same month"));
}
void cTVGuideSearchTimer::GetSearchTimerModes(std::vector<std::string> *searchTimerModes) {
searchTimerModes->push_back(tr("Record"));
searchTimerModes->push_back(tr("Announce by OSD"));
searchTimerModes->push_back(tr("Switch only"));
searchTimerModes->push_back(tr("Announce and switch"));
searchTimerModes->push_back(tr("Announce by mail"));
searchTimerModes->push_back(tr("Inactive record"));
}
void cTVGuideSearchTimer::GetDelModes(std::vector<std::string> *delModes) {
delModes->push_back(tr("no"));
delModes->push_back(tr("count recordings"));
delModes->push_back(tr("count days"));
}
void cTVGuideSearchTimer::Dump(void) {
@ -608,3 +596,30 @@ void cTVGuideSearchTimer::Dump(void) {
esyslog("tvguide searchtimer: useSubtitle: %d", useSubtitle);
esyslog("tvguide searchtimer: useDescription: %d", useDescription);
}
void cTVGuideSearchTimer::SetStartChannel(int startChannel)
{
#if VDRVERSNUM >= 20301
LOCK_CHANNELS_READ;
channelMin = Channels->GetByNumber(startChannel);
#else
channelMin = Channels.GetByNumber(startChannel);
#endif
};
void cTVGuideSearchTimer::SetStopChannel(int stopChannel)
{
#if VDRVERSNUM >= 20301
LOCK_CHANNELS_READ;
channelMax = Channels->GetByNumber(stopChannel);
#else
channelMax = Channels.GetByNumber(stopChannel);
#endif
};
void cTVGuideSearchTimer::GetUseChannelModes(std::vector<std::string> *useChannelModes) {
useChannelModes->push_back(tr("No"));
useChannelModes->push_back(tr("Interval"));
useChannelModes->push_back(tr("Channel Group"));
useChannelModes->push_back(tr("only FTA"));
}

View File

@ -3,8 +3,7 @@
class cTVGuideSearchTimer {
friend class cRecMenuSearchTimerEdit;
protected:
private:
std::string strTimer;
int ID;
std::string searchString;
@ -12,8 +11,13 @@ protected:
int startTime;
int stopTime;
int useChannel;
#if VDRVERSNUM >= 20301
const cChannel *channelMin;
const cChannel *channelMax;
#else
cChannel *channelMin;
cChannel *channelMax;
#endif
std::string channelGroup;
int useCase;
int mode;
@ -72,20 +76,68 @@ public:
std::string BuildSearchString(void);
int GetID(void) { return ID; };
//GETTER
std::string GetSearchString(void) const { return searchString; };
bool IsActive(void);
std::string SearchString(void) const { return searchString; };
bool Active(void);
bool UseTitle(void) { return useTitle; };
bool UseSubtitle(void) { return useSubtitle; };
bool UseDescription(void) { return useDescription; };
int SearchMode(void) { return mode; };
int UseChannel(void) { return useChannel; };
int StartChannel(void) { return (channelMin)?channelMin->Number():0; };
int StopChannel(void) { return (channelMax)?channelMax->Number():0; };
std::string ChannelGroup(void) { return channelGroup; };
bool UseTime(void) { return useTime; };
int StartTime(void) { return startTime; };
int StopTime(void) { return stopTime; };
bool UseDayOfWeek(void) { return useDayOfWeek; };
int DayOfWeek(void);
int UseEpisode(void) { return useEpisode; };
std::string Directory(void) { return directory; };
int Priority(void) { return priority; };
int Lifetime(void) { return lifetime; };
int MarginStart(void) { return marginStart; };
int MarginStop(void) { return marginStop; };
bool UseVPS(void) { return useVPS; };
bool AvoidRepeats(void) { return avoidRepeats; };
int AllowedRepeats(void) { return allowedRepeats; };
bool CompareTitle(void) { return compareTitle; };
bool CompareSubtitle(void) { return compareSubtitle; };
bool CompareSummary(void) { return compareSummary; };
bool UseInFavorites(void) { return useInFavorites; };
//SETTER
void SetSearchString(std::string searchString) { this->searchString = searchString; };
void SetActive(bool active) { useAsSearchTimer = active; };
void SetSearchMode(int searchMode) { mode = searchMode; };
void SetUseTitle(bool useTitle) { this->useTitle = useTitle; };
void SetUseSubtitle(bool useSubtitle) { this->useSubtitle = useSubtitle; };
void SetUseDesription(bool useDescription) { this->useDescription = useDescription; };
void SetUseChannel(int useChannel) { this->useChannel = useChannel; };
void SetStartChannel(int startChannel);
void SetStopChannel(int stopChannel);
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 SetUseEpisode(int useEpisode) { this->useEpisode = useEpisode; };
void SetDirectory(std::string directory) { this-> directory = directory; };
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 SetCompareTitle(bool compareTitle) { this->compareTitle = compareTitle; };
void SetCompareSubtitle(bool compareSubtitle) { this->compareSubtitle = compareSubtitle; };
void SetCompareSummary(bool compareSummary) { this->compareSummary = compareSummary; };
void SetUseInFavorites(bool useInFavorites) { this->useInFavorites = useInFavorites; };
//COMMON
int GetNumTimers(void);
int GetNumRecordings(void);
void GetSearchModes(std::vector<std::string> *searchModes);
void GetSubTitleModes(std::vector<std::string> *subTitleModes);
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);
};

View File

@ -1,182 +1,33 @@
/*
* 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 REMOTETIMERSERVICES_INC
#define REMOTETIMERSERVICES_INC
#ifndef _SERVICE__H
#define _SERVICE__H
#include <vdr/timers.h>
#include <vdr/epg.h>
#include <vdr/osdbase.h>
#include <vdr/timers.h>
/*
* If the Data argument is NULL, all service calls return true.
* Otherwise the return value indicates success or failure of the service call.
*
* The service calls are not thread safe and must be called from the VDR main loop.
*/
/*
* 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;
// RemoteTimers services
struct RemoteTimers_Event_v1_0 {
//in
const cEvent *event;
//out
cString name;
cString fileName;
//out
cTimer *timer;
cString errorMsg;
};
/*
* 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 {
//in
//in
const cEvent *event;
//out
//out
cTimer *timer;
int timerMatch;
int timerType;
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 {
//in+out
//in+out
cTimer *timer;
//out
//out
cString errorMsg;
};
/*
* 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
#endif //REMOTETIMERSERVICES_INC

549
setup.c
View File

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

19
setup.h
View File

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

View File

@ -9,15 +9,15 @@ cStatusHeader::cStatusHeader(void) {
height = geoManager.statusHeaderHeight;
width = geoManager.headerContentWidth;
tvFrameWidth = geoManager.tvFrameWidth;
pixmap = osdManager.CreatePixmap(1, cRect(0, 0, width, height));
pixmapText = osdManager.CreatePixmap(2, cRect(0, 0, width, height));
pixmapTVFrame = osdManager.CreatePixmap(1, cRect(width, 0, tvFrameWidth, height));
pixmap = osdManager.requestPixmap(1, cRect(0, 0, width, height));
pixmapText = osdManager.requestPixmap(2, cRect(0, 0, width, height));
pixmapTVFrame = osdManager.requestPixmap(1, cRect(width, 0, tvFrameWidth, height));
}
cStatusHeader::~cStatusHeader(void) {
osdManager.DestroyPixmap(pixmapText);
osdManager.DestroyPixmap(pixmapTVFrame);
if (config.scaleVideo) {
osdManager.releasePixmap(pixmapText);
osdManager.releasePixmap(pixmapTVFrame);
if (tvguideConfig.scaleVideo) {
cRect vidWin = cDevice::PrimaryDevice()->CanScaleVideo(cRect::Null);
cDevice::PrimaryDevice()->ScaleVideo(vidWin);
}
@ -26,8 +26,8 @@ cStatusHeader::~cStatusHeader(void) {
void cStatusHeader::Draw(void) {
pixmapText->Fill(clrTransparent);
pixmapTVFrame->Fill(clrTransparent);
if (config.style == eStyleGraphical) {
if (config.scaleVideo) {
if (tvguideConfig.style == eStyleGraphical) {
if (tvguideConfig.scaleVideo) {
drawBackgroundGraphical(bgStatusHeaderWindowed);
cImage *tvFrameBack = imgCache.GetOsdElement(oeStatusHeaderTVFrame);
if (tvFrameBack)
@ -36,7 +36,7 @@ void cStatusHeader::Draw(void) {
drawBackgroundGraphical(bgStatusHeaderFull);
}
} else {
if (config.decorateVideo) {
if (tvguideConfig.decorateVideo) {
DecorateVideoFrame();
}
drawBackground();
@ -45,7 +45,7 @@ void cStatusHeader::Draw(void) {
}
void cStatusHeader::ScaleVideo(void) {
if (config.scaleVideo) {
if (tvguideConfig.scaleVideo) {
int width = height * 16 / 9;
int x = osdManager.Left() + geoManager.osdWidth - width;
int y = osdManager.Top();
@ -55,15 +55,15 @@ void cStatusHeader::ScaleVideo(void) {
}
}
void cStatusHeader::DrawInfoText(cGridElement *grid) {
void cStatusHeader::DrawInfoText(cGrid *grid) {
int border = 10;
int textWidth = 0;
textWidth = width - 2 * border;
tColor colorTextBack = (config.style == eStyleFlat)?color:clrTransparent;
tColor colorTextBack = (tvguideConfig.style == eStyleFlat)?color:clrTransparent;
pixmapText->Fill(clrTransparent);
int x = border;
int y = border;
if (!grid->IsDummy()) {
if (!grid->isDummy()) {
const cEvent *event = grid->GetEvent();
int newX = DrawPoster(event, x, y, height-2*border, border);
if (newX > 0) {

View File

@ -2,7 +2,7 @@
#define __TVGUIDE_STATUSHEADER_H
#include "styledpixmap.h"
#include "gridelement.h"
#include "grid.h"
// --- cStatusHeader -------------------------------------------------------------
@ -19,7 +19,7 @@ public:
virtual ~cStatusHeader(void);
void Draw(void);
void ScaleVideo(void);
void DrawInfoText(cGridElement *grid);
void DrawInfoText(cGrid *grid);
};
#endif //__TVGUIDE_STATUSHEADER_H

View File

@ -12,7 +12,7 @@ cStyledPixmap::cStyledPixmap(cPixmap *pixmap) {
cStyledPixmap::~cStyledPixmap(void) {
if (pixmap)
osdManager.DestroyPixmap(pixmap);
osdManager.releasePixmap(pixmap);
}
void cStyledPixmap::setPixmap(cPixmap *pixmap) {
@ -22,9 +22,9 @@ void cStyledPixmap::setPixmap(cPixmap *pixmap) {
}
void cStyledPixmap::drawBackground() {
if (config.style == eStyleBlendingDefault){
if (tvguideConfig.style == eStyleBlendingDefault){
drawBlendedBackground();
} else if (config.style == eStyleBlendingMagick){
} else if (tvguideConfig.style == eStyleBlendingMagick){
drawSparsedBackground();
} else {
pixmap->Fill(color);
@ -129,7 +129,7 @@ void cStyledPixmap::drawBorder() {
int height = pixmap->ViewPort().Height();
drawDefaultBorder(width, height);
if (config.roundedCorners) {
if (tvguideConfig.roundedCorners) {
int borderRadius = 12;
drawRoundedCorners(width, height, borderRadius);
}

View File

@ -3,7 +3,7 @@
#include <vdr/osd.h>
#include <vdr/epg.h>
#include "timemanager.h"
#include "timer.h"
#include "config.h"
enum eBackgroundType {

View File

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

View File

@ -1,11 +1,11 @@
Description = IceBlue
clrStyle = 00000000
clrBackground = EEFFFFFF
clrBackgroundOSD = F0FFFFFF
clrGrid1 = FFB2B2C
clrGrid2 = 55B2B2C7
clrBackground = DDFFFFFF
clrBackgroundOSD = FFFFFFFF
clrGrid1 = BB555555
clrGrid2 = BB888888
clrGridFontBack = 00000000
clrGridActiveFontBack = FFFFFFFF
clrGridActiveFontBack = 00000000
clrHighlight = FF000044
clrFont = FF000000
clrFontActive = FFFFFFFF
@ -20,14 +20,14 @@ clrTimeline1Blending = 00000000
clrTimeline2 = FF000000
clrTimeline2Blending = 00000000
clrTimeBase = A0FF0000
clrTabInactive = 55B2B2C7
clrButtonRed = FFCC00000
clrTabInactive = 88B8B8E6
clrButtonRed = FFBB0000
clrButtonRedBorder = FF000000
clrButtonGreen = FF00BB00
clrButtonGreenBorder = FF000000
clrButtonYellow = FFF5B800
clrButtonYellow = FFBBBB00
clrButtonYellowBorder = FF000000
clrButtonBlue = FF003DF5
clrButtonBlue = FF0000BB
clrButtonBlueBorder = FF000000
clrRecMenuBackground = AA000000
clrRecMenuTimerConflictBackground = FFCCCCCC
@ -36,16 +36,16 @@ clrRecMenuTimerConflictOverlap = AAFF0000
clrRecMenuDayActive = FF00FF00
clrRecMenuDayInactive = FFFF0000
clrRecMenuDayHighlight = 77000000
clrRecMenuTextBack = 00000000
clrRecMenuTextBack = FF3C3C3C
clrRecMenuTextActiveBack = FF404749
clrRecMenuKeyboardBack = FF000044
clrRecMenuKeyboardBorder = FF6C6C6C
clrRecMenuKeyboardBorder = FF3C3C3C
clrRecMenuKeyboardHigh = 55FFFFFF
clrButtonRedKeyboard = FFBB0000
clrButtonGreenKeyboard = FF00BB00
clrButtonYellowKeyboard = FFBBBB00
clrRecMenuTimelineTimer = B012273f
clrRecMenuTimelineBack = 55B2B2C7
clrRecMenuTimelineActive = 773F3F3F
clrRecMenuTimelineBack = FF828282
clrRecMenuTimelineActive = FF3F3F3F
clrRecMenuTimelineConflict = 30FF0000
clrRecMenuTimelineConflictOverlap = 90FF0000

View File

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

View File

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

View File

@ -1,26 +1,23 @@
#ifndef __TVGUIDE_TIMEMANAGER_H
#define __TVGUIDE_TIMEMANAGER_H
#ifndef __TVGUIDE_TIMER_H
#define __TVGUIDE_TIMER_H
#include <vdr/tools.h>
#include "config.h"
// --- cTimeManager -------------------------------------------------------------
// --- cMyTime -------------------------------------------------------------
class cTimeManager {
class cMyTime {
private:
time_t t;
time_t tStart;
time_t tEnd;
int displaySeconds;
eTimeFormat timeFormat;
public:
cTimeManager();
virtual ~cTimeManager(void);
cMyTime(){};
virtual ~cMyTime(void);
static cString printTime(time_t displayTime);
void Now();
time_t GetNow() { return t; };
void AddStep(int step);
void DelStep(int step);
bool DelStep(int step);
void SetTime(time_t newTime);
time_t Get() {return t;};
time_t GetStart() {return tStart;};
@ -34,7 +31,6 @@ class cTimeManager {
int GetTimelineOffset();
time_t GetRounded();
bool NowVisible(void);
int GetDisplaySeconds(void) { return displaySeconds; };
void debug();
};
@ -53,4 +49,4 @@ class cTimeInterval {
cTimeInterval *Union(cTimeInterval *interval);
};
#endif //__TVGUIDE_TIMEMANAGER_H
#endif //__TVGUIDE_TIMER_H

View File

@ -2,7 +2,7 @@
#include <vector>
#include <vdr/timers.h>
#include "tools.h"
#include "timemanager.h"
#include "timer.h"
#include "timerconflict.h"
cTVGuideTimerConflict::cTVGuideTimerConflict(void) {
@ -16,11 +16,12 @@ cTVGuideTimerConflict::cTVGuideTimerConflict(void) {
}
cTVGuideTimerConflict::~cTVGuideTimerConflict(void) {
}
bool cTVGuideTimerConflict::timerInvolved(int involvedID) {
int numConflicts = timerIDs.size();
for (int i = 0; i < numConflicts; i++) {
for (int i=0; i<numConflicts; i++) {
if (timerIDs[i] == involvedID)
return true;
}
@ -48,7 +49,8 @@ void cTVGuideTimerConflicts::AddConflict(std::string epgSearchConflictLine) {
1190232780:152|30|50#152#45:45|10|50#152#45
'1190232780' is the time of the conflict in seconds since 1970-01-01.
It's followed by list of timers that have a conflict at this time:
'152|30|50#152#45' is the description of the first conflicting timer. Here:
'152|30|50#1 int editTimer(cTimer *timer, bool active, int prio, int start, int stop);
52#45' is the description of the first conflicting timer. Here:
'152' is VDR's timer id of this timer as returned from VDR's LSTT command
'30' is the percentage of recording that would be done (0...100)
'50#152#45' is the list of concurrent timers at this conflict
@ -84,13 +86,11 @@ void cTVGuideTimerConflicts::CalculateConflicts(void) {
#if VDRVERSNUM >= 20301
LOCK_TIMERS_READ;
const cTimers* timers = Timers;
for (int j=0; j < numTimers; j++) {
const cTimer *timer = timers->GetById(conflicts[i]->timerIDs[j] + 1);
#else
const cTimers* timers = &Timers;
#endif
for (int j=0; j < numTimers; j++) {
const cTimer *timer = timers->Get(conflicts[i]->timerIDs[j]);
#endif
if (timer) {
if (!unionSet) {
unionSet = new cTimeInterval(timer->StartTime(), timer->StopTime());
@ -109,11 +109,7 @@ void cTVGuideTimerConflicts::CalculateConflicts(void) {
cTimeInterval *intersect = NULL;
for (int j=0; j < numTimers; j++) {
#if VDRVERSNUM >= 20301
const cTimer *timer = timers->GetById(conflicts[i]->timerIDs[j] + 1);
#else
const cTimer *timer = timers->Get(conflicts[i]->timerIDs[j]);
#endif
if (timer) {
if (!intersect) {
intersect = new cTimeInterval(timer->StartTime(), timer->StopTime());
@ -156,7 +152,7 @@ int cTVGuideTimerConflicts::GetCurrentConflictTimerID(int timerIndex) {
int cTVGuideTimerConflicts::GetCorrespondingConflict(int timerID) {
int conflictIndex = -1;
if (numConflicts > 0) {
for (int i = 0; i < numConflicts; i++) {
for (int i=0; i<numConflicts; i++) {
if (conflicts[i]->timerInvolved(timerID)) {
conflictIndex = i;
break;
@ -176,7 +172,7 @@ cTVGuideTimerConflict *cTVGuideTimerConflicts::GetConflict(int conflictIndex) {
std::vector<cTVGuideTimerConflict*> cTVGuideTimerConflicts::GetConflictsBetween(time_t start, time_t stop) {
std::vector<cTVGuideTimerConflict*> conflictsFound;
for (int i = 0; i < numConflicts; i++) {
for (int i=0; i < numConflicts; i++) {
if ((conflicts[i]->timeStart > start) && (conflicts[i]->timeStart < stop)||
(conflicts[i]->timeStop > start) && (conflicts[i]->timeStop < stop))
conflictsFound.push_back(conflicts[i]);

77
tools.c
View File

@ -10,6 +10,7 @@
#include <vdr/plugin.h>
#include <vdr/skins.h>
#include "services/epgsearch.h"
#include "tools.h"
cPlugin *GetScraperPlugin(void) {
@ -22,49 +23,32 @@ cPlugin *GetScraperPlugin(void) {
/****************************************************************************************
* CUTTEXT
****************************************************************************************/
std::string utf8_substr(const std::string& str, unsigned int start, long unsigned int leng) {
if (leng==0) { return ""; }
unsigned int c, i, ix, q;
long unsigned int min=std::string::npos, max=std::string::npos;
for (q=0, i=0, ix=str.length(); i < ix; i++, q++) {
if (q==start){ min=i; }
if (q<=start+leng || leng==std::string::npos){ max=i; }
c = (unsigned char) str[i];
if (c>=0 && c<=127) i+=0;
else if ((c & 0xE0) == 0xC0) i+=1;
else if ((c & 0xF0) == 0xE0) i+=2;
else if ((c & 0xF8) == 0xF0) i+=3;
//else if (($c & 0xFC) == 0xF8) i+=4; // 111110bb //byte 5, unnecessary in 4 byte UTF-8
//else if (($c & 0xFE) == 0xFC) i+=5; // 1111110b //byte 6, unnecessary in 4 byte UTF-8
else return "";//invalid utf8
}
if (q<=start+leng || leng==std::string::npos){ max=i; }
if (min==std::string::npos || max==std::string::npos) { return ""; }
return str.substr(min,max-min);
}
std::string CutText(std::string text, int width, const cFont *font) {
int actWidth = font->Width(text.c_str());
if (actWidth <= width) {
if (width <= font->Size())
return text.c_str();
} else {
int i = std::max(width / font->Size(), 1) - 1;
std::string cuttext, oldtext;
cuttext = utf8_substr(text, 0, i);
do {
oldtext = cuttext;
i++;
cuttext = utf8_substr(text, 0, i);
if (font->Width(text.c_str()) < width)
return text.c_str();
cTextWrapper twText;
twText.Set(text.c_str(), font, width);
std::string cuttedTextNative = twText.GetLine(0);
std::stringstream sstrText;
sstrText << cuttext << "...";
actWidth = font->Width(sstrText.str().c_str());
}
while (actWidth < width);
sstrText << cuttedTextNative << "...";
std::string cuttedText = sstrText.str();
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 << oldtext << "...";
return sstrText2.str();
sstrText2 << cuttedTextNative << "...";
cuttedText = sstrText2.str();
}
}
return cuttedText;
}
/****************************************************************************************
@ -129,6 +113,7 @@ void ReadRecordingDirectories(std::vector<std::string> *folders, cList<cNestedIt
}
}
/****************************************************************************************
* DrawRoundedCorners
****************************************************************************************/
@ -434,8 +419,8 @@ ALGORITHM
******************************************************************************/
int afuzzy_checkSUB(const char *t, AFUZZY *fuzzy)
{
char c;
int j, d;
register char c;
register int j, d;
/* For eficciency this case should be little bit optimized */
if (!fuzzy->k)
@ -449,7 +434,7 @@ int afuzzy_checkSUB(const char *t, AFUZZY *fuzzy)
if (R1 & fuzzy->mask_ok)
return 1;
} /* end for (int j = 0 ... */
} /* end for (register int j = 0 ... */
return 0;
}
@ -473,16 +458,16 @@ int afuzzy_checkSUB(const char *t, AFUZZY *fuzzy)
memcpy(fuzzy->R, fuzzy->R1, fuzzy->r_size);
} /* end for (int j = 0 ... */
} /* end for (register int j = 0 ... */
return 0;
}
int afuzzy_checkFLT(const char *t, AFUZZY *fuzzy)
{
Uint FilterR = 0;
Uint FilterR1;
int j;
register Uint FilterR = 0;
register Uint FilterR1;
register int j;
for (j = 0; t[j] != '\0'; j++)
{
@ -491,7 +476,7 @@ int afuzzy_checkFLT(const char *t, AFUZZY *fuzzy)
if (FilterR1 & fuzzy->filter_ok)
return 1;
FilterR = FilterR1;
} /* end for (int j = 0 ... */
} /* end for (register int j = 0 ... */
return 0;
}

View File

@ -9,7 +9,6 @@
cPlugin *GetScraperPlugin(void);
std::string utf8_substr(const std::string& str, unsigned int start=0, long unsigned int leng=std::string::npos);
std::string CutText(std::string text, int width, const cFont *font);
std::string StrToLowerCase(std::string str);
std::string GetDirectoryFromTimer(std::string file);

View File

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

View File

@ -15,14 +15,14 @@ cTvGuideOsd::cTvGuideOsd(void) {
detailViewActive = false;
activeGrid = NULL;
timeLine = NULL;
recMenuView = NULL;
recMenuManager = NULL;
channelJumper = NULL;
}
cTvGuideOsd::~cTvGuideOsd() {
delete timeManager;
delete myTime;
columns.Clear();
if (config.displayStatusHeader) {
if (tvguideConfig.displayStatusHeader) {
delete statusHeader;
}
if (detailView)
@ -30,18 +30,20 @@ cTvGuideOsd::~cTvGuideOsd() {
delete timeLine;
delete channelGroups;
delete footer;
delete recMenuView;
delete recMenuManager;
if (channelJumper)
delete channelJumper;
osdManager.DeleteOsd();
osdManager.deleteOsd();
}
void cTvGuideOsd::Show(void) {
int start = cTimeMs::Now();
if (osdManager.CreateOsd()) {
bool themeChanged = config.LoadTheme();
config.SetStyle();
config.setDynamicValues();
bool ok = false;
ok = osdManager.setOsd();
if (ok) {
bool themeChanged = tvguideConfig.LoadTheme();
tvguideConfig.SetStyle();
tvguideConfig.setDynamicValues();
bool geoChanged = geoManager.SetGeometry(cOsd::OsdWidth(), cOsd::OsdHeight());
if (themeChanged || geoChanged) {
fontManager.DeleteFonts();
@ -49,16 +51,16 @@ void cTvGuideOsd::Show(void) {
imgCache.Clear();
imgCache.CreateCache();
}
osdManager.SetBackground();
timeManager = new cTimeManager();
timeManager->Now();
osdManager.setBackground();
myTime = new cMyTime();
myTime->Now();
SwitchTimers.Load(AddDirectory(cPlugin::ConfigDirectory("epgsearch"), "epgsearchswitchtimers.conf"));
recMenuView = new cRecMenuView();
recMenuManager = new cRecMenuManager();
pRemoteTimers = cPluginManager::CallFirstService("RemoteTimers::RefreshTimers-v1.0", NULL);
if (pRemoteTimers) {
isyslog("tvguide: remotetimers-plugin is available");
}
if (config.useRemoteTimers && pRemoteTimers) {
if (tvguideConfig.useRemoteTimers && pRemoteTimers) {
cString errorMsg;
if (!pRemoteTimers->Service("RemoteTimers::RefreshTimers-v1.0", &errorMsg)) {
esyslog("tvguide: %s", *errorMsg);
@ -71,7 +73,7 @@ void cTvGuideOsd::Show(void) {
void cTvGuideOsd::drawOsd() {
cPixmap::Lock();
int numBack = config.numGrids / 2;
int numBack = tvguideConfig.numGrids / 2;
int offset = 0;
const cChannel *newStartChannel;
#if VDRVERSNUM >= 20301
@ -104,29 +106,29 @@ void cTvGuideOsd::drawOsd() {
if (offset < 0)
offset = 0;
if (config.displayStatusHeader) {
if (tvguideConfig.displayStatusHeader) {
statusHeader = new cStatusHeader();
statusHeader->Draw();
statusHeader->ScaleVideo();
}
timeLine = new cTimeLine(timeManager);
timeLine->DrawDateViewer();
timeLine->DrawTimeline();
timeLine->DrawClock();
timeLine = new cTimeLine(myTime);
timeLine->drawDateViewer();
timeLine->drawTimeline();
timeLine->drawClock();
channelGroups = new cChannelGroups();
channelGroups->ReadChannelGroups();
footer = new cFooter(channelGroups);
recMenuView->AddFooter(footer);
recMenuManager->SetFooter(footer);
footer->drawRedButton();
if (config.channelJumpMode == eNumJump) {
if (tvguideConfig.channelJumpMode == eNumJump) {
footer->drawGreenButton();
footer->drawYellowButton();
}
footer->drawBlueButton(false);
osdManager.Flush();
osdManager.flush();
readChannels(newStartChannel);
drawGridsChannelJump(offset);
osdManager.Flush();
osdManager.flush();
cPixmap::Unlock();
}
@ -150,7 +152,7 @@ void cTvGuideOsd::readChannels(const cChannel *channelStart) {
if (channelGroups->IsInLastGroup(channel)) {
break;
}
cChannelEpg *column = new cChannelEpg(i, channel, timeManager);
cChannelColumn *column = new cChannelColumn(i, channel, myTime);
if (column->readGrids()) {
columns.Add(column);
i++;
@ -158,14 +160,14 @@ void cTvGuideOsd::readChannels(const cChannel *channelStart) {
delete column;
}
}
if (i == config.numGrids) {
if (i == tvguideConfig.numGrids) {
foundEnough = true;
break;
}
}
if (!foundEnough) {
int numCurrent = columns.Count();
int numBack = config.numGrids - numCurrent;
int numBack = tvguideConfig.numGrids - numCurrent;
int newChannelNumber = columns.First()->getChannel()->Number() - numBack;
const cChannel *newStart = channels->GetByNumber(newChannelNumber);
readChannels(newStart);
@ -178,46 +180,46 @@ void cTvGuideOsd::drawGridsChannelJump(int offset) {
activeGrid = columns.Get(offset)->getActive();
if (activeGrid)
activeGrid->SetActive();
if (config.displayStatusHeader) {
if (tvguideConfig.displayStatusHeader) {
statusHeader->DrawInfoText(activeGrid);
}
if (activeGrid && (config.channelJumpMode == eGroupJump)) {
if (activeGrid && (tvguideConfig.channelJumpMode == eGroupJump)) {
footer->UpdateGroupButtons(activeGrid->column->getChannel());
}
if (config.displayChannelGroups) {
if (tvguideConfig.displayChannelGroups) {
channelGroups->DrawChannelGroups(columns.First()->getChannel(), columns.Last()->getChannel());
}
for (cChannelEpg *column = columns.First(); column; column = columns.Next(column)) {
for (cChannelColumn *column = columns.First(); column; column = columns.Next(column)) {
column->createHeader();
column->drawGrids();
}
}
void cTvGuideOsd::drawGridsTimeJump(bool last) {
void cTvGuideOsd::drawGridsTimeJump() {
if (columns.Count() == 0)
return;
cChannelEpg *colActive = NULL;
cChannelColumn *colActive = NULL;
if (activeGrid) {
colActive = activeGrid->column;
} else {
colActive = columns.First();
}
for (cChannelEpg *column = columns.First(); column; column = columns.Next(column)) {
for (cChannelColumn *column = columns.First(); column; column = columns.Next(column)) {
column->clearGrids();
column->readGrids();
column->drawGrids();
}
activeGrid = colActive->getActive(last);
activeGrid = colActive->getActive();
if (activeGrid) {
activeGrid->SetActive();
activeGrid->Draw();
if (config.displayStatusHeader) {
if (tvguideConfig.displayStatusHeader) {
statusHeader->DrawInfoText(activeGrid);
}
}
}
void cTvGuideOsd::setNextActiveGrid(cGridElement *next) {
void cTvGuideOsd::setNextActiveGrid(cGrid *next) {
if (!next || !activeGrid) {
return;
}
@ -226,31 +228,28 @@ void cTvGuideOsd::setNextActiveGrid(cGridElement *next) {
activeGrid = next;
activeGrid->SetActive();
activeGrid->Draw();
if (config.displayStatusHeader) {
if (tvguideConfig.displayStatusHeader) {
statusHeader->DrawInfoText(activeGrid);
}
}
void cTvGuideOsd::channelForward() {
cChannelEpg *colRight = columns.Next(activeGrid->column);
cChannelColumn *colRight = columns.Next(activeGrid->column);
bool colAdded = false;
if (!colRight) {
const cChannel *channelRight = activeGrid->column->getChannel();
const cChannels *channels;
#if VDRVERSNUM >= 20301
{
LOCK_CHANNELS_READ;
channels = Channels;
}
while (channelRight = Channels->Next(channelRight)) {
#else
channels = &Channels;
while (channelRight = Channels.Next(channelRight)) {
#endif
while (channelRight = channels->Next(channelRight)) {
if (!channelRight->GroupSep()) {
if (channelGroups->IsInLastGroup(channelRight)) {
break;
}
colRight = new cChannelEpg(config.numGrids - 1, channelRight, timeManager);
colRight = new cChannelColumn(tvguideConfig.numGrids - 1, channelRight, myTime);
if (colRight->readGrids()) {
break;
} else {
@ -259,13 +258,16 @@ void cTvGuideOsd::channelForward() {
}
}
}
#if VDRVERSNUM >= 20301
} //LOCK_CHANNELS_READ
#endif
if (colRight) {
colAdded = true;
if (columns.Count() == config.numGrids) {
cChannelEpg *cFirst = columns.First();
if (columns.Count() == tvguideConfig.numGrids) {
cChannelColumn *cFirst = columns.First();
columns.Del(cFirst);
}
for (cChannelEpg *column = columns.First(); column; column = columns.Next(column)) {
for (cChannelColumn *column = columns.First(); column; column = columns.Next(column)) {
column->SetNum(column->GetNum() - 1);
column->drawHeader();
column->drawGrids();
@ -276,37 +278,34 @@ void cTvGuideOsd::channelForward() {
}
}
if (colRight) {
cGridElement *right = colRight->getNeighbor(activeGrid);
cGrid *right = colRight->getNeighbor(activeGrid);
if (right) {
setNextActiveGrid(right);
}
}
if (config.displayChannelGroups && colAdded) {
if (tvguideConfig.displayChannelGroups && colAdded) {
channelGroups->DrawChannelGroups(columns.First()->getChannel(), columns.Last()->getChannel());
}
if (activeGrid && (config.channelJumpMode == eGroupJump)) {
if (activeGrid && (tvguideConfig.channelJumpMode == eGroupJump)) {
footer->UpdateGroupButtons(activeGrid->column->getChannel());
}
osdManager.Flush();
osdManager.flush();
}
void cTvGuideOsd::channelBack() {
cChannelEpg *colLeft = columns.Prev(activeGrid->column);
cChannelColumn *colLeft = columns.Prev(activeGrid->column);
bool colAdded = false;
if (!colLeft) {
const cChannel *channelLeft = activeGrid->column->getChannel();
const cChannels *channels;
#if VDRVERSNUM >= 20301
{
LOCK_CHANNELS_READ;
channels = Channels;
}
while (channelLeft = Channels->Prev(channelLeft)) {
#else
channels = &Channels;
while (channelLeft = Channels.Prev(channelLeft)) {
#endif
while (channelLeft = channels->Prev(channelLeft)) {
if (!channelLeft->GroupSep()) {
colLeft = new cChannelEpg(0, channelLeft, timeManager);
colLeft = new cChannelColumn(0, channelLeft, myTime);
if (colLeft->readGrids()) {
break;
} else {
@ -315,13 +314,16 @@ void cTvGuideOsd::channelBack() {
}
}
}
#if VDRVERSNUM >= 20301
} //LOCK_CHANNELS_READ
#endif
if (colLeft) {
colAdded = true;
if (columns.Count() == config.numGrids) {
cChannelEpg *cLast = columns.Last();
if (columns.Count() == tvguideConfig.numGrids) {
cChannelColumn *cLast = columns.Last();
columns.Del(cLast);
}
for (cChannelEpg *column = columns.First(); column; column = columns.Next(column)) {
for (cChannelColumn *column = columns.First(); column; column = columns.Next(column)) {
column->SetNum(column->GetNum() + 1);
column->drawHeader();
column->drawGrids();
@ -333,31 +335,31 @@ void cTvGuideOsd::channelBack() {
}
if (colLeft) {
cGridElement *left = colLeft->getNeighbor(activeGrid);
cGrid *left = colLeft->getNeighbor(activeGrid);
if (left) {
setNextActiveGrid(left);
}
}
if (config.displayChannelGroups && colAdded) {
if (tvguideConfig.displayChannelGroups && colAdded) {
channelGroups->DrawChannelGroups(columns.First()->getChannel(), columns.Last()->getChannel());
}
if (activeGrid && (config.channelJumpMode == eGroupJump)) {
if (activeGrid && (tvguideConfig.channelJumpMode == eGroupJump)) {
footer->UpdateGroupButtons(activeGrid->column->getChannel());
}
osdManager.Flush();
osdManager.flush();
}
void cTvGuideOsd::timeForward() {
bool actionDone = false;
if ((timeManager->GetEnd() - activeGrid->EndTime())/60 < 30 ) {
if ( (myTime->GetEnd() - activeGrid->EndTime())/60 < 30 ) {
ScrollForward();
actionDone = true;
}
cGridElement *next = activeGrid->column->getNext(activeGrid);
cGrid *next = activeGrid->column->getNext(activeGrid);
if (next) {
if ( (next->EndTime() < timeManager->GetEnd())
|| ( (timeManager->GetEnd() - next->StartTime())/60 > 30 ) ) {
if ( (next->EndTime() < myTime->GetEnd())
|| ( (myTime->GetEnd() - next->StartTime())/60 > 30 ) ) {
setNextActiveGrid(next);
actionDone = true;
}
@ -365,37 +367,31 @@ void cTvGuideOsd::timeForward() {
if (!actionDone) {
ScrollForward();
}
osdManager.Flush();
osdManager.flush();
}
void cTvGuideOsd::ScrollForward() {
timeManager->AddStep(config.stepMinutes);
if (config.useHWAccel) {
drawGridsTimeJump(true);
timeLine->DrawDateViewer();
timeLine->DrawClock();
timeLine->DrawTimeline();
} else {
timeLine->DrawDateViewer();
timeLine->DrawTimeline();
for (cChannelEpg *column = columns.First(); column; column = columns.Next(column)) {
myTime->AddStep(tvguideConfig.stepMinutes);
timeLine->drawDateViewer();
timeLine->drawClock();
timeLine->setTimeline();
for (cChannelColumn *column = columns.First(); column; column = columns.Next(column)) {
column->AddNewGridsAtEnd();
column->ClearOutdatedStart();
column->drawGrids();
}
}
}
void cTvGuideOsd::timeBack() {
bool actionDone = false;
if ((activeGrid->StartTime() - timeManager->GetStart())/60 < 30 ) {
if ( (activeGrid->StartTime() - myTime->GetStart())/60 < 30 ) {
ScrollBack();
actionDone = true;
}
cGridElement *prev = activeGrid->column->getPrev(activeGrid);
cGrid *prev = activeGrid->column->getPrev(activeGrid);
if (prev) {
if ( (prev->StartTime() > timeManager->GetStart())
|| ( (prev->EndTime() - timeManager->GetStart())/60 > 30 )
if ( (prev->StartTime() > myTime->GetStart())
|| ( (prev->EndTime() - myTime->GetStart())/60 > 30 )
|| ( prev->isFirst()) ) {
setNextActiveGrid(prev);
actionDone = true;
@ -404,34 +400,30 @@ void cTvGuideOsd::timeBack() {
if (!actionDone) {
ScrollBack();
}
osdManager.Flush();
osdManager.flush();
}
void cTvGuideOsd::ScrollBack() {
timeManager->DelStep(config.stepMinutes);
if (config.useHWAccel) {
drawGridsTimeJump();
timeLine->DrawDateViewer();
timeLine->DrawClock();
timeLine->DrawTimeline();
} else {
timeLine->DrawDateViewer();
timeLine->DrawTimeline();
for (cChannelEpg *column = columns.First(); column; column = columns.Next(column)) {
bool tooFarInPast = myTime->DelStep(tvguideConfig.stepMinutes);
if (tooFarInPast)
return;
timeLine->drawDateViewer();
timeLine->drawClock();
timeLine->setTimeline();
for (cChannelColumn *column = columns.First(); column; column = columns.Next(column)) {
column->AddNewGridsAtStart();
column->ClearOutdatedEnd();
column->drawGrids();
}
}
}
void cTvGuideOsd::processKeyUp() {
if (!activeGrid) {
return;
}
if (config.displayMode == eVertical) {
if (tvguideConfig.displayMode == eVertical) {
timeBack();
} else if (config.displayMode == eHorizontal) {
} else if (tvguideConfig.displayMode == eHorizontal) {
channelBack();
}
}
@ -440,9 +432,9 @@ void cTvGuideOsd::processKeyDown() {
if (!activeGrid) {
return;
}
if (config.displayMode == eVertical) {
if (tvguideConfig.displayMode == eVertical) {
timeForward();
} else if (config.displayMode == eHorizontal) {
} else if (tvguideConfig.displayMode == eHorizontal) {
channelForward();
}
}
@ -450,9 +442,9 @@ void cTvGuideOsd::processKeyDown() {
void cTvGuideOsd::processKeyLeft() {
if (activeGrid == NULL)
return;
if (config.displayMode == eVertical) {
if (tvguideConfig.displayMode == eVertical) {
channelBack();
} else if (config.displayMode == eHorizontal) {
} else if (tvguideConfig.displayMode == eHorizontal) {
timeBack();
}
}
@ -460,17 +452,17 @@ void cTvGuideOsd::processKeyLeft() {
void cTvGuideOsd::processKeyRight() {
if (activeGrid == NULL)
return;
if (config.displayMode == eVertical) {
if (tvguideConfig.displayMode == eVertical) {
channelForward();
} else if (config.displayMode == eHorizontal) {
} else if (tvguideConfig.displayMode == eHorizontal) {
timeForward();
}
}
void cTvGuideOsd::processKeyRed() {
if ((activeGrid == NULL) || activeGrid->IsDummy())
if ((activeGrid == NULL) || activeGrid->isDummy())
return;
recMenuView->Start(activeGrid->GetEvent());
recMenuManager->Start(activeGrid->GetEvent());
}
void cTvGuideOsd::processKeyGreen() {
@ -482,7 +474,7 @@ void cTvGuideOsd::processKeyGreen() {
int currentCol = activeGrid->column->GetNum();
const cChannel *prev = NULL;
if (config.channelJumpMode == eGroupJump) {
if (tvguideConfig.channelJumpMode == eGroupJump) {
int prevNum = channelGroups->GetPrevGroupChannelNumber(currentChannel);
if (prevNum) {
#if VDRVERSNUM >= 20301
@ -492,8 +484,8 @@ void cTvGuideOsd::processKeyGreen() {
prev = Channels.GetByNumber(prevNum);
#endif
}
} else if (config.channelJumpMode == eNumJump) {
int i = config.jumpChannels + 1;
} else if (tvguideConfig.channelJumpMode == eNumJump) {
int i = tvguideConfig.jumpChannels + 1;
#if VDRVERSNUM >= 20301
LOCK_CHANNELS_READ;
for (const cChannel *channel = firstChannel; channel; channel = Channels->Prev(channel)) {
@ -511,12 +503,12 @@ void cTvGuideOsd::processKeyGreen() {
if (prev) {
readChannels(prev);
if (columns.Count() > 0) {
if (config.channelJumpMode == eGroupJump)
if (tvguideConfig.channelJumpMode == eGroupJump)
drawGridsChannelJump();
else
drawGridsChannelJump(currentCol);
}
osdManager.Flush();
osdManager.flush();
}
}
@ -528,7 +520,7 @@ void cTvGuideOsd::processKeyYellow() {
const cChannel *firstChannel = columns.First()->getChannel();
const cChannel *next = NULL;
if (config.channelJumpMode == eGroupJump) {
if (tvguideConfig.channelJumpMode == eGroupJump) {
int nextNum = channelGroups->GetNextGroupChannelNumber(currentChannel);
if (nextNum) {
#if VDRVERSNUM >= 20301
@ -538,7 +530,7 @@ void cTvGuideOsd::processKeyYellow() {
next = Channels.GetByNumber(nextNum);
#endif
}
} else if (config.channelJumpMode == eNumJump) {
} else if (tvguideConfig.channelJumpMode == eNumJump) {
int i=0;
#if VDRVERSNUM >= 20301
LOCK_CHANNELS_READ;
@ -553,7 +545,7 @@ void cTvGuideOsd::processKeyYellow() {
next = channel;
i++;
}
if (i == (config.jumpChannels+1)) {
if (i == (tvguideConfig.jumpChannels+1)) {
break;
}
}
@ -561,32 +553,32 @@ void cTvGuideOsd::processKeyYellow() {
if (next) {
readChannels(next);
if (columns.Count() > 0) {
if (config.channelJumpMode == eGroupJump)
if (tvguideConfig.channelJumpMode == eGroupJump)
drawGridsChannelJump();
else
drawGridsChannelJump(currentCol);
}
osdManager.Flush();
osdManager.flush();
}
}
eOSState cTvGuideOsd::processKeyBlue(bool *alreadyUnlocked) {
if (config.blueKeyMode == eBlueKeySwitch) {
if (tvguideConfig.blueKeyMode == eBlueKeySwitch) {
return ChannelSwitch(alreadyUnlocked);
} else if (config.blueKeyMode == eBlueKeyEPG) {
} else if (tvguideConfig.blueKeyMode == eBlueKeyEPG) {
DetailedEPG();
} else if (config.blueKeyMode == eBlueKeyFavorites) {
recMenuView->StartFavorites();
} else if (tvguideConfig.blueKeyMode == eBlueKeyFavorites) {
recMenuManager->StartFavorites();
}
return osContinue;
}
eOSState cTvGuideOsd::processKeyOk(bool *alreadyUnlocked) {
if (config.blueKeyMode == eBlueKeySwitch) {
if (tvguideConfig.blueKeyMode == eBlueKeySwitch) {
DetailedEPG();
} else if (config.blueKeyMode == eBlueKeyEPG) {
} else if (tvguideConfig.blueKeyMode == eBlueKeyEPG) {
return ChannelSwitch(alreadyUnlocked);
} else if (config.blueKeyMode == eBlueKeyFavorites) {
} else if (tvguideConfig.blueKeyMode == eBlueKeyFavorites) {
DetailedEPG();
}
return osContinue;
@ -600,7 +592,7 @@ eOSState cTvGuideOsd::ChannelSwitch(bool *alreadyUnlocked) {
cPixmap::Unlock();
*alreadyUnlocked = true;
cDevice::PrimaryDevice()->SwitchChannel(currentChannel, true);
if (config.closeOnSwitch) {
if (tvguideConfig.closeOnSwitch) {
if (detailView) {
delete detailView;
detailView = NULL;
@ -613,18 +605,18 @@ eOSState cTvGuideOsd::ChannelSwitch(bool *alreadyUnlocked) {
}
void cTvGuideOsd::DetailedEPG() {
if (!activeGrid->IsDummy()) {
if (!activeGrid->isDummy()) {
detailViewActive = true;
detailView = new cDetailView(activeGrid->GetEvent(), footer);
footer->SetDetailedViewMode();
osdManager.Flush();
osdManager.flush();
detailView->Start();
osdManager.Flush();
osdManager.flush();
}
}
void cTvGuideOsd::processNumKey(int numKey) {
if (config.numkeyMode == 0) {
if (tvguideConfig.numkeyMode == 0) {
//timely jumps with 1,3,4,6,7,9
TimeJump(numKey);
} else {
@ -636,58 +628,57 @@ void cTvGuideOsd::processNumKey(int numKey) {
void cTvGuideOsd::TimeJump(int mode) {
switch (mode) {
case 1: {
timeManager->DelStep(((config.displayMode == eVertical) ? config.bigStepHours : config.bigStepHoursHorizontal) * 60);
bool tooFarInPast = myTime->DelStep(tvguideConfig.bigStepHours*60);
if (tooFarInPast)
return;
}
break;
case 3: {
timeManager->AddStep(((config.displayMode == eVertical) ? config.bigStepHours : config.bigStepHoursHorizontal) * 60);
myTime->AddStep(tvguideConfig.bigStepHours*60);
}
break;
case 4: {
timeManager->DelStep(((config.displayMode == eVertical) ? config.hugeStepHours : config.hugeStepHoursHorizontal) * 60);
bool tooFarInPast = myTime->DelStep(tvguideConfig.hugeStepHours*60);
if (tooFarInPast)
return;
}
break;
case 6: {
timeManager->AddStep(((config.displayMode == eVertical) ? config.hugeStepHours : config.hugeStepHoursHorizontal) * 60);
myTime->AddStep(tvguideConfig.hugeStepHours*60);
}
break;
case 7: {
cTimeManager primeChecker;
cMyTime primeChecker;
primeChecker.Now();
time_t prevPrime = primeChecker.getPrevPrimetime(timeManager->GetStart());
time_t prevPrime = primeChecker.getPrevPrimetime(myTime->GetStart());
if (primeChecker.tooFarInPast(prevPrime))
return;
timeManager->SetTime(prevPrime);
myTime->SetTime(prevPrime);
}
break;
case 9: {
cTimeManager primeChecker;
time_t nextPrime = primeChecker.getNextPrimetime(timeManager->GetStart());
timeManager->SetTime(nextPrime);
cMyTime primeChecker;
time_t nextPrime = primeChecker.getNextPrimetime(myTime->GetStart());
myTime->SetTime(nextPrime);
}
break;
default:
return;
}
drawGridsTimeJump();
timeLine->DrawDateViewer();
timeLine->DrawClock();
timeLine->DrawTimeline();
osdManager.Flush();
}
int cTvGuideOsd::GetLastValidChannel(void) {
return channelGroups->GetLastValidChannel();
timeLine->drawDateViewer();
timeLine->drawClock();
timeLine->setTimeline();
osdManager.flush();
}
void cTvGuideOsd::ChannelJump(int num) {
if (!channelJumper) {
int lastValidChannel = GetLastValidChannel();
channelJumper = new cChannelJump(channelGroups, lastValidChannel);
channelJumper = new cChannelJump(channelGroups);
}
channelJumper->Set(num);
channelJumper->DrawText();
osdManager.Flush();
osdManager.flush();
}
void cTvGuideOsd::CheckTimeout(void) {
@ -712,12 +703,12 @@ void cTvGuideOsd::CheckTimeout(void) {
drawGridsChannelJump();
}
}
osdManager.Flush();
osdManager.flush();
}
}
void cTvGuideOsd::SetTimers() {
for (cChannelEpg *column = columns.First(); column; column = columns.Next(column)) {
for (cChannelColumn *column = columns.First(); column; column = columns.Next(column)) {
column->SetTimers();
}
}
@ -726,11 +717,11 @@ eOSState cTvGuideOsd::ProcessKey(eKeys Key) {
eOSState state = osContinue;
cPixmap::Lock();
bool alreadyUnlocked = false;
if (recMenuView->IsActive()) {
state = recMenuView->ProcessKey(Key);
if (recMenuManager->isActive()) {
state = recMenuManager->ProcessKey(Key);
if (state == osEnd) {
SetTimers();
osdManager.Flush();
osdManager.flush();
}
state = osContinue;
} else if (detailViewActive) {
@ -743,13 +734,13 @@ eOSState cTvGuideOsd::ProcessKey(eKeys Key) {
delete detailView;
detailView = NULL;
detailViewActive = false;
if ((config.blueKeyMode == eBlueKeySwitch) || (config.blueKeyMode == eBlueKeyFavorites)) {
if ((tvguideConfig.blueKeyMode == eBlueKeySwitch) || (tvguideConfig.blueKeyMode == eBlueKeyFavorites)) {
state = ChannelSwitch(&alreadyUnlocked);
} else {
osdManager.Flush();
osdManager.flush();
state = osContinue;
}
} else if ((Key & ~k_Repeat) == kOk && (config.blueKeyMode == eBlueKeyEPG)) {
} else if ((Key & ~k_Repeat) == kOk && (tvguideConfig.blueKeyMode == eBlueKeyEPG)) {
delete detailView;
detailView = NULL;
detailViewActive = false;
@ -760,7 +751,7 @@ eOSState cTvGuideOsd::ProcessKey(eKeys Key) {
delete detailView;
detailView = NULL;
detailViewActive = false;
osdManager.Flush();
osdManager.flush();
state = osContinue;
}
}
@ -775,18 +766,11 @@ eOSState cTvGuideOsd::ProcessKey(eKeys Key) {
case kYellow: processKeyYellow(); break;
case kBlue: state = processKeyBlue(&alreadyUnlocked); break;
case kOk: state = processKeyOk(&alreadyUnlocked); break;
case kBack: state = osEnd; break;
case kBack: state=osEnd; break;
case k0 ... k9: processNumKey(Key - k0); break;
case kFastRew: TimeJump(1); break; // Doesnt work, if used from timeshiftmode
case kFastFwd: TimeJump(3); break;
case kPrev: TimeJump(4); break;
case kNext: TimeJump(6); break;
case kNone: if (channelJumper) CheckTimeout(); break;
default: break;
}
if (timeLine->DrawClock()) {
osdManager.Flush();
}
}
if (!alreadyUnlocked) {
cPixmap::Unlock();
@ -798,7 +782,7 @@ void cTvGuideOsd::dump() {
esyslog("tvguide: ------Dumping Content---------");
activeGrid->debug();
// int i=1;
for (cChannelEpg *col = columns.First(); col; col = columns.Next(col)) {
for (cChannelColumn *col = columns.First(); col; col = columns.Next(col)) {
col->dumpGrids();
}
}

View File

@ -1,37 +1,36 @@
#ifndef __TVGUIDE_TVGUIDEOSD_H
#define __TVGUIDE_TVGUIDEOSD_H
#include "timemanager.h"
#include "gridelement.h"
#include "channelepg.h"
#include "timer.h"
#include "grid.h"
#include "channelcolumn.h"
#include "statusheader.h"
#include "detailview.h"
#include "timeline.h"
#include "channelgroups.h"
#include "footer.h"
#include "recmenuview.h"
#include "recmenumanager.h"
#include "channeljump.h"
// --- cTvGuideOsd -------------------------------------------------------------
class cTvGuideOsd : public cOsdObject {
private:
cTimeManager *timeManager;
cList<cChannelEpg> columns;
cGridElement *activeGrid;
cMyTime *myTime;
cList<cChannelColumn> columns;
cGrid *activeGrid;
cStatusHeader *statusHeader;
cDetailView *detailView;
cTimeLine *timeLine;
cChannelGroups *channelGroups;
cFooter *footer;
cRecMenuView *recMenuView;
cRecMenuManager *recMenuManager;
cChannelJump *channelJumper;
int GetLastValidChannel(void);
bool detailViewActive;
void drawOsd();
void readChannels(const cChannel *channelStart);
void drawGridsChannelJump(int offset = 0);
void drawGridsTimeJump(bool last = false);
void drawGridsTimeJump();
void processKeyUp();
void processKeyDown();
void processKeyLeft();
@ -45,7 +44,7 @@ private:
void TimeJump(int mode);
void ChannelJump(int num);
void CheckTimeout(void);
void setNextActiveGrid(cGridElement *next);
void setNextActiveGrid(cGrid *next);
void channelForward();
void channelBack();
void timeForward();

132
view.c
View File

@ -5,7 +5,7 @@
* cView
********************************************************************************************/
cView::cView(void) : cThread("View") {
cView::cView(void) {
activeView = 0;
scrollable = false;
tabbed = false;
@ -41,19 +41,19 @@ cView::cView(void) : cThread("View") {
cView::~cView(void) {
if (pixmapBackground)
osdManager.DestroyPixmap(pixmapBackground);
osdManager.releasePixmap(pixmapBackground);
if (pixmapHeader)
delete pixmapHeader;
if (pixmapHeaderLogo)
osdManager.DestroyPixmap(pixmapHeaderLogo);
osdManager.releasePixmap(pixmapHeaderLogo);
if (pixmapContent)
osdManager.DestroyPixmap(pixmapContent);
osdManager.releasePixmap(pixmapContent);
if (pixmapTabs)
osdManager.DestroyPixmap(pixmapTabs);
osdManager.releasePixmap(pixmapTabs);
if (pixmapScrollbar)
osdManager.DestroyPixmap(pixmapScrollbar);
osdManager.releasePixmap(pixmapScrollbar);
if (pixmapScrollbarBack)
osdManager.DestroyPixmap(pixmapScrollbarBack);
osdManager.releasePixmap(pixmapScrollbarBack);
if (imgScrollBar)
delete imgScrollBar;
}
@ -71,7 +71,7 @@ void cView::SetGeometry(void) {
scrollbarWidth = 40;
width = geoManager.osdWidth - scrollbarWidth;
height = geoManager.osdHeight;
border = config.epgViewBorder;
border = tvguideConfig.epgViewBorder;
headerWidth = geoManager.headerContentWidth;
headerHeight = geoManager.epgViewHeaderHeight;
if (tabbed)
@ -81,16 +81,16 @@ void cView::SetGeometry(void) {
void cView::DrawHeader(void) {
if (!pixmapHeader) {
pixmapHeader = new cStyledPixmap(osdManager.CreatePixmap(5, cRect(0, 0, headerWidth, headerHeight)));
pixmapHeader = new cStyledPixmap(osdManager.requestPixmap(5, cRect(0, 0, headerWidth, headerHeight)));
pixmapHeader->setColor(theme.Color(clrHeader), theme.Color(clrHeaderBlending));
}
if (!pixmapHeaderLogo) {
pixmapHeaderLogo = osdManager.CreatePixmap(6, cRect(0, 0, width, headerHeight));
pixmapHeaderLogo = osdManager.requestPixmap(6, cRect(0, 0, width, headerHeight));
}
pixmapHeader->Fill(clrTransparent);
pixmapHeaderLogo->Fill(clrTransparent);
if (config.style == eStyleGraphical) {
if (config.scaleVideo) {
if (tvguideConfig.style == eStyleGraphical) {
if (tvguideConfig.scaleVideo) {
pixmapHeader->drawBackgroundGraphical(bgStatusHeaderWindowed);
} else {
pixmapHeader->drawBackgroundGraphical(bgStatusHeaderFull);
@ -101,38 +101,31 @@ void cView::DrawHeader(void) {
}
//Channel Logo
int logoHeight = 2 * headerHeight / 3;
int logoWidth = logoHeight * config.logoWidthRatio / config.logoHeightRatio;
int logoWidth = logoHeight * tvguideConfig.logoWidthRatio / tvguideConfig.logoHeightRatio;
int xText = border / 2;
if (channel && !config.hideChannelLogos) {
if (channel && !tvguideConfig.hideChannelLogos) {
cImageLoader imgLoader;
if (imgLoader.LoadLogo(channel, logoWidth, logoHeight)) {
cImage logo = imgLoader.GetImage();
const int logoheight = logo.Height();
const int logowidth = logo.Width();
pixmapHeaderLogo->DrawImage(cPoint(xText + ((logoWidth - logowidth) / 2), ((headerHeight - logoheight) / 2)), logo);
pixmapHeaderLogo->DrawImage(cPoint(border / 2, ((headerHeight - logoHeight) / 2 + (logoHeight - logoheight) / 2)), logo);
xText += logoWidth + border / 2;
}
}
//Date and Time, Title, Subtitle
int textWidthMax = headerWidth - xText - border / 2;
wrapper.Set(title.c_str(), fontHeaderLarge, textWidthMax);
int lineHeight = fontHeaderLarge->Height();
int textLines = wrapper.Lines();
int yDateTime = border / 2;
int yTitle = (headerHeight - textLines * lineHeight) / 2;
int yTitle = (headerHeight - fontHeaderLarge->Height()) / 2;
int ySubtitle = headerHeight - fontHeader->Height() - border / 3;
int textWidthMax = headerWidth - xText;
pixmapHeader->DrawText(cPoint(xText, yDateTime), CutText(dateTime, textWidthMax, fontHeader).c_str(), theme.Color(clrFont), theme.Color(clrStatusHeader), fontHeader);
for (int i = 0; i < textLines; i++) {
pixmapHeader->DrawText(cPoint(xText, yTitle + i * lineHeight), wrapper.GetLine(i), theme.Color(clrFont), theme.Color(clrStatusHeader), fontHeaderLarge);
}
pixmapHeader->DrawText(cPoint(xText, yTitle), CutText(title, textWidthMax, fontHeaderLarge).c_str(), theme.Color(clrFont), theme.Color(clrStatusHeader), fontHeaderLarge);
pixmapHeader->DrawText(cPoint(xText, ySubtitle), CutText(subTitle, textWidthMax, fontHeader).c_str(), theme.Color(clrFont), theme.Color(clrStatusHeader), fontHeader);
//REC Icon
eTimerMatch timerMatch = tmNone;
if (!event)
return;
const cTimer *ti;
if (config.useRemoteTimers && pRemoteTimers) {
if (tvguideConfig.useRemoteTimers && pRemoteTimers) {
RemoteTimers_GetMatch_v1_0 rtMatch;
rtMatch.event = event;
pRemoteTimers->Service("RemoteTimers::GetMatch-v1.0", &rtMatch);
@ -168,7 +161,7 @@ void cView::DrawHeader(void) {
void cView::DrawTabs(void) {
if (!pixmapTabs) {
pixmapTabs = osdManager.CreatePixmap(4, cRect(0, y + headerHeight + contentHeight, width + scrollbarWidth, tabHeight));
pixmapTabs = osdManager.requestPixmap(4, cRect(0, y + headerHeight + contentHeight, width + scrollbarWidth, tabHeight));
}
tColor bgColor = theme.Color(clrTabInactive);
pixmapTabs->Fill(clrTransparent);
@ -195,18 +188,18 @@ void cView::DrawTabs(void) {
void cView::ClearContent(void) {
if (pixmapContent && Running()) {
osdManager.DestroyPixmap(pixmapContent);
osdManager.releasePixmap(pixmapContent);
pixmapContent = NULL;
}
if (pixmapBackground && Running()) {
osdManager.DestroyPixmap(pixmapBackground);
osdManager.releasePixmap(pixmapBackground);
pixmapBackground = NULL;
}
}
void cView::CreateContent(int fullHeight) {
scrollable = false;
pixmapBackground = osdManager.CreatePixmap(3, cRect(x, y + headerHeight, width + scrollbarWidth, contentHeight + tabHeight));
pixmapBackground = osdManager.requestPixmap(3, cRect(x, y + headerHeight, width + scrollbarWidth, contentHeight + tabHeight));
pixmapBackground->Fill(theme.Color(clrBackground));
int drawPortHeight = contentHeight;
@ -214,7 +207,7 @@ void cView::CreateContent(int fullHeight) {
drawPortHeight = fullHeight;
scrollable = true;
}
pixmapContent = osdManager.CreatePixmap(4, cRect(x, y + headerHeight, width, contentHeight), cRect(0, 0, width, drawPortHeight));
pixmapContent = osdManager.requestPixmap(4, cRect(x, y + headerHeight, width, contentHeight), cRect(0, 0, width, drawPortHeight));
pixmapContent->Fill(clrTransparent);
}
@ -223,7 +216,7 @@ void cView::DrawContent(std::string *text) {
wText.Set(text->c_str(), font, width - 2 * border);
int lineHeight = font->Height();
int textLines = wText.Lines();
int textHeight = lineHeight * textLines + 2 * border;
int textHeight = lineHeight * textLines + 2*border;
int yText = border;
CreateContent(textHeight);
for (int i=0; i < textLines; i++) {
@ -253,18 +246,18 @@ void cView::DrawFloatingContent(std::string *infoText, cTvMedia *img, cTvMedia *
int lineHeight = font->Height();
int textLinesTall = wTextTall.Lines();
int textLinesFull = wTextFull.Lines();
int textHeight = lineHeight * (textLinesTall + textLinesFull) + 2 * border;
int textHeight = lineHeight * (textLinesTall + textLinesFull) + 2*border;
int yText = border;
CreateContent(std::max(textHeight, imgHeight + 2 * border));
for (int i = 0; i < textLinesTall; i++) {
CreateContent(max(textHeight, imgHeight + 2*border));
for (int i=0; i < textLinesTall; i++) {
pixmapContent->DrawText(cPoint(border, yText), wTextTall.GetLine(i), theme.Color(clrFont), clrTransparent, font);
yText += lineHeight;
}
for (int i = 0; i < textLinesFull; i++) {
for (int i=0; i < textLinesFull; i++) {
pixmapContent->DrawText(cPoint(border, yText), wTextFull.GetLine(i), theme.Color(clrFont), clrTransparent, font);
yText += lineHeight;
}
osdManager.Flush();
osdManager.flush();
cImageLoader imgLoader;
if (imgLoader.LoadPoster(img->path.c_str(), imgWidth, imgHeight)) {
if (Running() && pixmapContent)
@ -272,16 +265,16 @@ void cView::DrawFloatingContent(std::string *infoText, cTvMedia *img, cTvMedia *
}
if (!img2)
return;
osdManager.Flush();
osdManager.flush();
if (imgLoader.LoadPoster(img2->path.c_str(), imgWidth2, imgHeight2)) {
if (Running() && pixmapContent)
pixmapContent->DrawImage(cPoint(width - imgWidth2 - border, imgHeight + 2 * border), imgLoader.GetImage());
pixmapContent->DrawImage(cPoint(width - imgWidth2 - border, imgHeight + 2*border), imgLoader.GetImage());
}
}
void cView::CreateFloatingTextWrapper(cTextWrapper *twNarrow, cTextWrapper *twFull, std::string *text, int widthImg, int heightImg) {
int lineHeight = font->Height();
int linesNarrow = (heightImg + 2 * border)/ lineHeight;
int linesNarrow = (heightImg + 2*border)/ lineHeight;
int linesDrawn = 0;
int y = 0;
int widthNarrow = width - 3 * border - widthImg;
@ -401,7 +394,7 @@ void cView::DrawActors(std::vector<cActor> *actors) {
}
actor++;
}
osdManager.Flush();
osdManager.flush();
x = 0;
y += thumbHeight + 2 * fontSmall->Height() + border + border/2;
}
@ -427,11 +420,11 @@ void cView::DrawScrollbar(void) {
return;
if (!pixmapScrollbar) {
pixmapScrollbar = osdManager.CreatePixmap(6, cRect(width, y + headerHeight, scrollbarWidth, contentHeight));
pixmapScrollbar = osdManager.requestPixmap(6, cRect(width, y + headerHeight, scrollbarWidth, contentHeight));
pixmapScrollbar->Fill(clrTransparent);
}
if (!pixmapScrollbarBack) {
pixmapScrollbarBack = osdManager.CreatePixmap(5, cRect(width, y + headerHeight, scrollbarWidth, contentHeight));
pixmapScrollbarBack = osdManager.requestPixmap(5, cRect(width, y + headerHeight, scrollbarWidth, contentHeight));
pixmapScrollbarBack->Fill(clrTransparent);
}
@ -457,7 +450,7 @@ void cView::DrawScrollbar(void) {
cImage *cView::CreateScrollbarImage(int width, int height, tColor clrBgr, tColor clrBlend) {
cImage *image = new cImage(cSize(width, height));
image->Fill(clrBgr);
if (config.style != eStyleFlat) {
if (tvguideConfig.style != eStyleFlat) {
int numSteps = 64;
int alphaStep = 0x03;
if (height < 30)
@ -488,10 +481,11 @@ bool cView::KeyUp(void) {
if (!scrollable)
return false;
int aktHeight = pixmapContent->DrawPort().Point().Y();
// int lineHeight = font->Height();
if (aktHeight >= 0) {
return false;
}
int step = config.detailedViewScrollStep * font->Height();
int step = tvguideConfig.detailedViewScrollStep * font->Height();
int newY = aktHeight + step;
if (newY > 0)
newY = 0;
@ -509,7 +503,7 @@ bool cView::KeyDown(void) {
if (totalHeight - ((-1)*aktHeight) == screenHeight) {
return false;
}
int step = config.detailedViewScrollStep * font->Height();
int step = tvguideConfig.detailedViewScrollStep * font->Height();
int newY = aktHeight - step;
if ((-1)*newY > totalHeight - screenHeight)
newY = (-1)*(totalHeight - screenHeight);
@ -528,7 +522,7 @@ cEPGView::cEPGView(void) : cView() {
}
cEPGView::~cEPGView(void) {
Cancel(2);
Cancel(-1);
while (Active())
cCondWait::SleepMs(10);
}
@ -546,9 +540,9 @@ void cEPGView::SetTabs(void) {
void cEPGView::CheckEPGImages(void) {
if (eventID > 0) {
for (int i=1; i <= config.numAdditionalEPGPictures; i++) {
for (int i=1; i <= tvguideConfig.numAdditionalEPGPictures; i++) {
cString epgimage;
epgimage = cString::sprintf("%s%d_%d.jpg", *config.epgImagePath, eventID, i);
epgimage = cString::sprintf("%s%d_%d.jpg", *tvguideConfig.epgImagePath, eventID, i);
FILE *fp = fopen(*epgimage, "r");
if (fp) {
std::stringstream ss;
@ -566,8 +560,8 @@ void cEPGView::CheckEPGImages(void) {
}
void cEPGView::DrawImages(void) {
int imgWidth = config.epgImageWidthLarge;
int imgHeight = config.epgImageHeightLarge;
int imgWidth = tvguideConfig.epgImageWidthLarge;
int imgHeight = tvguideConfig.epgImageHeightLarge;
int totalHeight = numEPGPics * (imgHeight + border);
@ -587,7 +581,7 @@ void cEPGView::DrawImages(void) {
if (drawPic) {
pixmapContent->DrawImage(cPoint((width - imgWidth) / 2, yPic), imgLoader.GetImage());
yPic += imgHeight + border;
osdManager.Flush();
osdManager.flush();
}
}
}
@ -612,7 +606,7 @@ void cEPGView::Action(void) {
ClearContent();
if (!headerDrawn) {
DrawHeader();
osdManager.Flush();
osdManager.flush();
headerDrawn = true;
}
if (tabs.size() == 0) {
@ -632,7 +626,7 @@ void cEPGView::Action(void) {
break;
}
DrawScrollbar();
osdManager.Flush();
osdManager.flush();
}
/********************************************************************************************
@ -647,7 +641,7 @@ cSeriesView::cSeriesView(int seriesId, int episodeId) : cView() {
}
cSeriesView::~cSeriesView(void) {
Cancel(3);
Cancel(-1);
while (Active())
cCondWait::SleepMs(10);
}
@ -755,32 +749,32 @@ void cSeriesView::DrawImages(void) {
if (imgLoader.LoadPoster(series.banners[i].path.c_str(), series.banners[i].width, series.banners[i].height) && Running()) {
pixmapContent->DrawImage(cPoint((width - series.banners[i].width) / 2, yPic), imgLoader.GetImage());
yPic += series.banners[i].height + border;
osdManager.Flush();
osdManager.flush();
}
}
if (imgLoader.LoadPoster(series.fanarts[i].path.c_str(), fanartWidth, fanartHeight) && Running()) {
pixmapContent->DrawImage(cPoint((width - fanartWidth)/2, yPic), imgLoader.GetImage());
yPic += fanartHeight + border;
osdManager.Flush();
osdManager.flush();
}
}
if (numPosters >= 1) {
if (imgLoader.LoadPoster(series.posters[0].path.c_str(), posterWidth, posterHeight) && Running()) {
pixmapContent->DrawImage(cPoint(border, yPic), imgLoader.GetImage());
osdManager.Flush();
osdManager.flush();
yPic += posterHeight + border;
}
}
if (numPosters >= 2) {
if (imgLoader.LoadPoster(series.posters[1].path.c_str(), posterWidth, posterHeight) && Running()) {
pixmapContent->DrawImage(cPoint(2 * border + posterWidth, yPic - posterHeight - border), imgLoader.GetImage());
osdManager.Flush();
osdManager.flush();
}
}
if (numPosters == 3) {
if (imgLoader.LoadPoster(series.posters[2].path.c_str(), posterWidth, posterHeight) && Running()) {
pixmapContent->DrawImage(cPoint((width - posterWidth) / 2, yPic), imgLoader.GetImage());
osdManager.Flush();
osdManager.flush();
}
}
}
@ -814,7 +808,7 @@ void cSeriesView::Action(void) {
ClearContent();
if (!headerDrawn) {
DrawHeader();
osdManager.Flush();
osdManager.flush();
headerDrawn = true;
}
if (tabs.size() == 0) {
@ -856,7 +850,7 @@ void cSeriesView::Action(void) {
break;
}
DrawScrollbar();
osdManager.Flush();
osdManager.flush();
}
/********************************************************************************************
@ -869,7 +863,7 @@ cMovieView::cMovieView(int movieId) : cView() {
}
cMovieView::~cMovieView(void) {
Cancel(3);
Cancel(-1);
while (Active())
cCondWait::SleepMs(10);
}
@ -982,28 +976,28 @@ void cMovieView::DrawImages(void) {
if (imgLoader.LoadPoster(movie.fanart.path.c_str(), fanartWidth, fanartHeight) && Running()) {
pixmapContent->DrawImage(cPoint((width - fanartWidth)/2, yPic), imgLoader.GetImage());
yPic += fanartHeight + border;
osdManager.Flush();
osdManager.flush();
}
}
if (movie.collectionFanart.width > 0 && movie.collectionFanart.height > 0 && movie.collectionFanart.path.size() > 0) {
if (imgLoader.LoadPoster(movie.collectionFanart.path.c_str(), collectionFanartWidth, collectionFanartHeight) && Running()) {
pixmapContent->DrawImage(cPoint((width - collectionFanartWidth)/2, yPic), imgLoader.GetImage());
yPic += collectionFanartHeight + border;
osdManager.Flush();
osdManager.flush();
}
}
if (movie.poster.width > 0 && movie.poster.height > 0 && movie.poster.path.size() > 0) {
if (imgLoader.LoadPoster(movie.poster.path.c_str(), movie.poster.width, movie.poster.height) && Running()) {
pixmapContent->DrawImage(cPoint((width - movie.poster.width) / 2, yPic), imgLoader.GetImage());
yPic += movie.poster.height + border;
osdManager.Flush();
osdManager.flush();
}
}
if (movie.collectionPoster.width > 0 && movie.collectionPoster.height > 0 && movie.collectionPoster.path.size() > 0) {
if (imgLoader.LoadPoster(movie.collectionPoster.path.c_str(), movie.collectionPoster.width, movie.collectionPoster.height) && Running()) {
pixmapContent->DrawImage(cPoint((width - movie.collectionPoster.width) / 2, yPic), imgLoader.GetImage());
yPic += movie.collectionPoster.height + border;
osdManager.Flush();
osdManager.flush();
}
}
}
@ -1028,7 +1022,7 @@ void cMovieView::Action(void) {
ClearContent();
if (!headerDrawn) {
DrawHeader();
osdManager.Flush();
osdManager.flush();
headerDrawn = true;
}
if (tabs.size() == 0) {
@ -1064,5 +1058,5 @@ void cMovieView::Action(void) {
break;
}
DrawScrollbar();
osdManager.Flush();
osdManager.flush();
}

1
view.h
View File

@ -51,7 +51,6 @@ protected:
int contentHeight;
int tabHeight;
int scrollbarWidth;
cTextWrapper wrapper;
std::vector<std::string> tabs;
std::string title;
std::string subTitle;