diff options
author | louis <louis.braun@gmx.de> | 2013-12-23 09:12:19 +0100 |
---|---|---|
committer | louis <louis.braun@gmx.de> | 2013-12-23 09:12:19 +0100 |
commit | b8754b03ee58576511ea35ac627420c36a88d43b (patch) | |
tree | b45b30f47306f17362e9a7c461e7228509b3f84f /channeljump.c | |
parent | 0a1e7935130518c41a9720e776a93e8520160ede (diff) | |
download | vdr-plugin-tvguide-b8754b03ee58576511ea35ac627420c36a88d43b.tar.gz vdr-plugin-tvguide-b8754b03ee58576511ea35ac627420c36a88d43b.tar.bz2 |
Added feature to jump to a specific channel with number keys
Diffstat (limited to 'channeljump.c')
-rw-r--r-- | channeljump.c | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/channeljump.c b/channeljump.c new file mode 100644 index 0000000..b23698e --- /dev/null +++ b/channeljump.c @@ -0,0 +1,90 @@ +#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 (!tvguideConfig.hideLastGroup) {
+ maxChannels = Channels.MaxNumber();
+ } 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 (tvguideConfig.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;
+ }
\ No newline at end of file |