vdr/menu.h
Klaus Schmidinger 4c65b525dc Version 1.5.7
- All logging now goes to LOG_ERR, because some systems split error, info and
  debug messages into separate files, which repeatedly caused extra efforts to
  find out when incomplete log excerpts were attached to problem reports in
  the past.
- Updated the Estonian OSD texts (thanks to Arthur Konovalov).
- Fixed a problem with characters >0x7F in the modified version of skipspace()
  (thanks to Marco Schlüßler).
- Fixed a bug I introduced when simplifying the original patch for detecting
  Premiere NVOD channel links (crash reported by Malte Schröder).
- Internationalization is now done with 'gettext' (following a suggestion by
  Lucian Muresan). Plugin authors may want to use the Perl script
  'i18n-to-gettext.pl' to convert their internationalized texts to the gettext
  format (see the instructions inside that script file). The function
  cPlugin::RegisterI18n() is still present for compatibility, but doesn't
  have any more functionality. So plugins that don't convert their texts to
  the gettext format will only present English texts.
  See PLUGINS.html, section "Internationalization", for instructions on how
  to make strings in arrays translatable.
  See README.i18n for information on how to create new or maintain existing
  translations.
- The three letter language codes and their aliases are stored in i18n.c, and
  each translation file only contains one of them to link that language name
  to the code.
- The 'newplugin' script has been extended to generate the Makefile section
  for i18n support.
- The parameter OSDLanguage in 'setup.conf' is now a string and holds the locale
  code of the selected OSD language (e.g. en_US). If Setup.OSDLanguage is not
  set to a particular locale that is found in VDR's locale directory, the
  locale as defined in the system environment is used by default.
- The list of tracks given in cStatus::SetAudioTrack() is now NULL terminated,
  so that plugins can actually use all the strings in the list, not just the
  one pointed to by Index (thanks to Alexander Rieger).
- Fixed handling kLeft in the calls to cStatus::MsgOsdTextItem() (thanks to
  Alexander Rieger).
- Added the "...or (at your option) any later version" phrase to the license
  information of all plugins, and also the 'newplugin' script (suggested by
  Ville Skyttä). Plugin authors may want to consider doing the same.
- Fixed the link to the GPL2 at http://www.gnu.org in vdr.c (thanks to Ville
  Skyttä).
- cBitmap::SetXpm() now checks whether the given Xpm pointer is not NULL, to
  avoid a crash with files that only contain "/* XPM */" (suggested by Andreas
  Mair).
- Added a debug error message to cReceiver::~cReceiver() in case it is still
  attached to a device (thanks to Reinhard Nissl).
2007-08-12 18:00:00 +02:00

235 lines
6.2 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.88 2007/08/12 10:35:42 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;
eDvbFont font;
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, bool Buttons = false);
virtual void Display(void);
virtual eOSState ProcessKey(eKeys Key);
};
class cMenuMain : public cOsdMenu {
private:
time_t lastDiskSpaceCheck;
int lastFreeMB;
bool replaying;
cOsdItem *stopReplayItem;
cOsdItem *cancelEditingItem;
cOsdItem *stopRecordingItem;
int recordControlsState;
static cOsdObject *pluginOsdObject;
void Set(void);
bool Update(bool Force = false);
public:
cMenuMain(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;
bool timeout;
cChannel *channel;
const cEvent *lastPresent;
const cEvent *lastFollowing;
static cDisplayChannel *currentDisplayChannel;
void DisplayChannel(void);
void DisplayInfo(void);
void Refresh(void);
cChannel *NextAvailableChannel(cChannel *Channel, int Direction);
public:
cDisplayChannel(int Number, bool Switched);
cDisplayChannel(eKeys FirstKey);
virtual ~cDisplayChannel();
virtual eOSState ProcessKey(eKeys Key);
static bool IsOpen(void) { return currentDisplayChannel != NULL; }
};
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 + 1]; // list is NULL terminated
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);
};
cOsdObject *CamControl(void);
class cMenuRecordingItem;
class cMenuRecordings : public cOsdMenu {
private:
char *base;
int level;
int recordingsState;
int helpKeys;
void SetHelpKeys(void);
void Set(bool Refresh = false);
bool Open(bool OpenSubMenus = false);
eOSState Play(void);
eOSState Rewind(void);
eOSState Delete(void);
eOSState Info(void);
eOSState Commands(eKeys Key = kNone);
protected:
cRecording *GetRecording(cMenuRecordingItem *Item);
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[];
static int state;
public:
static bool Start(cTimer *Timer = NULL, bool Pause = false);
static void Stop(const char *InstantId);
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);
static void ChangeState(void) { state++; }
static bool StateChanged(int &State);
};
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 cReplayControl *currentReplayControl;
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 cOsdObject *GetInfo(void);
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 *NowReplaying(void);
static const char *LastReplayed(void);
static void ClearLastReplayed(const char *FileName);
};
#endif //__MENU_H