Skip to content

Commit

Permalink
added some stuff to iterating execution
Browse files Browse the repository at this point in the history
git-svn-id: http://sextante.googlecode.com/svn/trunk/soft/bindings/qgis-plugin@120 881b9c09-3ef8-f3c2-ec3d-21d735c97f4d
  • Loading branch information
volayaf committed Apr 18, 2012
1 parent b0ed56a commit 78d1ee2
Show file tree
Hide file tree
Showing 5 changed files with 126 additions and 238 deletions.
4 changes: 3 additions & 1 deletion src/sextante/core/SextanteConfig.py
Expand Up @@ -3,6 +3,7 @@

class SextanteConfig():

TABLE_LIKE_PARAM_PANEL = "TABLE_LIKE_PARAM_PANEL"
OUTPUT_FOLDER = "OUTPUT_FOLDER"
RASTER_STYLE = "RASTER_STYLE"
VECTOR_POINT_STYLE = "VECTOR_POINT_STYLE"
Expand All @@ -16,7 +17,8 @@ class SextanteConfig():

@staticmethod
def initialize():
SextanteConfig.addSetting(Setting("General", SextanteConfig.USE_SELECTED, "Use only selected features in external application", True))
SextanteConfig.addSetting(Setting("General", SextanteConfig.USE_SELECTED, "Use only selected features in external applications", True))
SextanteConfig.addSetting(Setting("General", SextanteConfig.TABLE_LIKE_PARAM_PANEL, "Show table-like parameter panels", False))
SextanteConfig.addSetting(Setting("General", SextanteConfig.USE_FILENAME_AS_LAYER_NAME, "Use filename as layer name", True))
SextanteConfig.addSetting(Setting("General", SextanteConfig.SHOW_RECENT_ALGORITHMS, "Show recently executed algorithms", True))
SextanteConfig.addSetting(Setting("General", SextanteConfig.OUTPUT_FOLDER,
Expand Down
2 changes: 2 additions & 0 deletions src/sextante/grass/GrassAlgorithm.py
Expand Up @@ -82,6 +82,8 @@ def calculateRegion(self):
layer = QGisLayers.getObjectFromUri(layername, first)
self.addToRegion(layer, first)
first = False
if self.cellsize == 0:
self.cellsize = 1
else:
self.xmin = SextanteConfig.getSetting(GrassUtils.GRASS_REGION_XMIN)
self.xmax = SextanteConfig.getSetting(GrassUtils.GRASS_REGION_XMAX)
Expand Down
4 changes: 4 additions & 0 deletions src/sextante/gui/AlgorithmExecutor.py
Expand Up @@ -15,6 +15,10 @@ def runalg(alg, progress):
QMessageBox.critical(None, "Error", e.msg)
return False

@staticmethod
def runalgIterating(alg,paramtoIter,progress):
return False

class SilentProgress():

def setText(self, text):
Expand Down
219 changes: 25 additions & 194 deletions src/sextante/gui/ParametersDialog.py
Expand Up @@ -7,25 +7,18 @@
from sextante.parameters.ParameterBoolean import ParameterBoolean
from sextante.parameters.ParameterSelection import ParameterSelection
from sextante.parameters.ParameterMultipleInput import ParameterMultipleInput
from sextante.gui.MultipleInputPanel import MultipleInputPanel
from sextante.parameters.ParameterFixedTable import ParameterFixedTable
from sextante.gui.FixedTablePanel import FixedTablePanel
from sextante.parameters.ParameterTableField import ParameterTableField
from sextante.parameters.ParameterTable import ParameterTable
from sextante.gui.OutputSelectionPanel import OutputSelectionPanel
from sextante.gui.AlgorithmExecutor import AlgorithmExecutor
from sextante.core.GeoAlgorithmExecutionException import GeoAlgorithmExecutionException
from sextante.core.SextanteLog import SextanteLog
from sextante.gui.SextantePostprocessing import SextantePostprocessing
from sextante.gui.RangePanel import RangePanel
from sextante.parameters.ParameterRange import ParameterRange
from sextante.gui.HTMLViewerDialog import HTMLViewerDialog
from sextante.gui.NumberInputPanel import NumberInputPanel
from sextante.parameters.ParameterNumber import ParameterNumber
from sextante.gui.InputLayerSelectorPanel import InputLayerSelectorPanel
from sextante.parameters.ParameterExtent import ParameterExtent
from sextante.gui.ExtentSelectionPanel import ExtentSelectionPanel
from sextante.gui.ParametersTable import ParametersTable

from sextante.gui.ParametersPanel import ParametersPanel

try:
_fromUtf8 = QtCore.QString.fromUtf8
Expand Down Expand Up @@ -59,19 +52,7 @@ def setupUi(self, dialog, alg):
self.showHelpButton.setText("Show help")
self.buttonBox.addButton(self.showHelpButton, QtGui.QDialogButtonBox.ActionRole)
QtCore.QObject.connect(self.showHelpButton, QtCore.SIGNAL("clicked()"), self.showHelp)
#=======================================================================
# self.tableWidget = QtGui.QTableWidget()
# self.tableWidget.setSelectionMode(QtGui.QAbstractItemView.NoSelection)
# self.tableWidget.setColumnCount(2)
# self.tableWidget.setColumnWidth(0,300)
# self.tableWidget.setColumnWidth(1,300)
# self.tableWidget.setHorizontalHeaderItem(0, QtGui.QTableWidgetItem("Parameter"))
# self.tableWidget.setHorizontalHeaderItem(1, QtGui.QTableWidgetItem("Value"))
# self.tableWidget.verticalHeader().setVisible(False)
# self.tableWidget.horizontalHeader().setResizeMode(QtGui.QHeaderView.Stretch)
# self.setTableContent()
#=======================================================================
self.paramTable = ParametersTable(self.alg, self.dialog)
self.paramTable = ParametersPanel(self.alg, self.dialog)
self.scrollArea = QtGui.QScrollArea()
self.scrollArea.setWidget(self.paramTable)
self.scrollArea.setWidgetResizable(True)
Expand All @@ -92,179 +73,13 @@ def setupUi(self, dialog, alg):
QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("rejected()")), self.reject)
QtCore.QMetaObject.connectSlotsByName(dialog)

#===============================================================================
# def somethingDependsOnThisParameter(self, parent):
# for param in self.alg.parameters:
# if isinstance(param, ParameterTableField):
# if param.parent == parent.name:
# return True
# return False
#
# def getWidgetFromParameter(self, param):
# if isinstance(param, ParameterRaster):
# layers = QGisLayers.getRasterLayers()
# items = []
# if (param.optional):
# items.append((self.NOT_SELECTED, None))
# for layer in layers:
# items.append((layer.name(), layer))
# item = InputLayerSelectorPanel(items)
# elif isinstance(param, ParameterVector):
# if self.somethingDependsOnThisParameter(param):
# item = QtGui.QComboBox()
# layers = QGisLayers.getVectorLayers(param.shapetype)
# if (param.optional):
# item.addItem(self.NOT_SELECTED, None)
# for layer in layers:
# item.addItem(layer.name(), layer)
# item.currentIndexChanged.connect(self.updateDependentFields)
# item.name = param.name
# else:
# layers = QGisLayers.getVectorLayers(param.shapetype)
# items = []
# if (param.optional):
# items.append((self.NOT_SELECTED, None))
# for layer in layers:
# items.append((layer.name(), layer))
# item = InputLayerSelectorPanel(items)
# elif isinstance(param, ParameterTable):
# if self.somethingDependsOnThisParameter(param):
# item = QtGui.QComboBox()
# layers = QGisLayers.getTables()
# if (param.optional):
# item.addItem(self.NOT_SELECTED, None)
# for layer in layers:
# item.addItem(layer.name(), layer)
# item.currentIndexChanged.connect(self.updateDependentFields)
# item.name = param.name
# else:
# layers = QGisLayers.getTables()
# items = []
# if (param.optional):
# items.append((self.NOT_SELECTED, None))
# for layer in layers:
# items.append((layer.name(), layer))
# item = InputLayerSelectorPanel(items)
# elif isinstance(param, ParameterBoolean):
# item = QtGui.QComboBox()
# item.addItem("Yes")
# item.addItem("No")
# if param.default:
# item.setCurrentIndex(0)
# else:
# item.setCurrentIndex(1)
# elif isinstance(param, ParameterTableField):
# item = QtGui.QComboBox()
# if param.parent in self.dependentItems:
# items = self.dependentItems[param.parent]
# else:
# items = []
# self.dependentItems[param.parent] = items
# items.append(param.name)
# parent = self.alg.getParameterFromName(param.parent)
# if isinstance(parent, ParameterVector):
# layers = QGisLayers.getVectorLayers(parent.shapetype)
# else:
# layers = QGisLayers.getTables()
# if len(layers)>0:
# fields = self.getFields(layers[0])
# for i in fields:
# item.addItem(fields[i].name())
# elif isinstance(param, ParameterSelection):
# item = QtGui.QComboBox()
# item.addItems(param.options)
# item.setCurrentIndex(param.default)
# elif isinstance(param, ParameterFixedTable):
# item = FixedTablePanel(param)
# elif isinstance(param, ParameterRange):
# item = RangePanel(param)
# elif isinstance(param, ParameterMultipleInput):
# if param.datatype == ParameterMultipleInput.TYPE_RASTER:
# options = QGisLayers.getRasterLayers()
# elif param.datatype == ParameterMultipleInput.TYPE_VECTOR_ANY:
# options = QGisLayers.getVectorLayers()
# else:
# options = QGisLayers.getVectorLayers(param.datatype)
# opts = []
# for opt in options:
# opts.append(opt.name())
# item = MultipleInputPanel(opts)
# elif isinstance(param, ParameterNumber):
# item = NumberInputPanel(param.default, param.isInteger)
# elif isinstance(param, ParameterExtent):
# item = ExtentSelectionPanel(self.dialog, param.default)
# else:
# item = QtGui.QLineEdit()
# item.setText(str(param.default))
#
# return item
#
# def updateDependentFields(self):
# sender = self.dialog.sender()
# if not isinstance(sender, QComboBox):
# return
# if not sender.name in self.dependentItems:
# return
# layer = sender.itemData(sender.currentIndex()).toPyObject()
# children = self.dependentItems[sender.name]
# for child in children:
# widget = self.valueItems[child]
# widget.clear()
# fields = self.getFields(layer)
# for i in fields:
# widget.addItem(fields[i].name())
#
#
# def getFields(self, layer):
# return layer.dataProvider().fields()
#===============================================================================

def showHelp(self):
if self.alg.helpFile():
dlg = HTMLViewerDialog(self.alg.helpFile())
dlg.exec_()
else:
QMessageBox.warning(self.dialog, "No help available", "No help is available for the current algorithm.")

#===============================================================================
# def setTableContent(self):
# params = self.alg.parameters
# outputs = self.alg.outputs
# numParams = len(self.alg.parameters)
# numOutputs = 0
# for output in outputs:
# if not output.hidden:
# numOutputs += 1
# self.tableWidget.setRowCount(numParams + numOutputs)
#
# i=0
# for param in params:
# item = QtGui.QTableWidgetItem(param.description)
# item.setFlags(QtCore.Qt.ItemIsEnabled)
# self.tableWidget.setItem(i,0, item)
# item = self.getWidgetFromParameter(param)
# self.valueItems[param.name] = item
# self.tableWidget.setCellWidget(i,1, item)
# self.tableWidget.setRowHeight(i,22)
# i+=1
#
# for output in outputs:
# if output.hidden:
# continue
# item = QtGui.QTableWidgetItem(output.description + "<" + output.__module__.split(".")[-1] + ">")
# item.setFlags(QtCore.Qt.ItemIsEnabled)
# self.tableWidget.setItem(i,0, item)
# item = OutputSelectionPanel(output,self.alg)
# self.valueItems[output.name] = item
# self.tableWidget.setCellWidget(i,1, item)
# self.tableWidget.setRowHeight(i,22)
# i+=1
#
# self.fillParameterValuesFromHistory()
#
# def fillParameterValuesFromHistory(self):
# pass
#===============================================================================

def setParamValues(self):
params = self.alg.parameters
Expand Down Expand Up @@ -317,12 +132,28 @@ def setParamValue(self, param, widget):
def accept(self):
try:
if self.setParamValues():
QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
SextanteLog.addToLog(SextanteLog.LOG_ALGORITHM, self.alg.getAsCommand())
ret = AlgorithmExecutor.runalg(self.alg, self)
QApplication.restoreOverrideCursor()
if ret:
SextantePostprocessing.handleAlgorithmResults(self.alg)
buttons = self.paramTable.iterateButtons
iterateParam = None
for i in range(len(buttons.values())):
button = buttons.values()[i]
if button.isChecked():
iterateParam = buttons.keys()[i]
break
if iterateParam:
QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
#SextanteLog.addToLog(SextanteLog.LOG_ALGORITHM, self.alg.getAsCommand())
ret = AlgorithmExecutor.runalgIterating(self.alg, iterateParam, self)
QApplication.restoreOverrideCursor()
#if ret:
#SextantePostprocessing.handleAlgorithmResults(self.alg)
else:
QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
SextanteLog.addToLog(SextanteLog.LOG_ALGORITHM, self.alg.getAsCommand())
ret = AlgorithmExecutor.runalg(self.alg, self)
QApplication.restoreOverrideCursor()
if ret:
SextantePostprocessing.handleAlgorithmResults(self.alg)

self.dialog.executed = True
self.dialog.close()

Expand Down

0 comments on commit 78d1ee2

Please sign in to comment.