diff --git a/python/plugins/processing/algs/qgis/QGISAlgorithmProvider.py b/python/plugins/processing/algs/qgis/QGISAlgorithmProvider.py index 4dd57814230..450607dbd01 100644 --- a/python/plugins/processing/algs/qgis/QGISAlgorithmProvider.py +++ b/python/plugins/processing/algs/qgis/QGISAlgorithmProvider.py @@ -16,6 +16,8 @@ * * *************************************************************************** """ +from processing.script.ScriptUtils import ScriptUtils +import os __author__ = 'Victor Olaya' @@ -114,6 +116,8 @@ import processing.resources_rc class QGISAlgorithmProvider(AlgorithmProvider): + _icon = QIcon(':/processing/images/qgis.png') + def __init__(self): AlgorithmProvider.__init__(self) self.alglist = [SumLines(), PointsInPolygon(), @@ -166,6 +170,13 @@ class QGISAlgorithmProvider(AlgorithmProvider): # RasterLayerHistogram(), MeanAndStdDevPlot(), # BarPlot(), PolarPlot() ] + + folder = os.path.join(os.path.dirname(__file__), 'scripts') + scripts = ScriptUtils.loadFromFolder(folder) + for script in scripts: + script._icon = self._icon + script.allowEdit = False + self.alglist.extend(scripts) def initializeSettings(self): AlgorithmProvider.initializeSettings(self) @@ -180,7 +191,7 @@ class QGISAlgorithmProvider(AlgorithmProvider): return 'QGIS geoalgorithms' def getIcon(self): - return QIcon(':/processing/images/qgis.png') + return self._icon def _loadAlgorithms(self): self.algs = self.alglist diff --git a/python/plugins/processing/gui/DeleteScriptAction.py b/python/plugins/processing/gui/DeleteScriptAction.py index a2ddab05e48..e5c3b040d42 100644 --- a/python/plugins/processing/gui/DeleteScriptAction.py +++ b/python/plugins/processing/gui/DeleteScriptAction.py @@ -46,7 +46,7 @@ class DeleteScriptAction(ContextAction): def isEnabled(self): if self.scriptType == self.SCRIPT_PYTHON: - return isinstance(self.alg, ScriptAlgorithm) + return isinstance(self.alg, ScriptAlgorithm) and self.alg.allowEdit elif self.scriptType == self.SCRIPT_R: return isinstance(self.alg, RAlgorithm) diff --git a/python/plugins/processing/gui/EditScriptAction.py b/python/plugins/processing/gui/EditScriptAction.py index d673c415444..84d50dff756 100644 --- a/python/plugins/processing/gui/EditScriptAction.py +++ b/python/plugins/processing/gui/EditScriptAction.py @@ -42,7 +42,7 @@ class EditScriptAction(ContextAction): def isEnabled(self): if self.scriptType == ScriptEditorDialog.SCRIPT_PYTHON: - return isinstance(self.alg, ScriptAlgorithm) + return isinstance(self.alg, ScriptAlgorithm) and self.alg.allowEdit elif self.scriptType == ScriptEditorDialog.SCRIPT_R: return isinstance(self.alg, RAlgorithm) diff --git a/python/plugins/processing/script/ScriptAlgorithm.py b/python/plugins/processing/script/ScriptAlgorithm.py index 7bec190d0d5..1fab1e551a0 100644 --- a/python/plugins/processing/script/ScriptAlgorithm.py +++ b/python/plugins/processing/script/ScriptAlgorithm.py @@ -55,6 +55,8 @@ from processing.script.WrongScriptException import WrongScriptException class ScriptAlgorithm(GeoAlgorithm): + _icon = QtGui.QIcon(os.path.dirname(__file__) + '/../images/script.png') + def __init__(self, descriptionFile, script=None): """The script parameter can be used to directly pass the code of the script without a file. @@ -65,6 +67,7 @@ class ScriptAlgorithm(GeoAlgorithm): GeoAlgorithm.__init__(self) self.script = script + self.allowEdit = True self.descriptionFile = descriptionFile if script is not None: self.defineCharacteristicsFromScript() @@ -77,7 +80,7 @@ class ScriptAlgorithm(GeoAlgorithm): return newone def getIcon(self): - return QtGui.QIcon(os.path.dirname(__file__) + '/../images/script.png') + return self._icon def defineCharacteristicsFromFile(self): self.script = '' diff --git a/python/plugins/processing/script/ScriptAlgorithmProvider.py b/python/plugins/processing/script/ScriptAlgorithmProvider.py index 174769c6dc5..a26ca494e7b 100644 --- a/python/plugins/processing/script/ScriptAlgorithmProvider.py +++ b/python/plugins/processing/script/ScriptAlgorithmProvider.py @@ -25,25 +25,21 @@ __copyright__ = '(C) 2012, Victor Olaya' __revision__ = '$Format:%H$' -import os.path from PyQt4.QtCore import * from PyQt4.QtGui import * from processing.core.ProcessingConfig import ProcessingConfig, Setting -from processing.core.ProcessingLog import ProcessingLog from processing.core.AlgorithmProvider import AlgorithmProvider from processing.gui.EditScriptAction import EditScriptAction from processing.gui.DeleteScriptAction import DeleteScriptAction from processing.gui.CreateNewScriptAction import CreateNewScriptAction -from processing.script.ScriptAlgorithm import ScriptAlgorithm from processing.script.ScriptUtils import ScriptUtils -from processing.script.WrongScriptException import WrongScriptException from processing.script.AddScriptFromFileAction import AddScriptFromFileAction from processing.gui.GetScriptsAndModels import GetScriptsAction import processing.resources_rc class ScriptAlgorithmProvider(AlgorithmProvider): - + def __init__(self): AlgorithmProvider.__init__(self) self.actions.extend([CreateNewScriptAction('Create new script', @@ -76,24 +72,6 @@ class ScriptAlgorithmProvider(AlgorithmProvider): def _loadAlgorithms(self): folder = ScriptUtils.scriptsFolder() - self.loadFromFolder(folder) - folder = os.path.join(os.path.dirname(__file__), 'scripts') - self.loadFromFolder(folder) + self.algs = ScriptUtils.loadFromFolder(folder) + - def loadFromFolder(self, folder): - if not os.path.exists(folder): - return - for path, subdirs, files in os.walk(folder): - for descriptionFile in files: - if descriptionFile.endswith('py'): - try: - fullpath = os.path.join(path, descriptionFile) - alg = ScriptAlgorithm(fullpath) - if alg.name.strip() != '': - self.algs.append(alg) - except WrongScriptException, e: - ProcessingLog.addToLog(ProcessingLog.LOG_ERROR, e.msg) - except Exception, e: - ProcessingLog.addToLog(ProcessingLog.LOG_ERROR, - 'Could not load script:' + descriptionFile + '\n' - + unicode(e)) diff --git a/python/plugins/processing/script/ScriptUtils.py b/python/plugins/processing/script/ScriptUtils.py index c76739f80cd..d135c0b5915 100644 --- a/python/plugins/processing/script/ScriptUtils.py +++ b/python/plugins/processing/script/ScriptUtils.py @@ -27,8 +27,10 @@ __revision__ = '$Format:%H$' import os from processing.core.ProcessingConfig import ProcessingConfig -from processing.tools.system import * - +from processing.script.ScriptAlgorithm import ScriptAlgorithm +from processing.script.WrongScriptException import WrongScriptException +from processing.core.ProcessingLog import ProcessingLog +from processing.tools.system import mkdir, userFolder class ScriptUtils: @@ -43,3 +45,24 @@ class ScriptUtils: mkdir(folder) return os.path.abspath(folder) + + @staticmethod + def loadFromFolder(folder): + if not os.path.exists(folder): + return [] + algs = [] + for path, subdirs, files in os.walk(folder): + for descriptionFile in files: + if descriptionFile.endswith('py'): + try: + fullpath = os.path.join(path, descriptionFile) + alg = ScriptAlgorithm(fullpath) + if alg.name.strip() != '': + algs.append(alg) + except WrongScriptException, e: + ProcessingLog.addToLog(ProcessingLog.LOG_ERROR, e.msg) + except Exception, e: + ProcessingLog.addToLog(ProcessingLog.LOG_ERROR, + 'Could not load script:' + descriptionFile + '\n' + + unicode(e)) + return algs