def setEditorData(self, editor, index): if not editor: return column = index.column() value = index.model().data(index, Qt.EditRole) fieldType = FieldsMappingModel.columns[column]['type'] if fieldType == QVariant.Type: editor.setCurrentIndex(editor.findData(value)) elif fieldType == QgsExpression: editor.setField(value) else: QStyledItemDelegate.setEditorData(self, editor, index)
def setModelData(self, editor, model, index): if not editor: return column = index.column() fieldType = FieldsMappingModel.columns[column]['type'] if fieldType == QVariant.Type: value = editor.itemData(editor.currentIndex()) if value is None: value = QVariant.Invalid model.setData(index, value) elif fieldType == QgsExpression: (value, isExpression, isValid) = editor.currentField() model.setData(index, value) else: QStyledItemDelegate.setModelData(self, editor, model, index)
def createEditor(self, parent, option, index): column = index.column() fieldType = FieldsMappingModel.columns[column]['type'] if fieldType == QVariant.Type: editor = QComboBox(parent) for key, text in FieldsMappingModel.fieldTypes.iteritems(): editor.addItem(text, key) elif fieldType == QgsExpression: editor = QgsFieldExpressionWidget(parent) editor.setLayer(index.model().layer()) editor.fieldChanged.connect(self.on_expression_fieldChange) else: editor = QStyledItemDelegate.createEditor(self, parent, option, index) editor.setAutoFillBackground(True) return editor
def eventFilter(self, editor, event): if event.type() == QEvent.FocusOut and hasattr(editor, 'canFocusOut'): if not editor.canFocusOut: return False return QStyledItemDelegate.eventFilter(self, editor, event)
def __init__(self, parent=None): QStyledItemDelegate.__init__(self, parent)
def __init__(self, iface, db, parent=None): QWidget.__init__(self, parent) self.iface = iface self.db = db self.filter = "" self.allowMultiColumnPk = isinstance( db, PGDatabase ) # at the moment only PostgreSQL allows a primary key to span multiple columns, spatialite doesn't self.aliasSubQuery = isinstance( db, PGDatabase) # only PostgreSQL requires subqueries to be aliases self.setupUi(self) self.setWindowTitle( u"%s - %s [%s]" % (self.windowTitle(), db.connection().connectionName(), db.connection().typeNameString())) self.defaultLayerName = 'QueryLayer' if self.allowMultiColumnPk: self.uniqueColumnCheck.setText( self.trUtf8("Column(s) with unique values")) else: self.uniqueColumnCheck.setText( self.trUtf8("Column with unique values")) self.editSql.setFocus() self.editSql.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) self.initCompleter() # allow copying results copyAction = QAction("copy", self) self.viewResult.addAction(copyAction) copyAction.setShortcuts(QKeySequence.Copy) copyAction.triggered.connect(self.copySelectedResults) self.btnExecute.clicked.connect(self.executeSql) self.btnSetFilter.clicked.connect(self.setFilter) self.btnClear.clicked.connect(self.clearSql) self.presetStore.clicked.connect(self.storePreset) self.presetDelete.clicked.connect(self.deletePreset) self.presetCombo.activated[str].connect(self.loadPreset) self.presetCombo.activated[str].connect(self.presetName.setText) self.updatePresetsCombobox() self.geomCombo.setEditable(True) self.geomCombo.lineEdit().setReadOnly(True) self.uniqueCombo.setEditable(True) self.uniqueCombo.lineEdit().setReadOnly(True) self.uniqueModel = QStandardItemModel(self.uniqueCombo) self.uniqueCombo.setModel(self.uniqueModel) if self.allowMultiColumnPk: self.uniqueCombo.setItemDelegate(QStyledItemDelegate()) self.uniqueModel.itemChanged.connect( self.uniqueChanged) # react to the (un)checking of an item self.uniqueCombo.lineEdit().textChanged.connect( self.uniqueTextChanged ) # there are other events that change the displayed text and some of them can not be caught directly # hide the load query as layer if feature is not supported self._loadAsLayerAvailable = self.db.connector.hasCustomQuerySupport() self.loadAsLayerGroup.setVisible(self._loadAsLayerAvailable) if self._loadAsLayerAvailable: self.layerTypeWidget.hide() # show if load as raster is supported self.loadLayerBtn.clicked.connect(self.loadSqlLayer) self.getColumnsBtn.clicked.connect(self.fillColumnCombos) self.loadAsLayerGroup.toggled.connect(self.loadAsLayerToggled) self.loadAsLayerToggled(False) self._createViewAvailable = self.db.connector.hasCreateSpatialViewSupport( ) self.btnCreateView.setVisible(self._createViewAvailable) if self._createViewAvailable: self.btnCreateView.clicked.connect(self.createView) self.queryBuilderFirst = True self.queryBuilderBtn.setIcon(QIcon(":/db_manager/icons/sql.gif")) self.queryBuilderBtn.clicked.connect(self.displayQueryBuilder) self.presetName.textChanged.connect(self.nameChanged)