21#include "symbols/arrowdown.xpm"
22#include "symbols/arrowup.xpm"
23#include "symbols/audio.xpm"
24#include "symbols/audioleft.xpm"
25#include "symbols/audioright.xpm"
26#include "symbols/audiostereo.xpm"
27#include "symbols/dolbydigital.xpm"
28#include "symbols/encrypted.xpm"
29#include "symbols/ffwd.xpm"
30#include "symbols/ffwd1.xpm"
31#include "symbols/ffwd2.xpm"
32#include "symbols/ffwd3.xpm"
33#include "symbols/frew.xpm"
34#include "symbols/frew1.xpm"
35#include "symbols/frew2.xpm"
36#include "symbols/frew3.xpm"
37#include "symbols/mute.xpm"
38#include "symbols/pause.xpm"
39#include "symbols/play.xpm"
40#include "symbols/radio.xpm"
41#include "symbols/recording.xpm"
42#include "symbols/sfwd.xpm"
43#include "symbols/sfwd1.xpm"
44#include "symbols/sfwd2.xpm"
45#include "symbols/sfwd3.xpm"
46#include "symbols/srew.xpm"
47#include "symbols/srew1.xpm"
48#include "symbols/srew2.xpm"
49#include "symbols/srew3.xpm"
50#include "symbols/teletext.xpm"
51#include "symbols/volume.xpm"
53#define Roundness (Setup.FontOsdSize / 2)
54#define Gap (Setup.FontOsdSize / 5)
55#define ScrollWidth (Setup.FontOsdSize / 4)
56#define TextFrame (Setup.FontOsdSize / 10)
57#define TextSpacing (Setup.FontOsdSize / 4)
58#define SymbolSpacing (Setup.FontOsdSize / 4)
152 virtual void Flush(
void);
193 int yt = (
y0 +
y1) / 2;
194 int yb = (
y6 +
y7) / 2;
196 tArea Areas[] = { { 0, 0,
x7 - 1,
y7 - 1, 32 } };
197 if (
osd->CanHandleAreas(Areas,
sizeof(Areas) /
sizeof(
tArea)) ==
oeOk)
198 osd->SetAreas(Areas,
sizeof(Areas) /
sizeof(
tArea));
200 tArea Areas[] = { { 0, 0,
x7 - 1,
y7 - 1, 8 } };
201 if (
Setup.AntiAlias &&
osd->CanHandleAreas(Areas,
sizeof(Areas) /
sizeof(
tArea)) ==
oeOk)
202 osd->SetAreas(Areas,
sizeof(Areas) /
sizeof(
tArea));
204 tArea Areas[] = { { 0, 0,
x7 - 1,
y7 - 1, 4 } };
205 osd->SetAreas(Areas,
sizeof(Areas) /
sizeof(
tArea));
240 if (
osd->CanHandleAreas(Areas,
sizeof(Areas) /
sizeof(
tArea)) ==
oeOk)
241 osd->SetAreas(Areas,
sizeof(Areas) /
sizeof(
tArea));
244 if (
Setup.AntiAlias &&
osd->CanHandleAreas(Areas,
sizeof(Areas) /
sizeof(
tArea)) ==
oeOk)
245 osd->SetAreas(Areas,
sizeof(Areas) /
sizeof(
tArea));
248 osd->SetAreas(Areas,
sizeof(Areas) /
sizeof(
tArea));
268 if (Channel && !Channel->
GroupSep()) {
278 if (Channel->
Vpid()) {
282 else if (Channel->
Apid(0)) {
300 for (
int i = 0; i < 2; i++) {
301 const cEvent *e = !i ? Present : Following;
316 osd->SaveRegion(
x2, yt,
x4 - 1, yb - 1);
319 osd->DrawText(
x3, yt, Text,
Theme.Color(clrMessageStatusFg + 2 * Type),
Theme.Color(clrMessageStatusBg + 2 * Type), font,
x4 -
x3, 0,
taCenter);
323 osd->RestoreRegion();
334 int w = font->
Width(date);
351 int h = ((
y7 -
y6 + 1) - 3 * d) / 2;
352 int w = (
x4 -
x3) / 5;
353 int x = (
x3 +
x4) / 2 - w / 2;
354 if (SignalStrength >= 0) {
355 int s = SignalStrength * w / 100;
356 osd->DrawRectangle(x,
y6 + d, x + s - 1,
y6 + d + h - 1,
Theme.Color(clrChannelSignalValue));
357 osd->DrawRectangle(x + s,
y6 + d, x + w - 1,
y6 + d + h - 1,
Theme.Color(clrChannelSignalRest));
360 osd->DrawRectangle(x,
y6 + d, x + w - 1,
y6 + d + h - 1,
Theme.Color(clrChannelFrame));
361 if (SignalQuality >= 0) {
362 int q = SignalQuality * w / 100;
363 osd->DrawRectangle(x,
y7 - d - h + 1, x + q - 1,
y7 - d,
Theme.Color(clrChannelSignalValue));
364 osd->DrawRectangle(x + q,
y7 - d - h + 1, x + w - 1,
y7 - d,
Theme.Color(clrChannelSignalRest));
367 osd->DrawRectangle(x,
y7 - d - h + 1, x + w - 1,
y7 - d,
Theme.Color(clrChannelFrame));
370 int dw = font->
Width(dn);
381 time_t t = time(NULL);
410 void DrawScrollbar(
int Total,
int Offset,
int Shown,
int Top,
int Height,
bool CanScrollUp,
bool CanScrollDown);
415 virtual void Scroll(
bool Up,
bool Page);
417 virtual void Clear(
void);
418 virtual void SetTitle(
const char *Title);
419 virtual void SetButtons(
const char *Red,
const char *Green = NULL,
const char *Yellow = NULL,
const char *Blue = NULL);
421 virtual void SetItem(
const char *Text,
int Index,
bool Current,
bool Selectable);
425 virtual void SetText(
const char *Text,
bool FixedFont);
428 virtual void Flush(
void);
455 int yt = (
y0 +
y1) / 2;
456 int yb = (
y6 +
y7) / 2;
459 if (
osd->CanHandleAreas(Areas,
sizeof(Areas) /
sizeof(
tArea)) ==
oeOk)
460 osd->SetAreas(Areas,
sizeof(Areas) /
sizeof(
tArea));
463 if (
Setup.AntiAlias &&
osd->CanHandleAreas(Areas,
sizeof(Areas) /
sizeof(
tArea)) ==
oeOk)
464 osd->SetAreas(Areas,
sizeof(Areas) /
sizeof(
tArea));
467 if (
osd->CanHandleAreas(Areas,
sizeof(Areas) /
sizeof(
tArea)) ==
oeOk)
468 osd->SetAreas(Areas,
sizeof(Areas) /
sizeof(
tArea));
476 osd->SetAreas(Areas,
sizeof(Areas) /
sizeof(
tArea));
507 if (Total > 0 && Total > Shown) {
510 int yb = yt + Height;
511 int st = yt + h +
Gap;
512 int sb = yb - h -
Gap;
513 int th =
max(
int((sb - st) *
double(Shown) / Total + 0.5),
ScrollWidth);
514 int tt =
min(
int(st + (sb - st) *
double(Offset) / Total + 0.5), sb - th);
515 int tb =
min(tt + th, sb);
559 const char *VDR =
" VDR";
561 int w = font->
Width(VDR);
574 const char *lutText[] = { Red, Green, Yellow, Blue };
575 tColor lutFg[] = { clrButtonRedFg, clrButtonGreenFg, clrButtonYellowFg, clrButtonBlueFg };
576 tColor lutBg[] = { clrButtonRedBg, clrButtonGreenBg, clrButtonYellowBg, clrButtonBlueBg };
602 osd->DrawText(
x3,
y6, Text,
Theme.Color(clrMessageStatusFg + 2 * Type),
Theme.Color(clrMessageStatusBg + 2 * Type), font,
x4 -
x3, 0,
taCenter);
606 osd->RestoreRegion();
616 ColorFg =
Theme.Color(clrMenuItemCurrentFg);
617 ColorBg =
Theme.Color(clrMenuItemCurrentBg);
625 ColorFg =
Theme.Color(Selectable ? clrMenuItemSelectable : clrMenuItemNonSelectable);
633 for (
int i = 0; i <
MaxTabs; i++) {
637 osd->DrawText(xt, y, s, ColorFg, ColorBg, font,
x4 - xt);
663 int w = font->
Width(buffer);
665 int yb = y + font->
Height();
673 int w = font->
Width(buffer);
675 int yb = y + font->
Height();
716 int w = font->
Width(buffer);
723 int w = font->
Width(buffer);
729 int yb = y + font->
Height();
734 const char *Title = Info->
Title();
736 Title = Recording->
Name();
783 int w = font->
Width(date);
803 virtual void SetTitle(
const char *Title);
804 virtual void SetMode(
bool Play,
bool Forward,
int Speed);
807 virtual void SetTotal(
const char *Total);
808 virtual void SetJump(
const char *Jump);
810 virtual void Flush(
void);
816 int lineHeight = font->
Height();
825 x6 =
x7 - lineHeight / 2;
826 x5 =
x6 - lineHeight / 2;
836 int yt = (
y0 +
y1) / 2;
837 int yb = (
y6 +
y7) / 2;
839 tArea Areas[] = { { 0, 0,
x7 - 1,
y7 - 1, 32 } };
840 if (
osd->CanHandleAreas(Areas,
sizeof(Areas) /
sizeof(
tArea)) ==
oeOk)
841 osd->SetAreas(Areas,
sizeof(Areas) /
sizeof(
tArea));
843 tArea Areas[] = { { 0, 0,
x7 - 1,
y7 - 1, 8 } };
844 if (
Setup.AntiAlias &&
osd->CanHandleAreas(Areas,
sizeof(Areas) /
sizeof(
tArea)) ==
oeOk)
845 osd->SetAreas(Areas,
sizeof(Areas) /
sizeof(
tArea));
847 tArea Areas[] = { { 0, 0,
x7 - 1,
y7 - 1, 4 } };
848 osd->SetAreas(Areas,
sizeof(Areas) /
sizeof(
tArea));
886 { { pause_xpm, srew_xpm, srew1_xpm, srew2_xpm, srew3_xpm },
887 { pause_xpm, sfwd_xpm, sfwd1_xpm, sfwd2_xpm, sfwd3_xpm }, },
888 { { play_xpm, frew_xpm, frew1_xpm, frew2_xpm, frew3_xpm },
889 { play_xpm, ffwd_xpm, ffwd1_xpm, ffwd2_xpm, ffwd3_xpm } }
916 int w = font->
Width(Total);
931 osd->DrawText(
x3,
y6, Text,
Theme.Color(clrMessageStatusFg + 2 * Type),
Theme.Color(clrMessageStatusBg + 2 * Type), font,
x4 -
x3, 0,
taCenter);
934 osd->RestoreRegion();
955 virtual void Flush(
void);
961 int lineHeight = font->
Height();
969 x6 =
x7 - lineHeight / 2;
970 x5 =
x6 - lineHeight / 2;
976 if (
osd->CanHandleAreas(Areas,
sizeof(Areas) /
sizeof(
tArea)) ==
oeOk)
977 osd->SetAreas(Areas,
sizeof(Areas) /
sizeof(
tArea));
980 if (
Setup.AntiAlias &&
osd->CanHandleAreas(Areas,
sizeof(Areas) /
sizeof(
tArea)) ==
oeOk)
981 osd->SetAreas(Areas,
sizeof(Areas) /
sizeof(
tArea));
984 osd->SetAreas(Areas,
sizeof(Areas) /
sizeof(
tArea));
1010 cBitmap bm(Mute ? mute_xpm : volume_xpm);
1014 int w = (
y1 -
y0) / 3;
1016 int n = (xr - xl + d) / (w + d);
1017 int x = xr - n * (w + d);
1019 for (
int i = 0; i < n; i++) {
1021 Color =
Theme.Color(clrVolumeBarUpper);
1022 osd->DrawRectangle(x, yt, x + w - 1, yb - 1, Color);
1048 virtual void SetTrack(
int Index,
const char *
const *Tracks);
1050 virtual void Flush(
void);
1063 int ItemsWidth = font->
Width(Title);
1064 for (
int i = 0; i < NumTracks; i++)
1065 ItemsWidth =
max(ItemsWidth, font->
Width(Tracks[i]));
1076 if (d > ItemsWidth) {
1077 d = (d - ItemsWidth) & ~0x07;
1092 int yt = (
y0 +
y1) / 2;
1093 int yb = (
y6 +
y7) / 2;
1096 if (
osd->CanHandleAreas(Areas,
sizeof(Areas) /
sizeof(
tArea)) ==
oeOk)
1097 osd->SetAreas(Areas,
sizeof(Areas) /
sizeof(
tArea));
1100 if (
Setup.AntiAlias &&
osd->CanHandleAreas(Areas,
sizeof(Areas) /
sizeof(
tArea)) ==
oeOk)
1101 osd->SetAreas(Areas,
sizeof(Areas) /
sizeof(
tArea));
1104 if (
osd->CanHandleAreas(Areas,
sizeof(Areas) /
sizeof(
tArea)) ==
oeOk)
1105 osd->SetAreas(Areas,
sizeof(Areas) /
sizeof(
tArea));
1113 osd->SetAreas(Areas,
sizeof(Areas) /
sizeof(
tArea));
1136 for (
int i = 0; i < NumTracks; i++)
1150 ColorFg =
Theme.Color(clrMenuItemCurrentFg);
1151 ColorBg =
Theme.Color(clrMenuItemCurrentBg);
1159 ColorFg =
Theme.Color(clrMenuItemSelectable);
1168 osd->DrawText(xt, y, Text, ColorFg, ColorBg, font,
x4 - xt);
1175 SetItem(Tracks[Index], Index,
true);
1181 switch (AudioChannel) {
1209 virtual void Flush(
void);
1215 int lineHeight = font->
Height();
1218 x1 = lineHeight / 2;
1222 x6 =
x7 - lineHeight / 2;
1223 x5 =
x6 - lineHeight / 2;
1229 if (
osd->CanHandleAreas(Areas,
sizeof(Areas) /
sizeof(
tArea)) ==
oeOk)
1230 osd->SetAreas(Areas,
sizeof(Areas) /
sizeof(
tArea));
1233 if (
Setup.AntiAlias &&
osd->CanHandleAreas(Areas,
sizeof(Areas) /
sizeof(
tArea)) ==
oeOk)
1234 osd->SetAreas(Areas,
sizeof(Areas) /
sizeof(
tArea));
1237 osd->SetAreas(Areas,
sizeof(Areas) /
sizeof(
tArea));
1241 osd->DrawEllipse (
x0,
y0,
x1 - 1,
y1 - 1, frameColor, 7);
1242 osd->DrawRectangle(
x1,
y0,
x2 - 1,
y1 - 1, frameColor);
1243 osd->DrawRectangle(
x5,
y0,
x6 - 1,
y1 - 1, frameColor);
1244 osd->DrawEllipse (
x6,
y0,
x7 - 1,
y1 - 1, frameColor, 5);
1255 osd->DrawText(
x3,
y0, Text,
Theme.Color(clrMessageStatusFg + 2 * Type),
Theme.Color(clrMessageStatusBg + 2 * Type), font,
x4 -
x3, 0,
taCenter);
1272 return tr(
"ST:TNG Panels");
cString ChannelString(const cChannel *Channel, int Number)
bool GroupSep(void) const
int Ca(int Index=0) const
static cDevice * ActualDevice(void)
Returns the actual receiving device in case of Transfer Mode, or the primary device otherwise.
static cDevice * PrimaryDevice(void)
Returns the primary device.
eTrackType GetCurrentAudioTrack(void) const
int DeviceNumber(void) const
Returns the number of this device (0 ... numDevices - 1).
virtual int SignalQuality(void) const
Returns the "quality" of the currently received signal.
virtual int SignalStrength(void) const
Returns the "strength" of the currently received signal.
const tTrackId * GetTrack(eTrackType Type)
Returns a pointer to the given track id, or NULL if Type is not less than ttMaxTrackTypes.
const char * ShortText(void) const
cString GetDateString(void) const
const char * Description(void) const
int ParentalRating(void) const
time_t StartTime(void) const
cString GetTimeString(void) const
const char * Title(void) const
cString GetEndTimeString(void) const
cString GetVpsString(void) const
cString GetParentalRatingString(void) const
virtual int Width(void) const =0
Returns the original character width as requested when the font was created, or 0 if the default widt...
virtual int Height(void) const =0
Returns the height of this font in pixel (all characters have the same height).
static const cFont * GetFont(eDvbFont Font)
Gets the given Font, which was previously set by a call to SetFont().
static cOsd * NewOsd(int Left, int Top, uint Level=OSD_LEVEL_DEFAULT)
Returns a pointer to a newly created cOsd object, which will be located at the given coordinates.
The cOsd class is the interface to the "On Screen Display".
static int OsdHeight(void)
static int OsdWidth(void)
const char * ChannelName(void) const
const cEvent * GetEvent(void) const
const char * ShortText(void) const
const char * Title(void) const
const char * Description(void) const
const char * Name(void) const
Returns the full name of the recording (without the video directory).
cRecordingInfo * Info(void) const
cSkinDisplayChannel(void)
const cMarks * marks
< This class implements the progress display used during replay of a recording.
static cSkinDisplay * Current(void)
Returns the currently active cSkinDisplay.
void SetEditableWidth(int Width)
If an item is set through a call to cSkinDisplayMenu::SetItem(), this function shall be called to set...
static cBitmap bmRecording
virtual void SetChannel(const cChannel *Channel, int Number)
Sets the current channel to Channel.
static cBitmap bmEncrypted
virtual void SetEvents(const cEvent *Present, const cEvent *Following)
Sets the Present and Following EPG events.
static cBitmap bmTeletext
static cBitmap bmDolbyDigital
cSkinSTTNGDisplayChannel(bool WithInfo)
virtual void Flush(void)
Actually draws the OSD display to the output device.
virtual ~cSkinSTTNGDisplayChannel()
virtual void SetMessage(eMessageType Type, const char *Text)
Sets a one line message Text, with the given Type.
cSkinSTTNGDisplayMessage(void)
virtual ~cSkinSTTNGDisplayMessage()
virtual void SetMessage(eMessageType Type, const char *Text)
< This class implements a simple message display.
virtual void Flush(void)
Actually draws the OSD display to the output device.
virtual void SetMessage(eMessageType Type, const char *Text)
Sets a one line message Text, with the given Type.
virtual void SetCurrent(const char *Current)
Sets the current position within the recording, as a user readable string if the form "h:mm:ss....
virtual void SetJump(const char *Jump)
Sets the prompt that allows the user to enter a jump point.
virtual void SetProgress(int Current, int Total)
This function will be called whenever the position in or the total length of the recording has change...
virtual void Flush(void)
Actually draws the OSD display to the output device.
cSkinSTTNGDisplayReplay(bool ModeOnly)
virtual ~cSkinSTTNGDisplayReplay()
virtual void SetTitle(const char *Title)
Sets the title of the recording.
virtual void SetMode(bool Play, bool Forward, int Speed)
Sets the current replay mode, which can be used to display some indicator, showing the user whether w...
virtual void SetTotal(const char *Total)
Sets the total length of the recording, as a user readable string if the form "h:mm:ss".
virtual void Flush(void)
Actually draws the OSD display to the output device.
virtual ~cSkinSTTNGDisplayTracks()
static cBitmap bmAudioLeft
static cBitmap bmAudioStereo
cSkinSTTNGDisplayTracks(const char *Title, int NumTracks, const char *const *Tracks)
void SetItem(const char *Text, int Index, bool Current)
virtual void SetTrack(int Index, const char *const *Tracks)
< This class implements the track display.
static cBitmap bmAudioRight
virtual void SetAudioChannel(int AudioChannel)
Sets the audio channel indicator.
virtual void SetVolume(int Current, int Total, bool Mute)
< This class implements the volume/mute display.
virtual ~cSkinSTTNGDisplayVolume()
virtual void Flush(void)
Actually draws the OSD display to the output device.
cSkinSTTNGDisplayVolume(void)
virtual cSkinDisplayReplay * DisplayReplay(bool ModeOnly)
Creates and returns a new object for displaying replay progress.
virtual cSkinDisplayMenu * DisplayMenu(void)
Creates and returns a new object for displaying a menu.
virtual const char * Description(void)
Returns a user visible, single line description of this skin, which may consist of arbitrary text and...
virtual cSkinDisplayChannel * DisplayChannel(bool WithInfo)
Creates and returns a new object for displaying the current channel.
virtual cSkinDisplayVolume * DisplayVolume(void)
Creates and returns a new object for displaying the current volume.
virtual cSkinDisplayMessage * DisplayMessage(void)
Creates and returns a new object for displaying a message.
virtual cSkinDisplayTracks * DisplayTracks(const char *Title, int NumTracks, const char *const *Tracks)
Creates and returns a new object for displaying the available tracks.
cSkin(const char *Name, cTheme *Theme=NULL)
Creates a new skin class, with the given Name and Theme.
static cString sprintf(const char *fmt,...) __attribute__((format(printf
void Set(cOsd *Osd, int Left, int Top, int Width, int Height, const char *Text, const cFont *Font, tColor ColorFg, tColor ColorBg)
static bool HasChanged(int &State)
Returns true if the usage of the video disk space has changed since the last call to this function wi...
static cString String(void)
Returns a localized string of the form "Disk nn% - hh:mm free".
static const char *const * ReplaySymbols[2][2][5]
static const char *const * ReplaySymbols[2][2][5]
#define THEME_CLR(Theme, Subject, Color)