summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsvntobi <svntobi@cd0d6b48-d4f9-0310-940f-ab8c4eb44d3f>2008-03-23 01:15:27 +0000
committersvntobi <svntobi@cd0d6b48-d4f9-0310-940f-ab8c4eb44d3f>2008-03-23 01:15:27 +0000
commitf369caad4c4848f1c9bd85afbf0593a171f01363 (patch)
tree096cb782f4d6a6d7694106265bb3f3641b7bb48e /src
parent3d13d0e55013a7c061c1f65c797bb06f7a141d6f (diff)
downloadvdr-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.cpp12
-rw-r--r--src/MainMenuItemsProvider.h7
-rw-r--r--src/MenuConfigurationRepository.cpp30
-rw-r--r--src/MenuConfigurationRepository.h5
-rw-r--r--src/MenuOrgPlugin.cpp3
-rw-r--r--src/PluginConfiguration.cpp2
-rw-r--r--src/PluginConfiguration.h2
-rw-r--r--src/PluginSetup.cpp2
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();
}