vdr  2.4.0
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 4.5 2017/11/02 15:04:56 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 
37 enum eMessageType { mtStatus = 0, mtInfo, mtWarning, mtError }; // will be used to calculate color offsets!
38 
39 class cSkinDisplay {
40 private:
42  int editableWidth; //XXX this is not nice, but how else could we know this value?
43 public:
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 
69 private:
71 public:
72  cSkinDisplayChannel(void);
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) = 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 
135  };
136 
143  };
144 
148  };
149 
167 public:
168  enum { MaxTabs = 6 };
169 private:
171  int tabs[MaxTabs];
172 protected:
174  int Tab(int n) { return (n >= 0 && n < MaxTabs) ? tabs[n] : 0; }
177  const char *GetTabbedText(const char *s, int Tab);
181 public:
182  cSkinDisplayMenu(void);
183  eMenuCategory MenuCategory(void) const { return menuCategory; }
185  virtual void SetMenuCategory(eMenuCategory MenuCategory);
193  virtual void SetTabs(int Tab1, int Tab2 = 0, int Tab3 = 0, int Tab4 = 0, int Tab5 = 0);
196  virtual void SetMenuSortMode(eMenuSortMode MenuSortMode) {}
200  virtual eMenuOrientation MenuOrientation(void) { return moVertical; }
204  virtual void Scroll(bool Up, bool Page);
210  virtual int MaxItems(void) = 0;
212  virtual void Clear(void) = 0;
214  virtual void SetTitle(const char *Title) = 0;
216  virtual void SetButtons(const char *Red, const char *Green = NULL, const char *Yellow = NULL, const char *Blue = NULL) = 0;
219  virtual void SetMessage(eMessageType Type, const char *Text) = 0;
224  virtual void SetItem(const char *Text, int Index, bool Current, bool Selectable) = 0;
236  virtual bool SetItemEvent(const cEvent *Event, int Index, bool Current, bool Selectable, const cChannel *Channel, bool WithDate, eTimerMatch TimerMatch, bool TimerActive) { return false; }
247 #ifndef DEPRECATED_SKIN_SETITEMEVENT
248 #define DEPRECATED_SKIN_SETITEMEVENT 1
249 #endif
250 #if DEPRECATED_SKIN_SETITEMEVENT
251  virtual bool SetItemEvent(const cEvent *Event, int Index, bool Current, bool Selectable, const cChannel *Channel, bool WithDate, eTimerMatch TimerMatch) { return SetItemEvent(Event, Index, Current, Selectable, Channel, WithDate, TimerMatch, true); }
255 #endif
256  virtual bool SetItemTimer(const cTimer *Timer, int Index, bool Current, bool Selectable) { return false; }
263  virtual bool SetItemChannel(const cChannel *Channel, int Index, bool Current, bool Selectable, bool WithProvider) { return false; }
272  virtual bool SetItemRecording(const cRecording *Recording, int Index, bool Current, bool Selectable, int Level, int Total, int New) { return false; }
283  virtual void SetScrollbar(int Total, int Offset);
288  virtual void SetEvent(const cEvent *Event) = 0;
293  virtual void SetRecording(const cRecording *Recording) = 0;
298  virtual void SetText(const char *Text, bool FixedFont) = 0;
303  //XXX ??? virtual void SetHelp(const char *Help) = 0;
304  virtual int GetTextAreaWidth(void) const;
310  virtual const cFont *GetTextAreaFont(bool FixedFont) const;
317  };
318 
322 protected:
323  const cMarks *marks;
324  class cProgressBar : public cBitmap {
325  protected:
326  int total;
327  int Pos(int p) { return int(int64_t(p) * Width() / total); }
328  void Mark(int x, bool Start, bool Current, tColor ColorMark, tColor ColorCurrent);
329  public:
330  cProgressBar(int Width, int Height, int Current, int Total, const cMarks *Marks, tColor ColorSeen, tColor ColorRest, tColor ColorSelected, tColor ColorMark, tColor ColorCurrent);
331  };
332 public:
333  cSkinDisplayReplay(void);
334  virtual void SetMarks(const cMarks *Marks);
337  virtual void SetRecording(const cRecording *Recording);
342  virtual void SetTitle(const char *Title) = 0;
344  virtual void SetMode(bool Play, bool Forward, int Speed) = 0;
348  virtual void SetProgress(int Current, int Total) = 0;
352  virtual void SetCurrent(const char *Current) = 0;
358  virtual void SetTotal(const char *Total) = 0;
361  virtual void SetJump(const char *Jump) = 0;
367  virtual void SetMessage(eMessageType Type, const char *Text) = 0;
372  };
373 
376 public:
377  virtual void SetVolume(int Current, int Total, bool Mute) = 0;
381  };
382 
385 public:
386  virtual void SetTrack(int Index, const char * const *Tracks) = 0;
389  virtual void SetAudioChannel(int AudioChannel) = 0;
392  };
393 
396 public:
397  virtual void SetMessage(eMessageType Type, const char *Text) = 0;
400  };
401 
402 class cSkin : public cListObject {
403 private:
404  char *name;
406 public:
407  cSkin(const char *Name, cTheme *Theme = NULL);
420  virtual ~cSkin();
421  const char *Name(void) { return name; }
422  cTheme *Theme(void) { return theme; }
423  virtual const char *Description(void) = 0;
429  virtual cSkinDisplayChannel *DisplayChannel(bool WithInfo) = 0;
435  virtual cSkinDisplayMenu *DisplayMenu(void) = 0;
438  virtual cSkinDisplayReplay *DisplayReplay(bool ModeOnly) = 0;
443  virtual cSkinDisplayVolume *DisplayVolume(void) = 0;
446  virtual cSkinDisplayTracks *DisplayTracks(const char *Title, int NumTracks, const char * const *Tracks) = 0;
452  virtual cSkinDisplayMessage *DisplayMessage(void) = 0;
455  };
456 
457 class cSkins : public cList<cSkin> {
458 private:
462 public:
463  cSkins(void);
464  ~cSkins();
465  bool SetCurrent(const char *Name = NULL);
468  cSkin *Current(void) { return current; }
470  bool IsOpen(void) { return cSkinDisplay::Current(); }
472  eKeys Message(eMessageType Type, const char *s, int Seconds = 0);
480  int QueueMessage(eMessageType Type, const char *s, int Seconds = 0, int Timeout = 0);
505  void ProcessQueuedMessages(void);
507  void Flush(void);
509  virtual void Clear(void);
511  };
512 
513 extern cSkins Skins;
514 
515 #endif //__SKINS_H
eMenuOrientation
Definition: skins.h:145
static int AvgCharWidth(void)
Returns the average width of a character in pixel (just a raw estimate).
Definition: skins.h:46
Definition: epg.h:71
Definition: skins.h:141
virtual bool SetItemEvent(const cEvent *Event, int Index, bool Current, bool Selectable, const cChannel *Channel, bool WithDate, eTimerMatch TimerMatch)
This function is here for comaptibility with older plugins and may be removed in a future version...
Definition: skins.h:251
eMessageType
Definition: skins.h:37
Definition: skins.h:134
int EditableWidth(void)
Definition: skins.h:48
cSkin * current
Definition: skins.h:459
const cPositioner * positioner
< This class is used to display the current channel, together with the present and following EPG even...
Definition: skins.h:70
eMenuCategory MenuCategory(void) const
Returns the menu category, set by a previous call to SetMenuCategory().
Definition: skins.h:183
Definition: tools.h:594
int editableWidth
Definition: skins.h:42
cSkinDisplayMessage * displayMessage
Definition: skins.h:460
static cSkinDisplay * Current(void)
Returns the currently active cSkinDisplay.
Definition: skins.h:61
const char * Name(void)
Definition: skins.h:421
cTheme * theme
Definition: skins.h:405
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
Definition: osd.h:169
static cSkinDisplay * current
Definition: skins.h:41
Definition: timers.h:27
Definition: skins.h:120
A steerable satellite dish generally points to the south on the northern hemisphere, and to the north on the southern hemisphere (unless you&#39;re located directly on the equator, in which case the general direction is "up").
Definition: positioner.h:31
eTimerMatch
Definition: timers.h:25
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:272
Definition: skins.h:113
Definition: skins.h:132
char * name
Definition: skins.h:404
cTextScroller textScroller
Definition: skins.h:173
virtual void Flush(void)
Actually draws the OSD display to the output device.
Definition: skins.h:59
Definition: themes.h:17
cTheme * Theme(void)
Definition: skins.h:422
virtual void SetMenuSortMode(eMenuSortMode MenuSortMode)
Sets the mode by which the items in this menu are sorted.
Definition: skins.h:196
cSkinDisplay(void)
Definition: skins.c:55
Definition: skins.h:140
int Tab(int n)
Returns the offset of the given tab from the left border of the item display area.
Definition: skins.h:174
Definition: skins.h:37
Definition: skins.h:107
cSetup Setup
Definition: config.c:372
static cTheme Theme
Definition: skinclassic.c:21
Definition: thread.h:67
Definition: skins.h:457
Definition: skins.h:402
bool IsOpen(void)
Returns true if there is currently a skin display object active.
Definition: skins.h:470
Definition: skins.h:37
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
cMutex queueMessageMutex
Definition: skins.h:461
Definition: skins.h:37
eMenuCategory menuCategory
Definition: skins.h:170
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:236
eMenuCategory
Definition: skins.h:104
int FontOsdSize
Definition: config.h:335
const cMarks * marks
< This class implements the progress display used during replay of a recording.
Definition: skins.h:323
virtual bool SetItemTimer(const cTimer *Timer, int Index, bool Current, bool Selectable)
Sets the item at the given Index to Timer.
Definition: skins.h:256
cSkin * Current(void)
Returns a pointer to the current skin.
Definition: skins.h:468
virtual void SetMessage(eMessageType Type, const char *Text)
Sets a one line message Text, with the given Type.
Definition: skins.h:56
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:263
eKeys
Definition: keys.h:16
cSkins Skins
Definition: skins.c:219
Definition: font.h:37
virtual eMenuOrientation MenuOrientation(void)
Asks the skin for the orientation of the displayed menu.
Definition: skins.h:200
uint32_t tColor
Definition: font.h:29
eMenuSortMode
Definition: skins.h:137
virtual ~cSkinDisplay()
Definition: skins.c:61
Definition: skins.h:131