Skip to content

Commit 78d1ee2

Browse files
author
volayaf
committedApr 18, 2012
added some stuff to iterating execution
git-svn-id: http://sextante.googlecode.com/svn/trunk/soft/bindings/qgis-plugin@120 881b9c09-3ef8-f3c2-ec3d-21d735c97f4d
1 parent b0ed56a commit 78d1ee2

File tree

5 files changed

+126
-238
lines changed

5 files changed

+126
-238
lines changed
 

‎src/sextante/core/SextanteConfig.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
class SextanteConfig():
55

6+
TABLE_LIKE_PARAM_PANEL = "TABLE_LIKE_PARAM_PANEL"
67
OUTPUT_FOLDER = "OUTPUT_FOLDER"
78
RASTER_STYLE = "RASTER_STYLE"
89
VECTOR_POINT_STYLE = "VECTOR_POINT_STYLE"
@@ -16,7 +17,8 @@ class SextanteConfig():
1617

1718
@staticmethod
1819
def initialize():
19-
SextanteConfig.addSetting(Setting("General", SextanteConfig.USE_SELECTED, "Use only selected features in external application", True))
20+
SextanteConfig.addSetting(Setting("General", SextanteConfig.USE_SELECTED, "Use only selected features in external applications", True))
21+
SextanteConfig.addSetting(Setting("General", SextanteConfig.TABLE_LIKE_PARAM_PANEL, "Show table-like parameter panels", False))
2022
SextanteConfig.addSetting(Setting("General", SextanteConfig.USE_FILENAME_AS_LAYER_NAME, "Use filename as layer name", True))
2123
SextanteConfig.addSetting(Setting("General", SextanteConfig.SHOW_RECENT_ALGORITHMS, "Show recently executed algorithms", True))
2224
SextanteConfig.addSetting(Setting("General", SextanteConfig.OUTPUT_FOLDER,

‎src/sextante/grass/GrassAlgorithm.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@ def calculateRegion(self):
8282
layer = QGisLayers.getObjectFromUri(layername, first)
8383
self.addToRegion(layer, first)
8484
first = False
85+
if self.cellsize == 0:
86+
self.cellsize = 1
8587
else:
8688
self.xmin = SextanteConfig.getSetting(GrassUtils.GRASS_REGION_XMIN)
8789
self.xmax = SextanteConfig.getSetting(GrassUtils.GRASS_REGION_XMAX)

‎src/sextante/gui/AlgorithmExecutor.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ def runalg(alg, progress):
1515
QMessageBox.critical(None, "Error", e.msg)
1616
return False
1717

18+
@staticmethod
19+
def runalgIterating(alg,paramtoIter,progress):
20+
return False
21+
1822
class SilentProgress():
1923

2024
def setText(self, text):

‎src/sextante/gui/ParametersDialog.py

Lines changed: 25 additions & 194 deletions
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,18 @@
77
from sextante.parameters.ParameterBoolean import ParameterBoolean
88
from sextante.parameters.ParameterSelection import ParameterSelection
99
from sextante.parameters.ParameterMultipleInput import ParameterMultipleInput
10-
from sextante.gui.MultipleInputPanel import MultipleInputPanel
1110
from sextante.parameters.ParameterFixedTable import ParameterFixedTable
12-
from sextante.gui.FixedTablePanel import FixedTablePanel
1311
from sextante.parameters.ParameterTableField import ParameterTableField
1412
from sextante.parameters.ParameterTable import ParameterTable
15-
from sextante.gui.OutputSelectionPanel import OutputSelectionPanel
1613
from sextante.gui.AlgorithmExecutor import AlgorithmExecutor
1714
from sextante.core.GeoAlgorithmExecutionException import GeoAlgorithmExecutionException
1815
from sextante.core.SextanteLog import SextanteLog
1916
from sextante.gui.SextantePostprocessing import SextantePostprocessing
20-
from sextante.gui.RangePanel import RangePanel
2117
from sextante.parameters.ParameterRange import ParameterRange
2218
from sextante.gui.HTMLViewerDialog import HTMLViewerDialog
23-
from sextante.gui.NumberInputPanel import NumberInputPanel
2419
from sextante.parameters.ParameterNumber import ParameterNumber
25-
from sextante.gui.InputLayerSelectorPanel import InputLayerSelectorPanel
26-
from sextante.parameters.ParameterExtent import ParameterExtent
27-
from sextante.gui.ExtentSelectionPanel import ExtentSelectionPanel
28-
from sextante.gui.ParametersTable import ParametersTable
20+
21+
from sextante.gui.ParametersPanel import ParametersPanel
2922

3023
try:
3124
_fromUtf8 = QtCore.QString.fromUtf8
@@ -59,19 +52,7 @@ def setupUi(self, dialog, alg):
5952
self.showHelpButton.setText("Show help")
6053
self.buttonBox.addButton(self.showHelpButton, QtGui.QDialogButtonBox.ActionRole)
6154
QtCore.QObject.connect(self.showHelpButton, QtCore.SIGNAL("clicked()"), self.showHelp)
62-
#=======================================================================
63-
# self.tableWidget = QtGui.QTableWidget()
64-
# self.tableWidget.setSelectionMode(QtGui.QAbstractItemView.NoSelection)
65-
# self.tableWidget.setColumnCount(2)
66-
# self.tableWidget.setColumnWidth(0,300)
67-
# self.tableWidget.setColumnWidth(1,300)
68-
# self.tableWidget.setHorizontalHeaderItem(0, QtGui.QTableWidgetItem("Parameter"))
69-
# self.tableWidget.setHorizontalHeaderItem(1, QtGui.QTableWidgetItem("Value"))
70-
# self.tableWidget.verticalHeader().setVisible(False)
71-
# self.tableWidget.horizontalHeader().setResizeMode(QtGui.QHeaderView.Stretch)
72-
# self.setTableContent()
73-
#=======================================================================
74-
self.paramTable = ParametersTable(self.alg, self.dialog)
55+
self.paramTable = ParametersPanel(self.alg, self.dialog)
7556
self.scrollArea = QtGui.QScrollArea()
7657
self.scrollArea.setWidget(self.paramTable)
7758
self.scrollArea.setWidgetResizable(True)
@@ -92,179 +73,13 @@ def setupUi(self, dialog, alg):
9273
QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("rejected()")), self.reject)
9374
QtCore.QMetaObject.connectSlotsByName(dialog)
9475

95-
#===============================================================================
96-
# def somethingDependsOnThisParameter(self, parent):
97-
# for param in self.alg.parameters:
98-
# if isinstance(param, ParameterTableField):
99-
# if param.parent == parent.name:
100-
# return True
101-
# return False
102-
#
103-
# def getWidgetFromParameter(self, param):
104-
# if isinstance(param, ParameterRaster):
105-
# layers = QGisLayers.getRasterLayers()
106-
# items = []
107-
# if (param.optional):
108-
# items.append((self.NOT_SELECTED, None))
109-
# for layer in layers:
110-
# items.append((layer.name(), layer))
111-
# item = InputLayerSelectorPanel(items)
112-
# elif isinstance(param, ParameterVector):
113-
# if self.somethingDependsOnThisParameter(param):
114-
# item = QtGui.QComboBox()
115-
# layers = QGisLayers.getVectorLayers(param.shapetype)
116-
# if (param.optional):
117-
# item.addItem(self.NOT_SELECTED, None)
118-
# for layer in layers:
119-
# item.addItem(layer.name(), layer)
120-
# item.currentIndexChanged.connect(self.updateDependentFields)
121-
# item.name = param.name
122-
# else:
123-
# layers = QGisLayers.getVectorLayers(param.shapetype)
124-
# items = []
125-
# if (param.optional):
126-
# items.append((self.NOT_SELECTED, None))
127-
# for layer in layers:
128-
# items.append((layer.name(), layer))
129-
# item = InputLayerSelectorPanel(items)
130-
# elif isinstance(param, ParameterTable):
131-
# if self.somethingDependsOnThisParameter(param):
132-
# item = QtGui.QComboBox()
133-
# layers = QGisLayers.getTables()
134-
# if (param.optional):
135-
# item.addItem(self.NOT_SELECTED, None)
136-
# for layer in layers:
137-
# item.addItem(layer.name(), layer)
138-
# item.currentIndexChanged.connect(self.updateDependentFields)
139-
# item.name = param.name
140-
# else:
141-
# layers = QGisLayers.getTables()
142-
# items = []
143-
# if (param.optional):
144-
# items.append((self.NOT_SELECTED, None))
145-
# for layer in layers:
146-
# items.append((layer.name(), layer))
147-
# item = InputLayerSelectorPanel(items)
148-
# elif isinstance(param, ParameterBoolean):
149-
# item = QtGui.QComboBox()
150-
# item.addItem("Yes")
151-
# item.addItem("No")
152-
# if param.default:
153-
# item.setCurrentIndex(0)
154-
# else:
155-
# item.setCurrentIndex(1)
156-
# elif isinstance(param, ParameterTableField):
157-
# item = QtGui.QComboBox()
158-
# if param.parent in self.dependentItems:
159-
# items = self.dependentItems[param.parent]
160-
# else:
161-
# items = []
162-
# self.dependentItems[param.parent] = items
163-
# items.append(param.name)
164-
# parent = self.alg.getParameterFromName(param.parent)
165-
# if isinstance(parent, ParameterVector):
166-
# layers = QGisLayers.getVectorLayers(parent.shapetype)
167-
# else:
168-
# layers = QGisLayers.getTables()
169-
# if len(layers)>0:
170-
# fields = self.getFields(layers[0])
171-
# for i in fields:
172-
# item.addItem(fields[i].name())
173-
# elif isinstance(param, ParameterSelection):
174-
# item = QtGui.QComboBox()
175-
# item.addItems(param.options)
176-
# item.setCurrentIndex(param.default)
177-
# elif isinstance(param, ParameterFixedTable):
178-
# item = FixedTablePanel(param)
179-
# elif isinstance(param, ParameterRange):
180-
# item = RangePanel(param)
181-
# elif isinstance(param, ParameterMultipleInput):
182-
# if param.datatype == ParameterMultipleInput.TYPE_RASTER:
183-
# options = QGisLayers.getRasterLayers()
184-
# elif param.datatype == ParameterMultipleInput.TYPE_VECTOR_ANY:
185-
# options = QGisLayers.getVectorLayers()
186-
# else:
187-
# options = QGisLayers.getVectorLayers(param.datatype)
188-
# opts = []
189-
# for opt in options:
190-
# opts.append(opt.name())
191-
# item = MultipleInputPanel(opts)
192-
# elif isinstance(param, ParameterNumber):
193-
# item = NumberInputPanel(param.default, param.isInteger)
194-
# elif isinstance(param, ParameterExtent):
195-
# item = ExtentSelectionPanel(self.dialog, param.default)
196-
# else:
197-
# item = QtGui.QLineEdit()
198-
# item.setText(str(param.default))
199-
#
200-
# return item
201-
#
202-
# def updateDependentFields(self):
203-
# sender = self.dialog.sender()
204-
# if not isinstance(sender, QComboBox):
205-
# return
206-
# if not sender.name in self.dependentItems:
207-
# return
208-
# layer = sender.itemData(sender.currentIndex()).toPyObject()
209-
# children = self.dependentItems[sender.name]
210-
# for child in children:
211-
# widget = self.valueItems[child]
212-
# widget.clear()
213-
# fields = self.getFields(layer)
214-
# for i in fields:
215-
# widget.addItem(fields[i].name())
216-
#
217-
#
218-
# def getFields(self, layer):
219-
# return layer.dataProvider().fields()
220-
#===============================================================================
221-
22276
def showHelp(self):
22377
if self.alg.helpFile():
22478
dlg = HTMLViewerDialog(self.alg.helpFile())
22579
dlg.exec_()
22680
else:
22781
QMessageBox.warning(self.dialog, "No help available", "No help is available for the current algorithm.")
22882

229-
#===============================================================================
230-
# def setTableContent(self):
231-
# params = self.alg.parameters
232-
# outputs = self.alg.outputs
233-
# numParams = len(self.alg.parameters)
234-
# numOutputs = 0
235-
# for output in outputs:
236-
# if not output.hidden:
237-
# numOutputs += 1
238-
# self.tableWidget.setRowCount(numParams + numOutputs)
239-
#
240-
# i=0
241-
# for param in params:
242-
# item = QtGui.QTableWidgetItem(param.description)
243-
# item.setFlags(QtCore.Qt.ItemIsEnabled)
244-
# self.tableWidget.setItem(i,0, item)
245-
# item = self.getWidgetFromParameter(param)
246-
# self.valueItems[param.name] = item
247-
# self.tableWidget.setCellWidget(i,1, item)
248-
# self.tableWidget.setRowHeight(i,22)
249-
# i+=1
250-
#
251-
# for output in outputs:
252-
# if output.hidden:
253-
# continue
254-
# item = QtGui.QTableWidgetItem(output.description + "<" + output.__module__.split(".")[-1] + ">")
255-
# item.setFlags(QtCore.Qt.ItemIsEnabled)
256-
# self.tableWidget.setItem(i,0, item)
257-
# item = OutputSelectionPanel(output,self.alg)
258-
# self.valueItems[output.name] = item
259-
# self.tableWidget.setCellWidget(i,1, item)
260-
# self.tableWidget.setRowHeight(i,22)
261-
# i+=1
262-
#
263-
# self.fillParameterValuesFromHistory()
264-
#
265-
# def fillParameterValuesFromHistory(self):
266-
# pass
267-
#===============================================================================
26883

26984
def setParamValues(self):
27085
params = self.alg.parameters
@@ -317,12 +132,28 @@ def setParamValue(self, param, widget):
317132
def accept(self):
318133
try:
319134
if self.setParamValues():
320-
QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
321-
SextanteLog.addToLog(SextanteLog.LOG_ALGORITHM, self.alg.getAsCommand())
322-
ret = AlgorithmExecutor.runalg(self.alg, self)
323-
QApplication.restoreOverrideCursor()
324-
if ret:
325-
SextantePostprocessing.handleAlgorithmResults(self.alg)
135+
buttons = self.paramTable.iterateButtons
136+
iterateParam = None
137+
for i in range(len(buttons.values())):
138+
button = buttons.values()[i]
139+
if button.isChecked():
140+
iterateParam = buttons.keys()[i]
141+
break
142+
if iterateParam:
143+
QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
144+
#SextanteLog.addToLog(SextanteLog.LOG_ALGORITHM, self.alg.getAsCommand())
145+
ret = AlgorithmExecutor.runalgIterating(self.alg, iterateParam, self)
146+
QApplication.restoreOverrideCursor()
147+
#if ret:
148+
#SextantePostprocessing.handleAlgorithmResults(self.alg)
149+
else:
150+
QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
151+
SextanteLog.addToLog(SextanteLog.LOG_ALGORITHM, self.alg.getAsCommand())
152+
ret = AlgorithmExecutor.runalg(self.alg, self)
153+
QApplication.restoreOverrideCursor()
154+
if ret:
155+
SextantePostprocessing.handleAlgorithmResults(self.alg)
156+
326157
self.dialog.executed = True
327158
self.dialog.close()
328159

‎src/sextante/gui/ParametersTable.py renamed to ‎src/sextante/gui/ParametersPanel.py

Lines changed: 92 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import os
12
from PyQt4 import QtCore, QtGui
23
from sextante.gui.OutputSelectionPanel import OutputSelectionPanel
34
from sextante.core.QGisLayers import QGisLayers
@@ -18,63 +19,77 @@
1819
from sextante.gui.NumberInputPanel import NumberInputPanel
1920
from sextante.gui.ExtentSelectionPanel import ExtentSelectionPanel
2021
from sextante.parameters.ParameterExtent import ParameterExtent
21-
import os
22+
from sextante.core.SextanteConfig import SextanteConfig
2223

23-
class ParametersTable(QtGui.QWidget):
24+
class ParametersPanel(QtGui.QWidget):
2425

2526
def __init__(self, alg, paramDialog):
26-
super(ParametersTable, self).__init__(None)
27+
super(ParametersPanel, self).__init__(None)
2728
self.alg = alg;
2829
self.paramDialog = paramDialog
2930
self.valueItems = {}
3031
self.dependentItems = {}
3132
self.iterateButtons = {}
3233
self.initGUI()
3334

34-
3535
def initGUI(self):
36-
self.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
37-
self.verticalLayout = QtGui.QVBoxLayout()
38-
self.verticalLayout.setSpacing(5)
39-
self.verticalLayout.setMargin(20)
40-
41-
for param in self.alg.parameters:
42-
label = QtGui.QLabel(param.description)
43-
widget = self.getWidgetFromParameter(param)
44-
self.valueItems[param.name] = widget
45-
if isinstance(param, ParameterVector):
46-
layout = QtGui.QHBoxLayout()
47-
layout.setSpacing(2)
48-
layout.setMargin(0)
49-
layout.addWidget(widget)
50-
button = QtGui.QToolButton()
51-
icon = QtGui.QIcon(os.path.dirname(__file__) + "/../images/iterate.png")
52-
button.setIcon(icon)
53-
button.setToolTip("Iterate over this layer")
54-
button.setCheckable(True)
55-
button.setMaximumWidth(30)
56-
button.setMaximumHeight(30)
57-
layout.addWidget(button)
58-
self.iterateButtons[param.name] = button
59-
QtCore.QObject.connect(button, QtCore.SIGNAL("toggled(bool)"), self.buttonToggled)
60-
widget = QtGui.QWidget()
61-
widget.setLayout(layout)
36+
tableLike = SextanteConfig.getSetting(SextanteConfig.TABLE_LIKE_PARAM_PANEL)
37+
if tableLike:
38+
self.tableWidget = QtGui.QTableWidget()
39+
self.tableWidget.setSelectionMode(QtGui.QAbstractItemView.NoSelection)
40+
self.tableWidget.setColumnCount(2)
41+
self.tableWidget.setColumnWidth(0,300)
42+
self.tableWidget.setColumnWidth(1,300)
43+
self.tableWidget.setHorizontalHeaderItem(0, QtGui.QTableWidgetItem("Parameter"))
44+
self.tableWidget.setHorizontalHeaderItem(1, QtGui.QTableWidgetItem("Value"))
45+
self.tableWidget.verticalHeader().setVisible(False)
46+
self.tableWidget.horizontalHeader().setResizeMode(QtGui.QHeaderView.Stretch)
47+
self.setTableContent()
48+
self.verticalLayout = QtGui.QVBoxLayout()
49+
self.verticalLayout.setSpacing(0)
50+
self.verticalLayout.setMargin(0)
51+
self.verticalLayout.addWidget(self.tableWidget)
52+
self.setLayout(self.verticalLayout)
53+
else:
54+
self.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
55+
self.verticalLayout = QtGui.QVBoxLayout()
56+
self.verticalLayout.setSpacing(5)
57+
self.verticalLayout.setMargin(20)
58+
for param in self.alg.parameters:
59+
label = QtGui.QLabel(param.description)
60+
widget = self.getWidgetFromParameter(param)
61+
self.valueItems[param.name] = widget
62+
if isinstance(param, ParameterVector):
63+
layout = QtGui.QHBoxLayout()
64+
layout.setSpacing(2)
65+
layout.setMargin(0)
66+
layout.addWidget(widget)
67+
button = QtGui.QToolButton()
68+
icon = QtGui.QIcon(os.path.dirname(__file__) + "/../images/iterate.png")
69+
button.setIcon(icon)
70+
button.setToolTip("Iterate over this layer")
71+
button.setCheckable(True)
72+
button.setMaximumWidth(30)
73+
button.setMaximumHeight(30)
74+
layout.addWidget(button)
75+
self.iterateButtons[param.name] = button
76+
QtCore.QObject.connect(button, QtCore.SIGNAL("toggled(bool)"), self.buttonToggled)
77+
widget = QtGui.QWidget()
78+
widget.setLayout(layout)
6279
self.verticalLayout.addWidget(label)
6380
self.verticalLayout.addWidget(widget)
64-
self.verticalLayout.addWidget(label)
65-
self.verticalLayout.addWidget(widget)
6681

67-
for output in self.alg.outputs:
68-
if output.hidden:
69-
continue
70-
label = QtGui.QLabel(output.description)
71-
widget = OutputSelectionPanel(output,self.alg)
72-
self.verticalLayout.addWidget(label)
73-
self.verticalLayout.addWidget(widget)
74-
self.valueItems[output.name] = widget
82+
for output in self.alg.outputs:
83+
if output.hidden:
84+
continue
85+
label = QtGui.QLabel(output.description)
86+
widget = OutputSelectionPanel(output,self.alg)
87+
self.verticalLayout.addWidget(label)
88+
self.verticalLayout.addWidget(widget)
89+
self.valueItems[output.name] = widget
7590

76-
self.verticalLayout.addStretch(1000)
77-
self.setLayout(self.verticalLayout)
91+
self.verticalLayout.addStretch(1000)
92+
self.setLayout(self.verticalLayout)
7893

7994
def buttonToggled(self, value):
8095
if value:
@@ -205,4 +220,38 @@ def somethingDependsOnThisParameter(self, parent):
205220
if isinstance(param, ParameterTableField):
206221
if param.parent == parent.name:
207222
return True
208-
return False
223+
return False
224+
225+
def setTableContent(self):
226+
params = self.alg.parameters
227+
outputs = self.alg.outputs
228+
numParams = len(self.alg.parameters)
229+
numOutputs = 0
230+
for output in outputs:
231+
if not output.hidden:
232+
numOutputs += 1
233+
self.tableWidget.setRowCount(numParams + numOutputs)
234+
235+
i=0
236+
for param in params:
237+
item = QtGui.QTableWidgetItem(param.description)
238+
item.setFlags(QtCore.Qt.ItemIsEnabled)
239+
self.tableWidget.setItem(i,0, item)
240+
item = self.getWidgetFromParameter(param)
241+
self.valueItems[param.name] = item
242+
self.tableWidget.setCellWidget(i,1, item)
243+
self.tableWidget.setRowHeight(i,22)
244+
i+=1
245+
246+
for output in outputs:
247+
if output.hidden:
248+
continue
249+
item = QtGui.QTableWidgetItem(output.description + "<" + output.__module__.split(".")[-1] + ">")
250+
item.setFlags(QtCore.Qt.ItemIsEnabled)
251+
self.tableWidget.setItem(i,0, item)
252+
item = OutputSelectionPanel(output,self.alg)
253+
self.valueItems[output.name] = item
254+
self.tableWidget.setCellWidget(i,1, item)
255+
self.tableWidget.setRowHeight(i,22)
256+
i+=1
257+

0 commit comments

Comments
 (0)
Please sign in to comment.