mirror of
https://github.com/vdr-projects/vdr.git
synced 2025-03-01 10:50:46 +00:00
- Fixed a leftover 'summary.vdr' in vdr.5 (thanks to Peter Bieringer for reporting this one). - Fixed opening recording folders in case the last replayed recording no longer exists (reported by Udo Richter). - Fixed an unjustified "Error while accessing recording!" after deleting a recording from a subfolder. - Fixed handling the '.update' file in case the video directory is not at the default location (reported by Jon Burgess). - Fixed a crash in cConfig::Load() when compiling on the PPC (thanks to Sascha Volkenandt). - Fixed the FATALERRNO macro to check for a non-zero errno value (reported by Marco Schlüßler). - Added a check against MAXOSDAREAS in cOsd::CanHandleAreas() (reported by Udo Richter). - Fixed setting current menu item if the first one is non-selectable. - cOsdItem::cOsdItem() now has a 'Selectable' parameter. - Improved displaying 'sub-title' and 'bottom text' in the CAM menu. - Added status message "Resetting CAM..." for an immediate feedback when the CAM reset has been triggered. - The CAM menu now automatically updates itself in case of a progress display (as used, for instance, when updating the firmware via satellite). - Now skipping some funny characters sent by some CAMs at the beginning of strings. - The CAM menu is now completely closed when pressing the Menu key while inside a sub menu. - Reduced MAX_CONNECT_RETRIES in ci.c to 2 (waiting too long made the whole thing appear hanging). - Added status message "Opening CAM menu..." for an immediate feedback when the CAM menu has been requested. - Speeded up initial opening of the CAM menu. - Fixed handling of menus with no selectable items. - The character 0x8A in CAM menu strings is now mapped to a real newline. - The 'sub-title' and 'bottom text' in the CAM menu can now consist of several lines. - Improved the CAM enquiry menu.
243 lines
6.1 KiB
C++
243 lines
6.1 KiB
C++
/*
|
|
* menu.h: The actual menu implementations
|
|
*
|
|
* See the main source file 'vdr.c' for copyright information and
|
|
* how to reach the author.
|
|
*
|
|
* $Id: menu.h 1.76 2005/10/03 10:39:08 kls Exp $
|
|
*/
|
|
|
|
#ifndef __MENU_H
|
|
#define __MENU_H
|
|
|
|
#include "ci.h"
|
|
#include "device.h"
|
|
#include "epg.h"
|
|
#include "osdbase.h"
|
|
#include "dvbplayer.h"
|
|
#include "menuitems.h"
|
|
#include "recorder.h"
|
|
#include "skins.h"
|
|
|
|
class cMenuText : public cOsdMenu {
|
|
private:
|
|
char *text;
|
|
public:
|
|
cMenuText(const char *Title, const char *Text, eDvbFont Font = fontOsd);
|
|
virtual ~cMenuText();
|
|
void SetText(const char *Text);
|
|
virtual void Display(void);
|
|
virtual eOSState ProcessKey(eKeys Key);
|
|
};
|
|
|
|
class cMenuEditTimer : public cOsdMenu {
|
|
private:
|
|
cTimer *timer;
|
|
cTimer data;
|
|
int channel;
|
|
bool addIfConfirmed;
|
|
cMenuEditDateItem *firstday;
|
|
void SetFirstDayItem(void);
|
|
public:
|
|
cMenuEditTimer(cTimer *Timer, bool New = false);
|
|
virtual ~cMenuEditTimer();
|
|
virtual eOSState ProcessKey(eKeys Key);
|
|
};
|
|
|
|
class cMenuEvent : public cOsdMenu {
|
|
private:
|
|
const cEvent *event;
|
|
public:
|
|
cMenuEvent(const cEvent *Event, bool CanSwitch = false);
|
|
virtual void Display(void);
|
|
virtual eOSState ProcessKey(eKeys Key);
|
|
};
|
|
|
|
class cMenuMain : public cOsdMenu {
|
|
private:
|
|
bool replaying;
|
|
static cOsdObject *pluginOsdObject;
|
|
void Set(void);
|
|
public:
|
|
cMenuMain(bool Replaying, eOSState State = osUnknown);
|
|
virtual eOSState ProcessKey(eKeys Key);
|
|
static cOsdObject *PluginOsdObject(void);
|
|
};
|
|
|
|
class cDisplayChannel : public cOsdObject {
|
|
private:
|
|
cSkinDisplayChannel *displayChannel;
|
|
int group;
|
|
bool withInfo;
|
|
cTimeMs lastTime;
|
|
int number;
|
|
cChannel *channel;
|
|
const cEvent *lastPresent;
|
|
const cEvent *lastFollowing;
|
|
void DisplayChannel(void);
|
|
void DisplayInfo(void);
|
|
void Refresh(void);
|
|
public:
|
|
cDisplayChannel(int Number, bool Switched);
|
|
cDisplayChannel(eKeys FirstKey);
|
|
virtual ~cDisplayChannel();
|
|
virtual eOSState ProcessKey(eKeys Key);
|
|
};
|
|
|
|
class cDisplayVolume : public cOsdObject {
|
|
private:
|
|
cSkinDisplayVolume *displayVolume;
|
|
cTimeMs timeout;
|
|
static cDisplayVolume *currentDisplayVolume;
|
|
virtual void Show(void);
|
|
cDisplayVolume(void);
|
|
public:
|
|
virtual ~cDisplayVolume();
|
|
static cDisplayVolume *Create(void);
|
|
static void Process(eKeys Key);
|
|
eOSState ProcessKey(eKeys Key);
|
|
};
|
|
|
|
class cDisplayTracks : public cOsdObject {
|
|
private:
|
|
cSkinDisplayTracks *displayTracks;
|
|
cTimeMs timeout;
|
|
eTrackType types[ttMaxTrackTypes];
|
|
char *descriptions[ttMaxTrackTypes];
|
|
int numTracks, track, audioChannel;
|
|
static cDisplayTracks *currentDisplayTracks;
|
|
virtual void Show(void);
|
|
cDisplayTracks(void);
|
|
public:
|
|
virtual ~cDisplayTracks();
|
|
static bool IsOpen(void) { return currentDisplayTracks != NULL; }
|
|
static cDisplayTracks *Create(void);
|
|
static void Process(eKeys Key);
|
|
eOSState ProcessKey(eKeys Key);
|
|
};
|
|
|
|
class cMenuCam : public cOsdMenu {
|
|
private:
|
|
cCiMenu *ciMenu;
|
|
bool selected;
|
|
int offset;
|
|
void AddMultiLineItem(const char *s);
|
|
eOSState Select(void);
|
|
public:
|
|
cMenuCam(cCiMenu *CiMenu);
|
|
virtual ~cMenuCam();
|
|
virtual eOSState ProcessKey(eKeys Key);
|
|
};
|
|
|
|
class cMenuCamEnquiry : public cOsdMenu {
|
|
private:
|
|
cCiEnquiry *ciEnquiry;
|
|
char *input;
|
|
bool replied;
|
|
eOSState Reply(void);
|
|
public:
|
|
cMenuCamEnquiry(cCiEnquiry *CiEnquiry);
|
|
virtual ~cMenuCamEnquiry();
|
|
virtual eOSState ProcessKey(eKeys Key);
|
|
};
|
|
|
|
cOsdObject *CamControl(void);
|
|
|
|
class cMenuRecordingItem;
|
|
|
|
class cMenuRecordings : public cOsdMenu {
|
|
private:
|
|
char *base;
|
|
int level;
|
|
int recordingsState;
|
|
static int helpKeys;
|
|
void SetHelpKeys(void);
|
|
void Set(bool Refresh = false);
|
|
cRecording *GetRecording(cMenuRecordingItem *Item);
|
|
bool Open(bool OpenSubMenus = false);
|
|
eOSState Play(void);
|
|
eOSState Rewind(void);
|
|
eOSState Delete(void);
|
|
eOSState Info(void);
|
|
eOSState Commands(eKeys Key = kNone);
|
|
public:
|
|
cMenuRecordings(const char *Base = NULL, int Level = 0, bool OpenSubMenus = false);
|
|
~cMenuRecordings();
|
|
virtual eOSState ProcessKey(eKeys Key);
|
|
};
|
|
|
|
class cRecordControl {
|
|
private:
|
|
cDevice *device;
|
|
cTimer *timer;
|
|
cRecorder *recorder;
|
|
const cEvent *event;
|
|
char *instantId;
|
|
char *fileName;
|
|
bool GetEvent(void);
|
|
public:
|
|
cRecordControl(cDevice *Device, cTimer *Timer = NULL, bool Pause = false);
|
|
virtual ~cRecordControl();
|
|
bool Process(time_t t);
|
|
cDevice *Device(void) { return device; }
|
|
void Stop(void);
|
|
const char *InstantId(void) { return instantId; }
|
|
const char *FileName(void) { return fileName; }
|
|
cTimer *Timer(void) { return timer; }
|
|
};
|
|
|
|
class cRecordControls {
|
|
private:
|
|
static cRecordControl *RecordControls[];
|
|
public:
|
|
static bool Start(cTimer *Timer = NULL, bool Pause = false);
|
|
static void Stop(const char *InstantId);
|
|
static void Stop(cDevice *Device);
|
|
static bool StopPrimary(bool DoIt = false);
|
|
static bool PauseLiveVideo(void);
|
|
static const char *GetInstantId(const char *LastInstantId);
|
|
static cRecordControl *GetRecordControl(const char *FileName);
|
|
static void Process(time_t t);
|
|
static void ChannelDataModified(cChannel *Channel);
|
|
static bool Active(void);
|
|
static void Shutdown(void);
|
|
};
|
|
|
|
class cReplayControl : public cDvbPlayerControl {
|
|
private:
|
|
cSkinDisplayReplay *displayReplay;
|
|
cMarks marks;
|
|
bool visible, modeOnly, shown, displayFrames;
|
|
int lastCurrent, lastTotal;
|
|
bool lastPlay, lastForward;
|
|
int lastSpeed;
|
|
time_t timeoutShow;
|
|
bool timeSearchActive, timeSearchHide;
|
|
int timeSearchTime, timeSearchPos;
|
|
void TimeSearchDisplay(void);
|
|
void TimeSearchProcess(eKeys Key);
|
|
void TimeSearch(void);
|
|
void ShowTimed(int Seconds = 0);
|
|
static char *fileName;
|
|
static char *title;
|
|
void ShowMode(void);
|
|
bool ShowProgress(bool Initial);
|
|
void MarkToggle(void);
|
|
void MarkJump(bool Forward);
|
|
void MarkMove(bool Forward);
|
|
void EditCut(void);
|
|
void EditTest(void);
|
|
public:
|
|
cReplayControl(void);
|
|
virtual ~cReplayControl();
|
|
virtual eOSState ProcessKey(eKeys Key);
|
|
virtual void Show(void);
|
|
virtual void Hide(void);
|
|
bool Visible(void) { return visible; }
|
|
static void SetRecording(const char *FileName, const char *Title);
|
|
static const char *LastReplayed(void);
|
|
static void ClearLastReplayed(const char *FileName);
|
|
};
|
|
|
|
#endif //__MENU_H
|