vdr  2.7.6
menu.h
Go to the documentation of this file.
1 /*
2  * menu.h: The actual menu implementations
3  *
4  * See the main source file 'vdr.c' for copyright information and
5  * how to reach the author.
6  *
7  * $Id: menu.h 5.6 2025/03/02 11:03:35 kls Exp $
8  */
9 
10 #ifndef __MENU_H
11 #define __MENU_H
12 
13 #include "ci.h"
14 #include "device.h"
15 #include "epg.h"
16 #include "osdbase.h"
17 #include "dvbplayer.h"
18 #include "menuitems.h"
19 #include "recorder.h"
20 #include "skins.h"
21 
22 class cMenuText : public cOsdMenu {
23 private:
24  char *text;
26 public:
27  cMenuText(const char *Title, const char *Text, eDvbFont Font = fontOsd);
28  virtual ~cMenuText() override;
29  void SetText(const char *Text);
30  virtual void Display(void) override;
31  virtual eOSState ProcessKey(eKeys Key) override;
32  };
33 
34 class cMenuFolder : public cOsdMenu {
35 private:
40  bool editing;
41  int helpKeys;
42  void SetHelpKeys(void);
43  void Set(const char *CurrentFolder = NULL);
44  void DescendPath(const char *Path);
45  eOSState SetFolder(void);
46  eOSState Select(bool Open);
47  eOSState New(void);
48  eOSState Delete(void);
49  eOSState Edit(void);
50  cMenuFolder(const char *Title, cList<cNestedItem> *List, cNestedItemList *NestedItemList, const char *Dir, const char *Path = NULL);
51 public:
52  cMenuFolder(const char *Title, cNestedItemList *NestedItemList, const char *Path = NULL);
53  cString GetFolder(void);
54  virtual eOSState ProcessKey(eKeys Key) override;
55  };
56 
57 class cMenuCommands : public cOsdMenu {
58 private:
63  bool confirm;
64  char *result;
65  bool Parse(const char *s);
66  eOSState Execute(void);
67 public:
68  cMenuCommands(const char *Title, cList<cNestedItem> *Commands, const char *Parameters = NULL);
69  virtual ~cMenuCommands() override;
70  virtual eOSState ProcessKey(eKeys Key) override;
71  };
72 
73 class cMenuEditTimer : public cOsdMenu {
74 private:
75  static const cTimer *addedTimer;
78  int channel;
81  char remote[HOST_NAME_MAX];
86  eOSState SetFolder(void);
87  void SetFirstDayItem(void);
88  void SetPatternItem(bool Initial = false);
89  void SetHelpKeys(void);
90 public:
91  cMenuEditTimer(cTimer *Timer, bool New = false);
92  virtual ~cMenuEditTimer() override;
93  virtual eOSState ProcessKey(eKeys Key) override;
94  static const cTimer *AddedTimer(void);
95  };
96 
97 class cMenuEvent : public cOsdMenu {
98 private:
99  const cEvent *event;
100 public:
101  cMenuEvent(const cTimers *Timers, const cChannels *Channels, const cEvent *Event, bool CanSwitch = false, bool Buttons = false);
102  virtual void Display(void) override;
103  virtual eOSState ProcessKey(eKeys Key) override;
104  };
105 
106 class cMenuMain : public cOsdMenu {
107 private:
108  bool replaying;
114  void Set(void);
115  bool Update(bool Force = false);
116 public:
117  cMenuMain(eOSState State = osUnknown, bool OpenSubMenus = false);
118  virtual eOSState ProcessKey(eKeys Key) override;
119  static cOsdObject *PluginOsdObject(void);
120  };
121 
122 class cDisplayChannel : public cOsdObject {
123 private:
125  int group;
126  bool withInfo;
128  int number;
129  bool timeout;
130  int osdState;
136  void DisplayChannel(void);
137  void DisplayInfo(void);
138  void Refresh(void);
139  const cChannel *NextAvailableChannel(const cChannel *Channel, int Direction);
140 public:
141  cDisplayChannel(int Number, bool Switched);
142  cDisplayChannel(eKeys FirstKey);
143  virtual ~cDisplayChannel() override;
144  virtual eOSState ProcessKey(eKeys Key) override;
145  static bool IsOpen(void) { return currentDisplayChannel != NULL; }
146  };
147 
148 class cDisplayVolume : public cOsdObject {
149 private:
153  virtual void Show(void) override;
154  cDisplayVolume(void);
155 public:
156  virtual ~cDisplayVolume() override;
157  static cDisplayVolume *Create(void);
158  static void Process(eKeys Key);
160  };
161 
162 class cDisplayTracks : public cOsdObject {
163 private:
167  char *descriptions[ttMaxTrackTypes + 1]; // list is NULL terminated
170  virtual void Show(void) override;
171  cDisplayTracks(void);
172 public:
173  virtual ~cDisplayTracks() override;
174  static bool IsOpen(void) { return currentDisplayTracks != NULL; }
175  static cDisplayTracks *Create(void);
176  static void Process(eKeys Key);
178  };
179 
181 private:
185  char *descriptions[ttMaxTrackTypes + 1]; // list is NULL terminated
188  virtual void Show(void) override;
190 public:
191  virtual ~cDisplaySubtitleTracks() override;
192  static bool IsOpen(void) { return currentDisplayTracks != NULL; }
193  static cDisplaySubtitleTracks *Create(void);
194  static void Process(eKeys Key);
196  };
197 
198 cOsdObject *CamControl(void);
199 bool CamMenuActive(void);
200 
202 public:
203  virtual ~cRecordingFilter(void) {};
204  virtual bool Filter(const cRecording *Recording) const = 0;
206  };
207 
208 class cMenuRecordingItem;
209 
210 class cMenuRecordings : public cOsdMenu {
211 private:
212  char *base;
213  int level;
215  int helpKeys;
217  static cString path;
219  void SetHelpKeys(void);
220  void Set(bool Refresh = false);
221  bool Open(bool OpenSubMenus = false);
222  eOSState Play(void);
223  eOSState Rewind(void);
224  eOSState Delete(void);
225  eOSState Info(void);
226  eOSState Sort(void);
227  eOSState Commands(eKeys Key = kNone);
228 protected:
229  cString DirectoryName(void);
230 public:
231  cMenuRecordings(const char *Base = NULL, int Level = 0, bool OpenSubMenus = false, const cRecordingFilter *Filter = NULL);
233  virtual eOSState ProcessKey(eKeys Key) override;
234  static void SetRecording(const char *FileName);
235  };
236 
238 private:
242  const cEvent *event;
244  char *fileName;
245  bool GetEvent(void);
246 public:
247  cRecordControl(cDevice *Device, cTimers *Timers, cTimer *Timer = NULL, bool Pause = false);
248  virtual ~cRecordControl();
249  bool Process(time_t t);
250  cDevice *Device(void) { return device; }
251  void Stop(bool ExecuteUserCommand = true);
252  const char *InstantId(void) { return instantId; }
253  const char *FileName(void) { return fileName; }
254  cTimer *Timer(void) { return timer; }
255  };
256 
258 private:
260  static int state;
261 public:
262  static bool Start(cTimers *Timers, cTimer *Timer, bool Pause = false);
263  static bool Start(bool Pause = false);
264  static void Stop(const char *InstantId);
265  static void Stop(cTimer *Timer);
266  static bool PauseLiveVideo(void);
267  static const char *GetInstantId(const char *LastInstantId);
268  static cRecordControl *GetRecordControl(const char *FileName);
269  static cRecordControl *GetRecordControl(const cTimer *Timer);
272  static bool Process(cTimers *Timers, time_t t);
273  static void ChannelDataModified(const cChannel *Channel);
274  static bool Active(void);
275  static void Shutdown(void);
276  static void ChangeState(void) { state++; }
277  static bool StateChanged(int &State);
278  };
279 
281 private:
287 public:
288  cAdaptiveSkipper(void);
289  void Initialize(int *InitialValue, double FramesPerSecond);
290  int GetValue(eKeys Key);
291  };
292 
294 private:
304  time_t timeoutShow;
308  void TimeSearchDisplay(void);
309  void TimeSearchProcess(eKeys Key);
310  void TimeSearch(void);
311  void ShowTimed(int Seconds = 0);
314  void ShowMode(void);
315  bool ShowProgress(bool Initial);
316  void MarkToggle(void);
317  void MarkJump(bool Forward);
318  void MarkMove(int Frames, bool MarkRequired);
319  void ErrorJump(bool Forward);
320  void EditCut(void);
321  void EditTest(void);
322 public:
323  cReplayControl(bool PauseLive = false);
324  virtual ~cReplayControl() override;
325  void Stop(void);
326  virtual cOsdObject *GetInfo(void) override;
327  virtual const cRecording *GetRecording(void) override;
328  virtual eOSState ProcessKey(eKeys Key) override;
329  virtual void Show(void) override;
330  virtual void Hide(void) override;
331  bool Visible(void) { return visible; }
332  virtual void ClearEditingMarks(void) override;
333  static void SetRecording(const char *FileName);
334  static const char *NowReplaying(void);
335  static const char *LastReplayed(void);
336  static void ClearLastReplayed(const char *FileName);
337  };
338 
339 void SetTrackDescriptions(int LiveChannel);
340 
341 #endif //__MENU_H
double framesPerSecond
Definition: menu.h:284
cTimeMs timeout
Definition: menu.h:286
cAdaptiveSkipper(void)
Definition: menu.c:5770
eKeys lastKey
Definition: menu.h:285
void Initialize(int *InitialValue, double FramesPerSecond)
Definition: menu.c:5778
int * initialValue
Definition: menu.h:282
int currentValue
Definition: menu.h:283
int GetValue(eKeys Key)
Definition: menu.c:5785
cTimeMs lastTime
Definition: menu.h:127
const cChannel * channel
Definition: menu.h:132
static bool IsOpen(void)
Definition: menu.h:145
const cEvent * lastPresent
Definition: menu.h:133
void DisplayChannel(void)
Definition: menu.c:4885
const cEvent * lastFollowing
Definition: menu.h:134
bool timeout
Definition: menu.h:129
cSkinDisplayChannel * displayChannel
Definition: menu.h:124
bool withInfo
Definition: menu.h:126
virtual ~cDisplayChannel() override
Definition: menu.c:4878
void Refresh(void)
Definition: menu.c:4912
int number
Definition: menu.h:128
virtual eOSState ProcessKey(eKeys Key) override
Definition: menu.c:4935
int osdState
Definition: menu.h:130
const cPositioner * positioner
Definition: menu.h:131
static cDisplayChannel * currentDisplayChannel
Definition: menu.h:135
void DisplayInfo(void)
Definition: menu.c:4893
cDisplayChannel(int Number, bool Switched)
Definition: menu.c:4831
const cChannel * NextAvailableChannel(const cChannel *Channel, int Direction)
Definition: menu.c:4918
virtual void Show(void) override
Definition: menu.c:5353
cSkinDisplayTracks * displayTracks
Definition: menu.h:182
cDisplaySubtitleTracks(void)
Definition: menu.c:5318
static void Process(eKeys Key)
Definition: menu.c:5371
char * descriptions[ttMaxTrackTypes+1]
Definition: menu.h:185
eTrackType types[ttMaxTrackTypes]
Definition: menu.h:184
static bool IsOpen(void)
Definition: menu.h:192
static cDisplaySubtitleTracks * currentDisplayTracks
Definition: menu.h:187
static cDisplaySubtitleTracks * Create(void)
Definition: menu.c:5360
virtual ~cDisplaySubtitleTracks() override
Definition: menu.c:5344
eOSState ProcessKey(eKeys Key)
Definition: menu.c:5377
char * descriptions[ttMaxTrackTypes+1]
Definition: menu.h:167
static cDisplayTracks * Create(void)
Definition: menu.c:5242
int track
Definition: menu.h:168
cDisplayTracks(void)
Definition: menu.c:5198
cTimeMs timeout
Definition: menu.h:165
eOSState ProcessKey(eKeys Key)
Definition: menu.c:5259
static cDisplayTracks * currentDisplayTracks
Definition: menu.h:169
virtual void Show(void) override
Definition: menu.c:5232
cSkinDisplayTracks * displayTracks
Definition: menu.h:164
int numTracks
Definition: menu.h:168
int audioChannel
Definition: menu.h:168
static void Process(eKeys Key)
Definition: menu.c:5253
static bool IsOpen(void)
Definition: menu.h:174
virtual ~cDisplayTracks() override
Definition: menu.c:5223
eTrackType types[ttMaxTrackTypes]
Definition: menu.h:166
static cDisplayVolume * Create(void)
Definition: menu.c:5152
cSkinDisplayVolume * displayVolume
Definition: menu.h:150
virtual void Show(void) override
Definition: menu.c:5147
eOSState ProcessKey(eKeys Key)
Definition: menu.c:5165
cTimeMs timeout
Definition: menu.h:151
static void Process(eKeys Key)
Definition: menu.c:5159
cDisplayVolume(void)
Definition: menu.c:5132
static cDisplayVolume * currentDisplayVolume
Definition: menu.h:152
virtual ~cDisplayVolume() override
Definition: menu.c:5141
void Forward(void)
Definition: dvbplayer.c:1039
Definition: epg.h:73
eOSState Execute(void)
Definition: menu.c:2248
virtual eOSState ProcessKey(eKeys Key) override
Definition: menu.c:2295
cList< cNestedItem > * commands
Definition: menu.h:59
virtual ~cMenuCommands() override
Definition: menu.c:2220
bool confirm
Definition: menu.h:63
cMenuCommands(const char *Title, cList< cNestedItem > *Commands, const char *Parameters=NULL)
Definition: menu.c:2203
cString title
Definition: menu.h:61
cString command
Definition: menu.h:62
bool Parse(const char *s)
Definition: menu.c:2225
char * result
Definition: menu.h:64
cString parameters
Definition: menu.h:60
bool addIfConfirmed
Definition: menu.h:79
eOSState SetFolder(void)
Definition: menu.c:1117
cMenuEditDateItem * firstday
Definition: menu.h:85
static const cTimer * addedTimer
Definition: menu.h:75
int channel
Definition: menu.h:78
virtual eOSState ProcessKey(eKeys Key) override
Definition: menu.c:1148
cTimer data
Definition: menu.h:77
void SetHelpKeys(void)
Definition: menu.c:1069
cMenuEditStrItem * file
Definition: menu.h:83
virtual ~cMenuEditTimer() override
Definition: menu.c:1056
cMenuEditStrItem * pattern
Definition: menu.h:82
cMenuEditDateItem * day
Definition: menu.h:84
static const cTimer * AddedTimer(void)
Definition: menu.c:1062
cTimer * timer
Definition: menu.h:76
cMenuEditTimer(cTimer *Timer, bool New=false)
Definition: menu.c:1017
void SetFirstDayItem(void)
Definition: menu.c:1074
char remote[HOST_NAME_MAX]
Definition: menu.h:81
cStringList svdrpServerNames
Definition: menu.h:80
void SetPatternItem(bool Initial=false)
Definition: menu.c:1087
virtual eOSState ProcessKey(eKeys Key) override
Definition: menu.c:1531
const cEvent * event
Definition: menu.h:99
virtual void Display(void) override
Definition: menu.c:1522
cMenuEvent(const cTimers *Timers, const cChannels *Channels, const cEvent *Event, bool CanSwitch=false, bool Buttons=false)
Definition: menu.c:1505
cMenuFolder(const char *Title, cList< cNestedItem > *List, cNestedItemList *NestedItemList, const char *Dir, const char *Path=NULL)
Definition: menu.c:794
eOSState Delete(void)
Definition: menu.c:922
int helpKeys
Definition: menu.h:41
eOSState New(void)
Definition: menu.c:916
cNestedItemList * nestedItemList
Definition: menu.h:36
cList< cNestedItem > * list
Definition: menu.h:37
eOSState SetFolder(void)
Definition: menu.c:950
virtual eOSState ProcessKey(eKeys Key) override
Definition: menu.c:974
cString dir
Definition: menu.h:38
void Set(const char *CurrentFolder=NULL)
Definition: menu.c:858
void DescendPath(const char *Path)
Definition: menu.c:883
cOsdItem * firstFolder
Definition: menu.h:39
eOSState Edit(void)
Definition: menu.c:938
eOSState Select(bool Open)
Definition: menu.c:900
bool editing
Definition: menu.h:40
cString GetFolder(void)
Definition: menu.c:961
void SetHelpKeys(void)
Definition: menu.c:810
cOsdItem * cancelEditingItem
Definition: menu.h:110
cOsdItem * stopRecordingItem
Definition: menu.h:111
void Set(void)
Definition: menu.c:4584
int recordControlsState
Definition: menu.h:112
bool replaying
Definition: menu.h:108
cOsdItem * stopReplayItem
Definition: menu.h:109
virtual eOSState ProcessKey(eKeys Key) override
Definition: menu.c:4679
bool Update(bool Force=false)
Definition: menu.c:4621
cMenuMain(eOSState State=osUnknown, bool OpenSubMenus=false)
Definition: menu.c:4537
static cOsdObject * pluginOsdObject
Definition: menu.h:113
static cOsdObject * PluginOsdObject(void)
Definition: menu.c:4577
static cString path
Definition: menu.h:217
void Set(bool Refresh=false)
Definition: menu.c:3153
bool Open(bool OpenSubMenus=false)
Definition: menu.c:3228
eOSState Sort(void)
Definition: menu.c:3402
static void SetRecording(const char *FileName)
Definition: menu.c:3212
eOSState Info(void)
Definition: menu.c:3374
eOSState Play(void)
Definition: menu.c:3244
const cRecordingFilter * filter
Definition: menu.h:216
static cString fileName
Definition: menu.h:218
char * base
Definition: menu.h:212
int helpKeys
Definition: menu.h:215
eOSState Rewind(void)
Definition: menu.c:3258
cStateKey recordingsStateKey
Definition: menu.h:214
cMenuRecordings(const char *Base=NULL, int Level=0, bool OpenSubMenus=false, const cRecordingFilter *Filter=NULL)
Definition: menu.c:3102
eOSState Commands(eKeys Key=kNone)
Definition: menu.c:3387
cString DirectoryName(void)
Definition: menu.c:3217
~cMenuRecordings()
Definition: menu.c:3123
void SetHelpKeys(void)
Definition: menu.c:3132
eOSState Delete(void)
Definition: menu.c:3324
virtual eOSState ProcessKey(eKeys Key) override
Definition: menu.c:3414
Definition: menu.h:22
eDvbFont font
Definition: menu.h:25
void SetText(const char *Text)
Definition: menu.c:631
cMenuText(const char *Title, const char *Text, eDvbFont Font=fontOsd)
Definition: menu.c:617
virtual void Display(void) override
Definition: menu.c:637
char * text
Definition: menu.h:24
virtual eOSState ProcessKey(eKeys Key) override
Definition: menu.c:645
virtual ~cMenuText() override
Definition: menu.c:626
const char * Title(void)
Definition: osdbase.h:117
A steerable satellite dish generally points to the south on the northern hemisphere,...
Definition: positioner.h:31
cDevice * Device(void)
Definition: menu.h:250
virtual ~cRecordControl()
Definition: menu.c:5500
void Stop(bool ExecuteUserCommand=true)
Definition: menu.c:5532
cDevice * device
Definition: menu.h:239
cTimer * timer
Definition: menu.h:240
bool GetEvent(void)
Definition: menu.c:5508
char * fileName
Definition: menu.h:244
const char * InstantId(void)
Definition: menu.h:252
cRecorder * recorder
Definition: menu.h:241
const char * FileName(void)
Definition: menu.h:253
cTimer * Timer(void)
Definition: menu.h:254
cRecordControl(cDevice *Device, cTimers *Timers, cTimer *Timer=NULL, bool Pause=false)
Definition: menu.c:5418
const cEvent * event
Definition: menu.h:242
bool Process(time_t t)
Definition: menu.c:5554
cString instantId
Definition: menu.h:243
static bool StateChanged(int &State)
Definition: menu.c:5760
static const char * GetInstantId(const char *LastInstantId)
Definition: menu.c:5679
static void ChannelDataModified(const cChannel *Channel)
Definition: menu.c:5727
static bool Process(cTimers *Timers, time_t t)
Definition: menu.c:5712
static bool PauseLiveVideo(void)
Definition: menu.c:5664
static void Shutdown(void)
Definition: menu.c:5753
static bool Start(cTimers *Timers, cTimer *Timer, bool Pause=false)
Definition: menu.c:5569
static cRecordControl * RecordControls[]
Definition: menu.h:259
static bool Active(void)
Definition: menu.c:5744
static void Stop(const char *InstantId)
Definition: menu.c:5631
static cRecordControl * GetRecordControl(const char *FileName)
Definition: menu.c:5692
static int state
Definition: menu.h:260
static void ChangeState(void)
Definition: menu.h:276
virtual bool Filter(const cRecording *Recording) const =0
Returns true if the given Recording shall be displayed in the Recordings menu.
virtual ~cRecordingFilter(void)
Definition: menu.h:203
static void SetRecording(const char *FileName)
Definition: menu.c:5897
static const char * LastReplayed(void)
Definition: menu.c:5907
void MarkToggle(void)
Definition: menu.c:6117
virtual void Show(void) override
Definition: menu.c:5933
static cString fileName
Definition: menu.h:313
void TimeSearchDisplay(void)
Definition: menu.c:6027
static void ClearLastReplayed(const char *FileName)
Definition: menu.c:5915
int lastTotal
Definition: menu.h:301
virtual eOSState ProcessKey(eKeys Key) override
Definition: menu.c:6302
void MarkMove(int Frames, bool MarkRequired)
Definition: menu.c:6167
static cReplayControl * currentReplayControl
Definition: menu.h:312
bool timeSearchHide
Definition: menu.h:306
virtual const cRecording * GetRecording(void) override
Returns the cRecording that is currently being replayed, or NULL if this player is not playing a cRec...
Definition: menu.c:6294
void TimeSearchProcess(eKeys Key)
Definition: menu.c:6045
void MarkJump(bool Forward)
Definition: menu.c:6142
cMarks marks
Definition: menu.h:297
void EditCut(void)
Definition: menu.c:6246
int timeSearchTime
Definition: menu.h:307
bool Visible(void)
Definition: menu.h:331
cSkinDisplayReplay * displayReplay
Definition: menu.h:295
void Stop(void)
Definition: menu.c:5841
void ShowTimed(int Seconds=0)
Definition: menu.c:5921
bool lastForward
Definition: menu.h:302
virtual cOsdObject * GetInfo(void) override
Returns an OSD object that displays information about the currently played programme.
Definition: menu.c:6286
bool displayFrames
Definition: menu.h:299
bool shown
Definition: menu.h:299
virtual void Hide(void) override
Definition: menu.c:5938
time_t timeoutShow
Definition: menu.h:304
void EditTest(void)
Definition: menu.c:6270
bool timeSearchActive
Definition: menu.h:306
bool ShowProgress(bool Initial)
Definition: menu.c:5982
bool marksModified
Definition: menu.h:298
int lastSpeed
Definition: menu.h:303
cAdaptiveSkipper adaptiveSkipper
Definition: menu.h:296
bool lastPlay
Definition: menu.h:302
int timeSearchPos
Definition: menu.h:307
virtual void ClearEditingMarks(void) override
Clears any editing marks this player might be showing.
Definition: menu.c:5887
int lastErrors
Definition: menu.h:300
virtual ~cReplayControl() override
Definition: menu.c:5833
void ShowMode(void)
Definition: menu.c:5957
void ErrorJump(bool Forward)
Definition: menu.c:6205
cTimeMs updateTimer
Definition: menu.h:305
void TimeSearch(void)
Definition: menu.c:6099
bool visible
Definition: menu.h:299
bool modeOnly
Definition: menu.h:299
static const char * NowReplaying(void)
Definition: menu.c:5902
cReplayControl(bool PauseLive=false)
Definition: menu.c:5809
int lastCurrent
Definition: menu.h:301
Definition: tools.h:178
Definition: tools.h:404
Definition: timers.h:31
cNestedItemList Commands
Definition: config.c:275
eTrackType
Definition: device.h:63
@ ttMaxTrackTypes
Definition: device.h:73
eDvbFont
Definition: font.h:21
@ fontOsd
Definition: font.h:22
eKeys
Definition: keys.h:16
@ kNone
Definition: keys.h:55
bool CamMenuActive(void)
Definition: menu.c:2507
cOsdObject * CamControl(void)
Definition: menu.c:2498
void SetTrackDescriptions(int LiveChannel)
Definition: menu.c:4785
eOSState
Definition: osdbase.h:18
@ osUnknown
Definition: osdbase.h:18
static const cCursesFont Font
Definition: skincurses.c:31
Definition: runvdr.c:107