diff --git a/src/gui/info_menue.cpp b/src/gui/info_menue.cpp index 75c7032f8..c3df84d17 100644 --- a/src/gui/info_menue.cpp +++ b/src/gui/info_menue.cpp @@ -105,8 +105,7 @@ int CInfoMenu::showMenu() } //add I_TYPE_INFORMATION plugins - CPluginsExec pluginsExec; - info->integratePlugins(&pluginsExec, CPlugins::I_TYPE_INFORMATION, 1); + info->integratePlugins(CPlugins::I_TYPE_INFORMATION, 1); int res = info->exec(NULL, ""); delete info; diff --git a/src/gui/mediaplayer.cpp b/src/gui/mediaplayer.cpp index ad13d4975..f6c89c7ad 100644 --- a/src/gui/mediaplayer.cpp +++ b/src/gui/mediaplayer.cpp @@ -260,9 +260,8 @@ int CMediaPlayerMenu::initMenuMedia(CMenuWidget *m, CPersonalizeGui *p) personalize->addPersonalizedItems(); //add I_TYPE_MULTIMEDIA plugins - CPluginsExec pluginsExec; unsigned int nextShortcut = (unsigned int)media->getNextShortcut(); - media->integratePlugins(&pluginsExec, CPlugins::I_TYPE_MULTIMEDIA, nextShortcut); + media->integratePlugins(CPlugins::I_TYPE_MULTIMEDIA, nextShortcut); res = media->exec(NULL, ""); delete media; diff --git a/src/gui/pluginlist.cpp b/src/gui/pluginlist.cpp index 4e757090c..1e5a09e34 100644 --- a/src/gui/pluginlist.cpp +++ b/src/gui/pluginlist.cpp @@ -137,3 +137,40 @@ int CPluginChooser::run() *selectedFilePtr = g_PluginList->getFileName(number); return menu_return::RETURN_EXIT; } + +CPluginsExec* CPluginsExec::getInstance() +{ + static CPluginsExec* pluginsExec = NULL; + + if (!pluginsExec) + pluginsExec = new CPluginsExec(); + + return pluginsExec; +} + +int CPluginsExec::exec(CMenuTarget* parent, const std::string & actionKey) +{ + if (actionKey.empty()) + return menu_return::RETURN_NONE; + + //printf("CPluginsExec exec: %s\n", actionKey.c_str()); + int sel = atoi(actionKey.c_str()); + + if (parent != NULL) + parent->hide(); + + if (actionKey == "teletext") { + g_RCInput->postMsg(CRCInput::RC_timeout, 0); + g_RCInput->postMsg(CRCInput::RC_text, 0); + } + else if (sel >= 0) + g_PluginList->startPlugin(sel); + + if (!g_PluginList->getScriptOutput().empty()) + ShowMsg(LOCALE_PLUGINS_RESULT, g_PluginList->getScriptOutput(), CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_SHELL); + + if (g_PluginList->getIntegration(sel) == CPlugins::I_TYPE_DISABLED) + return menu_return::RETURN_EXIT; + + return menu_return::RETURN_REPAINT; +} diff --git a/src/gui/pluginlist.h b/src/gui/pluginlist.h index 02a17f0c8..be528d278 100644 --- a/src/gui/pluginlist.h +++ b/src/gui/pluginlist.h @@ -67,4 +67,11 @@ class CPluginChooser : public CPluginList int run (); }; +class CPluginsExec : public CMenuTarget +{ + public: + static CPluginsExec* getInstance(); + int exec(CMenuTarget* parent, const std::string & actionKey); +}; + #endif diff --git a/src/gui/user_menue.cpp b/src/gui/user_menue.cpp index d9263c1cb..44b2cd736 100644 --- a/src/gui/user_menue.cpp +++ b/src/gui/user_menue.cpp @@ -151,7 +151,6 @@ bool CUserMenu::showUserMenu(neutrino_msg_t msg) // define classes CSubChannelSelectMenu subchanselect; - CPluginsExec plugins; CNeutrinoApp * neutrino = CNeutrinoApp::getInstance(); std::string txt = g_settings.usermenu[button]->title; @@ -318,7 +317,7 @@ bool CUserMenu::showUserMenu(neutrino_msg_t msg) neutrino_msg_t d_key = g_PluginList->getKey(count); //printf("[neutrino usermenu] plugin %d, set key %d...\n", count, g_PluginList->getKey(count)); keyhelper.get(&key,&icon, d_key); - menu_item = new CMenuForwarder(g_PluginList->getName(count), true, NULL, &plugins, to_string(count).c_str(), key, icon); + menu_item = new CMenuForwarder(g_PluginList->getName(count), true, NULL, CPluginsExec::getInstance(), to_string(count).c_str(), key, icon); menu_item->setHint(g_PluginList->getHintIcon(count), g_PluginList->getDescription(count)); menu->addItem(menu_item, false); @@ -329,7 +328,7 @@ bool CUserMenu::showUserMenu(neutrino_msg_t msg) } case SNeutrinoSettings::ITEM_VTXT: keyhelper.get(&key,&icon, feat_key[g_settings.personalize[SNeutrinoSettings::P_FEAT_KEY_VTXT]].key); //CRCInput::RC_blue - menu_item = new CMenuForwarder(LOCALE_USERMENU_ITEM_VTXT, true, NULL, &plugins, "teletext", key, icon); + menu_item = new CMenuForwarder(LOCALE_USERMENU_ITEM_VTXT, true, NULL, CPluginsExec::getInstance(), "teletext", key, icon); // FIXME menu_item->setHint("", NONEXISTANT_LOCALE); break; case SNeutrinoSettings::ITEM_IMAGEINFO: @@ -431,7 +430,7 @@ bool CUserMenu::showUserMenu(neutrino_msg_t msg) if (pname && (std::string(pname) == *it) && !g_PluginList->isHidden(count)) { neutrino_msg_t d_key = g_PluginList->getKey(count); keyhelper.get(&key,&icon, d_key); - menu_item = new CMenuForwarder(g_PluginList->getName(count), true, NULL, &plugins, to_string(count).c_str(), key, icon); + menu_item = new CMenuForwarder(g_PluginList->getName(count), true, NULL, CPluginsExec::getInstance(), to_string(count).c_str(), key, icon); menu_item->setHint(g_PluginList->getHintIcon(count), g_PluginList->getDescription(count)); break; } diff --git a/src/gui/widget/menue.cpp b/src/gui/widget/menue.cpp index 69efb9eeb..3a217b93b 100644 --- a/src/gui/widget/menue.cpp +++ b/src/gui/widget/menue.cpp @@ -35,6 +35,7 @@ #include #include +#include #include #include @@ -966,11 +967,9 @@ int CMenuWidget::exec(CMenuTarget* parent, const std::string &) return retval; } -void CMenuWidget::integratePlugins(void *pluginsExec, CPlugins::i_type_t integration, const unsigned int shortcut) +void CMenuWidget::integratePlugins(CPlugins::i_type_t integration, const unsigned int shortcut) { - CPluginsExec *_pluginsExec = static_cast(pluginsExec); bool separatorline = false; - char id_plugin[5]; unsigned int number_of_plugins = (unsigned int) g_PluginList->getNumberOfPlugins(); unsigned int sc = shortcut; for (unsigned int count = 0; count < number_of_plugins; count++) @@ -983,9 +982,8 @@ void CMenuWidget::integratePlugins(void *pluginsExec, CPlugins::i_type_t integra separatorline = true; } printf("[neutrino] integratePlugins: add %s\n", g_PluginList->getName(count)); - sprintf(id_plugin, "%d", count); neutrino_msg_t dk = (shortcut != CRCInput::RC_nokey) ? CRCInput::convertDigitToKey(sc++) : CRCInput::RC_nokey; - CMenuForwarder *fw_plugin = new CMenuForwarder(g_PluginList->getName(count), true, NULL, _pluginsExec, id_plugin, dk); + CMenuForwarder *fw_plugin = new CMenuForwarder(g_PluginList->getName(count), true, NULL, CPluginsExec::getInstance(), to_string(count).c_str(), dk); fw_plugin->setHint(g_PluginList->getHintIcon(count), g_PluginList->getDescription(count)); addItem(fw_plugin); } diff --git a/src/gui/widget/menue.h b/src/gui/widget/menue.h index 2dabedd5e..74fd2051e 100644 --- a/src/gui/widget/menue.h +++ b/src/gui/widget/menue.h @@ -568,7 +568,7 @@ class CMenuWidget : public CMenuTarget virtual void hide(); virtual int exec(CMenuTarget* parent, const std::string & actionKey); virtual const char *getName(); - virtual void integratePlugins(void *pluginsExec, CPlugins::i_type_t integration, const unsigned int shortcut=CRCInput::RC_nokey); + virtual void integratePlugins(CPlugins::i_type_t integration, const unsigned int shortcut=CRCInput::RC_nokey); void setSelected(const int &Preselected){ preselected = Preselected; }; int getSelected()const { return selected; }; void move(int xoff, int yoff); diff --git a/src/neutrino.h b/src/neutrino.h index 70c59772a..e34e22f6d 100644 --- a/src/neutrino.h +++ b/src/neutrino.h @@ -74,7 +74,6 @@ public: private: - CPluginsExec pluginsExec; CFrameBuffer * frameBuffer; CConfigFile configfile; diff --git a/src/neutrino_menue.cpp b/src/neutrino_menue.cpp index 2225c1cc1..87e73620b 100644 --- a/src/neutrino_menue.cpp +++ b/src/neutrino_menue.cpp @@ -129,12 +129,12 @@ void CNeutrinoApp::InitMenu() unsigned int nextShortcut; CMenuWidget &menuSettings = personalize.getWidget(MENU_SETTINGS); nextShortcut = (unsigned int)menuSettings.getNextShortcut(); - menuSettings.integratePlugins(&pluginsExec, CPlugins::I_TYPE_SETTING, nextShortcut); + menuSettings.integratePlugins(CPlugins::I_TYPE_SETTING, nextShortcut); //add I_TYPE_SERVICE plugins CMenuWidget &menuService = personalize.getWidget(MENU_SERVICE); nextShortcut = (unsigned int)menuService.getNextShortcut(); - menuService.integratePlugins(&pluginsExec, CPlugins::I_TYPE_SERVICE, nextShortcut); + menuService.integratePlugins(CPlugins::I_TYPE_SERVICE, nextShortcut); } //init main menu diff --git a/src/system/setting_helpers.cpp b/src/system/setting_helpers.cpp index c25a1157e..216724066 100644 --- a/src/system/setting_helpers.cpp +++ b/src/system/setting_helpers.cpp @@ -367,35 +367,6 @@ int CNVODChangeExec::exec(CMenuTarget* parent, const std::string & actionKey) return menu_return::RETURN_EXIT; } -int CPluginsExec::exec(CMenuTarget* parent, const std::string & actionKey) -{ - if (actionKey.empty()) - return menu_return::RETURN_NONE; - - //printf("CPluginsExec exec: %s\n", actionKey.c_str()); - int sel= atoi(actionKey.c_str()); - - if(parent != NULL) - parent->hide(); - - if(actionKey == "teletext") { - g_RCInput->postMsg(CRCInput::RC_timeout, 0); - g_RCInput->postMsg(CRCInput::RC_text, 0); - } - else if (sel>=0) - { - g_PluginList->startPlugin(sel); - } - - if (!g_PluginList->getScriptOutput().empty()) - ShowMsg(LOCALE_PLUGINS_RESULT, g_PluginList->getScriptOutput(), CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_SHELL); - - if (g_PluginList->getIntegration(sel) == CPlugins::I_TYPE_DISABLED) - return menu_return::RETURN_EXIT; - - return menu_return::RETURN_REPAINT; -} - int CMoviePluginChangeExec::exec(CMenuTarget* parent, const std::string & actionKey) { int sel= atoi(actionKey.c_str()); diff --git a/src/system/setting_helpers.h b/src/system/setting_helpers.h index 678ad84a7..50ea5ef6c 100644 --- a/src/system/setting_helpers.h +++ b/src/system/setting_helpers.h @@ -115,12 +115,6 @@ class CNVODChangeExec : public CMenuTarget int exec(CMenuTarget* parent, const std::string & actionKey); }; -class CPluginsExec : public CMenuTarget -{ - public: - int exec(CMenuTarget* parent, const std::string & actionKey); -}; - class CMoviePluginChangeExec : public CMenuTarget { public: