diff options
author | Klaus Schmidinger <vdr@tvdr.de> | 2005-08-26 12:49:26 +0200 |
---|---|---|
committer | Klaus Schmidinger <vdr@tvdr.de> | 2005-08-26 12:49:26 +0200 |
commit | ed807972ac8aadd42a72f09a89bfba81be2644d7 (patch) | |
tree | 772e7ea7dee9e46014dfc926de1f6ddfa2cc73f1 /menu.c | |
parent | 60d77a91713578cb8b07414cde2e9aad53fd1059 (diff) | |
download | vdr-ed807972ac8aadd42a72f09a89bfba81be2644d7.tar.gz vdr-ed807972ac8aadd42a72f09a89bfba81be2644d7.tar.bz2 |
The Setup/CICAM menu now only contains the devices that actually have a CI and dynamically detects the number of slots a CI provides
Diffstat (limited to 'menu.c')
-rw-r--r-- | menu.c | 104 |
1 files changed, 46 insertions, 58 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.355 2005/08/14 15:14:29 kls Exp $ + * $Id: menu.c 1.356 2005/08/26 12:49:26 kls Exp $ */ #include "menu.h" @@ -2122,11 +2122,28 @@ eOSState cMenuSetupLNB::ProcessKey(eKeys Key) // --- cMenuSetupCICAM ------------------------------------------------------- +class cMenuSetupCICAMItem : public cOsdItem { +private: + cCiHandler *ciHandler; + int slot; +public: + cMenuSetupCICAMItem(int Device, cCiHandler *CiHandler, int Slot); + cCiHandler *CiHandler(void) { return ciHandler; } + int Slot(void) { return slot; } + }; + +cMenuSetupCICAMItem::cMenuSetupCICAMItem(int Device, cCiHandler *CiHandler, int Slot) +{ + ciHandler = CiHandler; + slot = Slot; + char buffer[32]; + const char *CamName = CiHandler->GetCamName(slot); + snprintf(buffer, sizeof(buffer), "%s%d %d\t%s", tr("Setup.CICAM$CICAM DVB"), Device + 1, slot + 1, CamName ? CamName : "-"); + SetText(buffer); +} + class cMenuSetupCICAM : public cMenuSetupBase { private: - int helpKeys; - void SetHelpKeys(void); - cCiHandler *GetCurrentCiHandler(int *Slot = NULL); eOSState Menu(void); eOSState Reset(void); public: @@ -2136,66 +2153,43 @@ public: cMenuSetupCICAM::cMenuSetupCICAM(void) { - helpKeys = -1; SetSection(tr("CICAM")); for (int d = 0; d < cDevice::NumDevices(); d++) { cDevice *Device = cDevice::GetDevice(d); - cCiHandler *CiHandler = Device->CiHandler(); - for (int Slot = 0; Slot < 2; Slot++) { - char buffer[32]; - int CardIndex = Device->CardIndex(); - const char *CamName = CiHandler ? CiHandler->GetCamName(Slot) : NULL; - if (!CamName) - CamName = "-"; - snprintf(buffer, sizeof(buffer), "%s%d %d\t%s", tr("Setup.CICAM$CICAM DVB"), CardIndex + 1, Slot + 1, CamName); - Add(new cOsdItem(buffer)); - } + if (Device) { + cCiHandler *CiHandler = Device->CiHandler(); + if (CiHandler) { + for (int Slot = 0; Slot < CiHandler->NumSlots(); Slot++) + Add(new cMenuSetupCICAMItem(Device->CardIndex(), CiHandler, Slot)); + } + } } - SetHelpKeys(); -} - -cCiHandler *cMenuSetupCICAM::GetCurrentCiHandler(int *Slot) -{ - cDevice *Device = cDevice::GetDevice(Current() / 2); - if (Slot) - *Slot = Current() % 2; - return Device ? Device->CiHandler() : NULL; -} - -void cMenuSetupCICAM::SetHelpKeys(void) -{ - int NewHelpKeys = helpKeys; - NewHelpKeys = GetCurrentCiHandler() ? 1 : 0; - if (NewHelpKeys != helpKeys) { - switch (NewHelpKeys) { - case 0: SetHelp(NULL); break; - case 1: SetHelp(tr("Menu"), tr("Reset")); - } - helpKeys = NewHelpKeys; - } + SetHelp(tr("Menu"), tr("Reset")); } eOSState cMenuSetupCICAM::Menu(void) { - int Slot = 0; - cCiHandler *CiHandler = GetCurrentCiHandler(&Slot); - if (CiHandler && CiHandler->EnterMenu(Slot)) - return osEnd; // the CAM menu will be executed explicitly from the main loop - else - Skins.Message(mtError, tr("Can't open CAM menu!")); + cMenuSetupCICAMItem *item = (cMenuSetupCICAMItem *)Get(Current()); + if (item) { + if (item->CiHandler()->EnterMenu(item->Slot())) + return osEnd; // the CAM menu will be executed explicitly from the main loop + else + Skins.Message(mtError, tr("Can't open CAM menu!")); + } return osContinue; } eOSState cMenuSetupCICAM::Reset(void) { - int Slot = 0; - cCiHandler *CiHandler = GetCurrentCiHandler(&Slot); - if (CiHandler && CiHandler->Reset(Slot)) { - Skins.Message(mtInfo, tr("CAM has been reset")); - return osEnd; + cMenuSetupCICAMItem *item = (cMenuSetupCICAMItem *)Get(Current()); + if (item) { + if (item->CiHandler()->Reset(item->Slot())) { + Skins.Message(mtInfo, tr("CAM has been reset")); + return osEnd; + } + else + Skins.Message(mtError, tr("Can't reset CAM!")); } - else - Skins.Message(mtError, tr("Can't reset CAM!")); return osContinue; } @@ -2205,17 +2199,11 @@ eOSState cMenuSetupCICAM::ProcessKey(eKeys Key) if (state == osUnknown) { switch (Key) { - case kRed: if (helpKeys == 1) - return Menu(); - break; - case kGreen: if (helpKeys == 1) - return Reset(); - break; + case kRed: return Menu(); + case kGreen: return Reset(); default: break; } } - if (Key != kNone) - SetHelpKeys(); return state; } |