diff options
Diffstat (limited to 'menu.c')
-rw-r--r-- | menu.c | 194 |
1 files changed, 116 insertions, 78 deletions
@@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menu.c 1.190 2002/05/09 10:13:47 kls Exp $ + * $Id: menu.c 1.191 2002/05/11 11:16:32 kls Exp $ */ #include "menu.h" @@ -1525,19 +1525,41 @@ eOSState cMenuRecordings::ProcessKey(eKeys Key) return state; } +// --- cMenuSetupBase -------------------------------------------------------- + +class cMenuSetupBase : public cMenuSetupPage { +protected: + cSetup data; + virtual void Store(void); +public: + cMenuSetupBase(void); + }; + +cMenuSetupBase::cMenuSetupBase(void) +{ + data = Setup; +} + +void cMenuSetupBase::Store(void) +{ + Setup = data; + Setup.Save(); +} + // --- cMenuSetupOSD --------------------------------------------------------- -class cMenuSetupOSD : public cMenuSetupPage { +class cMenuSetupOSD : public cMenuSetupBase { private: virtual void Set(void); public: cMenuSetupOSD(void) { Set(); } + virtual eOSState ProcessKey(eKeys Key); }; void cMenuSetupOSD::Set(void) { Clear(); - SetupTitle("OSD"); + SetSection(tr("OSD")); Add(new cMenuEditStraItem(tr("Setup.OSD$Language"), &data.OSDLanguage, I18nNumLanguages, I18nLanguages())); Add(new cMenuEditIntItem( tr("Setup.OSD$Width"), &data.OSDwidth, MINOSDWIDTH, MAXOSDWIDTH)); Add(new cMenuEditIntItem( tr("Setup.OSD$Height"), &data.OSDheight, MINOSDHEIGHT, MAXOSDHEIGHT)); @@ -1549,19 +1571,31 @@ void cMenuSetupOSD::Set(void) Add(new cMenuEditBoolItem(tr("Setup.OSD$Recording directories"), &data.RecordingDirs)); } +eOSState cMenuSetupOSD::ProcessKey(eKeys Key) +{ + int osdLanguage = data.OSDLanguage; + eOSState state = cMenuSetupBase::ProcessKey(Key); + + if (data.OSDLanguage != osdLanguage) { + int OriginalOSDLanguage = Setup.OSDLanguage; + Setup.OSDLanguage = data.OSDLanguage; + Set(); + Display(); + Setup.OSDLanguage = OriginalOSDLanguage; + } + return state; +} + // --- cMenuSetupEPG --------------------------------------------------------- -class cMenuSetupEPG : public cMenuSetupPage { -private: - virtual void Set(void); +class cMenuSetupEPG : public cMenuSetupBase { public: - cMenuSetupEPG(void) { Set(); } + cMenuSetupEPG(void); }; -void cMenuSetupEPG::Set(void) +cMenuSetupEPG::cMenuSetupEPG(void) { - Clear(); - SetupTitle("EPG"); + SetSection(tr("EPG")); Add(new cMenuEditIntItem( tr("Setup.EPG$EPG scan timeout (h)"), &data.EPGScanTimeout)); Add(new cMenuEditIntItem( tr("Setup.EPG$EPG bugfix level"), &data.EPGBugfixLevel, 0, MAXEPGBUGFIXLEVEL)); Add(new cMenuEditBoolItem(tr("Setup.EPG$Set system time"), &data.SetSystemTime)); @@ -1570,34 +1604,43 @@ void cMenuSetupEPG::Set(void) // --- cMenuSetupDVB --------------------------------------------------------- -class cMenuSetupDVB : public cMenuSetupPage { -private: - virtual void Set(void); +class cMenuSetupDVB : public cMenuSetupBase { public: - cMenuSetupDVB(void) { Set(); } + cMenuSetupDVB(void); + virtual eOSState ProcessKey(eKeys Key); }; -void cMenuSetupDVB::Set(void) +cMenuSetupDVB::cMenuSetupDVB(void) { - Clear(); - SetupTitle("DVB"); + SetSection(tr("DVB")); Add(new cMenuEditIntItem( tr("Setup.DVB$Primary DVB interface"), &data.PrimaryDVB, 1, cDvbApi::NumDvbApis)); Add(new cMenuEditBoolItem(tr("Setup.DVB$Video format"), &data.VideoFormat, "4:3", "16:9")); } +eOSState cMenuSetupDVB::ProcessKey(eKeys Key) +{ + int oldPrimaryDVB = Setup.PrimaryDVB; + eOSState state = cMenuSetupBase::ProcessKey(Key); + + if (state == osBack && Key == kOk) { + if (Setup.PrimaryDVB != oldPrimaryDVB) { + state = osSwitchDvb; + cDvbApi::PrimaryDvbApi->SetVideoFormat(Setup.VideoFormat ? VIDEO_FORMAT_16_9 : VIDEO_FORMAT_4_3); + } + } + return state; +} + // --- cMenuSetupLNB --------------------------------------------------------- -class cMenuSetupLNB : public cMenuSetupPage { -private: - virtual void Set(void); +class cMenuSetupLNB : public cMenuSetupBase { public: - cMenuSetupLNB(void) { Set(); } + cMenuSetupLNB(void); }; -void cMenuSetupLNB::Set(void) +cMenuSetupLNB::cMenuSetupLNB(void) { - Clear(); - SetupTitle("LNB"); + SetSection(tr("LNB")); Add(new cMenuEditIntItem( tr("Setup.LNB$SLOF (MHz)"), &data.LnbSLOF)); Add(new cMenuEditIntItem( tr("Setup.LNB$Low LNB frequency (MHz)"), &data.LnbFrequLo)); Add(new cMenuEditIntItem( tr("Setup.LNB$High LNB frequency (MHz)"), &data.LnbFrequHi)); @@ -1606,17 +1649,15 @@ void cMenuSetupLNB::Set(void) // --- cMenuSetupCICAM ------------------------------------------------------- -class cMenuSetupCICAM : public cMenuSetupPage { -private: - virtual void Set(void); +class cMenuSetupCICAM : public cMenuSetupBase { public: - cMenuSetupCICAM(void) { Set(); } + cMenuSetupCICAM(void); + virtual eOSState ProcessKey(eKeys Key); }; -void cMenuSetupCICAM::Set(void) +cMenuSetupCICAM::cMenuSetupCICAM(void) { - Clear(); - SetupTitle("CICAM"); + SetSection(tr("CICAM")); for (int d = 0; d < cDvbApi::NumDvbApis; d++) { for (int i = 0; i < 2; i++) { char buffer[32]; @@ -1626,19 +1667,25 @@ void cMenuSetupCICAM::Set(void) } } +eOSState cMenuSetupCICAM::ProcessKey(eKeys Key) +{ + eOSState state = cMenuSetupBase::ProcessKey(Key); + + if (state == osBack && Key == kOk) + cDvbApi::SetCaCaps(); + return state; +} + // --- cMenuSetupRecord ------------------------------------------------------ -class cMenuSetupRecord : public cMenuSetupPage { -private: - virtual void Set(void); +class cMenuSetupRecord : public cMenuSetupBase { public: - cMenuSetupRecord(void) { Set(); } + cMenuSetupRecord(void); }; -void cMenuSetupRecord::Set(void) +cMenuSetupRecord::cMenuSetupRecord(void) { - Clear(); - SetupTitle("Recording"); + SetSection(tr("Recording")); Add(new cMenuEditIntItem( tr("Setup.Recording$Margin at start (min)"), &data.MarginStart)); Add(new cMenuEditIntItem( tr("Setup.Recording$Margin at stop (min)"), &data.MarginStop)); Add(new cMenuEditIntItem( tr("Setup.Recording$Primary limit"), &data.PrimaryLimit, 0, MAXPRIORITY)); @@ -1655,34 +1702,28 @@ void cMenuSetupRecord::Set(void) // --- cMenuSetupReplay ------------------------------------------------------ -class cMenuSetupReplay : public cMenuSetupPage { -private: - virtual void Set(void); +class cMenuSetupReplay : public cMenuSetupBase { public: - cMenuSetupReplay(void) { Set(); } + cMenuSetupReplay(void); }; -void cMenuSetupReplay::Set(void) +cMenuSetupReplay::cMenuSetupReplay(void) { - Clear(); - SetupTitle("Replay"); + SetSection(tr("Replay")); Add(new cMenuEditBoolItem(tr("Setup.Replay$Multi speed mode"), &data.MultiSpeedMode)); Add(new cMenuEditBoolItem(tr("Setup.Replay$Show replay mode"), &data.ShowReplayMode)); } // --- cMenuSetupMisc -------------------------------------------------------- -class cMenuSetupMisc : public cMenuSetupPage { -private: - virtual void Set(void); +class cMenuSetupMisc : public cMenuSetupBase { public: - cMenuSetupMisc(void) { Set(); } + cMenuSetupMisc(void); }; -void cMenuSetupMisc::Set(void) +cMenuSetupMisc::cMenuSetupMisc(void) { - Clear(); - SetupTitle("Miscellaneous"); + SetSection(tr("Miscellaneous")); Add(new cMenuEditIntItem( tr("Setup.Miscellaneous$Min. event timeout (min)"), &data.MinEventTimeout)); Add(new cMenuEditIntItem( tr("Setup.Miscellaneous$Min. user inactivity (min)"), &data.MinUserInactivity)); Add(new cMenuEditIntItem( tr("Setup.Miscellaneous$SVDRP timeout (s)"), &data.SVDRPTimeout)); @@ -1706,18 +1747,15 @@ cMenuSetupPluginItem::cMenuSetupPluginItem(const char *Name, int Index) // --- cMenuSetupPlugins ----------------------------------------------------- -class cMenuSetupPlugins : public cMenuSetupPage { -private: - virtual void Set(void); +class cMenuSetupPlugins : public cMenuSetupBase { public: - cMenuSetupPlugins(void) { Set(); } + cMenuSetupPlugins(void); virtual eOSState ProcessKey(eKeys Key); }; -void cMenuSetupPlugins::Set(void) +cMenuSetupPlugins::cMenuSetupPlugins(void) { - Clear(); - SetupTitle("Plugins"); + SetSection(tr("Plugins")); SetHasHotkeys(); for (int i = 0; ; i++) { cPlugin *p = cPluginManager::GetPlugin(i); @@ -1734,25 +1772,25 @@ void cMenuSetupPlugins::Set(void) eOSState cMenuSetupPlugins::ProcessKey(eKeys Key) { - eOSState state = cOsdMenu::ProcessKey(Key); // not cMenuSetupPage::ProcessKey()! - - if (state == osUnknown) { - switch (Key) { - case kOk: { - cMenuSetupPluginItem *item = (cMenuSetupPluginItem *)Get(Current()); - if (item) { - cPlugin *p = cPluginManager::GetPlugin(item->PluginIndex()); - if (p) { - cOsdMenu *menu = p->SetupMenu(); - if (menu) - return AddSubMenu(menu); - Interface->Info(tr("This plugin has no setup parameters!")); - } - } - } - break; - default: break; - } + eOSState state = HasSubMenu() ? cMenuSetupBase::ProcessKey(Key) : cOsdMenu::ProcessKey(Key); + + if (Key == kOk) { + if (state == osUnknown) { + cMenuSetupPluginItem *item = (cMenuSetupPluginItem *)Get(Current()); + if (item) { + cPlugin *p = cPluginManager::GetPlugin(item->PluginIndex()); + if (p) { + cMenuSetupPage *menu = p->SetupMenu(); + if (menu) { + menu->SetPlugin(p); + return AddSubMenu(menu); + } + Interface->Info(tr("This plugin has no setup parameters!")); + } + } + } + else if (state == osContinue) + Store(); } return state; } |