vdr-plugin-tvguide/footer.c

116 lines
4.6 KiB
C
Raw Normal View History

2013-12-07 15:51:50 +01:00
#include <string>
#include "imageloader.h"
#include "tools.h"
2013-01-17 13:16:44 +01:00
#include "footer.h"
2013-05-31 13:58:22 +02:00
cFooter::cFooter(cChannelGroups *channelGroups) {
this->channelGroups = channelGroups;
currentGroup = -1;
buttonBorder = 20;
2013-05-26 11:38:05 +02:00
buttonWidth = (tvguideConfig.osdWidth - tvguideConfig.timeLineWidth - 5*buttonBorder)/4;
buttonHeight= tvguideConfig.footerHeight - 2*buttonBorder;
buttonY = (tvguideConfig.footerHeight - buttonHeight)/2;
SetButtonPositions();
2013-05-26 11:38:05 +02:00
2013-05-24 16:23:23 +02:00
footer = osdManager.requestPixmap(2, cRect( tvguideConfig.timeLineWidth,
tvguideConfig.osdHeight - tvguideConfig.footerHeight,
2013-05-24 16:23:23 +02:00
tvguideConfig.osdWidth - tvguideConfig.timeLineWidth,
tvguideConfig.footerHeight),
cRect::Null);
footer->Fill(clrTransparent);
2013-01-17 13:16:44 +01:00
}
cFooter::~cFooter(void) {
osdManager.releasePixmap(footer);
2013-01-17 13:16:44 +01:00
}
void cFooter::SetButtonPositions(void) {
for (int i=0; i < 4; i++) {
positionButtons[i] = -1;
}
/*
red button = 0
green button = 1
yellow button = 2
blue button = 3
*/
for (int button=0; button<4; button++) {
if (Setup.ColorKey0 == button) {
positionButtons[button] = 0;
continue;
}
if (Setup.ColorKey1 == button) {
positionButtons[button] = 1;
continue;
}
if (Setup.ColorKey2 == button) {
positionButtons[button] = 2;
continue;
}
if (Setup.ColorKey3 == button) {
positionButtons[button] = 3;
continue;
}
}
}
2013-05-31 13:58:22 +02:00
void cFooter::DrawButton(const char *text, tColor color, tColor borderColor, int num) {
tColor colorTextBack = (tvguideConfig.useBlending==0)?color:clrTransparent;
int left = num * buttonWidth + (num + 1) * buttonBorder;
footer->DrawRectangle(cRect(left, buttonY, buttonWidth, buttonHeight), borderColor);
if (tvguideConfig.useBlending) {
cImageLoader imgLoader;
imgLoader.DrawBackground(theme.Color(clrButtonBlend), color, buttonWidth-4, buttonHeight-4);
footer->DrawImage(cPoint(left+2, buttonY+2), imgLoader.GetImage());
} else {
footer->DrawRectangle(cRect(left, buttonY, buttonWidth, buttonHeight), borderColor);
footer->DrawRectangle(cRect(left+2, buttonY+2, buttonWidth-4, buttonHeight-4), color);
}
int textWidth = tvguideConfig.FontButton->Width(text);
int textHeight = tvguideConfig.FontButton->Height();
footer->DrawText(cPoint(left + (buttonWidth-textWidth)/2, buttonY + (buttonHeight-textHeight)/2), text, theme.Color(clrFontButtons), colorTextBack, tvguideConfig.FontButton);
}
2013-01-17 13:16:44 +01:00
void cFooter::drawRedButton() {
2013-07-09 00:17:42 +02:00
cString text(tr("Search & Rec"));
DrawButton(*text, theme.Color(clrButtonRed), theme.Color(clrButtonRedBorder), positionButtons[0]);
2013-01-17 13:16:44 +01:00
}
void cFooter::drawGreenButton() {
cString text = cString::sprintf("%d %s", tvguideConfig.jumpChannels, tr("Channels back"));
DrawButton(*text, theme.Color(clrButtonGreen), theme.Color(clrButtonGreenBorder), positionButtons[1]);
2013-01-17 13:16:44 +01:00
}
2013-05-31 13:58:22 +02:00
void cFooter::drawGreenButton(const char *text) {
std::string cuttedText = CutText(text, buttonWidth-6, tvguideConfig.FontButton);
DrawButton(cuttedText.c_str(), theme.Color(clrButtonGreen), theme.Color(clrButtonGreenBorder), positionButtons[1]);
2013-05-31 13:58:22 +02:00
}
2013-01-17 13:16:44 +01:00
void cFooter::drawYellowButton() {
cString text = cString::sprintf("%d %s", tvguideConfig.jumpChannels, tr("Channels forward"));
DrawButton(*text, theme.Color(clrButtonYellow), theme.Color(clrButtonYellowBorder), positionButtons[2]);
2013-01-17 13:16:44 +01:00
}
2013-05-31 13:58:22 +02:00
void cFooter::drawYellowButton(const char *text) {
std::string cuttedText = CutText(text, buttonWidth-6, tvguideConfig.FontButton);
DrawButton(cuttedText.c_str(), theme.Color(clrButtonYellow), theme.Color(clrButtonYellowBorder), positionButtons[2]);
2013-05-31 13:58:22 +02:00
}
2013-01-17 13:16:44 +01:00
void cFooter::drawBlueButton() {
cString text;
if (tvguideConfig.blueKeyMode == 0)
text = tr("Switch to Channel");
else if (tvguideConfig.blueKeyMode == 1)
text = tr("Detailed EPG");
DrawButton(*text, theme.Color(clrButtonBlue), theme.Color(clrButtonBlueBorder), positionButtons[3]);
2013-01-17 13:16:44 +01:00
}
2013-05-31 13:58:22 +02:00
void cFooter::UpdateGroupButtons(const cChannel *channel) {
int group = channelGroups->GetGroup(channel);
if (group != currentGroup) {
currentGroup = group;
drawGreenButton(channelGroups->GetPrev(group));
drawYellowButton(channelGroups->GetNext(group));
2013-05-26 17:04:57 +02:00
}
2013-07-09 00:17:42 +02:00
}