mirror of
				https://github.com/vdr-projects/vdr.git
				synced 2025-03-01 10:50:46 +00:00 
			
		
		
		
	- Added some missing braces in remux.c (thanks to Wayne Keer for reporting this one). - Removed unused MAINMENUENTRY from svdrpdemo.c (thanks to Udo Richter for reporting this one). - Fixed appending sequence end code in cDvbPlayer::Goto() (thanks to Reinhard Nissl). - Fixed syncing in cRepacker (thanks to Reinhard Nissl). - Now always using stream id 0xE0 for the video stream, to avoid problems with post processing tools that choke on different ids (suggested by Reinhard Nissl). - Updated the Estonian OSD texts (thanks to Arthur Konovalov). - Fixed cDvbPlayer::SkipFrames() to properly handle radio recordings (thanks to Reinhard Nissl). - Updated the Swedish OSD texts (thanks to Tomas Prybil). - Updated the Slovenian OSD texts (thanks to Matjaz Thaler). - Updated the Danish OSD texts (thanks to Mogens Elneff). - Made LIRC command parsing more robust (thanks to Ville Skyttä). - Introduced a separate 'plugins-install' target in the Makefile (thanks to Daniel Thompson). - Re-introduced the code that waits for a tuner lock in VDR/device.c, since apparently some users actually need it. It's not active by default, you'll have to define the WAIT_FOR_TUNER_LOCK macro in that file if you need it (suggested by Malcolm Caldwell). - Adjusted the Makefile to the dvb-kernel driver on kernel 2.6 and up (thanks to Lauri Tischler). - Repeat keys are now ignored when waiting for a keypress to cancel an operation (thanks to Marko Mäkelä). - The main menu function of a plugin can now be activated through a key macro of the form "@plugin" even if that plugin doesn't have a main menu entry (using part of a patch by Hardy Flor, which originally implemented calling plugins from SVDRP). - The menu timeout handling is now done centrally in the main program loop. - Added missing help for the 'help' keyword in the SVDRP command PLUG. - The main menu function of a plugin can now be called programmatically through the static function cRemote::CallPlugin(). - The SVDRP command PLUG now has a new option 'main' which can be used to initiate a call to the main menu function of a plugin (using part of a patch by Hardy Flor). - The new command line option '--vfat' can be used to make VDR encode special characters in recording file names, even if it wasn't compiled with VFAT=1 (suggested by Peter Bieringer). The compile time option VFAT still exists and creates a VDR that always behaves as if it were called with '--vfat'. - Replaced the ':' delimiter between hour and minute in recording file names with a '.' under Linux, too. Existing recordings with ':' as delimiter will still work. - Implemented the SVDRP command MOVC (thanks to Andreas Brachold). - Added support for multiple audio language codes in ISO639LanguageDescriptors to 'libsi' (thanks to Marcel Wiesweg). - Changed the audio PID language codes to hold up to two 3 letter codes, separated by '+', to store separate languages broadcast in two channel audio mode. - If the preferred audio language is broadcast on a PID that has two different languages in the two stereo channels, the audio channel is now properly set when switching to such a channel (thanks to Mogens Elneff for his help in testing this). - Fixed some typos in MANUAL (thanks to Ville Skyttä). - Fixed the default value for "Setup/EPG bugfix level" (thanks to Ville Skyttä for reporting this one). - Fixed defining timers that only differ in the day of week (thanks to Patrick Rother for reporting this one). - Fixed converting summary.vdr files that would result in a very long 'short text' (thanks to Carsten Koch). - Implemented a hash for the channels to reduce the system load in the EIT scanning thread (based on a patch by Georg Acher).
		
			
				
	
	
		
			239 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			239 lines
		
	
	
		
			6.0 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.73 2005/09/03 11:41:41 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;
 | 
						|
  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;
 | 
						|
  static int helpKeys;
 | 
						|
  void SetHelpKeys(void);
 | 
						|
  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
 |