Also refactor provider context menu actions and remove from AlgorithmProvider

This commit is contained in:
Nyall Dawson 2017-04-04 12:52:21 +10:00
parent 651355d569
commit 42a614154c
8 changed files with 41 additions and 14 deletions

View File

@ -38,7 +38,8 @@ from processing.gui.DeleteScriptAction import DeleteScriptAction
from processing.gui.CreateNewScriptAction import CreateNewScriptAction
from processing.script.WrongScriptException import WrongScriptException
from processing.gui.GetScriptsAndModels import GetRScriptsAction
from processing.gui.ProviderActions import ProviderActions
from processing.gui.ProviderActions import (ProviderActions,
ProviderContextMenuActions)
from processing.tools.system import isWindows
from .RUtils import RUtils
@ -82,6 +83,7 @@ class RAlgorithmProvider(AlgorithmProvider):
self.name(),
RUtils.R_USE64, self.tr('Use 64 bit version'), False))
ProviderActions.registerProviderActions(self, self.actions)
ProviderContextMenuActions.registerProviderContextMenuActions(self.contextMenuActions)
return True
def unload(self):
@ -92,6 +94,7 @@ class RAlgorithmProvider(AlgorithmProvider):
ProcessingConfig.removeSetting(RUtils.R_LIBS_USER)
ProcessingConfig.removeSetting(RUtils.R_USE64)
ProviderActions.deregisterProviderActions(self)
ProviderContextMenuActions.deregisterProviderContextMenuActions(self.contextMenuActions)
def isActive(self):
return ProcessingConfig.getSetting('ACTIVATE_R')

View File

@ -39,4 +39,3 @@ class AlgorithmProvider(QgsProcessingProvider):
def __init__(self):
super().__init__()
self.contextMenuActions = []

View File

@ -66,9 +66,6 @@ PROVIDERS = []
class Processing(object):
# All the registered context menu actions for the toolbox
contextMenuActions = []
@staticmethod
def addProvider(provider):
"""Use this method to add algorithms from external providers.
@ -79,7 +76,6 @@ class Processing(object):
if provider.load():
ProcessingConfig.readSettings()
provider.refreshAlgorithms()
Processing.contextMenuActions.extend(provider.contextMenuActions)
QgsApplication.processingRegistry().addProvider(provider)
PROVIDERS.append(provider)
except:
@ -99,8 +95,6 @@ class Processing(object):
contributes a provider.
"""
provider.unload()
for act in provider.contextMenuActions:
Processing.contextMenuActions.remove(act)
QgsApplication.processingRegistry().removeProvider(provider.id())
@staticmethod

View File

@ -47,7 +47,8 @@ from processing.gui.EditRenderingStylesDialog import EditRenderingStylesDialog
from processing.gui.ConfigDialog import ConfigDialog
from processing.gui.MessageBarProgress import MessageBarProgress
from processing.gui.AlgorithmExecutor import execute
from processing.gui.ProviderActions import ProviderActions
from processing.gui.ProviderActions import (ProviderActions,
ProviderContextMenuActions)
pluginPath = os.path.split(os.path.dirname(__file__))[0]
WIDGET, BASE = uic.loadUiType(
@ -216,7 +217,7 @@ class ProcessingToolbox(BASE, WIDGET):
if isinstance(item, (TreeAlgorithmItem, TreeActionItem)):
data = item.alg if isinstance(item, TreeAlgorithmItem) else item.action
actions = Processing.contextMenuActions
actions = ProviderContextMenuActions.actions
if len(actions) > 0:
popupmenu.addSeparator()
for action in actions:

View File

@ -27,11 +27,28 @@ class ProviderActions(object):
@staticmethod
def registerProviderActions(provider, actions):
""" Adds menu actions for a provider """
""" Adds actions for a provider """
ProviderActions.actions[provider.id()] = actions
@staticmethod
def deregisterProviderActions(provider):
""" Removes menu actions for a provider """
""" Removes actions for a provider """
if provider.id() in ProviderActions.actions:
del ProviderActions.actions[provider.id()]
class ProviderContextMenuActions(object):
# All the registered context menu actions for the toolbox
actions = []
@staticmethod
def registerProviderContextMenuActions(actions):
""" Adds context menu actions for a provider """
ProviderContextMenuActions.actions.extend(actions)
@staticmethod
def deregisterProviderContextMenuActions(actions):
""" Removes context menu actions for a provider """
for act in actions:
ProviderContextMenuActions.actions.remove(act)

View File

@ -40,7 +40,8 @@ from processing.modeler.CreateNewModelAction import CreateNewModelAction
from processing.modeler.DeleteModelAction import DeleteModelAction
from processing.modeler.AddModelFromFileAction import AddModelFromFileAction
from processing.gui.GetScriptsAndModels import GetModelsAction
from processing.gui.ProviderActions import ProviderActions
from processing.gui.ProviderActions import (ProviderActions,
ProviderContextMenuActions)
pluginPath = os.path.split(os.path.dirname(__file__))[0]
@ -59,10 +60,12 @@ class ModelerAlgorithmProvider(AlgorithmProvider):
ModelerUtils.MODELS_FOLDER, self.tr('Models folder', 'ModelerAlgorithmProvider'),
ModelerUtils.defaultModelsFolder(), valuetype=Setting.MULTIPLE_FOLDERS))
ProviderActions.registerProviderActions(self, self.actions)
ProviderContextMenuActions.registerProviderContextMenuActions(self.contextMenuActions)
return True
def unload(self):
ProviderActions.deregisterProviderActions(self)
ProviderContextMenuActions.deregisterProviderContextMenuActions(self.contextMenuActions)
def modelsFolder(self):
return ModelerUtils.modelsFolders()[0]

View File

@ -32,6 +32,7 @@ from processing.preconfigured.PreconfiguredUtils import preconfiguredAlgorithmsF
from processing.core.AlgorithmProvider import AlgorithmProvider
from processing.preconfigured.NewPreconfiguredAlgorithmAction import NewPreconfiguredAlgorithmAction
from processing.preconfigured.DeletePreconfiguredAlgorithmAction import DeletePreconfiguredAlgorithmAction
from processing.gui.ProviderActions import ProviderContextMenuActions
class PreconfiguredAlgorithmProvider(AlgorithmProvider):
@ -54,6 +55,12 @@ class PreconfiguredAlgorithmProvider(AlgorithmProvider):
for a in self.algs:
self.addAlgorithm(a)
def load(self):
ProviderContextMenuActions.registerProviderContextMenuActions(self.contextMenuActions)
def unload(self):
ProviderContextMenuActions.deregisterProviderContextMenuActions(self.contextMenuActions)
def id(self):
return 'preconfigured'

View File

@ -37,7 +37,8 @@ from processing.gui.CreateNewScriptAction import CreateNewScriptAction
from processing.script.ScriptUtils import ScriptUtils
from processing.script.AddScriptFromFileAction import AddScriptFromFileAction
from processing.gui.GetScriptsAndModels import GetScriptsAction
from processing.gui.ProviderActions import ProviderActions
from processing.gui.ProviderActions import (ProviderActions,
ProviderContextMenuActions)
from processing.script.CreateScriptCollectionPluginAction import CreateScriptCollectionPluginAction
pluginPath = os.path.split(os.path.dirname(__file__))[0]
@ -65,11 +66,13 @@ class ScriptAlgorithmProvider(AlgorithmProvider):
self.tr('Scripts folder', 'ScriptAlgorithmProvider'),
ScriptUtils.defaultScriptsFolder(), valuetype=Setting.MULTIPLE_FOLDERS))
ProviderActions.registerProviderActions(self, self.actions)
ProviderContextMenuActions.registerProviderContextMenuActions(self.contextMenuActions)
return True
def unload(self):
ProcessingConfig.addSetting(ScriptUtils.SCRIPTS_FOLDER)
ProviderActions.deregisterProviderActions(self)
ProviderContextMenuActions.deregisterProviderContextMenuActions(self.contextMenuActions)
def icon(self):
return QgsApplication.getThemeIcon("/processingScript.svg")