vdr  2.0.4
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 2.9 2012/12/21 11:09:13 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 "recording.h"
18 #include "themes.h"
19 #include "thread.h"
20 #include "timers.h"
21 #include "tools.h"
22 
23 enum eMessageType { mtStatus = 0, mtInfo, mtWarning, mtError }; // will be used to calculate color offsets!
24 
25 class cSkinDisplay {
26 private:
28  int editableWidth; //XXX this is not nice, but how else could we know this value?
29 public:
30  cSkinDisplay(void);
31  virtual ~cSkinDisplay();
32  static int AvgCharWidth(void) { return Setup.FontOsdSize * 4 / 6; }
34  int EditableWidth(void) { return editableWidth; }
35  void SetEditableWidth(int Width) { editableWidth = Width; }
39  virtual void SetButtons(const char *Red, const char *Green = NULL, const char *Yellow = NULL, const char *Blue = NULL) {}
42  virtual void SetMessage(eMessageType Type, const char *Text) {}
45  virtual void Flush(void) {}
47  static cSkinDisplay *Current(void) { return current; }
49  };
50 
55 public:
56  virtual void SetChannel(const cChannel *Channel, int Number) = 0;
60  virtual void SetEvents(const cEvent *Present, const cEvent *Following) = 0;
63  virtual void SetMessage(eMessageType Type, const char *Text) = 0;
68  /*TODO
69  SetButtons
70  Red = Video options
71  Green = Info now
72  Yellow = Info next
73  */
74  };
75 
78  mcUnknown = 0,
106  };
107 
125 public:
126  enum { MaxTabs = 6 };
127 private:
129  int tabs[MaxTabs];
130 protected:
132  int Tab(int n) { return (n >= 0 && n < MaxTabs) ? tabs[n] : 0; }
135  const char *GetTabbedText(const char *s, int Tab);
139 public:
140  cSkinDisplayMenu(void);
141  eMenuCategory MenuCategory(void) const { return menuCategory; }
151  virtual void SetTabs(int Tab1, int Tab2 = 0, int Tab3 = 0, int Tab4 = 0, int Tab5 = 0);
154  virtual void Scroll(bool Up, bool Page);
160  virtual int MaxItems(void) = 0;
162  virtual void Clear(void) = 0;
164  virtual void SetTitle(const char *Title) = 0;
166  virtual void SetButtons(const char *Red, const char *Green = NULL, const char *Yellow = NULL, const char *Blue = NULL) = 0;
169  virtual void SetMessage(eMessageType Type, const char *Text) = 0;
174  virtual void SetItem(const char *Text, int Index, bool Current, bool Selectable) = 0;
186  virtual bool SetItemEvent(const cEvent *Event, int Index, bool Current, bool Selectable, const cChannel *Channel, bool WithDate, eTimerMatch TimerMatch) { return false; }
196  virtual bool SetItemTimer(const cTimer *Timer, int Index, bool Current, bool Selectable) { return false; }
203  virtual bool SetItemChannel(const cChannel *Channel, int Index, bool Current, bool Selectable, bool WithProvider) { return false; }
212  virtual bool SetItemRecording(const cRecording *Recording, int Index, bool Current, bool Selectable, int Level, int Total, int New) { return false; }
223  virtual void SetScrollbar(int Total, int Offset);
228  virtual void SetEvent(const cEvent *Event) = 0;
233  virtual void SetRecording(const cRecording *Recording) = 0;
238  virtual void SetText(const char *Text, bool FixedFont) = 0;
243  //XXX ??? virtual void SetHelp(const char *Help) = 0;
244  virtual int GetTextAreaWidth(void) const;
250  virtual const cFont *GetTextAreaFont(bool FixedFont) const;
257  };
258 
262 protected:
263  const cMarks *marks;
264  class cProgressBar : public cBitmap {
265  protected:
266  int total;
267  int Pos(int p) { return p * Width() / total; }
268  void Mark(int x, bool Start, bool Current, tColor ColorMark, tColor ColorCurrent);
269  public:
270  cProgressBar(int Width, int Height, int Current, int Total, const cMarks *Marks, tColor ColorSeen, tColor ColorRest, tColor ColorSelected, tColor ColorMark, tColor ColorCurrent);
271  };
272 public:
273  cSkinDisplayReplay(void);
274  virtual void SetMarks(const cMarks *Marks);
277  virtual void SetRecording(const cRecording *Recording);
282  virtual void SetTitle(const char *Title) = 0;
284  virtual void SetMode(bool Play, bool Forward, int Speed) = 0;
288  virtual void SetProgress(int Current, int Total) = 0;
292  virtual void SetCurrent(const char *Current) = 0;
298  virtual void SetTotal(const char *Total) = 0;
301  virtual void SetJump(const char *Jump) = 0;
307  virtual void SetMessage(eMessageType Type, const char *Text) = 0;
312  };
313 
316 public:
317  virtual void SetVolume(int Current, int Total, bool Mute) = 0;
321  };
322 
325 public:
326  virtual void SetTrack(int Index, const char * const *Tracks) = 0;
329  virtual void SetAudioChannel(int AudioChannel) = 0;
332  };
333 
336 public:
337  virtual void SetMessage(eMessageType Type, const char *Text) = 0;
340  };
341 
342 class cSkin : public cListObject {
343 private:
344  char *name;
346 public:
347  cSkin(const char *Name, cTheme *Theme = NULL);
360  virtual ~cSkin();
361  const char *Name(void) { return name; }
362  cTheme *Theme(void) { return theme; }
363  virtual const char *Description(void) = 0;
369  virtual cSkinDisplayChannel *DisplayChannel(bool WithInfo) = 0;
375  virtual cSkinDisplayMenu *DisplayMenu(void) = 0;
378  virtual cSkinDisplayReplay *DisplayReplay(bool ModeOnly) = 0;
383  virtual cSkinDisplayVolume *DisplayVolume(void) = 0;
386  virtual cSkinDisplayTracks *DisplayTracks(const char *Title, int NumTracks, const char * const *Tracks) = 0;
392  virtual cSkinDisplayMessage *DisplayMessage(void) = 0;
395  };
396 
397 class cSkins : public cList<cSkin> {
398 private:
402 public:
403  cSkins(void);
404  ~cSkins();
405  bool SetCurrent(const char *Name = NULL);
408  cSkin *Current(void) { return current; }
410  bool IsOpen(void) { return cSkinDisplay::Current(); }
412  eKeys Message(eMessageType Type, const char *s, int Seconds = 0);
420  int QueueMessage(eMessageType Type, const char *s, int Seconds = 0, int Timeout = 0);
445  void ProcessQueuedMessages(void);
447  void Flush(void);
449  virtual void Clear(void);
451  };
452 
453 extern cSkins Skins;
454 
455 #endif //__SKINS_H
456