mirror of
https://projects.vdr-developer.org/git/vdr-plugin-tvguide.git
synced 2023-10-05 15:01:48 +02:00
96 lines
2.9 KiB
C
96 lines
2.9 KiB
C
#include <vdr/channels.h>
|
|
#include "config.h"
|
|
#include "geometrymanager.h"
|
|
#include "osdmanager.h"
|
|
#include "fontmanager.h"
|
|
#include "channelgroups.h"
|
|
#include "channeljump.h"
|
|
|
|
cChannelJump::cChannelJump(cChannelGroups *channelGroups) {
|
|
this->channelGroups = channelGroups;
|
|
pixmapText = NULL;
|
|
channel = 0;
|
|
if (!config.hideLastGroup) {
|
|
#if VDRVERSNUM >= 20301
|
|
LOCK_CHANNELS_READ;
|
|
maxChannels = Channels->MaxNumber();
|
|
#else
|
|
maxChannels = Channels.MaxNumber();
|
|
#endif
|
|
} else {
|
|
maxChannels = channelGroups->GetLastValidChannel();
|
|
}
|
|
timeout = Setup.ChannelEntryTimeout;
|
|
startTime = cTimeMs::Now();
|
|
SetPixmaps();
|
|
Draw();
|
|
}
|
|
|
|
cChannelJump::~cChannelJump(void) {
|
|
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.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) {
|
|
drawBackgroundGraphical(bgChannelJump);
|
|
} else {
|
|
pixmap->Fill(theme.Color(clrBackground));
|
|
drawBorder();
|
|
}
|
|
pixmapBack->Fill(clrTransparent);
|
|
pixmapBack->DrawRectangle(cRect(5, Height()/2, Width()-10, Height()-3), theme.Color(clrBackground));
|
|
}
|
|
|
|
void cChannelJump::DrawText(void) {
|
|
pixmapText->Fill(clrTransparent);
|
|
|
|
cString header = cString::sprintf("%s:", tr("Channel"));
|
|
|
|
const cFont *font = fontManager.FontMessageBox;
|
|
const cFont *fontHeader = fontManager.FontMessageBoxLarge;
|
|
|
|
int xHeader = (Width() - fontHeader->Width(*header)) / 2;
|
|
int yHeader = (Height()/2 - fontHeader->Height()) / 2;
|
|
pixmapText->DrawText(cPoint(xHeader, yHeader), *header, theme.Color(clrFont), clrTransparent, fontHeader);
|
|
|
|
cString strChannel = BuildChannelString();
|
|
int xChannel = (Width() - font->Width(*strChannel)) / 2;
|
|
int yChannel = Height()/2 + (Height()/2 - font->Height()) / 2;
|
|
pixmapText->DrawText(cPoint(xChannel, yChannel), *strChannel, theme.Color(clrFont), clrTransparent, font);
|
|
|
|
}
|
|
|
|
void cChannelJump::Set(int num) {
|
|
startTime = cTimeMs::Now();
|
|
if (channel == 0) {
|
|
channel = num;
|
|
return;
|
|
}
|
|
int newChannel = channel * 10 + num;
|
|
if (newChannel <= maxChannels)
|
|
channel = newChannel;
|
|
}
|
|
|
|
cString cChannelJump::BuildChannelString(void) {
|
|
if (channel*10 <= maxChannels)
|
|
return cString::sprintf("%d-", channel);
|
|
else
|
|
return cString::sprintf("%d", channel);
|
|
}
|
|
|
|
bool cChannelJump::TimeOut(void) {
|
|
if ((cTimeMs::Now() - startTime) > timeout)
|
|
return true;
|
|
return false;
|
|
}
|