279 changes: 188 additions & 91 deletions python/plugins/db_manager/dlg_import_vector.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,14 @@
from PyQt4.QtGui import *

import qgis.core

from .db_plugins.plugin import DbError
from .dlg_db_error import DlgDbError
from qgis.utils import iface

from .ui.ui_DlgImportVector import Ui_DlgImportVector

class DlgImportVector(QDialog, Ui_DlgImportVector):

HAS_INPUT_MODE, ASK_FOR_INPUT_MODE = range(2)

def __init__(self, inLayer, outDb, outUri, parent=None):
QDialog.__init__(self, parent)
self.inLayer = inLayer
Expand All @@ -45,45 +45,129 @@ def __init__(self, inLayer, outDb, outUri, parent=None):
self.default_geom = "geom"

# updates of UI
for widget in [self.radCreate, self.chkDropTable, self.radAppend,
self.chkPrimaryKey, self.chkGeomColumn, self.chkSpatialIndex,
self.chkSourceSrid, self.chkTargetSrid, self.chkEncoding]:
self.connect(widget, SIGNAL("clicked()"), self.updateUi)
self.setupWorkingMode()

self.connect(self.cboSchema, SIGNAL("currentIndexChanged(int)"), self.populateTables)
self.connect(self.buttonBox, SIGNAL("accepted()"), self.importLayer)
self.cboTable.setEditText(self.outUri.table())

self.populateLayers()

self.connect(self.cboSchema, SIGNAL("currentIndexChanged(int)"), self.populateTables)
self.populateSchemas()
self.populateTables()

self.populateEncodings()
self.updateUi()

# set default values
self.cboTable.setEditText(self.outUri.table())

pk = self.outUri.keyColumn()
self.editPrimaryKey.setText(pk if pk != "" else self.default_pk)
if self.inLayer.hasGeometryType():
geom = self.outUri.geometryColumn()
self.editGeomColumn.setText(geom if geom != "" else self.default_geom)
def setupWorkingMode(self):
""" display the widget to select a layer/file if there's no input layer """
self.mode = self.ASK_FOR_INPUT_MODE if self.inLayer is None else self.HAS_INPUT_MODE
self.wdgInput.setVisible( self.mode == self.ASK_FOR_INPUT_MODE )

inCrs = self.inLayer.crs()
srid = inCrs.postgisSrid() if inCrs.isValid() else 4236
self.editSourceSrid.setText( "%s" % srid )
self.editTargetSrid.setText( "%s" % srid )
if not self.inLayer:
QObject.connect( self.btnChooseInputFile, SIGNAL("clicked()"), self.chooseInputFile )
#QObject.connect( self.cboInputLayer.lineEdit(), SIGNAL("editingFinished()"), self.updateInputLayer )
QObject.connect( self.cboInputLayer, SIGNAL("editTextChanged(const QString &)"), self.inputPathChanged )
#QObject.connect( self.cboInputLayer, SIGNAL("currentIndexChanged(int)"), self.updateInputLayer )
QObject.connect( self.btnUpdateInputLayer, SIGNAL("clicked()"), self.updateInputLayer )
else:
# set default values
pk = self.outUri.keyColumn()
self.editPrimaryKey.setText(pk if pk != "" else self.default_pk)
if self.inLayer.hasGeometryType():
geom = self.outUri.geometryColumn()
self.editGeomColumn.setText(geom if geom != "" else self.default_geom)

self.checkSupports()
inCrs = self.inLayer.crs()
srid = inCrs.postgisSrid() if inCrs.isValid() else 4236
self.editSourceSrid.setText( "%s" % srid )
self.editTargetSrid.setText( "%s" % srid )

self.checkSupports()

def checkSupports(self):
""" update options available for the current input layer """
allowSpatial = self.db.connector.hasSpatialSupport()
hasGeomType = self.inLayer.hasGeometryType()
hasGeomType = self.inLayer and self.inLayer.hasGeometryType()
self.chkGeomColumn.setEnabled(allowSpatial and hasGeomType)
self.chkSourceSrid.setEnabled(allowSpatial and hasGeomType)
self.chkTargetSrid.setEnabled(allowSpatial and hasGeomType)
#self.chkSinglePart.setEnabled(allowSpatial and hasGeomType)
self.chkSpatialIndex.setEnabled(allowSpatial and hasGeomType)





def populateLayers(self):
self.cboInputLayer.clear()
for index, layer in enumerate( iface.legendInterface().layers() ):
# TODO: add import raster support!
if layer.type() == qgis.core.QgsMapLayer.VectorLayer:
self.cboInputLayer.addItem( layer.name(), index )

def deleteInputLayer(self):
""" destroy the input layer instance, but only if it was
created from this dialog """
if self.mode == self.ASK_FOR_INPUT_MODE and self.inLayer:
self.inLayer.deleteLater()
self.inLayer = None
return True
return False

def chooseInputFile(self):
vectorFormats = qgis.core.QgsVectorFileWriter.fileFilterString()
# get last used dir and format
settings = QSettings()
lastDir = settings.value("/db_manager/lastUsedDir", "").toString()
lastVectorFormat = settings.value("/UI/lastVectorFileFilter", "").toString()
# ask for a filename
filename = QFileDialog.getOpenFileName(self, "Choose the file to import", lastDir, vectorFormats, lastVectorFormat)
if filename == "":
return
# store the last used dir and format
settings.setValue("/db_manager/lastUsedDir", QFileInfo(filename).filePath())
#settings.setValue("/UI/lastVectorFileFilter", lastVectorFormat)

self.cboInputLayer.setEditText( filename )

def inputPathChanged(self, path):
if self.cboInputLayer.currentIndex() < 0:
return
self.cboInputLayer.blockSignals(True)
self.cboInputLayer.setCurrentIndex( -1 )
self.cboInputLayer.setEditText( path )
self.cboInputLayer.blockSignals(False)

def updateInputLayer(self):
""" create the input layer and update available options """
if self.mode != self.ASK_FOR_INPUT_MODE:
return

self.deleteInputLayer()

index = self.cboInputLayer.currentIndex()
if index < 0:
filename = self.cboInputLayer.currentText()
if filename == "":
return False

layerName = QFileInfo(filename).completeBaseName()
layer = qgis.core.QgsVectorLayer(filename, layerName, "ogr")
if not layer.isValid() or layer.type() != qgis.core.QgsMapLayer.VectorLayer:
layer.deleteLater()
return False

self.inLayer = layer

else:
legendIndex = self.cboInputLayer.itemData( index ).toInt()[0]
self.inLayer = iface.legendInterface().layers()[ legendIndex ]

# update the output table name
self.cboTable.setEditText(self.inLayer.name())

self.checkSupports()
return True


def populateSchemas(self):
if not self.db:
return
Expand Down Expand Up @@ -129,95 +213,108 @@ def populateEncodings(self):
for enc in encodings:
self.cboEncoding.addItem(enc)
self.cboEncoding.setCurrentIndex(2)

def updateUi(self):
allowDropTable = self.radCreate.isChecked()
self.chkDropTable.setEnabled(allowDropTable)

allowSetPrimaryKey = self.chkPrimaryKey.isChecked()
self.editPrimaryKey.setEnabled(allowSetPrimaryKey)

allowSetGeomColumn = self.chkGeomColumn.isChecked()
self.editGeomColumn.setEnabled(allowSetGeomColumn)

allowSetSourceSrid = self.chkSourceSrid.isChecked()
self.editSourceSrid.setEnabled(allowSetSourceSrid)

allowSetTargetSrid = self.chkTargetSrid.isChecked()
self.editTargetSrid.setEnabled(allowSetTargetSrid)

allowSetEncoding = self.chkEncoding.isChecked()
self.cboEncoding.setEnabled(allowSetEncoding)


def importLayer(self):
def accept(self):
# sanity checks
if self.cboTable.currentText().isEmpty():
QMessageBox.information(self, "Import to database", "Table name is required")
if self.inLayer is None:
# create the input layer and update available options
if not self.updateInputLayer():
QMessageBox.information(self, "Import to database", "Input layer missing or not valid")
return

if self.cboTable.currentText() == "":
QMessageBox.information(self, "Import to database", "Output table name is required")
return

if self.chkSourceSrid.isChecked():
if self.chkSourceSrid.isEnabled() and self.chkSourceSrid.isChecked():
sourceSrid, ok = self.editSourceSrid.text().toInt()
if not ok:
QMessageBox.information(self, "Import to database", "Invalid source srid: must be an integer")
return

if self.chkTargetSrid.isChecked():
if self.chkTargetSrid.isEnabled() and self.chkTargetSrid.isChecked():
targetSrid, ok = self.editTargetSrid.text().toInt()
if not ok:
QMessageBox.information(self, "Import to database", "Invalid target srid: must be an integer")
return

# override cursor
QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
# store current input layer crs and encoding, so I can restore it
prevInCrs = self.inLayer.crs()
prevInEncoding = self.inLayer.dataProvider().encoding()

try:
schema = self.outUri.schema() if not self.cboSchema.isEnabled() else self.cboSchema.currentText()
table = self.cboTable.currentText()

# get pk and geom field names from the source layer or use the
# ones defined by the user
pk = self.outUri.keyColumn() if not self.chkPrimaryKey.isChecked() else self.editPrimaryKey.text()

if self.inLayer.hasGeometryType() and self.chkGeomColumn.isEnabled():
geom = self.outUri.geometryColumn() if not self.chkGeomColumn.isChecked() else self.editGeomColumn.text()
geom = geom if geom != "" else self.default_geom
else:
geom = QString()

# get output params, update output URI
self.outUri.setDataSource( schema, table, geom, QString(), pk )
uri = self.outUri.uri()

providerName = self.db.dbplugin().providerName()

options = {}
if self.radCreate.isChecked() and self.chkDropTable.isChecked():
options['overwrite'] = True
elif self.radAppend.isChecked():
options['append'] = True

outCrs = None
if self.chkTargetSrid.isEnabled() and self.chkTargetSrid.isChecked():
targetSrid = self.editTargetSrid.text().toInt()[0]
outCrs = qgis.core.QgsCoordinateReferenceSystem(targetSrid)

# update input layer crs and encoding
if self.chkSourceSrid.isEnabled() and self.chkSourceSrid.isChecked():
sourceSrid = self.editSourceSrid.text().toInt()[0]
inCrs = qgis.core.QgsCoordinateReferenceSystem(sourceSrid)
self.inLayer.setCrs( inCrs )

if self.chkEncoding.isEnabled() and self.chkEncoding.isChecked():
enc = self.cboEncoding.currentText()
self.inLayer.setProviderEncoding( enc )

# do the import!
ret, errMsg = qgis.core.QgsVectorLayerImport.importLayer( self.inLayer, uri, providerName, outCrs, False, False, options )
except Exception as e:
ret = -1
errMsg = unicode( e )

finally:
# restore input layer crs and encoding
self.inLayer.setCrs( prevInCrs )
self.inLayer.setProviderEncoding( prevInEncoding )
# restore cursor
QApplication.restoreOverrideCursor()

schema = self.outUri.schema() if not self.cboSchema.isEnabled() else self.cboSchema.currentText()
table = self.cboTable.currentText()

# get pk and geom field names from the source layer or use the
# ones defined by the user
pk = self.outUri.keyColumn() if not self.chkPrimaryKey.isChecked() else self.editPrimaryKey.text()
if self.inLayer.hasGeometryType():
geom = self.outUri.geometryColumn() if not self.chkGeomColumn.isChecked() else self.editGeomColumn.text()
geom = geom if geom != "" else self.default_geom
else:
geom = QString()

self.outUri.setDataSource( schema, table, geom, QString(), pk )
uri = self.outUri.uri()

providerName = self.db.dbplugin().providerName()

if self.chkSourceSrid.isChecked():
sourceSrid = self.editSourceSrid.text().toInt()[0]
inCrs = qgis.core.QgsCoordinateReferenceSystem(sourceSrid)
self.inLayer.setCrs( inCrs )

outCrs = None
if self.chkTargetSrid.isChecked():
targetSrid = self.editTargetSrid.text().toInt()[0]
outCrs = qgis.core.QgsCoordinateReferenceSystem(targetSrid)

if self.chkEncoding.isChecked():
enc = self.cboEncoding.currentText()
self.inLayer.setProviderEncoding( enc )

options = {}
if self.radCreate.isChecked() and self.chkDropTable.isChecked():
options['overwrite'] = True
elif self.radAppend.isChecked():
options['append'] = True

ret, errMsg = qgis.core.QgsVectorLayerImport.importLayer( self.inLayer, uri, providerName, outCrs, False, False, options )
QApplication.restoreOverrideCursor()
if ret != 0:
QMessageBox.warning(self, "Import to database", u"Error %d\n%s" % (ret, errMsg) )
return

if self.chkSpatialIndex.isChecked():
# create spatial index
if self.chkSpatialIndex.isEnabled() and self.chkSpatialIndex.isChecked():
self.db.connector.createSpatialIndex( (schema, table), geom )

QMessageBox.information(self, "Import to database", "Import was successful.")
return self.accept()
return QDialog.accept(self)


def closeEvent(self, event):
# destroy the input layer instance but only if it was created
# from this dialog!
self.deleteInputLayer()
QDialog.closeEvent(self, event)


if __name__ == '__main__':
Expand Down
4 changes: 2 additions & 2 deletions python/plugins/db_manager/resources.qrc
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@
<qresource prefix="/db_manager/actions">
<file alias="del_table">icons/toolbar/action_del_table.png</file>
<file alias="edit_table">icons/toolbar/action_edit_table.png</file>
<file>icons/toolbar/action_export.png</file>
<file>icons/toolbar/action_import.png</file>
<file alias="export">icons/toolbar/action_export.png</file>
<file alias="import">icons/toolbar/action_import.png</file>
<file alias="create_table">icons/toolbar/action_new_table.png</file>
<file alias="refresh">icons/toolbar/action_refresh.png</file>
<file alias="sql_window">icons/toolbar/action_sql_window.png</file>
Expand Down
300 changes: 300 additions & 0 deletions python/plugins/db_manager/ui/DlgExportVector.ui
Original file line number Diff line number Diff line change
@@ -0,0 +1,300 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>DlgExportVector</class>
<widget class="QDialog" name="DlgExportVector">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>514</width>
<height>304</height>
</rect>
</property>
<property name="windowTitle">
<string>Export to vector file</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QLabel" name="label_5">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Output file</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="editOutputFile"/>
</item>
<item row="0" column="2">
<widget class="QToolButton" name="btnChooseOutputFile">
<property name="text">
<string>...</string>
</property>
</widget>
</item>
<item row="1" column="0" colspan="3">
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Action</string>
</property>
<layout class="QVBoxLayout">
<item>
<widget class="QRadioButton" name="radCreate">
<property name="text">
<string>Create new file</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout">
<item>
<spacer>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QCheckBox" name="chkDropTable">
<property name="text">
<string>Drop existing one</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QRadioButton" name="radAppend">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Append data into file</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="2" column="0" colspan="3">
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Options</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QCheckBox" name="chkSourceSrid">
<property name="text">
<string>Source SRID</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="editSourceSrid">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<spacer name="spacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QCheckBox" name="chkTargetSrid">
<property name="text">
<string>Target SRID</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="editTargetSrid">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="chkEncoding">
<property name="text">
<string>Encoding</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="cboEncoding">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="editable">
<bool>false</bool>
</property>
<property name="insertPolicy">
<enum>QComboBox::NoInsert</enum>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="3" column="0" colspan="2">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<tabstops>
<tabstop>radCreate</tabstop>
<tabstop>chkDropTable</tabstop>
<tabstop>radAppend</tabstop>
<tabstop>chkSourceSrid</tabstop>
<tabstop>editSourceSrid</tabstop>
<tabstop>chkEncoding</tabstop>
<tabstop>cboEncoding</tabstop>
<tabstop>buttonBox</tabstop>
</tabstops>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>DlgExportVector</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>325</x>
<y>518</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>chkSourceSrid</sender>
<signal>toggled(bool)</signal>
<receiver>editSourceSrid</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>115</x>
<y>390</y>
</hint>
<hint type="destinationlabel">
<x>166</x>
<y>394</y>
</hint>
</hints>
</connection>
<connection>
<sender>chkTargetSrid</sender>
<signal>toggled(bool)</signal>
<receiver>editTargetSrid</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>360</x>
<y>396</y>
</hint>
<hint type="destinationlabel">
<x>435</x>
<y>394</y>
</hint>
</hints>
</connection>
<connection>
<sender>chkEncoding</sender>
<signal>toggled(bool)</signal>
<receiver>cboEncoding</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>98</x>
<y>415</y>
</hint>
<hint type="destinationlabel">
<x>201</x>
<y>414</y>
</hint>
</hints>
</connection>
<connection>
<sender>radCreate</sender>
<signal>toggled(bool)</signal>
<receiver>chkDropTable</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>131</x>
<y>216</y>
</hint>
<hint type="destinationlabel">
<x>140</x>
<y>245</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>DlgExportVector</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>452</x>
<y>505</y>
</hint>
<hint type="destinationlabel">
<x>508</x>
<y>243</y>
</hint>
</hints>
</connection>
</connections>
</ui>
336 changes: 295 additions & 41 deletions python/plugins/db_manager/ui/DlgImportVector.ui
Original file line number Diff line number Diff line change
Expand Up @@ -7,40 +7,143 @@
<x>0</x>
<y>0</y>
<width>514</width>
<height>461</height>
<height>590</height>
</rect>
</property>
<property name="windowTitle">
<string>Import vector layer</string>
</property>
<layout class="QVBoxLayout">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QGridLayout">
<item row="0" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Schema:</string>
</property>
</widget>
</item>
<item row="0" column="1" colspan="2">
<widget class="QComboBox" name="cboSchema"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Table:</string>
</property>
</widget>
</item>
<item row="1" column="1" colspan="2">
<widget class="QComboBox" name="cboTable">
<property name="editable">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
<widget class="QWidget" name="wdgInput" native="true">
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0">
<widget class="QLabel" name="label_5">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Input</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QToolButton" name="btnChooseInputFile">
<property name="text">
<string>...</string>
</property>
</widget>
</item>
<item row="2" column="0" colspan="4">
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="0" column="1" colspan="2">
<widget class="QComboBox" name="cboInputLayer">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="editable">
<bool>true</bool>
</property>
<property name="insertPolicy">
<enum>QComboBox::NoInsert</enum>
</property>
</widget>
</item>
<item row="1" column="0" colspan="4">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="btnUpdateInputLayer">
<property name="text">
<string>Update options</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_3">
<property name="title">
<string>Output table</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Schema</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="cboSchema">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Table</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="cboTable">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="editable">
<bool>true</bool>
</property>
<property name="insertPolicy">
<enum>QComboBox::NoInsert</enum>
</property>
</widget>
</item>
</layout>
<zorder>cboTable</zorder>
<zorder>label_2</zorder>
<zorder>cboSchema</zorder>
<zorder>label_3</zorder>
<zorder>widget_3</zorder>
<zorder>cboTable</zorder>
<zorder>label_2</zorder>
<zorder>cboSchema</zorder>
<zorder>label_3</zorder>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox">
Expand Down Expand Up @@ -107,56 +210,91 @@
<item row="0" column="0">
<widget class="QCheckBox" name="chkPrimaryKey">
<property name="text">
<string>Primary key:</string>
<string>Primary key</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="editPrimaryKey"/>
<widget class="QLineEdit" name="editPrimaryKey">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="chkGeomColumn">
<property name="text">
<string>Geometry column:</string>
<string>Geometry column</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="editGeomColumn"/>
<widget class="QLineEdit" name="editGeomColumn">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
<item row="2" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QCheckBox" name="chkSourceSrid">
<property name="text">
<string>Source SRID:</string>
<string>Source SRID</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="editSourceSrid"/>
<widget class="QLineEdit" name="editSourceSrid">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<spacer name="spacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QCheckBox" name="chkTargetSrid">
<property name="text">
<string>Target SRID:</string>
<string>Target SRID</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="editTargetSrid"/>
<widget class="QLineEdit" name="editTargetSrid">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</item>
<item row="3" column="0">
<widget class="QCheckBox" name="chkEncoding">
<property name="text">
<string>Encoding:</string>
<string>Encoding</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QComboBox" name="cboEncoding">
<property name="enabled">
<bool>false</bool>
</property>
<property name="editable">
<bool>true</bool>
</property>
Expand Down Expand Up @@ -193,10 +331,14 @@
</widget>
</item>
</layout>
<zorder>groupBox</zorder>
<zorder>groupBox_2</zorder>
<zorder>buttonBox</zorder>
<zorder>widget</zorder>
<zorder>groupBox_3</zorder>
<zorder>wdgInput</zorder>
</widget>
<tabstops>
<tabstop>cboSchema</tabstop>
<tabstop>cboTable</tabstop>
<tabstop>radCreate</tabstop>
<tabstop>chkDropTable</tabstop>
<tabstop>radAppend</tabstop>
Expand All @@ -217,14 +359,126 @@
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
<x>325</x>
<y>518</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>chkPrimaryKey</sender>
<signal>toggled(bool)</signal>
<receiver>editPrimaryKey</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>108</x>
<y>347</y>
</hint>
<hint type="destinationlabel">
<x>207</x>
<y>345</y>
</hint>
</hints>
</connection>
<connection>
<sender>chkGeomColumn</sender>
<signal>toggled(bool)</signal>
<receiver>editGeomColumn</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>120</x>
<y>367</y>
</hint>
<hint type="destinationlabel">
<x>188</x>
<y>367</y>
</hint>
</hints>
</connection>
<connection>
<sender>chkSourceSrid</sender>
<signal>toggled(bool)</signal>
<receiver>editSourceSrid</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>115</x>
<y>390</y>
</hint>
<hint type="destinationlabel">
<x>166</x>
<y>394</y>
</hint>
</hints>
</connection>
<connection>
<sender>chkTargetSrid</sender>
<signal>toggled(bool)</signal>
<receiver>editTargetSrid</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>360</x>
<y>396</y>
</hint>
<hint type="destinationlabel">
<x>435</x>
<y>394</y>
</hint>
</hints>
</connection>
<connection>
<sender>chkEncoding</sender>
<signal>toggled(bool)</signal>
<receiver>cboEncoding</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>98</x>
<y>415</y>
</hint>
<hint type="destinationlabel">
<x>201</x>
<y>414</y>
</hint>
</hints>
</connection>
<connection>
<sender>radCreate</sender>
<signal>toggled(bool)</signal>
<receiver>chkDropTable</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>131</x>
<y>216</y>
</hint>
<hint type="destinationlabel">
<x>140</x>
<y>245</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>DlgImportVector</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>452</x>
<y>505</y>
</hint>
<hint type="destinationlabel">
<x>508</x>
<y>243</y>
</hint>
</hints>
</connection>
</connections>
</ui>