summaryrefslogtreecommitdiff
path: root/src/vdr-plugin/menu.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/vdr-plugin/menu.h')
-rw-r--r--src/vdr-plugin/menu.h114
1 files changed, 114 insertions, 0 deletions
diff --git a/src/vdr-plugin/menu.h b/src/vdr-plugin/menu.h
new file mode 100644
index 0000000..b1e67df
--- /dev/null
+++ b/src/vdr-plugin/menu.h
@@ -0,0 +1,114 @@
+/*
+ * menu.h: Web video plugin for the Video Disk Recorder
+ *
+ * See the README file for copyright information and how to reach the author.
+ *
+ * $Id$
+ */
+
+#ifndef __WEBVIDEO_MENU_H
+#define __WEBVIDEO_MENU_H
+
+#include <time.h>
+#include <vdr/osdbase.h>
+#include <vdr/menuitems.h>
+#include <vdr/menu.h>
+#include <libxml/parser.h>
+#include "download.h"
+#include "menudata.h"
+
+extern cCharSetConv csc;
+
+// --- cXMLMenu --------------------------------------------------
+
+class cXMLMenu : public cOsdMenu {
+protected:
+ virtual bool Deserialize(const char *xml);
+ virtual bool CreateItemFromTag(xmlDocPtr doc, xmlNodePtr node) = 0;
+public:
+ cXMLMenu(const char *Title, int c0 = 0, int c1 = 0,
+ int c2 = 0, int c3 = 0, int c4 = 0);
+
+ int Load(const char *xmlstr);
+};
+
+// --- cNavigationMenu -----------------------------------------------------
+
+enum eLinkType { LT_REGULAR, LT_MEDIA, LT_STREAMINGMEDIA };
+
+class cHistory;
+class cHistoryObject;
+class cStatusScreen;
+
+class cNavigationMenu : public cXMLMenu {
+private:
+ // links[i] is the navigation link of the i:th item
+ cVector<cLinkBase *> links;
+ // streams[i] is the media stream link of the i:th item
+ cVector<cLinkBase *> streams;
+ cProgressVector& summaries;
+ char *title;
+ char *reference;
+ int shortcutMode;
+
+protected:
+ cHistory *history;
+
+ virtual bool CreateItemFromTag(xmlDocPtr doc, xmlNodePtr node);
+ void AddLinkItem(cOsdItem *item, cLinkBase *ref, cLinkBase *streamref);
+ void NewLinkItem(xmlDocPtr doc, xmlNodePtr node);
+ void NewTextField(xmlDocPtr doc, xmlNodePtr node);
+ void NewItemList(xmlDocPtr doc, xmlNodePtr node);
+ void NewTextArea(xmlDocPtr doc, xmlNodePtr node);
+ void NewButton(xmlDocPtr doc, xmlNodePtr node);
+ void NewTitle(xmlDocPtr doc, xmlNodePtr node);
+ void UpdateHelp();
+
+public:
+ cNavigationMenu(cHistory *History, cProgressVector& dlsummaries);
+ virtual ~cNavigationMenu();
+
+ virtual eOSState ProcessKey(eKeys Key);
+ virtual eOSState Select(cLinkBase *link, eLinkType type);
+ virtual void Clear(void);
+ eOSState HistoryBack();
+ eOSState HistoryForward();
+
+ const char *Reference() const { return reference; }
+ void Populate(const cHistoryObject *page, const char *statusmsg=NULL);
+};
+
+// --- cStatusScreen -------------------------------------------------------
+
+class cStatusScreen : public cOsdMenu {
+public:
+ const static time_t updateInterval = 5; // seconds
+private:
+ cProgressVector& summaries;
+ time_t lastupdate;
+
+protected:
+ void UpdateHelp();
+
+public:
+ cStatusScreen(cProgressVector& dlsummaries);
+ ~cStatusScreen();
+
+ void Update();
+ bool NeedsUpdate();
+
+ virtual eOSState ProcessKey(eKeys Key);
+};
+
+// --- MenuPointers --------------------------------------------------------
+
+struct MenuPointers {
+ cNavigationMenu *navigationMenu;
+ cStatusScreen *statusScreen;
+
+ MenuPointers() : navigationMenu(NULL), statusScreen(NULL) {};
+};
+
+extern struct MenuPointers menuPointers;
+
+#endif // __WEBVIDEO_MENU_H