diff options
Diffstat (limited to 'src/submenuprovider.cc')
-rw-r--r-- | src/submenuprovider.cc | 164 |
1 files changed, 56 insertions, 108 deletions
diff --git a/src/submenuprovider.cc b/src/submenuprovider.cc index b3c7c67..cf6b34c 100644 --- a/src/submenuprovider.cc +++ b/src/submenuprovider.cc @@ -1,140 +1,88 @@ #include "submenuprovider.h" +#include "submenuitem.h" +#include "vdrmenuitem.h" +#include "pluginmenuitem.h" #include <vdr/plugin.h> -#include <iostream> - -//using namespace std; SubMenuProvider::SubMenuProvider() { - _MenuIndex=0; - _nextMenuIndex=0; - CreateTestMenus(); + CreateTestMenus(); + _currentMenu = &_rootMenuNode; } void SubMenuProvider::CreateTestMenus() { - // Mainmenu - _myOsdItems[0].push_back(MainMenuItem::CreateCustomMenuItem(new cOsdItem(tr("A custom sub menu1"), osUser1))); - _myOsdItems[0].push_back(MainMenuItem::CreateCustomMenuItem(new cOsdItem(tr("A custom sub menu2"), osUser1))); - _myOsdItems[0].push_back(MainMenuItem::CreateCustomMenuItem(new cOsdItem(tr("Setup"), osSetup))); - if (Commands.Count()) - _myOsdItems[0].push_back(MainMenuItem::CreateCustomMenuItem(new cOsdItem(tr("Commands"), osCommands))); - - _MenuSwitch[0][0][ENTER] = 1; - _MenuSwitch[0][0][LEAVE] = 0; - - _MenuSwitch[0][1][ENTER] = 2; - _MenuSwitch[0][1][LEAVE] = 0; - - _MenuSwitch[0][2][ENTER] = 0; - _MenuSwitch[0][2][LEAVE] = 0; - - _MenuSwitch[0][3][ENTER] = 0; - _MenuSwitch[0][3][LEAVE] = 0; - - // Submenu 1 - _myOsdItems[1].push_back(MainMenuItem::CreateCustomMenuItem(new cOsdItem(tr("Schedule"), osSchedule))); - _myOsdItems[1].push_back(MainMenuItem::CreateCustomMenuItem(new cOsdItem(tr("Channels"), osChannels))); - _myOsdItems[1].push_back(MainMenuItem::CreateCustomMenuItem(new cOsdItem(tr("Timers"), osTimers))); - _myOsdItems[1].push_back(MainMenuItem::CreateCustomMenuItem(new cOsdItem(tr("Recordings"), osRecordings))); - _myOsdItems[1].push_back(MainMenuItem::CreateCustomMenuItem(new cOsdItem(tr("A custom sub sub menu1"), osUser1))); - - _MenuSwitch[1][0][ENTER] = 1; - _MenuSwitch[1][0][LEAVE] = 0; - - _MenuSwitch[1][1][ENTER] = 1; - _MenuSwitch[1][1][LEAVE] = 0; - - _MenuSwitch[1][2][ENTER] = 1; - _MenuSwitch[1][2][LEAVE] = 0; - - _MenuSwitch[1][3][ENTER] = 1; - _MenuSwitch[1][3][LEAVE] = 0; - - _MenuSwitch[1][4][ENTER] = 3; - _MenuSwitch[1][4][LEAVE] = 0; - - // Submenu 2 - int MenuItemCount = 0; - for (int i = 0; ; i++) - { - cPlugin *p = cPluginManager::GetPlugin(i); - if (p) - { - const char *item = p->MainMenuEntry(); - if (item) - { - _myOsdItems[2].push_back(MainMenuItem::CreatePluginMenuItem(item, i)); - _MenuSwitch[2][MenuItemCount][ENTER] = 2; - _MenuSwitch[2][MenuItemCount][LEAVE] = 0; - MenuItemCount++; - } - } - else - break; - } - - // Sub Sub Menu 1 - _myOsdItems[3].push_back(MainMenuItem::CreateCustomMenuItem(new cOsdItem(tr("a Test Item"), osContinue))); - _myOsdItems[3].push_back(MainMenuItem::CreateCustomMenuItem(new cOsdItem(tr("Channels"), osChannels))); - _MenuSwitch[3][0][ENTER] = 3; - _MenuSwitch[3][0][LEAVE] = 1; - _MenuSwitch[3][0][ENTER] = 3; - _MenuSwitch[3][0][LEAVE] = 1; + MenuNode* subMenu1 =_rootMenuNode.AddChild(new SubMenuItem("Custom menu 1")); + subMenu1->AddChild(new VdrMenuItem(tr("Schedule"), osSchedule)); + subMenu1->AddChild(new VdrMenuItem(tr("Channels"), osChannels)); + MenuNode* subMenu1_1 = subMenu1->AddChild(new SubMenuItem("Custom menu 1.1")); + subMenu1_1->AddChild(new VdrMenuItem(tr("Timers"), osTimers)); + subMenu1_1->AddChild(new VdrMenuItem(tr("Recordings"), osRecordings)); + MenuNode* subMenu2 =_rootMenuNode.AddChild(new SubMenuItem("Custom menu 2")); + //plugins + for (int i = 0; ; i++) + { + cPlugin *p = cPluginManager::GetPlugin(i); + if (p) + { + const char *item = p->MainMenuEntry(); + if (item) + { + subMenu2->AddChild(new PluginMenuItem(item, i)); + } + } + else + break; + } } MainMenuItemsList* SubMenuProvider::MainMenuItems() { - isyslog("Call MainMenuItems() - _MenuIndex=%d - _nextMenuIndex=%d", _MenuIndex, _nextMenuIndex); - - ResetMainMenuItemsList(); - - _osdItems=_myOsdItems[_nextMenuIndex]; - _MenuIndex=_nextMenuIndex; + ResetMainMenuItemsList(); + + for (MenuNodeList::iterator i = _currentMenu->Childs().begin(); + i != _currentMenu->Childs().end(); i++) + { + _currentMainMenuItems.push_back((*i)->CreateMainMenuItem()); + } - return &_osdItems; + return &_currentMainMenuItems; } void SubMenuProvider::ResetMainMenuItemsList() { - for( MainMenuItemsList::iterator i = _osdItems.begin(); i != _osdItems.end(); i++) + + for( MainMenuItemsList::iterator i = _currentMainMenuItems.begin(); + i != _currentMainMenuItems.end(); i++) { delete *i; } - _osdItems.clear(); + _currentMainMenuItems.clear(); + } void SubMenuProvider::EnterSubMenu(cOsdItem* item) { - isyslog("Call EnterSubMenu() - _MenuIndex=%d", _MenuIndex); - - unsigned int itemIndex; - - for(itemIndex=0; itemIndex < _osdItems.size(); itemIndex++) + for(unsigned int itemIndex=0; itemIndex < _currentMainMenuItems.size(); itemIndex++) + { + MainMenuItem* menuItem = _currentMainMenuItems.at(itemIndex); + if (menuItem->IsCustomMenuItem() && (menuItem->CustomMenuItem() == item)) { - MainMenuItem* menuItem = _osdItems.at(itemIndex); - if (menuItem->IsCustomMenuItem() && (menuItem->CustomMenuItem() == item)) - { - break; - } + _currentMenu = _currentMenu->Childs().at(itemIndex); + break; } - isyslog("_MenuSwitch[%d][%d][ENTER]=%d",_MenuIndex,itemIndex,_MenuSwitch[_MenuIndex][itemIndex][ENTER]); - _nextMenuIndex = _MenuSwitch[_MenuIndex][itemIndex][ENTER]; + } } bool SubMenuProvider::LeaveSubMenu() { - isyslog("Call LeaveSubMenu() - _MenuIndex=%d", _MenuIndex); - - if (_MenuIndex != _MenuSwitch[_MenuIndex][0][LEAVE]) - { - _nextMenuIndex = _MenuSwitch[_MenuIndex][0][LEAVE]; - isyslog("LeaveSubMenu() - return true"); - return true; - } - else - { - isyslog("LeaveSubMenu() - return false"); - return false; - } + if (_currentMenu->Parent()) + { + _currentMenu = _currentMenu->Parent(); + return true; + } + else + { + return false; + } } |