[QGIS Commit] r13204 - in trunk/qgis/python/plugins/fTools: .
icons/default tools
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Tue Mar 30 16:37:56 EDT 2010
Author: cfarmer
Date: 2010-03-30 16:37:55 -0400 (Tue, 30 Mar 2010)
New Revision: 13204
Added:
trunk/qgis/python/plugins/fTools/icons/default/merge_shapes.png
trunk/qgis/python/plugins/fTools/tools/doMergeShapes.py
trunk/qgis/python/plugins/fTools/tools/frmMergeShapes.ui
Modified:
trunk/qgis/python/plugins/fTools/fTools.py
trunk/qgis/python/plugins/fTools/resources.qrc
Log:
Adds 'merge shapes' tool to fTools (vector tools). Thanks to Alexander Bruy for the patch.
Modified: trunk/qgis/python/plugins/fTools/fTools.py
===================================================================
--- trunk/qgis/python/plugins/fTools/fTools.py 2010-03-30 14:35:07 UTC (rev 13203)
+++ trunk/qgis/python/plugins/fTools/fTools.py 2010-03-30 20:37:55 UTC (rev 13204)
@@ -1,5 +1,6 @@
+# -*- coding: utf-8 -*-
#-----------------------------------------------------------
-#
+#
# fTools
# Copyright (C) 2009 Carson Farmer
# EMAIL: carson.farmer (at) gmail.com
@@ -7,27 +8,27 @@
#
# A collection of data management and analysis tools for vector data
#
-# Geoprocessing functions adapted from 'Geoprocessing Plugin',
+# Geoprocessing functions adapted from 'Geoprocessing Plugin',
# (C) 2008 by Dr. Horst Duester, Stefan Ziegler
#
#-----------------------------------------------------------
-#
+#
# licensed under the terms of GNU GPL 2
-#
+#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
-#
+#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
-#
+#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-#
+#
#---------------------------------------------------------------------
from PyQt4.QtCore import *
@@ -44,7 +45,8 @@
# TODO: Eliminate the following modules in favour of above multi-function formats
import doIntersectLines, doJoinAttributes, doSelectByLocation, doVectorSplit, doMeanCoords
import doPointDistance, doPointsInPolygon, doRandom, doRandPoints, doRegPoints, doDefineProj
-import doReProject, doSpatialJoin, doSubsetSelect, doSumLines, doVectorGrid, doAbout
+import doReProject, doSpatialJoin, doSubsetSelect, doSumLines, doVectorGrid, doMergeShapes
+import doAbout
class fToolsPlugin:
def __init__( self,iface ):
@@ -53,7 +55,7 @@
self.QgisVersion = unicode( QGis.QGIS_VERSION_INT )
except:
self.QgisVersion = unicode( QGis.qgisVersion )[ 0 ]
-
+
def getThemeIcon( self, icon ):
settings = QSettings()
pluginPath = QString( os.path.dirname( __file__ ) )
@@ -65,7 +67,7 @@
return QIcon( ":" + defaultPath )
else:
return QIcon()
-
+
def updateThemeIcons( self, theme ):
self.analysisMenu.setIcon( QIcon( self.getThemeIcon( "analysis.png" ) ) )
self.distMatrix.setIcon( QIcon( self.getThemeIcon( "matrix.png" ) ) )
@@ -75,13 +77,13 @@
self.listUnique.setIcon( QIcon( self.getThemeIcon( "unique.png" ) ) )
self.nearestNeigh.setIcon( QIcon( self.getThemeIcon( "neighbour.png" ) ) )
self.meanCoords.setIcon( QIcon( self.getThemeIcon( "mean.png" ) ) )
- self.intLines.setIcon( QIcon( self.getThemeIcon( "intersections.png" ) ) )
+ self.intLines.setIcon( QIcon( self.getThemeIcon( "intersections.png" ) ) )
self.researchMenu.setIcon( QIcon( self.getThemeIcon( "sampling.png" ) ) )
- self.randSel.setIcon( QIcon( self.getThemeIcon( "random_selection.png" ) ) )
- self.randSub.setIcon( QIcon( self.getThemeIcon( "sub_selection.png" ) ) )
- self.randPoints.setIcon( QIcon( self.getThemeIcon( "random_points.png" ) ) )
- self.regPoints.setIcon( QIcon( self.getThemeIcon( "regular_points.png" ) ) )
+ self.randSel.setIcon( QIcon( self.getThemeIcon( "random_selection.png" ) ) )
+ self.randSub.setIcon( QIcon( self.getThemeIcon( "sub_selection.png" ) ) )
+ self.randPoints.setIcon( QIcon( self.getThemeIcon( "random_points.png" ) ) )
+ self.regPoints.setIcon( QIcon( self.getThemeIcon( "regular_points.png" ) ) )
self.vectGrid.setIcon( QIcon( self.getThemeIcon( "vector_grid.png" ) ) )
self.selectLocation.setIcon( QIcon( self.getThemeIcon( "select_location.png" ) ) )
self.layerExtent.setIcon( QIcon( self.getThemeIcon( "layer_extent.png" ) ) )
@@ -104,27 +106,28 @@
self.extNodes.setIcon( QIcon( self.getThemeIcon( "extract_nodes.png") ) )
self.simplify.setIcon( QIcon( self.getThemeIcon( "simplify.png") ) )
self.multiToSingle.setIcon( QIcon( self.getThemeIcon( "multi_to_single.png") ) )
- self.singleToMulti.setIcon( QIcon( self.getThemeIcon( "single_to_multi.png") ) )
+ self.singleToMulti.setIcon( QIcon( self.getThemeIcon( "single_to_multi.png") ) )
self.polysToLines.setIcon( QIcon( self.getThemeIcon( "to_lines.png") ) )
-
+
self.dataManageMenu.setIcon( QIcon( self.getThemeIcon( "management.png") ) )
self.project.setIcon( QIcon( self.getThemeIcon( "export_projection.png") ) )
- self.define.setIcon( QIcon( self.getThemeIcon( "define_projection.png" ) ) )
- self.joinAttr.setIcon( QIcon( self.getThemeIcon( "join_attributes.png" ) ) )
+ self.define.setIcon( QIcon( self.getThemeIcon( "define_projection.png" ) ) )
+ self.joinAttr.setIcon( QIcon( self.getThemeIcon( "join_attributes.png" ) ) )
self.spatJoin.setIcon( QIcon( self.getThemeIcon( "join_location.png" ) ) )
self.splitVect.setIcon( QIcon( self.getThemeIcon( "split_layer.png" ) ) )
+ self.mergeShapes.setIcon( QIcon( self.getThemeIcon( "merge_shapes.png" ) ) )
self.ftools_aboot.setIcon( QIcon( self.getThemeIcon( "ftools_logo.png" ) ) )
def initGui( self ):
if int( self.QgisVersion ) < 1:
- QMessageBox.warning( self.iface.getMainWindow(), "fTools",
+ QMessageBox.warning( self.iface.getMainWindow(), "fTools",
QCoreApplication.translate( "fTools", "Quantum GIS version detected: " ) +unicode( self.QgisVersion )+".xx\n"
+ QCoreApplication.translate( "fTools", "This version of fTools requires at least QGIS version 1.0.0\nPlugin will not be enabled." ) )
return None
QObject.connect( self.iface, SIGNAL( "currentThemeChanged ( QString )" ), self.updateThemeIcons )
self.menu = QMenu()
self.menu.setTitle( QCoreApplication.translate( "fTools", "&Vector" ) )
-
+
self.analysisMenu = QMenu( QCoreApplication.translate( "fTools", "&Analysis Tools" ) )
self.distMatrix = QAction( QCoreApplication.translate( "fTools", "Distance matrix" ),self.iface.mainWindow( ) )
self.sumLines = QAction( QCoreApplication.translate( "fTools", "Sum line lengths" ), self.iface.mainWindow() )
@@ -145,7 +148,7 @@
self.vectGrid = QAction( QCoreApplication.translate( "fTools", "Vector grid" ), self.iface.mainWindow() )
self.selectLocation = QAction( QCoreApplication.translate( "fTools", "Select by location" ), self.iface.mainWindow() )
self.layerExtent = QAction( QCoreApplication.translate( "fTools", "Polygon from layer extent" ), self.iface.mainWindow() )
- self.researchMenu.addActions( [ self.randSel, self.randSub, self.randPoints,
+ self.researchMenu.addActions( [ self.randSel, self.randSub, self.randPoints,
self.regPoints, self.vectGrid, self.selectLocation, self.layerExtent ] )
self.geoMenu = QMenu( QCoreApplication.translate( "fTools", "&Geoprocessing Tools" ) )
@@ -157,7 +160,7 @@
self.clip = QAction( QCoreApplication.translate( "fTools", "Clip" ),self.iface.mainWindow() )
self.dissolve = QAction( QCoreApplication.translate( "fTools", "Dissolve" ),self.iface.mainWindow() )
self.erase = QAction( QCoreApplication.translate( "fTools", "Difference" ),self.iface.mainWindow() )
- self.geoMenu.addActions( [ self.minConvex, self.dynaBuffer, self.intersect,
+ self.geoMenu.addActions( [ self.minConvex, self.dynaBuffer, self.intersect,
self.union, self.symDifference, self.clip, self.erase, self.dissolve ] )
self.conversionMenu = QMenu( QCoreApplication.translate( "fTools", "G&eometry Tools" ) )
@@ -170,7 +173,7 @@
self.multiToSingle = QAction( QCoreApplication.translate( "fTools", "Multipart to singleparts" ),self.iface.mainWindow() )
self.singleToMulti = QAction( QCoreApplication.translate( "fTools", "Singleparts to multipart" ),self.iface.mainWindow() )
self.polysToLines = QAction( QCoreApplication.translate( "fTools", "Polygons to lines" ),self.iface.mainWindow() )
- self.conversionMenu.addActions( [ self.checkGeom, self.compGeo, self.centroids, self.delaunay,
+ self.conversionMenu.addActions( [ self.checkGeom, self.compGeo, self.centroids, self.delaunay,
self.simplify, self.multiToSingle, self.singleToMulti, self.polysToLines, self.extNodes] )
self.dataManageMenu = QMenu( QCoreApplication.translate( "fTools", "&Data Management Tools") )
@@ -179,10 +182,11 @@
self.joinAttr = QAction( QCoreApplication.translate( "fTools", "Join attributes" ), self.iface.mainWindow() )
self.spatJoin = QAction( QCoreApplication.translate( "fTools", "Join attributes by location" ), self.iface.mainWindow() )
self.splitVect = QAction( QCoreApplication.translate( "fTools", "Split vector layer" ), self.iface.mainWindow() )
- self.dataManageMenu.addActions( [ self.project, self.define, self.joinAttr, self.spatJoin, self.splitVect ] )
+ self.mergeShapes = QAction( QCoreApplication.translate( "fTools", "Merge shapefiles to one" ), self.iface.mainWindow() )
+ self.dataManageMenu.addActions( [ self.project, self.define, self.joinAttr, self.spatJoin, self.splitVect, self.mergeShapes ] )
self.ftools_aboot = QAction( QCoreApplication.translate( "fTools", "fTools Information" ), self.iface.mainWindow() )
self.updateThemeIcons( "theme" )
-
+
self.menu.addMenu( self.analysisMenu )
self.menu.addMenu( self.researchMenu )
self.menu.addMenu( self.geoMenu )
@@ -195,7 +199,7 @@
actions = menu_bar.actions()
lastAction = actions[ len( actions ) - 1 ]
menu_bar.insertMenu( lastAction, self.menu )
-
+
QObject.connect( self.distMatrix, SIGNAL("triggered()"), self.dodistMatrix )
QObject.connect( self.sumLines, SIGNAL("triggered()"), self.dosumLines )
QObject.connect( self.pointsPoly, SIGNAL("triggered()"), self.dopointsPoly )
@@ -237,6 +241,7 @@
QObject.connect( self.joinAttr, SIGNAL("triggered()"), self.dojoinAttr )
QObject.connect( self.spatJoin, SIGNAL("triggered()"), self.dospatJoin )
QObject.connect( self.splitVect, SIGNAL("triggered()"), self.dosplitVect )
+ QObject.connect( self.mergeShapes, SIGNAL( "triggered()" ), self.doMergeShapes )
QObject.connect( self.ftools_aboot, SIGNAL("triggered()"), self.doaboot )
@@ -314,11 +319,11 @@
def docentroids( self ):
d = doGeometry.GeometryDialog( self.iface, 7 )
d.exec_()
-
+
def dodelaunay( self ):
d = doGeometry.GeometryDialog( self.iface, 8 )
d.exec_()
-
+
def doextent( self ):
d = doGeometry.GeometryDialog( self.iface, 9 )
d.exec_()
@@ -391,6 +396,10 @@
d = doSpatialJoin.Dialog( self.iface )
d.exec_()
+ def doMergeShapes( self ):
+ d = doMergeShapes.Dialog( self.iface )
+ d.exec_()
+
def doaboot( self ):
d = doAbout.Dialog( self.iface )
d.exec_()
Added: trunk/qgis/python/plugins/fTools/icons/default/merge_shapes.png
===================================================================
(Binary files differ)
Property changes on: trunk/qgis/python/plugins/fTools/icons/default/merge_shapes.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Modified: trunk/qgis/python/plugins/fTools/resources.qrc
===================================================================
--- trunk/qgis/python/plugins/fTools/resources.qrc 2010-03-30 14:35:07 UTC (rev 13203)
+++ trunk/qgis/python/plugins/fTools/resources.qrc 2010-03-30 20:37:55 UTC (rev 13204)
@@ -41,6 +41,7 @@
<file>icons/default/sum_lines.png</file>
<file>icons/default/vector_grid.png</file>
<file>icons/default/split_layer.png</file>
+ <file>icons/default/merge_shapes.png</file>
<file>icons/default/neighbour.png</file>
<file>icons/default/delaunay.png</file>
<file>icons/default/layer_extent.png</file>
Added: trunk/qgis/python/plugins/fTools/tools/doMergeShapes.py
===================================================================
--- trunk/qgis/python/plugins/fTools/tools/doMergeShapes.py (rev 0)
+++ trunk/qgis/python/plugins/fTools/tools/doMergeShapes.py 2010-03-30 20:37:55 UTC (rev 13204)
@@ -0,0 +1,185 @@
+# -*- coding: utf-8 -*-
+
+from PyQt4.QtCore import *
+from PyQt4.QtGui import *
+
+from qgis.core import *
+from qgis.gui import *
+
+import ftools_utils
+
+from ui_frmMergeShapes import Ui_Dialog
+
+class Dialog( QDialog, Ui_Dialog ):
+ def __init__( self, iface ):
+ QDialog.__init__( self )
+ self.setupUi( self )
+ self.iface = iface
+
+ self.mergeThread = None
+
+ self.btnOk = self.buttonBox.button( QDialogButtonBox.Ok )
+ self.btnClose = self.buttonBox.button( QDialogButtonBox.Close )
+
+ QObject.connect( self.btnSelectDir, SIGNAL( "clicked()" ), self.inputDir )
+ QObject.connect( self.btnSelectFile, SIGNAL( "clicked()" ), self.outFile )
+
+ def inputDir( self ):
+ inDir = QFileDialog.getExistingDirectory( self,
+ self.tr( "Select directory with shapefiles to merge" ),
+ "." )
+
+ if inDir.isEmpty():
+ return
+
+ workDir = QDir( inDir )
+ workDir.setFilter( QDir.Files | QDir.NoSymLinks | QDir.NoDotAndDotDot )
+ nameFilter = QStringList() << "*.shp" << "*.SHP"
+ workDir.setNameFilters( nameFilter )
+ self.inputFiles = workDir.entryList()
+ if self.inputFiles.count() == 0:
+ QMessageBox.warning( self, self.tr( "No images found" ),
+ self.tr( "There are no shapefiles in this directory. Please select another one." ) )
+ self.inputFiles = None
+ return
+
+ self.progressFiles.setRange( 0, self.inputFiles.count() )
+ self.leInputDir.setText( inDir )
+
+ def outFile( self ):
+ ( self.outFileName, self.encoding ) = ftools_utils.saveDialog( self )
+ if self.outFileName is None or self.encoding is None:
+ return
+ self.leOutShape.setText( self.outFileName )
+
+ def reject( self ):
+ QDialog.reject( self )
+
+ def accept( self ):
+ outFile = QFile( self.outFileName )
+ if outFile.exists():
+ if not QgsVectorFileWriter.deleteShapeFile( self.outFileName ):
+ QMessageBox.warning( self, self.tr( "Delete error" ), self.tr( "Can't delete file %1" ).arg( outFileName ) )
+ return
+
+ baseDir = self.leInputDir.text()
+
+ QApplication.setOverrideCursor( QCursor( Qt.WaitCursor ) )
+ self.btnOk.setEnabled( False )
+
+ self.mergeThread = ShapeMergeThread( baseDir, self.inputFiles, self.outFileName, self.encoding )
+ QObject.connect( self.mergeThread, SIGNAL( "rangeChanged( PyQt_PyObject )" ), self.setProgressRange )
+ QObject.connect( self.mergeThread, SIGNAL( "featureProcessed()" ), self.featureProcessed )
+ QObject.connect( self.mergeThread, SIGNAL( "shapeProcessed()" ), self.shapeProcessed )
+ QObject.connect( self.mergeThread, SIGNAL( "processingFinished()" ), self.processingFinished )
+ QObject.connect( self.mergeThread, SIGNAL( "processingInterrupted()" ), self.processingInterrupted )
+
+ self.btnClose.setText( self.tr( "Cancel" ) )
+ QObject.disconnect( self.buttonBox, SIGNAL( "rejected()" ), self.reject )
+ QObject.connect( self.btnClose, SIGNAL( "clicked()" ), self.stopProcessing )
+
+ self.mergeThread.start()
+
+ def setProgressRange( self, max ):
+ self.progressFeatures.setRange( 0, max )
+
+ def featureProcessed( self ):
+ self.progressFeatures.setValue( self.progressFeatures.value() + 1 )
+
+ def shapeProcessed( self ):
+ self.progressFiles.setValue( self.progressFiles.value() + 1 )
+
+ def processingFinished( self ):
+ self.stopProcessing()
+
+ if self.chkAddToCanvas.isChecked():
+ if not ftools_utils.addShapeToCanvas( unicode( self.outFileName ) ):
+ QMessageBox.warning( self, self.tr( "Merging" ), self.tr( "Error loading output shapefile:\n%1" ).arg( unicode( self.outFileName ) ) )
+
+ self.restoreGui()
+
+ def processingInterrupted( self ):
+ self.restoreGui()
+
+ def stopProcessing( self ):
+ if self.mergeThread != None:
+ self.mergeThread.stop()
+ self.mergeThread = None
+
+ def restoreGui( self ):
+ self.progressFeatures.setValue( 0 )
+ self.progressFiles.setValue( 0 )
+ QApplication.restoreOverrideCursor()
+ QObject.connect( self.buttonBox, SIGNAL( "rejected()" ), self.reject )
+ self.btnClose.setText( self.tr( "Close" ) )
+ self.btnOk.setEnabled( True )
+
+class ShapeMergeThread( QThread ):
+ def __init__( self, dir, shapes, outputFileName, outputEncoding ):
+ QThread.__init__( self, QThread.currentThread() )
+ self.baseDir = dir
+ self.shapes = shapes
+ self.outputFileName = outputFileName
+ self.outputEncoding = outputEncoding
+
+ self.mutex = QMutex()
+ self.stopMe = 0
+
+ def run( self ):
+ self.mutex.lock()
+ self.stopMe = 0
+ self.mutex.unlock()
+
+ interrupted = False
+
+ # get information about shapefiles
+ layerPath = QFileInfo( self.baseDir + "/" + self.shapes[ 0 ] ).absoluteFilePath()
+ newLayer = QgsVectorLayer( layerPath, QFileInfo( layerPath ).baseName(), "ogr" )
+ self.crs = newLayer.srs()
+ self.geom = newLayer.wkbType()
+ vprovider = newLayer.dataProvider()
+ self.fields = vprovider.fields()
+
+ writer = QgsVectorFileWriter( self.outputFileName, self.outputEncoding,
+ self.fields, self.geom, self.crs )
+
+ for fileName in self.shapes:
+ layerPath = QFileInfo( self.baseDir + "/" + fileName ).absoluteFilePath()
+ newLayer = QgsVectorLayer( layerPath, QFileInfo( layerPath ).baseName(), "ogr" )
+ vprovider = newLayer.dataProvider()
+ allAttrs = vprovider.attributeIndexes()
+ vprovider.select( allAttrs )
+ nFeat = vprovider.featureCount()
+ self.emit( SIGNAL( "rangeChanged( PyQt_PyObject )" ), nFeat )
+ inFeat = QgsFeature()
+ outFeat = QgsFeature()
+ inGeom = QgsGeometry()
+ while vprovider.nextFeature( inFeat ):
+ atMap = inFeat.attributeMap()
+ inGeom = QgsGeometry( inFeat.geometry() )
+ outFeat.setGeometry( inGeom )
+ outFeat.setAttributeMap( atMap )
+ writer.addFeature( outFeat )
+ self.emit( SIGNAL( "featureProcessed()" ) )
+
+ self.emit( SIGNAL( "shapeProcessed()" ) )
+ self.mutex.lock()
+ s = self.stopMe
+ self.mutex.unlock()
+ if s == 1:
+ interrupted = True
+ break
+
+ del writer
+
+ if not interrupted:
+ self.emit( SIGNAL( "processingFinished()" ) )
+ else:
+ self.emit( SIGNAL( "processingInterrupted()" ) )
+
+ def stop( self ):
+ self.mutex.lock()
+ self.stopMe = 1
+ self.mutex.unlock()
+
+ QThread.wait( self )
Added: trunk/qgis/python/plugins/fTools/tools/frmMergeShapes.ui
===================================================================
--- trunk/qgis/python/plugins/fTools/tools/frmMergeShapes.ui (rev 0)
+++ trunk/qgis/python/plugins/fTools/tools/frmMergeShapes.ui 2010-03-30 20:37:55 UTC (rev 13204)
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Dialog</class>
+ <widget class="QDialog" name="Dialog">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>377</width>
+ <height>246</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Merge shapefiles</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Input directory</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QLineEdit" name="leInputDir"/>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnSelectDir">
+ <property name="text">
+ <string>Browse</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>Output shapefile</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <widget class="QLineEdit" name="leOutShape"/>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnSelectFile">
+ <property name="text">
+ <string>Browse</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="chkAddToCanvas">
+ <property name="text">
+ <string>Add result to map canvas</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QProgressBar" name="progressFeatures">
+ <property name="value">
+ <number>0</number>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QProgressBar" name="progressFiles">
+ <property name="value">
+ <number>0</number>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Close|QDialogButtonBox::Ok</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>accepted()</signal>
+ <receiver>Dialog</receiver>
+ <slot>accept()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>248</x>
+ <y>254</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>157</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>rejected()</signal>
+ <receiver>Dialog</receiver>
+ <slot>reject()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>316</x>
+ <y>260</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>286</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
More information about the QGIS-commit
mailing list