summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/menuitemsetup.cpp2
-rw-r--r--src/menusetup.cpp52
-rw-r--r--src/menusetup.h9
-rw-r--r--src/pluginsetup.cpp12
4 files changed, 62 insertions, 13 deletions
diff --git a/src/menuitemsetup.cpp b/src/menuitemsetup.cpp
index 6dc8d28..bc4851d 100644
--- a/src/menuitemsetup.cpp
+++ b/src/menuitemsetup.cpp
@@ -21,6 +21,7 @@
*/
#include "menuitemsetup.h"
+#include <iostream>
cMenuItemSetup::cMenuItemSetup(void)
:cOsdMenu(tr("Item Setup"))
@@ -37,6 +38,7 @@ cMenuItemSetup::cMenuItemSetup(void)
eOSState cMenuItemSetup::ProcessKey(eKeys Key)
{
dsyslog("menuorg: cMenuSetupItemSetup::ProcessKey called");
+ std::cerr << "menuorg: cMenuSetupItemSetup::ProcessKey called" << std::endl;
eOSState state = cOsdMenu::ProcessKey(Key);
return state;
}
diff --git a/src/menusetup.cpp b/src/menusetup.cpp
index f513af3..dbce3ea 100644
--- a/src/menusetup.cpp
+++ b/src/menusetup.cpp
@@ -21,23 +21,31 @@
*/
#include "menusetup.h"
+#include "menuconfiguration.h"
+#include "menuitemsetup.h"
#include <vdr/menu.h>
#include <vdr/interface.h>
#include <libxml++/libxml++.h>
-#include "menuconfiguration.h"
-#include "menuitemsetup.h"
+#include <iostream>
using namespace xmlpp;
using namespace std;
-cMenuSetup::cMenuSetup(MenuConfiguration& menuConfiguration)
+cMenuSetup::cMenuSetup(MenuConfiguration& menuConfiguration, int displayMode)
:cOsdMenu(tr("Menu Setup")),_menuConfiguration(menuConfiguration)
{
- //TODO
+ _displayMode = displayMode;
+ DrawMenu(_menuConfiguration.Configuration(), 0);
+}
+
+void cMenuSetup::DrawMenu(const Element* menuRoot, int iCount)
+{
+ int cur=Current();
- Element* root = _menuConfiguration.Configuration();
+ if(iCount == 0)
+ Clear();
- Node::NodeList children = root->get_children();
+ Node::NodeList children = menuRoot->get_children();
for (Node::NodeList::iterator i = children.begin(); i != children.end(); i++)
{
const Element* childElement = dynamic_cast<const Element*>(*i);
@@ -49,18 +57,43 @@ cMenuSetup::cMenuSetup(MenuConfiguration& menuConfiguration)
string type = childElement->get_name();
string name = nameAttribute->get_value();
- Add(new cOsdItem(name.c_str(), osContinue));
+ for (int i=0; i <= iCount ;i++)
+ name = " " + name;
+
+ if ( type == "menu" && _displayMode == 1)
+ {
+ name = "+" + name;
+ Add(new cOsdItem(name.c_str()),true);
+ DrawMenu(childElement, iCount+1);
+ }
+ else
+ {
+ if(iCount > 0)
+ name = " " + name;
+
+ Add(new cOsdItem(name.c_str()),true);
+ }
}
}
- DrawButton();
+ if(iCount == 0)
+ {
+ SetCurrent(Get(cur));
+ Display();
+ DrawButton();
+ }
}
eOSState cMenuSetup::ProcessKey(eKeys Key)
{
dsyslog("menuorg: cMenuSetup::ProcessKey called");
+ std::cerr << "menuorg: cMenuSetup::ProcessKey called" << std::endl;
eOSState state = cOsdMenu::ProcessKey(Key);
-
+
+ if (HasSubMenu())
+ {
+ return state;
+ }
if (state == osUnknown)
{
switch(Key)
@@ -110,4 +143,5 @@ eOSState cMenuSetup::ProcessKey(eKeys Key)
void cMenuSetup::DrawButton(void)
{
SetHelp(tr("Create"),tr("Edit"),tr("Delete"),tr("Move"));
+ Display();
}
diff --git a/src/menusetup.h b/src/menusetup.h
index 6a2409f..85b2cf7 100644
--- a/src/menusetup.h
+++ b/src/menusetup.h
@@ -24,6 +24,9 @@
#define ___MENUSETUP_H
#include <vdr/menu.h>
+#include <libxml++/libxml++.h>
+
+namespace xmlpp { class Element; }
class MenuConfiguration;
@@ -31,11 +34,15 @@ class cMenuSetup : public cOsdMenu
{
private:
MenuConfiguration& _menuConfiguration;
+ int _displayMode;
public:
- cMenuSetup(MenuConfiguration& menuConfiguration);
+ cMenuSetup(MenuConfiguration& menuConfiguration, int displayMode);
virtual eOSState ProcessKey(eKeys Key);
+
+ private:
void DrawButton(void);
+ void DrawMenu(const xmlpp::Element* menuRoot, int iCount);
};
#endif
diff --git a/src/pluginsetup.cpp b/src/pluginsetup.cpp
index fb68f43..f1b2c19 100644
--- a/src/pluginsetup.cpp
+++ b/src/pluginsetup.cpp
@@ -20,6 +20,7 @@
*
*/
+#include <iostream>
#include <vdr/menu.h>
#include "menuorg.h"
#include "pluginsetup.h"
@@ -46,16 +47,21 @@ void PluginSetup::Store(void)
eOSState PluginSetup::ProcessKey(eKeys Key)
{
dsyslog("menuorg: PluginSetup::ProcessKey called");
-
+ std::cerr << "menuorg: PluginSetup::ProcessKey called" << std::endl;
+ bool HadSubMenu = HasSubMenu();
eOSState state = cOsdMenu::ProcessKey(Key);
+ if (HasSubMenu() || HadSubMenu)
+ {
+ return state;
+ }
switch(state)
{
case osUser1:
- state = AddSubMenu(new cMenuSetup(_menuConfiguration));
+ return AddSubMenu(new cMenuSetup(_menuConfiguration, 1));
break;
case osContinue:
- if(NORMALKEY(Key)==kUp || NORMALKEY(Key)==kDown || NORMALKEY(Key)==kGreen)
+ if(NORMALKEY(Key)==kUp || NORMALKEY(Key)==kDown)
{
cOsdItem *item=Get(Current());
if(item) item->ProcessKey(kNone);