diff options
author | svntobi <svntobi@cd0d6b48-d4f9-0310-940f-ab8c4eb44d3f> | 2008-03-23 01:15:27 +0000 |
---|---|---|
committer | svntobi <svntobi@cd0d6b48-d4f9-0310-940f-ab8c4eb44d3f> | 2008-03-23 01:15:27 +0000 |
commit | f369caad4c4848f1c9bd85afbf0593a171f01363 (patch) | |
tree | 096cb782f4d6a6d7694106265bb3f3641b7bb48e /src | |
parent | 3d13d0e55013a7c061c1f65c797bb06f7a141d6f (diff) | |
download | vdr-plugin-menuorg-f369caad4c4848f1c9bd85afbf0593a171f01363.tar.gz vdr-plugin-menuorg-f369caad4c4848f1c9bd85afbf0593a171f01363.tar.bz2 |
- Fixed Enabling/Disabling of CustomMenu
- Fixed Setup Menu
- Adding unconfigured Plug-ins again
git-svn-id: file:///home/tobias/sandbox/vdr/--/vdr-pkg/vdr-pkg/menuorg/trunk@6969 cd0d6b48-d4f9-0310-940f-ab8c4eb44d3f
Diffstat (limited to 'src')
-rw-r--r-- | src/MainMenuItemsProvider.cpp | 12 | ||||
-rw-r--r-- | src/MainMenuItemsProvider.h | 7 | ||||
-rw-r--r-- | src/MenuConfigurationRepository.cpp | 30 | ||||
-rw-r--r-- | src/MenuConfigurationRepository.h | 5 | ||||
-rw-r--r-- | src/MenuOrgPlugin.cpp | 3 | ||||
-rw-r--r-- | src/PluginConfiguration.cpp | 2 | ||||
-rw-r--r-- | src/PluginConfiguration.h | 2 | ||||
-rw-r--r-- | src/PluginSetup.cpp | 2 |
8 files changed, 53 insertions, 10 deletions
diff --git a/src/MainMenuItemsProvider.cpp b/src/MainMenuItemsProvider.cpp index 14462a1..abe922d 100644 --- a/src/MainMenuItemsProvider.cpp +++ b/src/MainMenuItemsProvider.cpp @@ -25,9 +25,10 @@ #include "SubMenuNode.h" #include "MenuConfigurationRepository.h" #include "MenuItemDefinitionFactory.h" +#include "PluginConfiguration.h" -MainMenuItemsProvider::MainMenuItemsProvider(MenuConfigurationRepository& menuConfigurationRepository) - :_menuConfigurationRepository(menuConfigurationRepository) +MainMenuItemsProvider::MainMenuItemsProvider(MenuConfigurationRepository& menuConfigurationRepository, PluginConfiguration& pluginConfiguration) + :_menuConfigurationRepository(menuConfigurationRepository), _pluginConfiguration(pluginConfiguration) { EnterRootMenu(); _previousMenu = NULL; @@ -38,6 +39,11 @@ MainMenuItemsProvider::~MainMenuItemsProvider() ResetMainMenuItemsList(); } +bool MainMenuItemsProvider::IsCustomMenuAvailable() +{ + return _pluginConfiguration.CustomMenuActive(); +} + MenuItemDefinitions* MainMenuItemsProvider::MainMenuItems() { ResetMainMenuItemsList(); @@ -67,7 +73,7 @@ void MainMenuItemsProvider::ResetMainMenuItemsList() void MainMenuItemsProvider::EnterRootMenu() { - _currentMenu = _menuConfigurationRepository.Load(); + _currentMenu = _menuConfigurationRepository.Load(_pluginConfiguration.UnconfiguredPluginsIncluded()); // TODO; Handling of unloadable config file should not be done here } diff --git a/src/MainMenuItemsProvider.h b/src/MainMenuItemsProvider.h index 40cc108..e015c90 100644 --- a/src/MainMenuItemsProvider.h +++ b/src/MainMenuItemsProvider.h @@ -29,6 +29,7 @@ class MenuNode; class MenuConfigurationRepository; +class PluginConfiguration; class MainMenuItemsProvider: public IMainMenuItemsProvider, public IMenuNodeProcessor { @@ -37,12 +38,14 @@ class MainMenuItemsProvider: public IMainMenuItemsProvider, public IMenuNodeProc SubMenuNode* _previousMenu; MenuItemDefinitions _currentMainMenuItems; MenuConfigurationRepository& _menuConfigurationRepository; + PluginConfiguration& _pluginConfiguration; public: - MainMenuItemsProvider(MenuConfigurationRepository& menuConfigurationRepository); + MainMenuItemsProvider(MenuConfigurationRepository& menuConfigurationRepository, PluginConfiguration& pluginConfiguration); ~MainMenuItemsProvider(); - // IMenuNodeProcessor + // IMainMenuItemsProvider + bool IsCustomMenuAvailable(); MenuItemDefinitions* MainMenuItems(); void EnterRootMenu(); void EnterSubMenu(cOsdItem* item); diff --git a/src/MenuConfigurationRepository.cpp b/src/MenuConfigurationRepository.cpp index 9985e4b..e68ffa0 100644 --- a/src/MenuConfigurationRepository.cpp +++ b/src/MenuConfigurationRepository.cpp @@ -33,6 +33,7 @@ #include "PluginMenuNode.h" #include "CommandMenuNode.h" #include "SeparatorMenuNode.h" +#include <vdr/plugin.h> using namespace xmlpp; using namespace std; @@ -70,7 +71,7 @@ MenuConfigurationRepository::~MenuConfigurationRepository() delete _cachedMenuConfiguration; } -SubMenuNode* MenuConfigurationRepository::Load() +SubMenuNode* MenuConfigurationRepository::Load(bool appendUnconfiguredPlugins) { if (ConfigFileHasBeenChange()) { @@ -94,7 +95,13 @@ SubMenuNode* MenuConfigurationRepository::Load() _lastConfigFileModificationTime = CurrentConfigFileModificationTime(); delete _cachedMenuConfiguration; _cachedMenuConfiguration = new SubMenuNode("root"); + _configuredPlugins.clear(); CreateMenuTree(document->get_root_node(), _cachedMenuConfiguration); + + if (appendUnconfiguredPlugins) + { + AppendUnconfiguredPlugins(_cachedMenuConfiguration); + } } } @@ -104,9 +111,15 @@ SubMenuNode* MenuConfigurationRepository::Load() esyslog("Exception caught when parsing xml configuration. See stderr output for details."); } } + return _cachedMenuConfiguration; } +void MenuConfigurationRepository::Reset() +{ + _lastConfigFileModificationTime = 0; +} + bool MenuConfigurationRepository::ConfigFileHasBeenChange() { return (CurrentConfigFileModificationTime() != _lastConfigFileModificationTime); @@ -147,6 +160,7 @@ void MenuConfigurationRepository::CreateMenuTree(const Element* menuRoot, SubMen else if (type == "plugin") { menuNode->AddChild(new PluginMenuNode(name, GetTitle(childElement, ""))); + _configuredPlugins.push_back(name); } else if (type == "command") { @@ -162,6 +176,20 @@ void MenuConfigurationRepository::CreateMenuTree(const Element* menuRoot, SubMen } } +void MenuConfigurationRepository::AppendUnconfiguredPlugins(SubMenuNode* menuNode) +{ + int i = 0; + + while (cPlugin *plugin = cPluginManager::GetPlugin(i)) + { + if (find(_configuredPlugins.begin(), _configuredPlugins.end(), plugin->Name()) == _configuredPlugins.end()) + { + menuNode->AddChild(new PluginMenuNode(plugin->Name(), "")); + } + i++; + } +} + string MenuConfigurationRepository::UnicodeToLocaleOrIso8859(Glib::ustring unicodeString) { try diff --git a/src/MenuConfigurationRepository.h b/src/MenuConfigurationRepository.h index e5ec9b7..f89957f 100644 --- a/src/MenuConfigurationRepository.h +++ b/src/MenuConfigurationRepository.h @@ -39,16 +39,19 @@ class MenuConfigurationRepository std::string _configurationFileName; time_t _lastConfigFileModificationTime; SubMenuNode* _cachedMenuConfiguration; + std::vector<std::string> _configuredPlugins; public: MenuConfigurationRepository(std::string menuFileName); ~MenuConfigurationRepository(); - SubMenuNode* Load(); + SubMenuNode* Load(bool appendUnconfiguredPlugins); + void Reset(); private: bool ConfigFileHasBeenChange(); time_t CurrentConfigFileModificationTime(); void CreateMenuTree(const xmlpp::Element* menuRoot, SubMenuNode* menuNode); + void AppendUnconfiguredPlugins(SubMenuNode* menuNode); std::string UnicodeToLocaleOrIso8859(Glib::ustring unicodeString); std::string GetTitle(const xmlpp::Element* node, std::string defaultValue); std::string GetAttributeValue(const xmlpp::Element* node, std::string name, std::string defaultValue); diff --git a/src/MenuOrgPlugin.cpp b/src/MenuOrgPlugin.cpp index 0a67a1b..11762d3 100644 --- a/src/MenuOrgPlugin.cpp +++ b/src/MenuOrgPlugin.cpp @@ -111,13 +111,14 @@ bool MenuOrgPlugin::Initialize(void) _menuConfigurationRepository = new MenuConfigurationRepository(_configFile); - _subMenuProvider = new MainMenuItemsProvider(*_menuConfigurationRepository); + _subMenuProvider = new MainMenuItemsProvider(*_menuConfigurationRepository, _pluginConfiguration); return true; } cMenuSetupPage *MenuOrgPlugin::SetupMenu(void) { + _menuConfigurationRepository->Reset(); return new PluginSetup(_pluginConfiguration, *_menuConfigurationRepository); } diff --git a/src/PluginConfiguration.cpp b/src/PluginConfiguration.cpp index 5cc0191..99394fa 100644 --- a/src/PluginConfiguration.cpp +++ b/src/PluginConfiguration.cpp @@ -38,7 +38,7 @@ bool PluginConfiguration::CustomMenuActive() return _customMenuActive; } -bool PluginConfiguration::UnconfiguredPluginsInluded() +bool PluginConfiguration::UnconfiguredPluginsIncluded() { return _unconfiguredPluginsIncluded; } diff --git a/src/PluginConfiguration.h b/src/PluginConfiguration.h index fa6bcaf..8af6fd7 100644 --- a/src/PluginConfiguration.h +++ b/src/PluginConfiguration.h @@ -43,7 +43,7 @@ class PluginConfiguration PluginConfiguration(); bool SetConfigurationOptionByName(const char* Name, const char* Value); bool CustomMenuActive(); - bool UnconfiguredPluginsInluded(); + bool UnconfiguredPluginsIncluded(); private: void SetDefaults(); diff --git a/src/PluginSetup.cpp b/src/PluginSetup.cpp index 8042fe0..cffb7b2 100644 --- a/src/PluginSetup.cpp +++ b/src/PluginSetup.cpp @@ -30,6 +30,8 @@ PluginSetup::PluginSetup(PluginConfiguration& pluginConfiguration, MenuConfigurationRepository& menuConfiguration) :_pluginConfiguration(pluginConfiguration), _menuConfiguration(menuConfiguration) { + _newCustomMenuActive = _pluginConfiguration._customMenuActive; + _newUnconfiguredPluginsIncluded = _pluginConfiguration._unconfiguredPluginsIncluded; CreateMenuItems(); } |