diff options
Diffstat (limited to 'scribus/pluginmanager.cpp')
| -rw-r--r-- | scribus/pluginmanager.cpp | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/scribus/pluginmanager.cpp b/scribus/pluginmanager.cpp index 7c04eae..d1666b1 100644 --- a/scribus/pluginmanager.cpp +++ b/scribus/pluginmanager.cpp @@ -25,6 +25,7 @@ for which a new license (GPL+exception) is in place. #include "prefsfile.h" #include "scpaths.h" #include "commonstrings.h" +#include "storyeditor.h" #ifdef HAVE_DLFCN_H #include <dlfcn.h> @@ -354,6 +355,65 @@ bool PluginManager::setupPluginActions(ScribusMainWindow *mw) return true; } +bool PluginManager::setupPluginActions(StoryEditor *sew) +{ + Q_CHECK_PTR(sew); + ScActionPlugin* plugin = 0; + + //sew->seMenuMgr->addMenuSeparator("Extras"); + for (PluginMap::Iterator it = pluginMap.begin(); it != pluginMap.end(); ++it) + { + if (it.value().plugin->inherits("ScActionPlugin")) + { + //Add in ScrAction based plugin linkage + //Insert DLL Action into Dictionary with values from plugin interface + plugin = dynamic_cast<ScActionPlugin*>(it.value().plugin); + assert(plugin); + ScActionPlugin::ActionInfo ai(plugin->actionInfo()); + if (ai.enabledForStoryEditor) + { + ScrAction* action = new ScrAction(ScrAction::ActionDLLSE, ai.icon1, ai.icon2, ai.text, ai.keySequence, sew); + Q_CHECK_PTR(action); + sew->seActions.insert(ai.name, action); + + // then enable and connect up the action + sew->seActions[ai.name]->setEnabled(ai.enabledForStoryEditor); + + // Connect action's activated signal with the plugin's run method + it.value().enabled = connect( sew->seActions[ai.name], SIGNAL(triggeredData(QWidget*, ScribusDoc*)), + plugin, SLOT(run(QWidget*, ScribusDoc*)) ); + //Get the menu manager to add the DLL's menu item to the right menu, after the chosen existing item + if ( ai.menuAfterName.isEmpty() ) + { + if (!ai.seMenu.isEmpty()) + { + if ((!ai.subMenuName.isEmpty()) && (!ai.parentMenu.isEmpty())) + { + if (!sew->seMenuMgr->menuExists(ai.seMenu)) + sew->seMenuMgr->createMenu(ai.seMenu, ai.subMenuName, ai.parentMenu); + } + sew->seMenuMgr->addMenuItem(sew->seActions[ai.name], ai.seMenu); + } + } + else + { + QString actionName(ai.seMenu.toLower()+ai.menuAfterName); + ScrAction* afterAction=0; + if (sew->seActions.contains(actionName)) + afterAction=sew->seActions[actionName]; + if ((!ai.subMenuName.isEmpty()) && (!ai.parentMenu.isEmpty())) + { + if (!sew->seMenuMgr->menuExists(ai.seMenu)) + sew->seMenuMgr->createMenu(ai.seMenu, ai.subMenuName, ai.parentMenu); + } + sew->seMenuMgr->addMenuItemAfter(sew->seActions[ai.name], ai.seMenu, afterAction); + } + } + } + } + return true; +} + void PluginManager::enableOnlyStartupPluginActions(ScribusMainWindow* mw) { Q_CHECK_PTR(mw); |
