diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/menuitemsetup.cpp | 2 | ||||
-rw-r--r-- | src/menusetup.cpp | 52 | ||||
-rw-r--r-- | src/menusetup.h | 9 | ||||
-rw-r--r-- | src/pluginsetup.cpp | 12 |
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); |