Skip to content

Commit a270bde

Browse files
author
cfarmer
committedMay 13, 2010
New warning when creating empty multipart layer; Ok button disabled on all functions while running; General bug fixes. Fixes #2260, #2057, and #1986. Another great patch from alexbruy :-)
git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@13481 c8812cc2-4d05-0410-92ff-de0c093fc19c

16 files changed

+95
-89
lines changed
 

‎python/plugins/fTools/tools/doDefineProj.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ def __init__(self, iface):
1919
self.label_2.setVisible(False)
2020
self.label_2.setEnabled(False)
2121
self.setWindowTitle(self.tr("Define current projection"))
22+
self.buttonOk = self.buttonBox_2.button( QDialogButtonBox.Ok )
2223
QObject.connect(self.btnProjection, SIGNAL("clicked()"), self.outProjFile)
2324
QObject.connect(self.inShape, SIGNAL("currentIndexChanged(QString)"), self.updateProj1)
2425
QObject.connect(self.cmbLayer, SIGNAL("currentIndexChanged(QString)"), self.updateProj2)
@@ -42,6 +43,7 @@ def updateProj2(self, layerName):
4243
self.outRef.insert(unicode(crs))
4344

4445
def accept(self):
46+
self.buttonOk.setEnabled( False )
4547
if self.inShape.currentText() == "":
4648
QMessageBox.information(self, self.tr("Define current projection"), self.tr("No input shapefile specified"))
4749
elif self.txtProjection.text() == "" and self.rdoProjection.isChecked():
@@ -103,6 +105,7 @@ def accept(self):
103105
self.progressBar.setValue(100)
104106
QMessageBox.information(self, self.tr("Define current projection"), self.tr("Defined Projection For:\n%1.shp").arg( inPath ) )
105107
self.progressBar.setValue(0)
108+
self.buttonOk.setEnabled( True )
106109

107110
def outProjFile(self):
108111
format = QString( "<h2>%1</h2>%2 <br/> %3" )

‎python/plugins/fTools/tools/doGeometry.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ def __init__(self, iface, function):
1414
self.iface = iface
1515
self.setupUi(self)
1616
self.myFunction = function
17+
self.buttonOk = self.buttonBox_2.button( QDialogButtonBox.Ok )
1718
QObject.connect(self.toolOut, SIGNAL("clicked()"), self.outFile)
1819
if self.myFunction == 1:
1920
QObject.connect(self.inShape, SIGNAL("currentIndexChanged(QString)"), self.update)
@@ -126,7 +127,7 @@ def manageGui(self):
126127
elif self.myFunction == 9:
127128
myList = ftools_utils.getLayerNames( "all" )
128129
else:
129-
myList = ftools_utils.getLayerNames( [ QGis.Point, QGis.Line, QGis.Polygon ] )
130+
myList = ftools_utils.getLayerNames( [ QGis.Point, QGis.Line, QGis.Polygon ] )
130131
self.inShape.addItems( myList )
131132
return
132133

@@ -151,6 +152,7 @@ def geometry( self, myLayer, myParam, myField ):
151152
if not QgsVectorFileWriter.deleteShapeFile( self.shapefileName ):
152153
QMessageBox.warning( self, self.tr("Geoprocessing"), self.tr( "Unable to delete existing shapefile." ) )
153154
return
155+
self.buttonOk.setEnabled( False )
154156
self.testThread = geometryThread( self.iface.mainWindow(), self, self.myFunction, vlayer, myParam,
155157
myField, self.shapefileName, self.encoding )
156158
QObject.connect( self.testThread, SIGNAL( "runFinished(PyQt_PyObject)" ), self.runFinishedFromThread )
@@ -162,13 +164,19 @@ def geometry( self, myLayer, myParam, myField ):
162164

163165
def cancelThread( self ):
164166
self.testThread.stop()
167+
self.buttonOk.setEnabled( True )
165168

166169
def runFinishedFromThread( self, success ):
167170
self.testThread.stop()
171+
self.buttonOk.setEnabled( True )
168172
if success == "math_error":
169173
QMessageBox.warning( self, self.tr("Geometry"), self.tr("Error processing specified tolerance!\nPlease choose larger tolerance...") )
170174
if not QgsVectorFileWriter.deleteShapeFile( self.shapefileName ):
171175
QMessageBox.warning( self, self.tr("Geometry"), self.tr( "Unable to delete incomplete shapefile." ) )
176+
elif success == "attr_error":
177+
QMessageBox.warning( self, self.tr("Geometry"), self.tr("At least two features must have same attribute value!\nPlease choose another field...") )
178+
if not QgsVectorFileWriter.deleteShapeFile( self.shapefileName ):
179+
QMessageBox.warning( self, self.tr("Geometry"), self.tr( "Unable to delete incomplete shapefile." ) )
172180
else:
173181
self.cancel_close.setText( "Close" )
174182
QObject.disconnect( self.cancel_close, SIGNAL( "clicked()" ), self.cancelThread )
@@ -267,6 +275,8 @@ def single_to_multi( self ):
267275
outFeat.setGeometry( outGeom )
268276
writer.addFeature( outFeat )
269277
del writer
278+
else:
279+
return "attr_error"
270280
return True
271281

272282
def multi_to_single( self ):

‎python/plugins/fTools/tools/doGeoprocessing.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ def __init__( self, iface, function ):
2222
self.manageGui()
2323
self.success = False
2424
self.cancel_close = self.buttonBox_2.button( QDialogButtonBox.Close )
25+
self.buttonOk = self.buttonBox_2.button( QDialogButtonBox.Ok )
2526
self.progressBar.setValue (0 )
2627

2728
def checkA( self ):
@@ -180,6 +181,7 @@ def geoprocessing( self, myLayerA, myLayerB, myParam, myMerge, mySelectionA,
180181
if not QgsVectorFileWriter.deleteShapeFile( self.shapefileName ):
181182
QMessageBox.warning( self, self.tr("Geoprocessing"), self.tr( "Unable to delete existing shapefile." ) )
182183
return
184+
self.buttonOk.setEnabled( False )
183185
self.testThread = geoprocessingThread( self.iface.mainWindow(), self, self.myFunction, myLayerA,
184186
myLayerB, myParam, myMerge, mySelectionA, mySelectionB, self.shapefileName, self.encoding )
185187
QObject.connect( self.testThread, SIGNAL( "runFinished(PyQt_PyObject)" ), self.runFinishedFromThread )
@@ -192,9 +194,11 @@ def geoprocessing( self, myLayerA, myLayerB, myParam, myMerge, mySelectionA,
192194

193195
def cancelThread( self ):
194196
self.testThread.stop()
197+
self.buttonOk.setEnabled( True )
195198

196199
def runFinishedFromThread( self, results ):
197200
self.testThread.stop()
201+
self.buttonOk.setEnabled( True )
198202
self.cancel_close.setText( self.tr("Close") )
199203
QObject.disconnect( self.cancel_close, SIGNAL( "clicked()" ), self.cancelThread )
200204
out_text = ""

‎python/plugins/fTools/tools/doIntersectLines.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ def __init__(self, iface):
4848
QObject.connect(self.inLine1, SIGNAL("currentIndexChanged(QString)"), self.update1)
4949
QObject.connect(self.inLine2, SIGNAL("currentIndexChanged(QString)"), self.update2)
5050
self.setWindowTitle( self.tr("Line intersections") )
51+
self.buttonOk = self.buttonBox_2.button( QDialogButtonBox.Ok )
5152
# populate layer list
5253
self.progressBar.setValue(0)
5354
mapCanvas = self.iface.mapCanvas()
@@ -70,6 +71,7 @@ def update2(self, inputLayer):
7071
self.inField2.addItem(unicode(changedField[i].name()))
7172

7273
def accept(self):
74+
self.buttonOk.setEnabled( False )
7375
if self.inLine1.currentText() == "":
7476
QMessageBox.information(self, self.tr("Locate Line Intersections"), self.tr("Please specify input line layer") )
7577
elif self.outShape.text() == "":
@@ -94,6 +96,7 @@ def accept(self):
9496
if not ftools_utils.addShapeToCanvas( unicode( outPath ) ):
9597
QMessageBox.warning( self, self.tr("Geoprocessing"), self.tr( "Error loading output shapefile:\n%1" ).arg( unicode( outPath ) ))
9698
self.progressBar.setValue(0)
99+
self.buttonOk.setEnabled( True )
97100

98101
def outFile(self):
99102
self.outShape.clear()

‎python/plugins/fTools/tools/doMeanCoords.py

Lines changed: 5 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ def __init__(self, iface, function):
1515
self.updateUi()
1616
QObject.connect(self.toolOut, SIGNAL("clicked()"), self.outFile)
1717
QObject.connect(self.inShape, SIGNAL("currentIndexChanged(QString)"), self.update)
18+
self.buttonOk = self.buttonBox_2.button( QDialogButtonBox.Ok )
1819

1920
# populate layer list
2021
self.progressBar.setValue(0)
@@ -44,6 +45,7 @@ def update(self, inputLayer):
4445
self.uniqueField.addItem(unicode(changedField[i].name()))
4546

4647
def accept(self):
48+
self.buttonOk.setEnabled( False )
4749
if self.inShape.currentText() == "":
4850
QMessageBox.information(self, self.tr("Coordinate statistics"), self.tr("No input vector layer specified"))
4951
elif self.outShape.text() == "":
@@ -74,7 +76,8 @@ def accept(self):
7476
render.addSymbol(symbol)
7577
self.vlayer.setRenderer(render)
7678
QgsMapLayerRegistry.instance().addMapLayer(self.vlayer)
77-
self.progressBar.setValue(0)
79+
self.progressBar.setValue(0)
80+
self.buttonOk.setEnabled( True )
7881

7982
def outFile(self):
8083
self.outShape.clear()
@@ -137,7 +140,7 @@ def compute(self, inName, outName, weightField="", times=1, uniqueField=""):
137140
else:
138141
weight = float(feat.attributeMap()[weightIndex].toDouble()[0])
139142
geom = QgsGeometry(feat.geometry())
140-
geom = self.extract(geom)
143+
geom = ftools_utils.extractPoints(geom)
141144
for i in geom:
142145
cx += i.x()
143146
cy += i.y()
@@ -180,31 +183,3 @@ def compute(self, inName, outName, weightField="", times=1, uniqueField=""):
180183
if single:
181184
break
182185
del writer
183-
184-
def extract(self, geom):
185-
multi_geom = QgsGeometry()
186-
temp_geom = []
187-
if geom.type() == 0: # it's a point
188-
if geom.isMultipart():
189-
temp_geom = geom.asMultiPoint()
190-
else:
191-
temp_geom.append(geom.asPoint())
192-
if geom.type() == 1: # it's a line
193-
if geom.isMultipart():
194-
multi_geom = geom.asMultiPolyline() #multi_geog is a multiline
195-
for i in multi_geom: #i is a line
196-
temp_geom.extend(i)
197-
else:
198-
temp_geom = geom.asPolyline()
199-
elif geom.type() == 2: # it's a polygon
200-
if geom.isMultipart():
201-
multi_geom = geom.asMultiPolygon() #multi_geom is a multipolygon
202-
for i in multi_geom: #i is a polygon
203-
for j in i: #j is a line
204-
temp_geom.extend(j)
205-
else:
206-
multi_geom = geom.asPolygon() #multi_geom is a polygon
207-
for i in multi_geom: #i is a line
208-
temp_geom.extend(i)
209-
return temp_geom
210-

‎python/plugins/fTools/tools/doPointsInPolygon.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ def __init__(self, iface):
4646
self.setupUi(self)
4747
QObject.connect(self.toolOut, SIGNAL("clicked()"), self.outFile)
4848
self.setWindowTitle(self.tr("Count Points in Polygon"))
49+
self.buttonOk = self.buttonBox_2.button( QDialogButtonBox.Ok )
4950
# populate layer list
5051
self.progressBar.setValue(0)
5152
mapCanvas = self.iface.mapCanvas()
@@ -55,6 +56,7 @@ def __init__(self, iface):
5556
self.inPoint.addItems(layers)
5657

5758
def accept(self):
59+
self.buttonOk.setEnabled( False )
5860
if self.inPolygon.currentText() == "":
5961
QMessageBox.information(self, self.tr("Count Points In Polygon"), self.tr("Please specify input polygon vector layer"))
6062
elif self.outShape.text() == "":
@@ -81,6 +83,7 @@ def accept(self):
8183
self.vlayer = QgsVectorLayer(outPath, unicode(outName), "ogr")
8284
QgsMapLayerRegistry.instance().addMapLayer(self.vlayer)
8385
self.progressBar.setValue(0)
86+
self.buttonOk.setEnabled( True )
8487

8588
def outFile(self):
8689
self.outShape.clear()

‎python/plugins/fTools/tools/doRandPoints.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,12 @@ def __init__(self, iface):
4848
QObject.connect(self.inShape, SIGNAL("currentIndexChanged(QString)"), self.update)
4949
self.progressBar.setValue(0)
5050
self.setWindowTitle(self.tr("Random Points"))
51+
self.buttonOk = self.buttonBox_2.button( QDialogButtonBox.Ok )
5152
self.mapCanvas = self.iface.mapCanvas()
5253
layers = ftools_utils.getLayerNames([QGis.Polygon, "Raster"])
5354
self.inShape.addItems(layers)
5455

55-
# If input layer is changed, update field list
56+
# If input layer is changed, update field list
5657
def update(self, inputLayer):
5758
self.cmbField.clear()
5859
changedLayer = ftools_utils.getMapLayerByName(unicode(inputLayer))
@@ -75,8 +76,9 @@ def update(self, inputLayer):
7576
self.cmbField.setEnabled(False)
7677
self.label_4.setEnabled(False)
7778

78-
# when 'OK' button is pressed, gather required inputs, and initiate random points generation
79+
# when 'OK' button is pressed, gather required inputs, and initiate random points generation
7980
def accept(self):
81+
self.buttonOk.setEnabled( False )
8082
if self.inShape.currentText() == "":
8183
QMessageBox.information(self, self.tr("Random Points"), self.tr("No input layer specified"))
8284
elif self.outShape.text() == "":
@@ -127,7 +129,8 @@ def accept(self):
127129
if addToTOC == QMessageBox.Yes:
128130
self.vlayer = QgsVectorLayer(outPath, unicode(outName), "ogr")
129131
QgsMapLayerRegistry.instance().addMapLayer(self.vlayer)
130-
self.progressBar.setValue(0)
132+
self.progressBar.setValue(0)
133+
self.buttonOk.setEnabled( True )
131134

132135
def outFile(self):
133136
self.outShape.clear()
@@ -136,7 +139,7 @@ def outFile(self):
136139
return
137140
self.outShape.setText( QString( self.shapefileName ) )
138141

139-
# combine all polygons in layer to create single polygon (slow for complex polygons)
142+
# combine all polygons in layer to create single polygon (slow for complex polygons)
140143
def createSinglePolygon(self, vlayer):
141144
provider = vlayer.dataProvider()
142145
allAttrs = provider.attributeIndexes()
@@ -157,7 +160,7 @@ def createSinglePolygon(self, vlayer):
157160
self.progressBar.setValue(count)
158161
return geom
159162

160-
# Generate list of random points
163+
# Generate list of random points
161164
def simpleRandom(self, n, bound, xmin, xmax, ymin, ymax):
162165
seed()
163166
points = []

‎python/plugins/fTools/tools/doRandom.py

Lines changed: 28 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -17,36 +17,39 @@ def __init__(self, iface):
1717
# populate layer list
1818
self.progressBar.setValue(0)
1919
mapCanvas = self.iface.mapCanvas()
20+
self.buttonOk = self.buttonBox_2.button( QDialogButtonBox.Ok )
2021
layers = ftools_utils.getLayerNames([QGis.Point, QGis.Line, QGis.Polygon])
2122
self.inShape.addItems(layers)
2223

2324
def changed(self, inputLayer):
24-
changedLayer = ftools_utils.getVectorLayerByName(inputLayer)
25-
changedProvider = changedLayer.dataProvider()
26-
upperVal = changedProvider.featureCount()
27-
self.spnNumber.setMaximum(upperVal)
25+
changedLayer = ftools_utils.getVectorLayerByName(inputLayer)
26+
changedProvider = changedLayer.dataProvider()
27+
upperVal = changedProvider.featureCount()
28+
self.spnNumber.setMaximum(upperVal)
2829

2930
def accept(self):
30-
if self.inShape.currentText() == "":
31-
QMessageBox.information(self, self.tr("Random Selection Tool"), self.tr("No input shapefile specified"))
32-
else:
31+
self.buttonOk.setEnabled( False )
32+
if self.inShape.currentText() == "":
33+
QMessageBox.information(self, self.tr("Random Selection Tool"), self.tr("No input shapefile specified"))
34+
else:
3335
self.progressBar.setValue(10)
3436
inName = self.inShape.currentText()
35-
self.progressBar.setValue(20)
36-
layer = ftools_utils.getVectorLayerByName(inName)
37-
self.progressBar.setValue(30)
38-
if self.rdoNumber.isChecked():
39-
value = self.spnNumber.value()
40-
self.progressBar.setValue(60)
41-
else:
42-
value = self.spnPercent.value()
43-
self.progressBar.setValue(50)
44-
value = int(round((value / 100.0000), 4) * layer.featureCount())
45-
self.progressBar.setValue(60)
46-
selran = random.sample(xrange(0, layer.featureCount()), value)
47-
self.progressBar.setValue(70)
48-
self.progressBar.setValue(80)
49-
self.progressBar.setValue(90)
50-
self.progressBar.setValue(100)
51-
layer.setSelectedFeatures(selran)
52-
self.progressBar.setValue(0)
37+
self.progressBar.setValue(20)
38+
layer = ftools_utils.getVectorLayerByName(inName)
39+
self.progressBar.setValue(30)
40+
if self.rdoNumber.isChecked():
41+
value = self.spnNumber.value()
42+
self.progressBar.setValue(60)
43+
else:
44+
value = self.spnPercent.value()
45+
self.progressBar.setValue(50)
46+
value = int(round((value / 100.0000), 4) * layer.featureCount())
47+
self.progressBar.setValue(60)
48+
selran = random.sample(xrange(0, layer.featureCount()), value)
49+
self.progressBar.setValue(70)
50+
self.progressBar.setValue(80)
51+
self.progressBar.setValue(90)
52+
self.progressBar.setValue(100)
53+
layer.setSelectedFeatures(selran)
54+
self.progressBar.setValue(0)
55+
self.buttonOk.setEnabled( True )

‎python/plugins/fTools/tools/doReProject.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ def __init__(self, iface):
1818
QObject.connect(self.inShape, SIGNAL("currentIndexChanged(QString)"), self.updateProj1)
1919
QObject.connect(self.cmbLayer, SIGNAL("currentIndexChanged(QString)"), self.updateProj2)
2020
self.setWindowTitle( self.tr("Export to new projection") )
21+
self.buttonOk = self.buttonBox_2.button( QDialogButtonBox.Ok )
2122
self.progressBar.setValue(0)
2223
mapCanvas = self.iface.mapCanvas()
2324
layers = ftools_utils.getLayerNames([QGis.Point, QGis.Line, QGis.Polygon])
@@ -37,6 +38,7 @@ def updateProj2(self, layerName):
3738
self.outRef.insert(unicode(crs))
3839

3940
def accept(self):
41+
self.buttonOk.setEnabled( False )
4042
if self.inShape.currentText() == "":
4143
QMessageBox.information(self, self.tr("Export to new projection"), self.tr("No input layer specified"))
4244
elif self.outShape.text() == "":
@@ -64,6 +66,7 @@ def accept(self):
6466
self.vlayer = QgsVectorLayer(outPath, unicode(outName), "ogr")
6567
QgsMapLayerRegistry.instance().addMapLayer(self.vlayer)
6668
self.progressBar.setValue(0)
69+
self.buttonOk.setEnabled( True )
6770

6871
def outProjFile(self):
6972
format = QString( "<h2>%1</h2>%2 <br/> %3" )

‎python/plugins/fTools/tools/doRegPoints.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,14 @@ def __init__(self, iface):
5050
self.yMax.setValidator(QDoubleValidator(self.yMax))
5151
QObject.connect(self.toolOut, SIGNAL("clicked()"), self.outFile)
5252
self.setWindowTitle( self.tr("Regular points") )
53+
self.buttonOk = self.buttonBox_2.button( QDialogButtonBox.Ok )
5354
self.progressBar.setValue(0)
5455
self.mapCanvas = self.iface.mapCanvas()
5556
layers = ftools_utils.getLayerNames("all")
5657
self.inShape.addItems(layers)
5758

5859
def accept(self):
60+
self.buttonOk.setEnabled( False )
5961
if not self.rdoCoordinates.isChecked() and self.inShape.currentText() == "":
6062
QMessageBox.information(self, self.tr("Generate Regular Points"), self.tr("Please specify input layer"))
6163
elif self.rdoCoordinates.isChecked() and (self.xMin.text() == "" or self.xMax.text() == "" or self.yMin.text() == "" or self.yMax.text() == ""):
@@ -90,7 +92,8 @@ def accept(self):
9092
if addToTOC == QMessageBox.Yes:
9193
self.vlayer = QgsVectorLayer(outPath, unicode(outName), "ogr")
9294
QgsMapLayerRegistry.instance().addMapLayer(self.vlayer)
93-
self.progressBar.setValue(0)
95+
self.progressBar.setValue(0)
96+
self.buttonOk.setEnabled( True )
9497

9598
def outFile(self):
9699
self.outShape.clear()
@@ -99,7 +102,7 @@ def outFile(self):
99102
return
100103
self.outShape.setText( QString( self.shapefileName ) )
101104

102-
# Generate list of random points
105+
# Generate list of random points
103106
def simpleRandom(self, n, bound, xmin, xmax, ymin, ymax):
104107
seed()
105108
points = []

‎python/plugins/fTools/tools/doSelectByLocation.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ def __init__(self, iface):
1212
self.iface = iface
1313
# Set up the user interface from Designer.
1414
self.setupUi(self)
15+
self.buttonOk = self.buttonBox_2.button( QDialogButtonBox.Ok )
1516

1617
# populate layer list
1718
self.progressBar.setValue(0)
@@ -41,6 +42,7 @@ def updateUI(self):
4142
self.resize(381, 100)
4243

4344
def accept(self):
45+
self.buttonOk.setEnabled( False )
4446
if self.inPolygon.currentText() == "":
4547
QMessageBox.information(self, self.tr("Select by location"), self.tr( "Please specify input layer"))
4648
elif self.inPoint.currentText() == "":
@@ -50,6 +52,7 @@ def accept(self):
5052
inPts = self.inPoint.currentText()
5153
self.compute(inPoly, inPts, self.cmbModify.currentText())
5254
self.progressBar.setValue(0)
55+
self.buttonOk.setEnabled( True )
5356

5457
def compute(self, inPoly, inPts, modify):
5558
inputLayer = ftools_utils.getVectorLayerByName(inPoly)

‎python/plugins/fTools/tools/doSpatialJoin.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ def __init__(self, iface):
4848
self.setupUi(self)
4949
QObject.connect(self.toolOut, SIGNAL("clicked()"), self.outFile)
5050
self.setWindowTitle( self.tr("Join attributes by location") )
51+
self.buttonOk = self.buttonBox_2.button( QDialogButtonBox.Ok )
5152
# populate layer list
5253
self.progressBar.setValue(0)
5354
mapCanvas = self.iface.mapCanvas()
@@ -56,6 +57,7 @@ def __init__(self, iface):
5657
self.joinShape.addItems(layers)
5758

5859
def accept(self):
60+
self.buttonOk.setEnabled( False )
5961
if self.inShape.currentText() == "":
6062
QMessageBox.information(self, self.tr("Spatial Join"), self.tr("Please specify target vector layer") )
6163
elif self.outShape.text() == "":
@@ -96,6 +98,7 @@ def accept(self):
9698
self.vlayer = QgsVectorLayer(outPath, unicode(outName), "ogr")
9799
QgsMapLayerRegistry.instance().addMapLayer(self.vlayer)
98100
self.progressBar.setValue(0)
101+
self.buttonOk.setEnabled( True )
99102

100103
def outFile(self):
101104
self.outShape.clear()

‎python/plugins/fTools/tools/doSubsetSelect.py

Lines changed: 4 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ def __init__(self, iface):
4545
self.setupUi(self)
4646
QObject.connect(self.inShape, SIGNAL("currentIndexChanged(QString)"), self.update)
4747
self.setWindowTitle(self.tr("Random selection within subsets"))
48+
self.buttonOk = self.buttonBox_2.button( QDialogButtonBox.Ok )
4849
# populate layer list
4950
self.progressBar.setValue(0)
5051
mapCanvas = self.iface.mapCanvas()
@@ -61,6 +62,7 @@ def update(self, inputLayer):
6162
self.spnNumber.setMaximum( maxFeatures )
6263

6364
def accept(self):
65+
self.buttonOk.setEnabled( False )
6466
if self.inShape.currentText() == "":
6567
QMessageBox.information(self, self.tr("Random selection within subsets"), self.tr("Please specify input vector layer"))
6668
elif self.inField.currentText() == "":
@@ -77,26 +79,12 @@ def accept(self):
7779
self.compute(inVect, uidField, value, perc, self.progressBar)
7880
self.progressBar.setValue(100)
7981
self.progressBar.setValue(0)
80-
81-
def outFile(self):
82-
self.outShape.clear()
83-
fileDialog = QFileDialog()
84-
fileDialog.setConfirmOverwrite(False)
85-
outName = fileDialog.getSaveFileName(self, self.tr("Output Shapefile"),".", self.tr("Shapefiles (*.shp)"))
86-
fileCheck = QFile(outName)
87-
if fileCheck.exists():
88-
QMessageBox.warning(self, self.tr("Random selection within subsets"), self.tr("Cannot overwrite existing shapefile..."))
89-
else:
90-
filePath = QFileInfo(outName).absoluteFilePath()
91-
if filePath.right(4) != ".shp": filePath = filePath + ".shp"
92-
if not outName.isEmpty():
93-
self.outShape.clear()
94-
self.outShape.insert(filePath)
82+
self.buttonOk.setEnabled( True )
9583

9684
def compute(self, inVect, inField, value, perc, progressBar):
9785
vlayer = ftools_utils.getVectorLayerByName(inVect)
9886
vprovider = vlayer.dataProvider()
99-
mlayer = self.getMapLayerByName(inVect)
87+
mlayer = ftools_utils.getMapLayerByName(inVect)
10088
allAttrs = vprovider.attributeIndexes()
10189
vprovider.select(allAttrs)
10290
index = vprovider.fieldNameIndex(inField)
@@ -129,11 +117,3 @@ def compute(self, inVect, inField, value, perc, progressBar):
129117
mlayer.setSelectedFeatures(selran)
130118
else:
131119
mlayer.setSelectedFeatures(range(0, mlayer.featureCount()))
132-
133-
def getMapLayerByName(self, myName):
134-
mc = self.iface.mapCanvas()
135-
nLayers = mc.layerCount()
136-
for l in range(nLayers):
137-
layer = mc.layer(l)
138-
if layer.name() == unicode(myName,'latin1'):
139-
return layer

‎python/plugins/fTools/tools/doSumLines.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ def __init__(self, iface):
4646
self.setupUi(self)
4747
QObject.connect(self.toolOut, SIGNAL("clicked()"), self.outFile)
4848
self.setWindowTitle(self.tr("Sum line lengths"))
49+
self.buttonOk = self.buttonBox_2.button( QDialogButtonBox.Ok )
4950
# populate layer list
5051
self.progressBar.setValue(0)
5152
mapCanvas = self.iface.mapCanvas()
@@ -55,6 +56,7 @@ def __init__(self, iface):
5556
self.inPolygon.addItems(layers)
5657

5758
def accept(self):
59+
self.buttonOk.setEnabled( False )
5860
if self.inPolygon.currentText() == "":
5961
QMessageBox.information(self, self.tr("Sum Line Lengths In Polyons"), self.tr("Please specify input polygon vector layer"))
6062
elif self.outShape.text() == "":
@@ -81,6 +83,7 @@ def accept(self):
8183
self.vlayer = QgsVectorLayer(outPath, unicode(outName), "ogr")
8284
QgsMapLayerRegistry.instance().addMapLayer(self.vlayer)
8385
self.progressBar.setValue(0)
86+
self.buttonOk.setEnabled( True )
8487

8588
def outFile(self):
8689
self.outShape.clear()

‎python/plugins/fTools/tools/doVectorGrid.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ def __init__(self, iface):
4646
#QObject.connect(self.inShape, SIGNAL("currentIndexChanged(QString)"), self.updateInput)
4747
QObject.connect(self.btnUpdate, SIGNAL("clicked()"), self.updateLayer)
4848
QObject.connect(self.btnCanvas, SIGNAL("clicked()"), self.updateCanvas)
49+
self.buttonOk = self.buttonBox_2.button( QDialogButtonBox.Ok )
4950
self.setWindowTitle(self.tr("Vector grid"))
5051
self.xMin.setValidator(QDoubleValidator(self.xMin))
5152
self.xMax.setValidator(QDoubleValidator(self.xMax))
@@ -78,6 +79,7 @@ def updateExtents( self, boundBox ):
7879
self.yMax.setText( unicode( boundBox.yMaximum() ) )
7980

8081
def accept(self):
82+
self.buttonOk.setEnabled( False )
8183
if self.xMin.text() == "" or self.xMax.text() == "" or self.yMin.text() == "" or self.yMax.text() == "":
8284
QMessageBox.information(self, self.tr("Vector grid"), self.tr("Please specify valid extent coordinates"))
8385
elif self.outShape.text() == "":
@@ -100,7 +102,8 @@ def accept(self):
100102
addToTOC = QMessageBox.question(self, self.tr("Generate Vector Grid"), self.tr("Created output shapefile:\n%1\n\nWould you like to add the new layer to the TOC?").arg(unicode(self.shapefileName)), QMessageBox.Yes, QMessageBox.No, QMessageBox.NoButton)
101103
if addToTOC == QMessageBox.Yes:
102104
ftools_utils.addShapeToCanvas( self.shapefileName )
103-
self.progressBar.setValue( 0 )
105+
self.progressBar.setValue( 0 )
106+
self.buttonOk.setEnabled( True )
104107

105108
def compute( self, bound, xOffset, yOffset, polygon ):
106109
crs = self.iface.mapCanvas().mapRenderer().destinationSrs()

‎python/plugins/fTools/tools/doVisual.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ def __init__( self, iface, function ):
1616
QObject.connect( self.inShape, SIGNAL( "currentIndexChanged(QString)" ), self.update )
1717
self.manageGui()
1818
self.cancel_close = self.buttonBox_2.button( QDialogButtonBox.Close )
19+
self.buttonOk = self.buttonBox_2.button( QDialogButtonBox.Ok )
1920
self.progressBar.setValue( 0 )
2021
self.partProgressBar.setValue( 0 )
2122
self.partProgressBar.setVisible( False )
@@ -110,6 +111,7 @@ def visual( self, myLayer, myField, mySelection ):
110111
self.tblUnique.clearContents()
111112
self.tblUnique.setRowCount( 0 )
112113
self.lstCount.clear()
114+
self.buttonOk.setEnabled( False )
113115
self.testThread = visualThread( self.iface.mainWindow(), self, self.myFunction, vlayer, myField, mySelection )
114116
QObject.connect( self.testThread, SIGNAL( "runFinished(PyQt_PyObject)" ), self.runFinishedFromThread )
115117
QObject.connect( self.testThread, SIGNAL( "runStatus(PyQt_PyObject)" ), self.runStatusFromThread )
@@ -123,9 +125,11 @@ def visual( self, myLayer, myField, mySelection ):
123125

124126
def cancelThread( self ):
125127
self.testThread.stop()
128+
self.buttonOk.setEnabled( True )
126129

127130
def runFinishedFromThread( self, output ):
128131
self.testThread.stop()
132+
self.buttonOk.setEnabled( True )
129133
result = output[ 0 ]
130134
numRows = len( result )
131135
self.tblUnique.setRowCount( numRows )
@@ -195,7 +199,7 @@ def run( self ):
195199
self.emit( SIGNAL( "runStatus(PyQt_PyObject)" ), 0 )
196200

197201
def stop(self):
198-
self.running = False
202+
self.running = False
199203

200204
def list_unique_values( self, vlayer, myField ):
201205
vprovider = vlayer.dataProvider()

0 commit comments

Comments
 (0)
Please sign in to comment.