diff options
-rw-r--r-- | sources.mk | 1 | ||||
-rw-r--r-- | src/menuconfiguration.cpp | 2 | ||||
-rw-r--r-- | src/menuconfiguration.h | 4 | ||||
-rw-r--r-- | src/menuorg.cpp | 54 | ||||
-rw-r--r-- | src/menuorg.h | 8 | ||||
-rw-r--r-- | src/pluginconfiguration.cpp | 87 | ||||
-rw-r--r-- | src/pluginconfiguration.h | 58 | ||||
-rw-r--r-- | src/pluginsetup.cpp | 24 | ||||
-rw-r--r-- | src/pluginsetup.h | 19 |
9 files changed, 178 insertions, 79 deletions
@@ -6,6 +6,7 @@ SRCS = \ src/menunode.cpp \ src/menuorg.cpp \ src/osditemdefinition.cpp \ + src/pluginconfiguration.cpp \ src/plugincreator.cpp \ src/pluginitemdefinition.cpp \ src/pluginmenunode.cpp \ diff --git a/src/menuconfiguration.cpp b/src/menuconfiguration.cpp index a51f3ce..e426f16 100644 --- a/src/menuconfiguration.cpp +++ b/src/menuconfiguration.cpp @@ -51,7 +51,7 @@ const string MenuConfiguration::_dtd = " execute CDATA #REQUIRED\n" " confirm (yes|no) #IMPLIED>"; -MenuConfiguration::MenuConfiguration(string menuFileName, bool* unconfiguredPluginsShouldBeIncluded) +MenuConfiguration::MenuConfiguration(string menuFileName, bool unconfiguredPluginsShouldBeIncluded) { _configuration = NULL; _unconfiguredPluginsShouldBeIncluded = unconfiguredPluginsShouldBeIncluded; diff --git a/src/menuconfiguration.h b/src/menuconfiguration.h index d9aa8a8..6ae377b 100644 --- a/src/menuconfiguration.h +++ b/src/menuconfiguration.h @@ -37,13 +37,13 @@ class MenuConfiguration { private: static const std::string _dtd; - bool* _unconfiguredPluginsShouldBeIncluded; + bool _unconfiguredPluginsShouldBeIncluded; std::vector<std::string> _configuredPlugins; xmlpp::Element* _configuration; xmlpp::DomParser _parser; public: - MenuConfiguration(std::string menuFileName, bool* unconfiguredPluginsShouldBeIncluded); + MenuConfiguration(std::string menuFileName, bool unconfiguredPluginsShouldBeIncluded); MenuNode* MenuTree(); xmlpp::Element* Configuration(); diff --git a/src/menuorg.cpp b/src/menuorg.cpp index 3e90024..7d6e547 100644 --- a/src/menuorg.cpp +++ b/src/menuorg.cpp @@ -40,15 +40,12 @@ using namespace std; MenuOrgPlugin::MenuOrgPlugin(void) { - // Initialize any member variables here. - // DON'T DO ANYTHING ELSE THAT MAY HAVE SIDE EFFECTS, REQUIRE GLOBAL - // VDR OBJECTS TO EXIST OR PRODUCE ANY OUTPUT! - _customMenuShouldBeActive = true; - _unconfiguredPluginsShouldBeIncluded = true; - _hideMainMenuEntry = true; - _flatMenuSetup = false; + // Initialize any member variables here. + // DON'T DO ANYTHING ELSE THAT MAY HAVE SIDE EFFECTS, REQUIRE GLOBAL + // VDR OBJECTS TO EXIST OR PRODUCE ANY OUTPUT! + _subMenuProvider = NULL; - _menuConfiguration = NULL; + _configFile = (string) ConfigDirectory() + "/menuorg.xml"; } MenuOrgPlugin::~MenuOrgPlugin() @@ -64,12 +61,12 @@ const char* MenuOrgPlugin::Version(void) const char* MenuOrgPlugin::Description(void) { - return tr("organize your Mainmenu"); + return tr("reorganize main menu"); } const char* MenuOrgPlugin::MainMenuEntry(void) { - if(_hideMainMenuEntry) + if(_pluginConfiguration.MainMenuEntryHidden()) return NULL; else return tr("Menu-Organizer"); @@ -99,7 +96,7 @@ bool MenuOrgPlugin::ProcessArgs(int argc, char *argv[]) switch (optionChar) { case 'c': - configFile = optarg; + _configFile = optarg; break; default: @@ -112,10 +109,7 @@ bool MenuOrgPlugin::ProcessArgs(int argc, char *argv[]) bool MenuOrgPlugin::Initialize(void) { - if(configFile.empty()) - configFile = (string) ConfigDirectory() + "/menuorg.xml"; - - _menuConfiguration = new MenuConfiguration(configFile, &_unconfiguredPluginsShouldBeIncluded); + _menuConfiguration = new MenuConfiguration(_configFile, _pluginConfiguration.UnconfiguredPluginsInluded()); // TODO need handling of unloadable config File here!!! _subMenuProvider = new MainMenuItemsProvider(*_menuConfiguration); @@ -127,43 +121,22 @@ bool MenuOrgPlugin::Initialize(void) cOsdObject *MenuOrgPlugin::MainMenuAction(void) { - // Perform the action when selected from the main VDR menu. - return new cMenuOrgSetup(*_menuConfiguration, _flatMenuSetup); + return new cMenuOrgSetup(*_menuConfiguration, _pluginConfiguration.MenuSetupStyle()); } cMenuSetupPage *MenuOrgPlugin::SetupMenu(void) { - // Return a setup menu in case the plugin supports one. - return new PluginSetup(_customMenuShouldBeActive, _unconfiguredPluginsShouldBeIncluded, _hideMainMenuEntry, _flatMenuSetup, *_menuConfiguration); + return new PluginSetup(_pluginConfiguration, *_menuConfiguration); } bool MenuOrgPlugin::SetupParse(const char *Name, const char *Value) { - if (!strcasecmp(Name, PluginSetup::SetupName::CustomMenuActive)) - { - _customMenuShouldBeActive = (atoi(Value) != 0); - } - else if(!strcasecmp(Name, PluginSetup::SetupName::UnconfiguredPluginsIncluded)) - { - _unconfiguredPluginsShouldBeIncluded = (atoi(Value) != 0); - } - else if(!strcasecmp(Name, PluginSetup::SetupName::HideMainMenuEntry)) - { - _hideMainMenuEntry = (atoi(Value) != 0); - } - else if(!strcasecmp(Name, PluginSetup::SetupName::MenuSetupStyle)) - { - _flatMenuSetup = (atoi(Value) != 0); - } - else - return false; - - return true; + return _pluginConfiguration.SetConfigurationOptionByName(Name, Value); } bool MenuOrgPlugin::Service(const char *Id, void *Data) { - if (strcmp(Id, MENU_ITEMS_PROVIDER_SERVICE_ID) == 0 && _customMenuShouldBeActive) + if (strcmp(Id, MENU_ITEMS_PROVIDER_SERVICE_ID) == 0 && _pluginConfiguration.CustomMenuActive()) { if (_subMenuProvider) { @@ -174,6 +147,7 @@ bool MenuOrgPlugin::Service(const char *Id, void *Data) } else { + // TODO; Handling of unloadable config file should not be done here Skins.Message(mtError, tr("Failed to load MenuOrg's config file!")); } } diff --git a/src/menuorg.h b/src/menuorg.h index 7b9dece..3ce939d 100644 --- a/src/menuorg.h +++ b/src/menuorg.h @@ -25,6 +25,7 @@ #include <vdr/plugin.h> #include <string> +#include "pluginconfiguration.h" class MainMenuItemsProvider; class MenuConfiguration; @@ -33,11 +34,8 @@ class MenuOrgPlugin : public cPlugin { private: MainMenuItemsProvider* _subMenuProvider; - std::string configFile; - bool _customMenuShouldBeActive; - bool _unconfiguredPluginsShouldBeIncluded; - bool _hideMainMenuEntry; - bool _flatMenuSetup; + std::string _configFile; + PluginConfiguration _pluginConfiguration; MenuConfiguration* _menuConfiguration; public: diff --git a/src/pluginconfiguration.cpp b/src/pluginconfiguration.cpp new file mode 100644 index 0000000..681d010 --- /dev/null +++ b/src/pluginconfiguration.cpp @@ -0,0 +1,87 @@ +/* + * vdr-menuorg - A plugin for the Linux Video Disk Recorder + * Copyright (C) 2007 Thomas Creutz, Tobias Grimm + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * $Id: pluginsetup.h 6098 2007-08-28 12:20:45Z svntcreutz $ + * + */ + +#include "pluginconfiguration.h" +#include <stdlib.h> +#include <strings.h> + +const char* PluginConfiguration::SetupName::CustomMenuActive = "customMenuActive"; +const char* PluginConfiguration::SetupName::UnconfiguredPluginsIncluded = "unconfiguredPluginsIncluded"; +const char* PluginConfiguration::SetupName::HideMainMenuEntry = "hideMainMenuEntry"; +const char* PluginConfiguration::SetupName::MenuSetupStyle = "menuSetupStyle"; + +PluginConfiguration::PluginConfiguration() +{ + SetDefaults(); +} + +bool PluginConfiguration::CustomMenuActive() +{ + return _customMenuActive; +} + +bool PluginConfiguration::UnconfiguredPluginsInluded() +{ + return _unconfiguredPluginsIncluded; +} + +bool PluginConfiguration::MainMenuEntryHidden() +{ + return _hideMainMenuEntry; +} + +int PluginConfiguration::MenuSetupStyle() +{ + return _menuSetupStyle; +} + +void PluginConfiguration::SetDefaults() +{ + _customMenuActive = true; + _hideMainMenuEntry = true; + _menuSetupStyle = 0; + _unconfiguredPluginsIncluded = true; +} + +bool PluginConfiguration::SetConfigurationOptionByName(const char* Name, const char* Value) +{ + if (!strcasecmp(Name, SetupName::CustomMenuActive)) + { + _customMenuActive = (atoi(Value) != 0); + } + else if(!strcasecmp(Name, SetupName::UnconfiguredPluginsIncluded)) + { + _unconfiguredPluginsIncluded = (atoi(Value) != 0); + } + else if(!strcasecmp(Name, SetupName::HideMainMenuEntry)) + { + _hideMainMenuEntry = (atoi(Value) != 0); + } + else if(!strcasecmp(Name, SetupName::MenuSetupStyle)) + { + _menuSetupStyle = (atoi(Value) != 0); + } + else + return false; + + return true; +} diff --git a/src/pluginconfiguration.h b/src/pluginconfiguration.h new file mode 100644 index 0000000..56aa93f --- /dev/null +++ b/src/pluginconfiguration.h @@ -0,0 +1,58 @@ +/* + * vdr-menuorg - A plugin for the Linux Video Disk Recorder + * Copyright (C) 2007 Thomas Creutz, Tobias Grimm + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * $Id$ + * + */ + +#ifndef ___PLUGINCONFIGURATION_H_ +#define ___PLUGINCONFIGURATION_H_ + +class PluginConfiguration +{ + friend class PluginSetup; + + private: + struct SetupName + { + static const char* CustomMenuActive; + static const char* UnconfiguredPluginsIncluded; + static const char* HideMainMenuEntry; + static const char* MenuSetupStyle; + }; + + private: + bool _customMenuActive; + bool _unconfiguredPluginsIncluded; + bool _hideMainMenuEntry; + int _menuSetupStyle; + + public: + PluginConfiguration(); + bool SetConfigurationOptionByName(const char* Name, const char* Value); + bool CustomMenuActive(); + bool UnconfiguredPluginsInluded(); + bool MainMenuEntryHidden(); + int MenuSetupStyle(); + + private: + void SetDefaults(); +}; + +#endif + diff --git a/src/pluginsetup.cpp b/src/pluginsetup.cpp index 96477aa..ed676f0 100644 --- a/src/pluginsetup.cpp +++ b/src/pluginsetup.cpp @@ -26,28 +26,18 @@ #include "pluginsetup.h" #include "menusetup.h" -const char* PluginSetup::SetupName::CustomMenuActive = "customMenuActive"; -const char* PluginSetup::SetupName::UnconfiguredPluginsIncluded = "unconfiguredPluginsIncluded"; -const char* PluginSetup::SetupName::HideMainMenuEntry = "hideMainMenuEntry"; -const char* PluginSetup::SetupName::MenuSetupStyle = "menuSetupStyle"; - -PluginSetup::PluginSetup(bool& customMenuActive, bool& unconfiguredPluginsIncluded, bool& hideMainMenuEntry, bool& menuSetupStyle, MenuConfiguration& menuConfiguration) - :_customMenuActive(customMenuActive), _unconfiguredPluginsIncluded(unconfiguredPluginsIncluded), _hideMainMenuEntry(hideMainMenuEntry), _menuSetupStyle(menuSetupStyle), - _menuConfiguration(menuConfiguration) +PluginSetup::PluginSetup(PluginConfiguration& pluginConfiguration, MenuConfiguration& menuConfiguration) + :_pluginConfiguration(pluginConfiguration), _menuConfiguration(menuConfiguration) { - _newCustomMenuActive = _customMenuActive; - _newUnconfiguredPluginsIncluded = _unconfiguredPluginsIncluded; - _newHideMainMenuEntry = _hideMainMenuEntry; - _newMenuSetupStyle = _menuSetupStyle; CreateMenuItems(); } void PluginSetup::Store(void) { - SetupStore(SetupName::CustomMenuActive, _customMenuActive = _newCustomMenuActive); - SetupStore(SetupName::UnconfiguredPluginsIncluded, _unconfiguredPluginsIncluded = _newUnconfiguredPluginsIncluded); - SetupStore(SetupName::HideMainMenuEntry, _hideMainMenuEntry = _newHideMainMenuEntry); - SetupStore(SetupName::MenuSetupStyle, _menuSetupStyle = _newMenuSetupStyle); + SetupStore(PluginConfiguration::SetupName::CustomMenuActive, _pluginConfiguration._customMenuActive = _newCustomMenuActive); + SetupStore(PluginConfiguration::SetupName::UnconfiguredPluginsIncluded, _pluginConfiguration._unconfiguredPluginsIncluded = _newUnconfiguredPluginsIncluded); + SetupStore(PluginConfiguration::SetupName::HideMainMenuEntry, _pluginConfiguration._hideMainMenuEntry = _newHideMainMenuEntry); + SetupStore(PluginConfiguration::SetupName::MenuSetupStyle, _pluginConfiguration._menuSetupStyle = _newMenuSetupStyle); } eOSState PluginSetup::ProcessKey(eKeys Key) @@ -61,7 +51,7 @@ eOSState PluginSetup::ProcessKey(eKeys Key) switch(state) { case osUser1: - return AddSubMenu(new cMenuOrgSetup(_menuConfiguration, _menuSetupStyle)); + return AddSubMenu(new cMenuOrgSetup(_menuConfiguration, _pluginConfiguration._menuSetupStyle)); break; case osContinue: diff --git a/src/pluginsetup.h b/src/pluginsetup.h index fc2f578..99ff705 100644 --- a/src/pluginsetup.h +++ b/src/pluginsetup.h @@ -25,6 +25,9 @@ #include <vdr/menu.h> +class PluginConfiguration; +class MenuConfiguration; + class PluginSetup : public cMenuSetupPage { private: @@ -32,23 +35,11 @@ class PluginSetup : public cMenuSetupPage int _newUnconfiguredPluginsIncluded; int _newHideMainMenuEntry; int _newMenuSetupStyle; - bool& _customMenuActive; - bool& _unconfiguredPluginsIncluded; - bool& _hideMainMenuEntry; - bool& _menuSetupStyle; + PluginConfiguration& _pluginConfiguration; MenuConfiguration& _menuConfiguration; public: - struct SetupName - { - static const char* CustomMenuActive; - static const char* UnconfiguredPluginsIncluded; - static const char* HideMainMenuEntry; - static const char* MenuSetupStyle; - }; - - public: - PluginSetup(bool& customMenuActive, bool& unconfiguredPluginsIncluded, bool& hideMainMenuEntry, bool& menuSetupStyle, MenuConfiguration& menuConfiguration); + PluginSetup(PluginConfiguration& pluginConfiguration, MenuConfiguration& menuConfiguration); virtual eOSState ProcessKey(eKeys Key); protected: |