diff options
Diffstat (limited to 'src/MenuOrgPlugin.cpp')
-rw-r--r-- | src/MenuOrgPlugin.cpp | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/src/MenuOrgPlugin.cpp b/src/MenuOrgPlugin.cpp new file mode 100644 index 0000000..038fe4e --- /dev/null +++ b/src/MenuOrgPlugin.cpp @@ -0,0 +1,158 @@ +/* + * 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$ + * + */ + +#include <vdr/plugin.h> +#include <vdr/config.h> +#include <vdr/tools.h> +#include <vdr/mainmenuitemsprovider.h> +#include <vector> +#include <iostream> +#include <string> +#include <getopt.h> +#include "version.h" +#include "MenuOrgPlugin.h" +#include "FlatMenuSetup.h" +#include "MenuConfigurationRepository.h" +#include "MainMenuItemsProvider.h" +#include "i18n.h" +#include "PluginSetup.h" + +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! + + _subMenuProvider = NULL; +} + +MenuOrgPlugin::~MenuOrgPlugin() +{ + delete _subMenuProvider; + delete _menuConfigurationRepository; +} + +const char* MenuOrgPlugin::Version(void) +{ + return VERSION; +} + +const char* MenuOrgPlugin::Description(void) +{ + return tr("reorganize main menu"); +} + +const char* MenuOrgPlugin::MainMenuEntry(void) +{ + if(_pluginConfiguration.MainMenuEntryHidden()) + return NULL; + else + return tr("Menu-Organizer"); +} + +const char *MenuOrgPlugin::CommandLineHelp(void) +{ + return " -c FILE --config=FILE loads the specified xml file\n" + " (default: ConfigDir/plugins/menuorg.xml)\n"; +} + +bool MenuOrgPlugin::ProcessArgs(int argc, char *argv[]) +{ + static struct option longOptions[] = + { + { "config", required_argument, NULL, 'c'}, + { NULL} + }; + + optind = 0; + opterr = 0; + + int optionChar; + int optionIndex = 0; + while ((optionChar = getopt_long(argc, argv, "c:", longOptions, &optionIndex)) != -1) + { + switch (optionChar) + { + case 'c': + _configFile = optarg; + break; + + default: + cerr << argv[0] << ": " << "invalid option " << argv[optind-1] << endl; + return false; + } + } + return true; +} + +bool MenuOrgPlugin::Initialize(void) +{ + RegisterI18n(Phrases); + + if (_configFile.empty()) + { + _configFile = (string) ConfigDirectory() + "/menuorg.xml"; + } + + _menuConfigurationRepository = new MenuConfigurationRepository(_configFile); + + _subMenuProvider = new MainMenuItemsProvider(*_menuConfigurationRepository); + + return true; +} + +cOsdObject *MenuOrgPlugin::MainMenuAction(void) +{ + return new cMenuOrgSetup(*_menuConfigurationRepository, _pluginConfiguration.MenuSetupStyle()); +} + +cMenuSetupPage *MenuOrgPlugin::SetupMenu(void) +{ + return new PluginSetup(_pluginConfiguration, *_menuConfigurationRepository); +} + +bool MenuOrgPlugin::SetupParse(const char *Name, const char *Value) +{ + return _pluginConfiguration.SetConfigurationOptionByName(Name, Value); +} + +bool MenuOrgPlugin::Service(const char *Id, void *Data) +{ + if (strcmp(Id, MENU_ITEMS_PROVIDER_SERVICE_ID) == 0 && _pluginConfiguration.CustomMenuActive()) + { + if (_subMenuProvider) + { + IMainMenuItemsProvider** ptr = (IMainMenuItemsProvider**)Data; + *ptr = _subMenuProvider; + + return true; + } + else + { + Skins.Message(mtError, tr("Failed to load MenuOrg's config file!")); + } + } + + return false; +} |