vdr 2.8.2
skins.h
Go to the documentation of this file.
1/*
2 * skins.h: The optical appearance of the OSD
3 *
4 * See the main source file 'vdr.c' for copyright information and
5 * how to reach the author.
6 *
7 * $Id: skins.h 5.13 2026/05/30 12:27:12 kls Exp $
8 */
9
10#ifndef __SKINS_H
11#define __SKINS_H
12
13#include "channels.h"
14#include "epg.h"
15#include "keys.h"
16#include "osd.h"
17#include "positioner.h"
18#include "recording.h"
19#include "themes.h"
20#include "thread.h"
21#include "timers.h"
22#include "tools.h"
23
24// Several member functions of the following classes are called with a pointer to
25// an object from a global list (cTimer, cChannel, cRecording or cEvent). In these
26// cases the core VDR code holds a lock on the respective list. While in general a
27// plugin should only work with the objects and data that is explicitly given to it
28// in the function call, the called function may itself set a read lock (not a write
29// lock!) on this list, because read locks can be nested. It may also set read locks
30// (not write locks!) on higher order lists.
31// For instance, a function that is called with a cChannel may lock cRecordings and/or
32// cSchedules (which contains cEvent objects), but not cTimers. If a plugin needs to
33// set locks of its own (on mutexes defined inside the plugin code), it shall do so
34// after setting any locks on VDR's global lists, and it shall always set these
35// locks in the same sequence, to avoid deadlocks.
36
37enum eMessageType { mtStatus = 0, mtInfo, mtWarning, mtError }; // will be used to calculate color offsets!
38
40private:
42 int editableWidth; //XXX this is not nice, but how else could we know this value?
43public:
44 cSkinDisplay(void);
45 virtual ~cSkinDisplay();
46 static int AvgCharWidth(void) { return Setup.FontOsdSize * 4 / 6; }
48 int EditableWidth(void) { return editableWidth; }
49 void SetEditableWidth(int Width) { editableWidth = Width; }
53 virtual void SetButtons(const char *Red, const char *Green = NULL, const char *Yellow = NULL, const char *Blue = NULL) {}
56 virtual void SetMessage(eMessageType Type, const char *Text) {}
59 virtual void Flush(void) {}
61 static cSkinDisplay *Current(void) { return current; }
63 };
64
69private:
71public:
73 virtual void SetChannel(const cChannel *Channel, int Number) = 0;
77 virtual void SetEvents(const cEvent *Present, const cEvent *Following) = 0;
80 virtual void SetMessage(eMessageType Type, const char *Text) override = 0;
85 virtual void SetPositioner(const cPositioner *Positioner);
96 /*TODO
97 SetButtons
98 Red = Video options
99 Green = Info now
100 Yellow = Info next
101 */
102 };
103
137
145
150
168public:
169 enum { MaxTabs = 6 };
170private:
173protected:
175 int Tab(int n) { return (n >= 0 && n < MaxTabs) ? tabs[n] : 0; }
178 const char *GetTabbedText(const char *s, int Tab);
182public:
183 cSkinDisplayMenu(void);
194 virtual void SetTabs(int Tab1, int Tab2 = 0, int Tab3 = 0, int Tab4 = 0, int Tab5 = 0);
199 virtual void SetMenuSortMode(eMenuSortMode MenuSortMode) {}
207 virtual void Scroll(bool Up, bool Page);
213 virtual int MaxItems(void) = 0;
215 virtual void Clear(void) = 0;
217 virtual void SetTitle(const char *Title) = 0;
219 virtual void SetButtons(const char *Red, const char *Green = NULL, const char *Yellow = NULL, const char *Blue = NULL) override = 0;
222 virtual void SetMessage(eMessageType Type, const char *Text) override = 0;
227 virtual void SetItem(const char *Text, int Index, bool Current, bool Selectable) = 0;
239 virtual bool SetItemEvent(const cEvent *Event, int Index, bool Current, bool Selectable, const cChannel *Channel, bool WithDate, eTimerMatch TimerMatch, bool TimerActive) { return false; }
250 virtual bool SetItemEvent(const cEvent *Event, int Index, bool Current, bool Selectable, const cChannel *Channel, bool WithDate, eTimerMatch TimerMatch, const cTimer *Timer) {
251 return SetItemEvent(Event, Index, Current, Selectable, Channel, WithDate, TimerMatch, Timer && Timer->HasFlags(tfActive)); }
254 virtual bool SetItemTimer(const cTimer *Timer, int Index, bool Current, bool Selectable) { return false; }
261 virtual bool SetItemChannel(const cChannel *Channel, int Index, bool Current, bool Selectable, bool WithProvider) { return false; }
270 virtual bool SetItemRecording(const cRecording *Recording, int Index, bool Current, bool Selectable, int Level, int Total, int New) { return false; }
281 virtual void SetScrollbar(int Total, int Offset);
286 virtual void SetEvent(const cEvent *Event) = 0;
291 virtual void SetRecording(const cRecording *Recording) = 0;
296 virtual void SetText(const char *Text, bool FixedFont) = 0;
301 //XXX ??? virtual void SetHelp(const char *Help) = 0;
302 virtual int GetTextAreaWidth(void) const;
308 virtual const cFont *GetTextAreaFont(bool FixedFont) const;
314 };
315
319protected:
320 const cMarks *marks;
322 class cProgressBar : public cBitmap {
323 protected:
324 int total;
325 int Pos(int p) { return int(int64_t(p) * Width() / total); }
326 void Mark(int x, bool Start, bool Current, tColor ColorMark, tColor ColorCurrent);
327 void Error(int x, tColor ColorError);
328 public:
329 cProgressBar(int Width, int Height, int Current, int Total, const cMarks *Marks, tColor ColorSeen, tColor ColorRest, tColor ColorSelected, tColor ColorMark, tColor ColorCurrent); // for backwards compatibility
330 cProgressBar(int Width, int Height, int Current, int Total, const cMarks *Marks, const cErrors *Errors, tColor ColorSeen, tColor ColorRest, tColor ColorSelected, tColor ColorMark, tColor ColorCurrent, tColor ColorError);
331 };
332public:
333 cSkinDisplayReplay(void);
334 virtual void SetMarks(const cMarks *Marks);
337 virtual void SetErrors(const cErrors *Errors);
340 virtual void SetRecording(const cRecording *Recording);
345 virtual void SetTitle(const char *Title) = 0;
347 virtual void SetMode(bool Play, bool Forward, int Speed) = 0;
351 virtual void SetProgress(int Current, int Total) = 0;
355 virtual void SetCurrent(const char *Current) = 0;
361 virtual void SetTotal(const char *Total) = 0;
364 virtual void SetJump(const char *Jump) = 0;
370 virtual void SetMessage(eMessageType Type, const char *Text) override = 0;
375 };
376
379public:
380 virtual void SetVolume(int Current, int Total, bool Mute) = 0;
384 };
385
388public:
389 virtual void SetTrack(int Index, const char * const *Tracks) = 0;
392 virtual void SetAudioChannel(int AudioChannel) = 0;
395 };
396
399public:
400 virtual void SetMessage(eMessageType Type, const char *Text) override = 0;
403 };
404
405class cSkin : public cListObject {
406private:
407 char *name;
409public:
410 cSkin(const char *Name, cTheme *Theme = NULL);
423 virtual ~cSkin() override;
424 const char *Name(void) { return name; }
425 cTheme *Theme(void) { return theme; }
426 virtual const char *Description(void) = 0;
432 virtual cSkinDisplayChannel *DisplayChannel(bool WithInfo) = 0;
438 virtual cSkinDisplayMenu *DisplayMenu(void) = 0;
441 virtual cSkinDisplayReplay *DisplayReplay(bool ModeOnly) = 0;
449 virtual cSkinDisplayTracks *DisplayTracks(const char *Title, int NumTracks, const char * const *Tracks) = 0;
458 };
459
460class cSkins : public cList<cSkin> {
461private:
465public:
466 cSkins(void);
467 ~cSkins();
468 bool SetCurrent(const char *Name = NULL);
471 cSkin *Current(void) { return current; }
473 bool IsOpen(void) { return cSkinDisplay::Current(); }
475 eKeys Message(eMessageType Type, const char *s, int Seconds = 0);
488 int QueueMessage(eMessageType Type, const char *s, int Seconds = 0, int Timeout = 0);
513 void ProcessQueuedMessages(void);
515 void Flush(void);
517 virtual void Clear(void) override;
519 };
520
521extern cSkins Skins;
522
523#endif //__SKINS_H
int Height(void) const
Definition osd.h:190
cBitmap(int Width, int Height, int Bpp, int X0=0, int Y0=0)
Creates a bitmap with the given Width, Height and color depth (Bpp).
Definition osd.c:261
int Width(void) const
Definition osd.h:189
Definition epg.h:74
Definition font.h:37
cListObject(const cListObject &ListObject)
Definition tools.h:547
cList(const char *NeedsLocking=NULL)
Definition tools.h:646
A steerable satellite dish generally points to the south on the northern hemisphere,...
Definition positioner.h:31
virtual void SetEvents(const cEvent *Present, const cEvent *Following)=0
Sets the Present and Following EPG events.
virtual void SetPositioner(const cPositioner *Positioner)
Sets the Positioner used to move the satellite dish.
Definition skins.c:73
cSkinDisplayChannel(void)
Definition skins.c:68
virtual void SetMessage(eMessageType Type, const char *Text) override=0
Sets a one line message Text, with the given Type.
const cPositioner * positioner
< This class is used to display the current channel, together with the present and following EPG even...
Definition skins.h:70
virtual void SetChannel(const cChannel *Channel, int Number)=0
Sets the current channel to Channel.
virtual void SetMenuSortMode(eMenuSortMode MenuSortMode)
Sets the mode by which the items in this menu are sorted.
Definition skins.h:199
virtual void SetRecording(const cRecording *Recording)=0
Sets the Recording that shall be displayed, using the entire central area of the menu.
eMenuCategory menuCategory
Definition skins.h:171
virtual bool SetItemRecording(const cRecording *Recording, int Index, bool Current, bool Selectable, int Level, int Total, int New)
Sets the item at the given Index to Recording.
Definition skins.h:270
virtual void Scroll(bool Up, bool Page)
If this menu contains a text area that can be scrolled, this function will be called to actually scro...
Definition skins.c:111
virtual void SetMessage(eMessageType Type, const char *Text) override=0
Sets a one line message Text, with the given Type.
virtual int MaxItems(void)=0
Returns the maximum number of items the menu can display.
virtual void SetButtons(const char *Red, const char *Green=NULL, const char *Yellow=NULL, const char *Blue=NULL) override=0
Sets the color buttons to the given strings.
virtual void SetTabs(int Tab1, int Tab2=0, int Tab3=0, int Tab4=0, int Tab5=0)
Sets the tab columns to the given values, which are the number of characters in each column.
Definition skins.c:95
virtual int GetTextAreaWidth(void) const
Returns the width in pixel of the area which is used to display text with SetText().
Definition skins.c:141
virtual eMenuOrientation MenuOrientation(void)
Asks the skin for the orientation of the displayed menu.
Definition skins.h:203
cTextScroller textScroller
Definition skins.h:174
int Tab(int n)
Returns the offset of the given tab from the left border of the item display area.
Definition skins.h:175
virtual void SetItem(const char *Text, int Index, bool Current, bool Selectable)=0
Sets the item at the given Index to Text.
eMenuCategory MenuCategory(void) const
Returns the menu category, set by a previous call to SetMenuCategory().
Definition skins.h:184
virtual bool SetItemEvent(const cEvent *Event, int Index, bool Current, bool Selectable, const cChannel *Channel, bool WithDate, eTimerMatch TimerMatch, const cTimer *Timer)
Like SetItemEvent(..., bool TimerActive), but with full access to the Timer.
Definition skins.h:250
virtual void SetEvent(const cEvent *Event)=0
Sets the Event that shall be displayed, using the entire central area of the menu.
virtual void SetScrollbar(int Total, int Offset)
Sets the Total number of items in the currently displayed list, and the Offset of the first item that...
Definition skins.c:137
virtual const cFont * GetTextAreaFont(bool FixedFont) const
Returns a pointer to the font which is used to display text with SetText().
Definition skins.c:146
virtual void SetTitle(const char *Title)=0
Sets the title of this menu to Title.
cSkinDisplayMenu(void)
Definition skins.c:84
virtual bool SetItemEvent(const cEvent *Event, int Index, bool Current, bool Selectable, const cChannel *Channel, bool WithDate, eTimerMatch TimerMatch, bool TimerActive)
Sets the item at the given Index to Event.
Definition skins.h:239
virtual bool SetItemChannel(const cChannel *Channel, int Index, bool Current, bool Selectable, bool WithProvider)
Sets the item at the given Index to Channel.
Definition skins.h:261
const char * GetTabbedText(const char *s, int Tab)
Returns the part of the given string that follows the given Tab (where 0 indicates the beginning of t...
Definition skins.c:116
virtual void Clear(void)=0
Clears the entire central area of the menu.
virtual void SetMenuCategory(eMenuCategory MenuCategory)
Sets the current menu category.
Definition skins.c:90
virtual bool SetItemTimer(const cTimer *Timer, int Index, bool Current, bool Selectable)
Sets the item at the given Index to Timer.
Definition skins.h:254
int tabs[MaxTabs]
Definition skins.h:172
virtual void SetText(const char *Text, bool FixedFont)=0
Sets the Text that shall be displayed, using the entire central area of the menu.
virtual void SetMessage(eMessageType Type, const char *Text) override=0
< This class implements a simple message display.
void Mark(int x, bool Start, bool Current, tColor ColorMark, tColor ColorCurrent)
Definition skins.c:193
cProgressBar(int Width, int Height, int Current, int Total, const cMarks *Marks, tColor ColorSeen, tColor ColorRest, tColor ColorSelected, tColor ColorMark, tColor ColorCurrent)
Definition skins.c:153
void Error(int x, tColor ColorError)
Definition skins.c:203
virtual void SetErrors(const cErrors *Errors)
Sets the errors found in the recording to Errors, which shall be used to display the progress bar thr...
Definition skins.c:234
virtual void SetJump(const char *Jump)=0
Sets the prompt that allows the user to enter a jump point.
virtual void SetMarks(const cMarks *Marks)
Sets the editing marks to Marks, which shall be used to display the progress bar through a cProgressB...
Definition skins.c:229
virtual void SetTitle(const char *Title)=0
Sets the title of the recording.
virtual void SetRecording(const cRecording *Recording)
Sets the recording that is currently being played.
Definition skins.c:224
virtual void SetCurrent(const char *Current)=0
Sets the current position within the recording, as a user readable string in the form "h:mm:ss....
virtual void SetMessage(eMessageType Type, const char *Text) override=0
Sets a one line message Text, with the given Type.
const cErrors * errors
Definition skins.h:321
virtual void SetProgress(int Current, int Total)=0
This function will be called whenever the position in or the total length of the recording has change...
virtual void SetMode(bool Play, bool Forward, int Speed)=0
Sets the current replay mode, which can be used to display some indicator, showing the user whether w...
virtual void SetTotal(const char *Total)=0
Sets the total length of the recording, as a user readable string in the form "h:mm:ss".
cSkinDisplayReplay(void)
Definition skins.c:218
const cMarks * marks
< This class implements the progress display used during replay of a recording.
Definition skins.h:320
virtual void SetAudioChannel(int AudioChannel)=0
Sets the audio channel indicator.
virtual void SetTrack(int Index, const char *const *Tracks)=0
< This class implements the track display.
virtual void SetVolume(int Current, int Total, bool Mute)=0
< This class implements the volume/mute display.
int EditableWidth(void)
Definition skins.h:48
static cSkinDisplay * Current(void)
Returns the currently active cSkinDisplay.
Definition skins.h:61
static cSkinDisplay * current
Definition skins.h:41
virtual void Flush(void)
Actually draws the OSD display to the output device.
Definition skins.h:59
void SetEditableWidth(int Width)
If an item is set through a call to cSkinDisplayMenu::SetItem(), this function shall be called to set...
Definition skins.h:49
cSkinDisplay(void)
Definition skins.c:55
int editableWidth
Definition skins.h:42
virtual ~cSkinDisplay()
Definition skins.c:61
virtual void SetMessage(eMessageType Type, const char *Text)
Sets a one line message Text, with the given Type.
Definition skins.h:56
virtual void SetButtons(const char *Red, const char *Green=NULL, const char *Yellow=NULL, const char *Blue=NULL)
Sets the color buttons to the given strings, provided this cSkinDisplay actually has a color button d...
Definition skins.h:53
static int AvgCharWidth(void)
Returns the average width of a character in pixel (just a raw estimate).
Definition skins.h:46
Definition skins.h:405
cTheme * Theme(void)
Definition skins.h:425
const char * Name(void)
Definition skins.h:424
virtual const char * Description(void)=0
Returns a user visible, single line description of this skin, which may consist of arbitrary text and...
cTheme * theme
Definition skins.h:408
virtual cSkinDisplayReplay * DisplayReplay(bool ModeOnly)=0
Creates and returns a new object for displaying replay progress.
virtual cSkinDisplayMenu * DisplayMenu(void)=0
Creates and returns a new object for displaying a menu.
virtual cSkinDisplayVolume * DisplayVolume(void)=0
Creates and returns a new object for displaying the current volume.
virtual ~cSkin() override
Definition skins.c:250
virtual cSkinDisplayTracks * DisplayTracks(const char *Title, int NumTracks, const char *const *Tracks)=0
Creates and returns a new object for displaying the available tracks.
char * name
Definition skins.h:407
cSkin(const char *Name, cTheme *Theme=NULL)
Creates a new skin class, with the given Name and Theme.
Definition skins.c:241
virtual cSkinDisplayMessage * DisplayMessage(void)=0
Creates and returns a new object for displaying a message.
virtual cSkinDisplayChannel * DisplayChannel(bool WithInfo)=0
Creates and returns a new object for displaying the current channel.
bool IsOpen(void)
Returns true if there is currently a skin display object active.
Definition skins.h:473
bool SetCurrent(const char *Name=NULL)
Sets the current skin to the one indicated by name.
Definition skins.c:269
eKeys Message(eMessageType Type, const char *s, int Seconds=0)
Displays the given message, either through a currently visible display object that is capable of doin...
Definition skins.c:288
void Flush(void)
Flushes the currently active cSkinDisplay, if any.
Definition skins.c:440
~cSkins()
Definition skins.c:264
cSkin * Current(void)
Returns a pointer to the current skin.
Definition skins.h:471
cSkin * current
Definition skins.h:462
cMutex queueMessageMutex
Definition skins.h:464
cSkinDisplayMessage * displayMessage
Definition skins.h:463
void ProcessQueuedMessages(void)
Processes the first queued message, if any.
Definition skins.c:390
cSkins(void)
Definition skins.c:259
virtual void Clear(void) override
Free up all registered skins.
Definition skins.c:446
int QueueMessage(eMessageType Type, const char *s, int Seconds=0, int Timeout=0)
Like Message(), but this function may be called from a background thread.
Definition skins.c:334
bool HasFlags(uint Flags) const
Definition timers.c:1135
cSetup Setup
Definition config.c:372
uint32_t tColor
Definition font.h:30
eKeys
Definition keys.h:16
cSkins Skins
Definition skins.c:257
eMenuOrientation
Definition skins.h:146
@ moHorizontal
Definition skins.h:148
@ moVertical
Definition skins.h:147
eMenuCategory
Definition skins.h:104
@ mcSetupMisc
Definition skins.h:129
@ mcSetupOsd
Definition skins.h:122
@ mcSetupLnb
Definition skins.h:125
@ mcMain
Definition skins.h:107
@ mcSetup
Definition skins.h:121
@ mcChannel
Definition skins.h:111
@ mcRecordingInfo
Definition skins.h:117
@ mcSetupDvb
Definition skins.h:124
@ mcPlugin
Definition skins.h:119
@ mcSetupRecord
Definition skins.h:127
@ mcCam
Definition skins.h:135
@ mcSetupReplay
Definition skins.h:128
@ mcPluginSetup
Definition skins.h:120
@ mcRecordingDel
Definition skins.h:116
@ mcChannelEdit
Definition skins.h:112
@ mcCommand
Definition skins.h:131
@ mcEvent
Definition skins.h:132
@ mcUnknown
Definition skins.h:106
@ mcSetupCam
Definition skins.h:126
@ mcUndefined
Definition skins.h:105
@ mcSchedule
Definition skins.h:108
@ mcText
Definition skins.h:133
@ mcRecording
Definition skins.h:115
@ mcRecordingEdit
Definition skins.h:118
@ mcTimerEdit
Definition skins.h:114
@ mcScheduleNow
Definition skins.h:109
@ mcSetupPlugins
Definition skins.h:130
@ mcFolder
Definition skins.h:134
@ mcSetupEpg
Definition skins.h:123
@ mcTimer
Definition skins.h:113
@ mcScheduleNext
Definition skins.h:110
eMessageType
Definition skins.h:37
@ mtWarning
Definition skins.h:37
@ mtInfo
Definition skins.h:37
@ mtError
Definition skins.h:37
@ mtStatus
Definition skins.h:37
eMenuSortMode
Definition skins.h:138
@ msmProvider
Definition skins.h:143
@ msmUnknown
Definition skins.h:139
@ msmTime
Definition skins.h:142
@ msmName
Definition skins.h:141
@ msmNumber
Definition skins.h:140
@ tfActive
Definition timers.h:19
eTimerMatch
Definition timers.h:27