summaryrefslogtreecommitdiff
path: root/recmenuitem.h
blob: b219b433cbe3e11e5952dbd0c07f55e9919baafd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
#ifndef __TVGUIDE_RECMENUITEM_H
#define __TVGUIDE_RECMENUITEM_H

#define AUTO_ADVANCE_TIMEOUT 1500

using namespace std;

#include <string>
#include <sstream>
#include <vdr/plugin.h>
#include <vdr/tools.h>
#include <libskindesignerapi/skindesignerosdbase.h>
#include "definitions.h"
#include "searchtimer.h"

enum eRecMenuState {
    rmsConsumed,
    rmsNotConsumed,
    rmsRefresh,
    rmsContinue,
    rmsClose,
    rmsDisabled,
    //INSTANT TIMER
    rmsInstantRecord,
    rmsInstantRecordFolder,
    rmsIgnoreTimerConflict,
    rmsDeleteTimerConflictMenu,
    rmsEditTimerConflictMenu,
    rmsSearchRerunsTimerConflictMenu,
    rmsSaveTimerConflictMenu,
    rmsTimerConflictShowInfo,
    rmsDeleteTimer,
    rmsDeleteTimerConfirmation,
    rmsEditTimer,
    rmsSaveTimer,
    //SEARCH
    rmsSearch,
    rmsSearchWithOptions,
    rmsSearchPerform,
    rmsSearchShowInfo,
    rmsSearchRecord,
    rmsSearchRecordConfirm,
    rmsSearchNothingFoundConfirm,
    //SERIES TIMER
    rmsSeriesTimer,
    rmsSeriesTimerFolder,
    rmsSeriesTimerCreate,
    //SEARCHTIMER
    rmsSearchTimer,
    rmsSearchTimerOptions,
    rmsSearchTimers,
    rmsSearchTimerEdit,
    rmsSearchTimerEditAdvanced,
    rmsSearchTimerTest,
    rmsSearchTimerSave,
    rmsSearchTimerCreateWithTemplate,
    rmsSearchTimerDeleteConfirm,
    rmsSearchTimerDelete,
    rmsSearchTimerDeleteWithTimers,
    rmsSearchTimerRecord,
    //SWITCHTIMER
    rmsSwitchTimer,
    rmsSwitchTimerCreate,
    rmsSwitchTimerDelete,
    //RECORDINGS SEARCH
    rmsRecordingSearch,
    rmsRecordingSearchResult,
    //TIMER CONFLICTS
    rmsTimerConflict,
    rmsTimerConflicts,
    rmsTimerConflictIgnoreReruns,
    rmsTimerConflictRecordRerun,
    //TIMELINE
    rmsTimeline,
    rmsTimelineTimerEdit,
    rmsTimelineTimerSave,
    rmsTimelineTimerDelete,
    //FAVORITES
    rmsFavoritesRecord,
    rmsFavoritesNow,
    rmsFavoritesNext,    
    rmsFavoritesUser1,
    rmsFavoritesUser2,
    rmsFavoritesUser3,
    rmsFavoritesUser4,
};

// --- cRecMenuItem  -------------------------------------------------------------
class cRecMenuItem  : public cListObject {
protected:
    static long idCounter;
    long id;
    bool init;
    bool active;
    bool selectable;
    eRecMenuState action;
    //height of item in percent of screen height
    int height;
    string text;
public:
    cRecMenuItem(void);
    virtual ~cRecMenuItem(void);
    virtual void SetActive(void) { active = true; }
    virtual void SetInactive(void) { active = false; }
    long Id(void) { return id; };
    bool Selectable(void) { return selectable; }
    bool IsNew(void);
    void SetNew(void) { init = true; };
    bool Active(void) { return active; }
    int GetHeight(void) { return height; };
    string GetText(void) { return text; };
    virtual void SetTokens(skindesignerapi::cViewGrid *menu) {};
    virtual eRecMenuState ProcessKey(eKeys Key) { return rmsNotConsumed; };
};

// --- cRecMenuItemInfo  -------------------------------------------------------
class cRecMenuItemInfo : public cRecMenuItem {
private:
    int numLines;
    string line1;
    string line2;
    string line3;
    string line4;
public:
    cRecMenuItemInfo(string line1, int numLines = 1, string line2 = "", string line3 = "", string line4 = "");
    virtual ~cRecMenuItemInfo(void);
    string GetText(void) { return text; };
    void SetTokens(skindesignerapi::cViewGrid *menu);
};

// --- cRecMenuItemButton  -------------------------------------------------------
class cRecMenuItemButton : public cRecMenuItem {
private:
    string text;
public:
    cRecMenuItemButton(string text, eRecMenuState action, bool active);
    virtual ~cRecMenuItemButton(void);
    string GetText(void) { return text; };
    void SetTokens(skindesignerapi::cViewGrid *menu);
    eRecMenuState ProcessKey(eKeys Key);
};

// --- cRecMenuItemButtonYesNo  -------------------------------------------------------
class cRecMenuItemButtonYesNo : public cRecMenuItem {
private:
    string textYes;
    string textNo;
    eRecMenuState actionNo;
    bool yesActive;
public:
    cRecMenuItemButtonYesNo(string textYes,
                            string textNo,
                            eRecMenuState actionYes, 
                            eRecMenuState actionNo,
                            bool active);
    virtual ~cRecMenuItemButtonYesNo(void);
    void SetTokens(skindesignerapi::cViewGrid *menu);
    eRecMenuState ProcessKey(eKeys Key);
};

// --- cRecMenuItemInt  -------------------------------------------------------
class cRecMenuItemInt : public cRecMenuItem {
private:
    int currentVal;
    int *callback;
    int minVal;
    int maxVal;
    bool fresh;
public:
    cRecMenuItemInt(string text,
                    int initialVal,
                    int minVal,
                    int maxVal,
                    bool active = false,
                    int *callback = NULL,
                    eRecMenuState action = rmsNotConsumed);
    virtual ~cRecMenuItemInt(void);
    void SetTokens(skindesignerapi::cViewGrid *menu);
    eRecMenuState ProcessKey(eKeys Key);
};

// --- cRecMenuItemBool  -------------------------------------------------------
class cRecMenuItemBool : public cRecMenuItem {
private:
    bool yes;
    bool *callback;
public:
    cRecMenuItemBool(string text,
                     bool initialVal,
                     bool active = false,
                     bool *callback = NULL,
                     eRecMenuState action = rmsNotConsumed);
    virtual ~cRecMenuItemBool(void);
    void SetTokens(skindesignerapi::cViewGrid *menu);
    eRecMenuState ProcessKey(eKeys Key);
};

// --- cRecMenuItemSelect  -------------------------------------------------------
class cRecMenuItemSelect : public cRecMenuItem {
private:
    int currentVal;
    int *callback;
    vector<string> strings;
    int numValues;
public:
    cRecMenuItemSelect(string text,
                       vector<string> strings,
                       int initialVal,
                       bool active = false,
                       int *callback = NULL,
                       eRecMenuState action = rmsNotConsumed);
    virtual ~cRecMenuItemSelect(void);
    void SetTokens(skindesignerapi::cViewGrid *menu);
    eRecMenuState ProcessKey(eKeys Key);
};

// --- cRecMenuItemText  -------------------------------------------------------
class cRecMenuItemText : public cRecMenuItem {
private:
    char *value;
    string buffer;
    char *callback;
    int length;
    const char *allowed;
    int pos, offset;
    bool insert, newchar, uppercase;
    int lengthUtf8;
    uint *valueUtf8;
    uint *allowedUtf8;
    uint *charMapUtf8;
    uint *currentCharUtf8;
    eKeys lastKey;
    cTimeMs autoAdvanceTimeout;
    uint *IsAllowed(uint c);
    void AdvancePos(void);
    uint Inc(uint c, bool Up);
    void Type(uint c);
    void Insert(void);
    void Delete(void);
    void EnterEditMode(void);
    void LeaveEditMode(bool SaveValue = false);
    bool InEditMode(void) { return valueUtf8 != NULL; };    
    void SetText(void);
public:
    cRecMenuItemText(string title,
                     char *initialVal,
                     int length,
                     bool active = false,
                     char *callback = NULL);
    virtual ~cRecMenuItemText(void);
    void SetTokens(skindesignerapi::cViewGrid *menu);
    eRecMenuState ProcessKey(eKeys Key);
};

// --- cRecMenuItemTime  -------------------------------------------------------
class cRecMenuItemTime : public cRecMenuItem {
private:
    int value;
    int *callback;
    int mm;
    int hh;
    int pos;
    bool fresh;
public:
    cRecMenuItemTime(string text,
                    int initialVal,
                    bool active = false,
                    int *callback = NULL,
                    eRecMenuState action = rmsNotConsumed);
    virtual ~cRecMenuItemTime(void);
    void SetTokens(skindesignerapi::cViewGrid *menu);
    eRecMenuState ProcessKey(eKeys Key);
};

// --- cRecMenuItemDay  -------------------------------------------------------
class cRecMenuItemDay : public cRecMenuItem {
private:
    time_t currentVal;
    time_t *callback;
public:
    cRecMenuItemDay(string text,
                    time_t initialVal,
                    bool active = false,
                    time_t *callback = NULL,
                    eRecMenuState action = rmsNotConsumed);
    virtual ~cRecMenuItemDay(void);
    void SetTokens(skindesignerapi::cViewGrid *menu);
    eRecMenuState ProcessKey(eKeys Key);
};

// --- cRecMenuItemChannelChooser -------------------------------------------------------
class cRecMenuItemChannelChooser : public cRecMenuItem {
private:
    const cChannel *channel;
    int channelNumber;
    int *callback;
    bool initialChannelSet;
    bool fresh;
public:
    cRecMenuItemChannelChooser (string text,
                                const cChannel *initialChannel,
                                bool active = false,
                                int *callback = NULL,
                                eRecMenuState action = rmsNotConsumed);
    virtual ~cRecMenuItemChannelChooser(void);
    void SetTokens(skindesignerapi::cViewGrid *menu);
    eRecMenuState ProcessKey(eKeys Key);
};

// --- cRecMenuItemDayChooser -------------------------------------------------------
class cRecMenuItemDayChooser : public cRecMenuItem {
private:
    int weekdays;
    int *callback;
    int selectedDay;
    void ToggleDay(void);
    bool WeekDaySet(unsigned day);
public:
    cRecMenuItemDayChooser (string text,
                            int weekdays,
                            bool active = false,
                            int *callback = NULL);
    virtual ~cRecMenuItemDayChooser(void);
    void SetTokens(skindesignerapi::cViewGrid *menu);
    eRecMenuState ProcessKey(eKeys Key);
};

// --- cRecMenuItemSelectDirectory  -------------------------------------------------------
class cRecMenuItemSelectDirectory : public cRecMenuItem {
private:
    string text;
    string originalFolder;
    vector<string> folders;
    int currentVal;
    char *callback;
    int numValues;
    void SetCallback(void);
    int GetInitial(void);
public:
    cRecMenuItemSelectDirectory(string text,
                                string originalFolder,
                                bool active = false,
                                char *callback = NULL,
                                eRecMenuState action = rmsNotConsumed,
                                bool isSearchTimer = false);
    virtual ~cRecMenuItemSelectDirectory(void) {};
    void SetTokens(skindesignerapi::cViewGrid *menu);
    eRecMenuState ProcessKey(eKeys Key);
};

// --- cRecMenuItemTimerConflictHeader -------------------------------------------------------
class cRecMenuItemTimerConflictHeader: public cRecMenuItem {
private:
    time_t conflictStart;
    time_t conflictStop;
    time_t overlapStart;
    time_t overlapStop;
public:
    cRecMenuItemTimerConflictHeader(time_t conflictStart,
                                    time_t conflictStop,
                                    time_t overlapStart,
                                    time_t overlapStop);
    void SetTokens(skindesignerapi::cViewGrid *menu);
    virtual ~cRecMenuItemTimerConflictHeader(void);
};

// --- cRecMenuItemTimer  -------------------------------------------------------
class cRecMenuItemTimer : public cRecMenuItem {
private:
    const cTimer *timer;
    eRecMenuState action2;
    eRecMenuState action3;
    eRecMenuState action4;
    int iconActive;
    time_t conflictStart;
    time_t conflictStop;
    time_t overlapStart;
    time_t overlapStop;
public:
    cRecMenuItemTimer(const cTimer *timer, 
                      eRecMenuState action1, 
                      eRecMenuState action2,
                      eRecMenuState action3,
                      eRecMenuState action4,
                      time_t conflictStart,
                      time_t conflictStop,
                      time_t overlapStart,
                      time_t overlapStop,
                      bool active);
    virtual ~cRecMenuItemTimer(void);
    void SetTokens(skindesignerapi::cViewGrid *menu);
    eRecMenuState ProcessKey(eKeys Key);
};

// --- cRecMenuItemEvent  -------------------------------------------------------
class cRecMenuItemEvent : public cRecMenuItem {
private:
    const cEvent *event;
    eRecMenuState action2;
    int iconActive;
public:
    cRecMenuItemEvent(const cEvent *event, 
                      eRecMenuState action1, 
                      eRecMenuState action2, 
                      bool active);
    virtual ~cRecMenuItemEvent(void);
    void SetTokens(skindesignerapi::cViewGrid *menu);
    eRecMenuState ProcessKey(eKeys Key);
    const cEvent *GetEvent(void) { return event; };
};

// --- cRecMenuItemRecording  -------------------------------------------------------
class cRecMenuItemRecording : public cRecMenuItem {
private:
    const cRecording *recording;
public:
    cRecMenuItemRecording(const cRecording *recording, bool active);
    virtual ~cRecMenuItemRecording(void) {};
    void SetTokens(skindesignerapi::cViewGrid *menu);
};

// --- cRecMenuItemSearchTimer  -------------------------------------------------------
class cRecMenuItemSearchTimer : public cRecMenuItem {
private:
    cTVGuideSearchTimer timer;
    eRecMenuState action1;
    eRecMenuState action2;
    eRecMenuState action3;
    int iconActive;
public:
    cRecMenuItemSearchTimer(cTVGuideSearchTimer timer, 
                            eRecMenuState action1,
                            eRecMenuState action2,
                            eRecMenuState action3,
                            bool active);
    virtual ~cRecMenuItemSearchTimer(void);
    cTVGuideSearchTimer GetTimer(void) { return timer; };
    void SetTokens(skindesignerapi::cViewGrid *menu);
    eRecMenuState ProcessKey(eKeys Key);
};

// --- cRecMenuItemTimelineHeader  -------------------------------------------------------
class cRecMenuItemTimelineHeader : public cRecMenuItem {
private:
    time_t day;
    const cTimer *timer;
public:
    cRecMenuItemTimelineHeader(time_t day);
    virtual ~cRecMenuItemTimelineHeader(void);
    void SetTokens(skindesignerapi::cViewGrid *menu);
    void SetDay(time_t day) { this->day = day; };
    void SetCurrentTimer(const cTimer *timer) { this->timer = timer; };
    void UnsetCurrentTimer(void) { timer = NULL; };
};

// --- cRecMenuItemTimelineTimer  -------------------------------------------------------
class cRecMenuItemTimelineTimer : public cRecMenuItem {
private:
    const cTimer *timer;
    time_t start;
    time_t stop;
public:
    cRecMenuItemTimelineTimer(const cTimer *timer, time_t start, time_t stop, bool active);
    virtual ~cRecMenuItemTimelineTimer(void);
    void SetTokens(skindesignerapi::cViewGrid *menu);
    const cTimer *GetTimer(void);
    eRecMenuState ProcessKey(eKeys Key);
};

// --- cRecMenuItemFavorite  -------------------------------------------------------
class cRecMenuItemFavorite : public cRecMenuItem {
private:
    cTVGuideSearchTimer favorite;
    eRecMenuState action1;
public:
    cRecMenuItemFavorite(cTVGuideSearchTimer favorite, 
                         eRecMenuState action1,
                         bool active);
    virtual ~cRecMenuItemFavorite(void) {};
    void SetTokens(skindesignerapi::cViewGrid *menu);
    cTVGuideSearchTimer GetFavorite(void) { return favorite; };
    eRecMenuState ProcessKey(eKeys Key);
};

// --- cRecMenuItemFavoriteStatic  -------------------------------------------------------
class cRecMenuItemFavoriteStatic : public cRecMenuItem {
private:
    string text;
public:
    cRecMenuItemFavoriteStatic(string text, eRecMenuState action, bool active);
    virtual ~cRecMenuItemFavoriteStatic(void) {};
    void SetTokens(skindesignerapi::cViewGrid *menu);
    eRecMenuState ProcessKey(eKeys Key);
};

#endif //__TVGUIDE_RECMENUITEM_H