summaryrefslogtreecommitdiff
path: root/src/submenuprovider.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/submenuprovider.cc')
-rw-r--r--src/submenuprovider.cc164
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;
+ }
}