summaryrefslogtreecommitdiff
path: root/skindesclient-0.0.1/osdmenu.c
diff options
context:
space:
mode:
Diffstat (limited to 'skindesclient-0.0.1/osdmenu.c')
-rw-r--r--skindesclient-0.0.1/osdmenu.c148
1 files changed, 148 insertions, 0 deletions
diff --git a/skindesclient-0.0.1/osdmenu.c b/skindesclient-0.0.1/osdmenu.c
new file mode 100644
index 0000000..aa1f983
--- /dev/null
+++ b/skindesclient-0.0.1/osdmenu.c
@@ -0,0 +1,148 @@
+#include <vdr/osdbase.h>
+#include <string>
+#include <vector>
+#include <map>
+#include <set>
+#include <sstream>
+#include "libskindesigner/skindesignerosdbase.h"
+
+enum eMenus {
+ meListMain,
+ meListSub,
+ meDetail
+};
+
+class cPlugOsdMenu : public cSkindesignerOsdMenu {
+private:
+ void SetMenu(int numItems, bool subfolder = false);
+ void SetDetailView(int element);
+public:
+ cPlugOsdMenu(void);
+ virtual ~cPlugOsdMenu();
+ virtual eOSState ProcessKey(eKeys key);
+};
+
+
+//***************************************************************************
+// Public Functions
+//***************************************************************************
+
+cPlugOsdMenu::cPlugOsdMenu(void) : cSkindesignerOsdMenu("Skindesigner Client") {
+ SetPluginName("skindesclient");
+ SetMenu(10);
+}
+
+cPlugOsdMenu::~cPlugOsdMenu(void) {
+
+}
+
+eOSState cPlugOsdMenu::ProcessKey(eKeys key) {
+ eOSState state = cOsdMenu::ProcessKey(key);
+ switch (key) {
+ case kOk: {
+ int element = Current();
+ if (element%2)
+ SetDetailView(element);
+ else
+ SetMenu(25, true);
+ state = osContinue;
+ break;
+ } case kLeft: {
+ TextKeyLeft();
+ state = osContinue;
+ break;
+ } case kRight: {
+ TextKeyRight();
+ state = osContinue;
+ break;
+ } case kUp: {
+ TextKeyUp();
+ state = osContinue;
+ break;
+ } case kDown: {
+ TextKeyDown();
+ state = osContinue;
+ break;
+ }
+ default:
+ break;
+ }
+ return state;
+}
+
+//***************************************************************************
+// Private Functions
+//***************************************************************************
+
+void cPlugOsdMenu::SetMenu(int numItems, bool subfolder) {
+ eMenus menu = subfolder ? meListSub : meListMain;
+ SetPluginMenu(menu, mtList);
+ Clear();
+
+ for (int i=0; i < numItems; i++) {
+ cSkindesignerOsdItem *item = new cSkindesignerOsdItem();
+ //add some tokens to the menu item
+ stringstream text;
+ if (i%2)
+ text << "DetailItem" << (i+1);
+ else
+ text << "FolderItem" << (i+1);
+ item->SetText(text.str().c_str());
+ item->AddIntToken("itemnumber", i);
+ item->AddStringToken("menuitemtext", text.str().c_str());
+
+ stringstream text2;
+ text2 << "CurrentItemText" << (i+1) << "\n";
+ text2 << "CurrentItemText" << (i+1) << "\n";
+ text2 << "CurrentItemText" << (i+1) << "\n";
+ text2 << "CurrentItemText" << (i+1) << "\n";
+ text2 << "CurrentItemText" << (i+1) << "\n";
+ text2 << "CurrentItemText" << (i+1) << "\n";
+ item->AddStringToken("currentitemtext", text2.str().c_str());
+
+ //Loop Token Example
+ for (int row=0; row<20; row++) {
+ map<string, string> tokens;
+ for (int col=0; col<3; col++) {
+ stringstream key;
+ stringstream value;
+ key << "loop1[" << "col" << col << "]";
+ value << "menuitem" << i << "-" << row << "x" << col;
+ tokens.insert(pair<string,string>(key.str(), value.str()));
+ }
+ item->AddLoopToken("loop1", tokens);
+ }
+ //Add item
+ bool current = (i==0)?true:false;
+ Add(item, current);
+ }
+ SetHelp("Red", "Green", "Yellow", "Blue");
+ Display();
+}
+
+void cPlugOsdMenu::SetDetailView(int element) {
+ SetPluginMenu(meDetail, mtText);
+ Clear();
+ ClearTokens();
+
+ SetText("Text to be displayed if skindesigner templates are not available");
+
+ AddIntToken("menuitem", element);
+ AddStringToken("tabtext", "String Token to be displayed if skindesigner template is available");
+
+ //Loop Token Example
+ for (int row=0; row<25; row++) {
+ map<string, string> tokens;
+ for (int col=0; col<10; col++) {
+ stringstream key;
+ stringstream value;
+ key << "loop1[" << "col" << col << "]";
+ value << "row" << row << "-" << "col" << "-" << col;
+ tokens.insert(pair<string,string>(key.str(), value.str()));
+ }
+ AddLoopToken("loop1", tokens);
+ }
+
+ SetHelp("Red", "Green", "Yellow", "Blue");
+ Display();
+}