summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsvntobi <svntobi@cd0d6b48-d4f9-0310-940f-ab8c4eb44d3f>2007-07-22 16:16:04 +0000
committersvntobi <svntobi@cd0d6b48-d4f9-0310-940f-ab8c4eb44d3f>2007-07-22 16:16:04 +0000
commit76dcc6f9bb7afda0a060efc28bf0b98db4914a4d (patch)
tree5147b57f94fadbc522a387b4d75f239cfa83a431
parent1e8d4c38cf55f3995a3d02c6c275fec0d1b7326f (diff)
downloadvdr-plugin-menuorg-76dcc6f9bb7afda0a060efc28bf0b98db4914a4d.tar.gz
vdr-plugin-menuorg-76dcc6f9bb7afda0a060efc28bf0b98db4914a4d.tar.bz2
using another strategy
git-svn-id: file:///home/tobias/sandbox/vdr/--/vdr-pkg/vdr-pkg/submenu/trunk@5629 cd0d6b48-d4f9-0310-940f-ab8c4eb44d3f
-rw-r--r--src/submenu.cc3
-rw-r--r--src/submenu.h10
-rw-r--r--src/submenuprovider.cc80
-rw-r--r--src/submenuprovider.h5
-rwxr-xr-xvdr-patch/opt-37_submenu.dpatch49
5 files changed, 83 insertions, 64 deletions
diff --git a/src/submenu.cc b/src/submenu.cc
deleted file mode 100644
index d9c3ab7..0000000
--- a/src/submenu.cc
+++ /dev/null
@@ -1,3 +0,0 @@
-eOSState SubMenu::ProcessKey(eKeys Key)
-{
-}
diff --git a/src/submenu.h b/src/submenu.h
deleted file mode 100644
index b26c47f..0000000
--- a/src/submenu.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef ___SUBMENU_H
-#define ___SUBMENU_H
-
-class SubMenu : public cOsdMenu
-{
- public:
- virtual eOSState ProcessKey(eKeys Key);
-};
-
-#endif
diff --git a/src/submenuprovider.cc b/src/submenuprovider.cc
index ccbb3fc..0b5abde 100644
--- a/src/submenuprovider.cc
+++ b/src/submenuprovider.cc
@@ -1,32 +1,42 @@
#include "submenuprovider.h"
#include <vdr/plugin.h>
+SubMenuProvider::SubMenuProvider()
+{
+ _inSubMenu = false;
+}
+
MainMenuItemsList* SubMenuProvider::MainMenuItems()
{
ResetMainMenuItemsList();
-
- _osdItems.push_back(MainMenuItem::CreateCustomMenuItem(new cOsdItem("A custom sub menu", osUser1)));
-// _osdItems.push_back(MainMenuItem::CreateCustomMenuItem(new cOsdItem(tr("Schedule"), osSchedule)));
-// _osdItems.push_back(MainMenuItem::CreateCustomMenuItem(new cOsdItem(tr("Channels"), osChannels)));
-// _osdItems.push_back(MainMenuItem::CreateCustomMenuItem(new cOsdItem(tr("Timers"), osTimers)));
-// _osdItems.push_back(MainMenuItem::CreateCustomMenuItem(new cOsdItem(tr("Recordings"), osRecordings)));
-
- for (int i = 0; ; i++) {
- cPlugin *p = cPluginManager::GetPlugin(i);
- if (p) {
- const char *item = p->MainMenuEntry();
- if (item)
- _osdItems.push_back(MainMenuItem::CreatePluginMenuItem(item, i));
- }
- else
- break;
- }
-
- _osdItems.push_back(MainMenuItem::CreateCustomMenuItem(new cOsdItem(tr("Setup"), osSetup)));
-
- if (Commands.Count())
- _osdItems.push_back(MainMenuItem::CreateCustomMenuItem(new cOsdItem(tr("Commands"), osCommands)));
+ if (_inSubMenu)
+ {
+ _osdItems.push_back(MainMenuItem::CreateCustomMenuItem(new cOsdItem(tr("Schedule"), osSchedule)));
+ _osdItems.push_back(MainMenuItem::CreateCustomMenuItem(new cOsdItem(tr("Channels"), osChannels)));
+ _osdItems.push_back(MainMenuItem::CreateCustomMenuItem(new cOsdItem(tr("Timers"), osTimers)));
+ _osdItems.push_back(MainMenuItem::CreateCustomMenuItem(new cOsdItem(tr("Recordings"), osRecordings)));
+ }
+ else
+ {
+ _osdItems.push_back(MainMenuItem::CreateCustomMenuItem(new cOsdItem("A custom sub menu", osUser1)));
+ _osdItems.push_back(MainMenuItem::CreateCustomMenuItem(new cOsdItem("Another custom sub menu", osContinue)));
+ for (int i = 0; ; i++) {
+ cPlugin *p = cPluginManager::GetPlugin(i);
+ if (p) {
+ const char *item = p->MainMenuEntry();
+ if (item)
+ _osdItems.push_back(MainMenuItem::CreatePluginMenuItem(item, i));
+ }
+ else
+ break;
+ }
+
+ _osdItems.push_back(MainMenuItem::CreateCustomMenuItem(new cOsdItem(tr("Setup"), osSetup)));
+
+ if (Commands.Count())
+ _osdItems.push_back(MainMenuItem::CreateCustomMenuItem(new cOsdItem(tr("Commands"), osCommands)));
+ }
return &_osdItems;
}
@@ -40,17 +50,23 @@ void SubMenuProvider::ResetMainMenuItemsList()
_osdItems.clear();
}
-cOsdMenu* SubMenuProvider::OpenSubMenu(int mainMenuItemIndex)
+void SubMenuProvider::EnterSubMenu(int mainMenuItemIndex)
{
- if (mainMenuItemIndex == 0)
+ if ((mainMenuItemIndex == 0) && !_inSubMenu)
{
- cOsdMenu* fooMenu = new cOsdMenu("Foo-Submenu");
- fooMenu->Add(new cOsdItem(tr("Schedule"), osSchedule));
- fooMenu->Add(new cOsdItem(tr("Channels"), osChannels));
- fooMenu->Add(new cOsdItem(tr("Timers"), osTimers));
- fooMenu->Add(new cOsdItem(tr("Recordings"), osRecordings));
- return fooMenu;
+ _inSubMenu = true;
+ }
+}
+
+bool SubMenuProvider::LeaveSubMenu()
+{
+ if (_inSubMenu)
+ {
+ _inSubMenu = false;
+ return true;
+ }
+ else
+ {
+ return false;
}
-
- return NULL;
}
diff --git a/src/submenuprovider.h b/src/submenuprovider.h
index f15daf6..d4d73eb 100644
--- a/src/submenuprovider.h
+++ b/src/submenuprovider.h
@@ -9,10 +9,13 @@ class SubMenuProvider: public ISubMenuProvider
{
private:
MainMenuItemsList _osdItems;
+ bool _inSubMenu;
public:
+ SubMenuProvider();
virtual MainMenuItemsList* MainMenuItems();
- virtual cOsdMenu* OpenSubMenu(int mainMenuItemIndex);
+ virtual void EnterSubMenu(int mainMenuItemIndex);
+ virtual bool LeaveSubMenu();
private:
void ResetMainMenuItemsList();
diff --git a/vdr-patch/opt-37_submenu.dpatch b/vdr-patch/opt-37_submenu.dpatch
index 7435f64..d997b84 100755
--- a/vdr-patch/opt-37_submenu.dpatch
+++ b/vdr-patch/opt-37_submenu.dpatch
@@ -4,8 +4,8 @@
@DPATCH@
diff -urNad vdr-1.4.7~/Makefile vdr-1.4.7/Makefile
---- vdr-1.4.7~/Makefile 2007-07-22 15:14:29.000000000 +0200
-+++ vdr-1.4.7/Makefile 2007-07-22 15:14:30.000000000 +0200
+--- vdr-1.4.7~/Makefile 2007-07-22 18:07:09.000000000 +0200
++++ vdr-1.4.7/Makefile 2007-07-22 18:07:09.000000000 +0200
@@ -38,7 +38,7 @@
lirc.o menu.o menuitems.o nit.o osdbase.o osd.o pat.o player.o plugin.o rcu.o\
receiver.o recorder.o recording.o remote.o remux.o ringbuffer.o sdt.o sections.o\
@@ -16,8 +16,8 @@ diff -urNad vdr-1.4.7~/Makefile vdr-1.4.7/Makefile
OBJS += osdcontroller.o rcontroller.o dvbsub.o vdrttxtsubshooks.o
diff -urNad vdr-1.4.7~/menu.c vdr-1.4.7/menu.c
---- vdr-1.4.7~/menu.c 2007-07-22 15:14:29.000000000 +0200
-+++ vdr-1.4.7/menu.c 2007-07-22 15:25:10.000000000 +0200
+--- vdr-1.4.7~/menu.c 2007-07-22 18:07:09.000000000 +0200
++++ vdr-1.4.7/menu.c 2007-07-22 18:07:09.000000000 +0200
@@ -31,6 +31,7 @@
#include "vdrttxtsubshooks.h"
#include "dvbsub.h"
@@ -61,27 +61,39 @@ diff -urNad vdr-1.4.7~/menu.c vdr-1.4.7/menu.c
Update(true);
Display();
-@@ -3238,6 +3260,17 @@
+@@ -3238,6 +3260,29 @@
state = osEnd;
}
break;
-+ case osUser1: {
++ case osBack: {
+ SubMenuPatch::ISubMenuProvider* subMenuProvider;
+
+ if (cPluginManager::CallFirstService("SubMenuPatch-v0.1::SubMenuProvider", &subMenuProvider)) {
-+ cOsdMenu* subMenu = subMenuProvider->OpenSubMenu(Current());
-+ if (subMenu) {
-+ AddSubMenu(subMenu);
-+ }
-+ break;
++ bool leavingMenuSucceeded = subMenuProvider->LeaveSubMenu();
++ Set();
++ if (leavingMenuSucceeded)
++ return osContinue;
++ else
++ return osEnd;
+ }
+ }
++ break;
++ case osUser1: {
++ SubMenuPatch::ISubMenuProvider* subMenuProvider;
++
++ if (cPluginManager::CallFirstService("SubMenuPatch-v0.1::SubMenuProvider", &subMenuProvider)) {
++ subMenuProvider->EnterSubMenu(Current());
++ Set();
++ return osContinue;
++ }
++ }
++ break;
default: switch (Key) {
case kRecord:
case kRed: if (!HadSubMenu)
diff -urNad vdr-1.4.7~/submenupatch.c vdr-1.4.7/submenupatch.c
--- vdr-1.4.7~/submenupatch.c 1970-01-01 01:00:00.000000000 +0100
-+++ vdr-1.4.7/submenupatch.c 2007-07-22 15:14:30.000000000 +0200
++++ vdr-1.4.7/submenupatch.c 2007-07-22 18:12:46.000000000 +0200
@@ -0,0 +1,75 @@
+/*
+ * vdr-submenu - A plugin for the Linux Video Disk Recorder
@@ -101,7 +113,7 @@ diff -urNad vdr-1.4.7~/submenupatch.c vdr-1.4.7/submenupatch.c
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
-+ * $Id: $
++ * $Id$
+ *
+ */
+
@@ -160,8 +172,8 @@ diff -urNad vdr-1.4.7~/submenupatch.c vdr-1.4.7/submenupatch.c
+};
diff -urNad vdr-1.4.7~/submenupatch.h vdr-1.4.7/submenupatch.h
--- vdr-1.4.7~/submenupatch.h 1970-01-01 01:00:00.000000000 +0100
-+++ vdr-1.4.7/submenupatch.h 2007-07-22 15:21:59.000000000 +0200
-@@ -0,0 +1,59 @@
++++ vdr-1.4.7/submenupatch.h 2007-07-22 18:12:33.000000000 +0200
+@@ -0,0 +1,60 @@
+/*
+ * vdr-submenu - A plugin for the Linux Video Disk Recorder
+ * Copyright (c) 2007 Tobias Grimm <vdr@e-tobi.net>
@@ -180,7 +192,7 @@ diff -urNad vdr-1.4.7~/submenupatch.h vdr-1.4.7/submenupatch.h
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
-+ * $Id: $
++ * $Id$
+ *
+ */
+
@@ -202,8 +214,8 @@ diff -urNad vdr-1.4.7~/submenupatch.h vdr-1.4.7/submenupatch.h
+ public:
+ virtual ~MainMenuItem() {};
+ virtual bool IsCustomMenuItem() = 0;
-+ virtual bool IsPluginMenuItem() = 0;
+ virtual cOsdItem* CustomMenuItem() = 0;
++ virtual bool IsPluginMenuItem() = 0;
+ virtual const char* PluginMenuEntry() = 0;
+ virtual int PluginIndex() = 0;
+};
@@ -215,7 +227,8 @@ diff -urNad vdr-1.4.7~/submenupatch.h vdr-1.4.7/submenupatch.h
+ public:
+ virtual ~ISubMenuProvider();
+ virtual MainMenuItemsList* MainMenuItems() = 0;
-+ virtual cOsdMenu* OpenSubMenu(int mainMenuItemIndex) = 0;
++ virtual void EnterSubMenu(int mainMenuItemIndex) = 0;
++ virtual bool LeaveSubMenu() = 0;
+};
+
+};