diff options
Diffstat (limited to 'skindesigner.c')
-rw-r--r-- | skindesigner.c | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/skindesigner.c b/skindesigner.c index e6955f6..ed7e181 100644 --- a/skindesigner.c +++ b/skindesigner.c @@ -12,14 +12,14 @@ #include "config.h" #include "designer.h" #include "setup.h" - +#include "services.h" #if defined(APIVERSNUM) && APIVERSNUM < 20000 #error "VDR-2.0.0 API version or greater is required!" #endif -static const char *VERSION = "0.0.4dev"; +static const char *VERSION = "0.0.5"; static const char *DESCRIPTION = "SkinDesigner"; static const char *MAINMENUENTRY = "Skin Designer"; @@ -152,6 +152,34 @@ bool cPluginSkinDesigner::SetupParse(const char *Name, const char *Value) { } bool cPluginSkinDesigner::Service(const char *Id, void *Data) { + if (Data == NULL) + return false; + + if (strcmp(Id, "RegisterPlugin") == 0) { + RegisterPlugin* call = (RegisterPlugin*) Data; + if (call->menus.size() < 1) { + esyslog("skindesigner: error - plugin without menus registered"); + return false; + } + config.AddPlugin(call->name, call->menus); + dsyslog("skindesigner: plugin %s has registered %d templates", call->name.c_str(), call->menus.size()); + return true; + } else if (strcmp(Id, "GetDisplayMenu") == 0) { + GetDisplayMenu* call = (GetDisplayMenu*) Data; + cSkin *current = Skins.Current(); + for (vector<cSkinDesigner*>::iterator skin = skins.begin(); skin != skins.end(); skin++) { + if (*skin == current) { + cSDDisplayMenu *displayMenu = (*skin)->GetDisplayMenu(); + if (displayMenu) { + call->displayMenu = displayMenu; + return true; + } else + return false; + } + } + return false; + } + return false; } |