diff --git a/python/plugins/GdalTools/tools/GdalTools_utils.py b/python/plugins/GdalTools/tools/GdalTools_utils.py index 0efe94e4703..5578c3366a2 100644 --- a/python/plugins/GdalTools/tools/GdalTools_utils.py +++ b/python/plugins/GdalTools/tools/GdalTools_utils.py @@ -176,7 +176,7 @@ class LayerRegistry(QObject): # only gdal raster layers if layer.type() != layer.RasterLayer: return False - if layer.usesProvider() and layer.providerKey() != 'gdal': + if layer.providerType() != 'gdal': return False return True diff --git a/python/plugins/db_manager/db_plugins/postgis/plugins/qgis_topoview/__init__.py b/python/plugins/db_manager/db_plugins/postgis/plugins/qgis_topoview/__init__.py index f596345f85a..7850d93d02e 100644 --- a/python/plugins/db_manager/db_plugins/postgis/plugins/qgis_topoview/__init__.py +++ b/python/plugins/db_manager/db_plugins/postgis/plugins/qgis_topoview/__init__.py @@ -34,20 +34,20 @@ current_path = os.path.dirname(__file__) # @param db is the selected database # @param mainwindow is the DBManager mainwindow def load(db, mainwindow): - # check whether the selected database has topology enabled - # (search for topology.topology) - sql = u"""SELECT count(*) - FROM pg_class AS cls JOIN pg_namespace AS nsp ON nsp.oid = cls.relnamespace - WHERE cls.relname = 'topology' AND nsp.nspname = 'topology'""" - c = db.connector._get_cursor() - db.connector._execute( c, sql ) - res = db.connector._fetchone( c ) - if res == None or int(res[0]) <= 0: - return + # check whether the selected database has topology enabled + # (search for topology.topology) + sql = u"""SELECT count(*) + FROM pg_class AS cls JOIN pg_namespace AS nsp ON nsp.oid = cls.relnamespace + WHERE cls.relname = 'topology' AND nsp.nspname = 'topology'""" + c = db.connector._get_cursor() + db.connector._execute( c, sql ) + res = db.connector._fetchone( c ) + if res == None or int(res[0]) <= 0: + return - # add the action to the DBManager menu - action = QAction( QIcon(), "&TopoViewer", db ) - mainwindow.registerAction( action, "&Schema", run ) + # add the action to the DBManager menu + action = QAction( QIcon(), "&TopoViewer", db ) + mainwindow.registerAction( action, "&Schema", run ) # The run function is called once the user clicks on the action TopoViewer @@ -56,146 +56,146 @@ def load(db, mainwindow): # @param action is the clicked action on the DBManager menu/toolbar # @param mainwindow is the DBManager mainwindow def run(item, action, mainwindow): - db = item.database() - uri = db.uri() - conninfo = uri.connectionInfo() - iface = mainwindow.iface + db = item.database() + uri = db.uri() + conninfo = uri.connectionInfo() + iface = mainwindow.iface - quoteId = db.connector.quoteId - quoteStr = db.connector.quoteString + quoteId = db.connector.quoteId + quoteStr = db.connector.quoteString - # check if the selected item is a topology schema - isTopoSchema = False + # check if the selected item is a topology schema + isTopoSchema = False - if not hasattr(item, 'schema'): - QMessageBox.critical(mainwindow, "Invalid topology", u'Select a topology schema to continue.') - return False + if not hasattr(item, 'schema'): + QMessageBox.critical(mainwindow, "Invalid topology", u'Select a topology schema to continue.') + return False - if item.schema() != None: - sql = u"SELECT count(*) FROM topology.topology WHERE name = %s" % quoteStr(item.schema().name) - c = db.connector._get_cursor() - db.connector._execute( c, sql ) - res = db.connector._fetchone( c ) - isTopoSchema = res != None and int(res[0]) > 0 + if item.schema() != None: + sql = u"SELECT count(*) FROM topology.topology WHERE name = %s" % quoteStr(item.schema().name) + c = db.connector._get_cursor() + db.connector._execute( c, sql ) + res = db.connector._fetchone( c ) + isTopoSchema = res != None and int(res[0]) > 0 - if not isTopoSchema: - QMessageBox.critical(mainwindow, "Invalid topology", u'Schema "%s" is not registered in topology.topology.' % item.schema().name) - return False + if not isTopoSchema: + QMessageBox.critical(mainwindow, "Invalid topology", u'Schema "%s" is not registered in topology.topology.' % item.schema().name) + return False - # load layers into the current project - toponame = item.schema().name - template_dir = os.path.join(current_path, 'templates') - registry = QgsMapLayerRegistry.instance() - legend = iface.legendInterface() + # load layers into the current project + toponame = item.schema().name + template_dir = os.path.join(current_path, 'templates') + registry = QgsMapLayerRegistry.instance() + legend = iface.legendInterface() - # do not refresh the canvas until all the layers are added - prevRenderFlagState = iface.mapCanvas().renderFlag() - iface.mapCanvas().setRenderFlag( False ) - try: - # NOTE: -1 parent is an attempt to always add to the root, but - # it is currently broken: http://hub.qgis.org/issues/6879 - group = legend.addGroup(u'%s topology' % toponame, False, -1) + # do not refresh the canvas until all the layers are added + prevRenderFlagState = iface.mapCanvas().renderFlag() + iface.mapCanvas().setRenderFlag( False ) + try: + # NOTE: -1 parent is an attempt to always add to the root, but + # it is currently broken: http://hub.qgis.org/issues/6879 + group = legend.addGroup(u'%s topology' % toponame, False, -1) - provider = db.dbplugin().providerName() - uri = db.uri(); + provider = db.dbplugin().providerName() + uri = db.uri(); - # face - layer = db.toSqlLayer(u'SELECT face_id, topology.ST_GetFaceGeometry(%s, face_id) as geom ' \ - 'FROM %s.face WHERE face_id > 0' % (quoteStr(toponame), quoteId(toponame)), - 'geom', 'face_id', u'%s.face' % toponame) - layer.loadNamedStyle(os.path.join(template_dir, 'face.qml')) - registry.addMapLayer(layer) - legend.setLayerVisible(layer, False) - legend.setLayerExpanded(layer, False) - legend.moveLayer(layer, group) + # face + layer = db.toSqlLayer(u'SELECT face_id, topology.ST_GetFaceGeometry(%s, face_id) as geom ' \ + 'FROM %s.face WHERE face_id > 0' % (quoteStr(toponame), quoteId(toponame)), + 'geom', 'face_id', u'%s.face' % toponame) + layer.loadNamedStyle(os.path.join(template_dir, 'face.qml')) + registry.addMapLayers([layer]) + legend.setLayerVisible(layer, False) + legend.setLayerExpanded(layer, False) + legend.moveLayer(layer, group) - # node - uri.setDataSource(toponame, 'node', 'geom', '', 'node_id') - layer = QgsVectorLayer(uri.uri(), u'%s.nodes' % toponame, provider) - layer.loadNamedStyle(os.path.join(template_dir, 'node.qml')) - registry.addMapLayer(layer) - legend.setLayerVisible(layer, False) - legend.setLayerExpanded(layer, False) - legend.moveLayer(layer, group) + # node + uri.setDataSource(toponame, 'node', 'geom', '', 'node_id') + layer = QgsVectorLayer(uri.uri(), u'%s.nodes' % toponame, provider) + layer.loadNamedStyle(os.path.join(template_dir, 'node.qml')) + registry.addMapLayers([layer]) + legend.setLayerVisible(layer, False) + legend.setLayerExpanded(layer, False) + legend.moveLayer(layer, group) - # node labels - uri.setDataSource(toponame, 'node', 'geom', '', 'node_id') - layer = QgsVectorLayer(uri.uri(), u'%s.node label' % toponame, provider) - layer.loadNamedStyle(os.path.join(template_dir, 'node_label.qml')) - registry.addMapLayer(layer) - legend.setLayerVisible(layer, False) - legend.setLayerExpanded(layer, False) - legend.moveLayer(layer, group) + # node labels + uri.setDataSource(toponame, 'node', 'geom', '', 'node_id') + layer = QgsVectorLayer(uri.uri(), u'%s.node label' % toponame, provider) + layer.loadNamedStyle(os.path.join(template_dir, 'node_label.qml')) + registry.addMapLayers([layer]) + legend.setLayerVisible(layer, False) + legend.setLayerExpanded(layer, False) + legend.moveLayer(layer, group) - # edge - uri.setDataSource(toponame, 'edge_data', 'geom', '', 'edge_id') - layer = QgsVectorLayer(uri.uri(), u'%s.edge' % toponame, provider) - layer.loadNamedStyle(os.path.join(template_dir, 'edge.qml')) - registry.addMapLayer(layer) - legend.setLayerVisible(layer, False) - legend.setLayerExpanded(layer, False) - legend.moveLayer(layer, group) + # edge + uri.setDataSource(toponame, 'edge_data', 'geom', '', 'edge_id') + layer = QgsVectorLayer(uri.uri(), u'%s.edge' % toponame, provider) + layer.loadNamedStyle(os.path.join(template_dir, 'edge.qml')) + registry.addMapLayers([layer]) + legend.setLayerVisible(layer, False) + legend.setLayerExpanded(layer, False) + legend.moveLayer(layer, group) - # edge labels - uri.setDataSource(toponame, 'edge_data', 'geom', '', 'edge_id') - layer = QgsVectorLayer(uri.uri(), u'%s.edge label' % toponame, provider) - layer.loadNamedStyle(os.path.join(template_dir, 'edge_label.qml')) - registry.addMapLayer(layer) - legend.setLayerVisible(layer, False) - legend.setLayerExpanded(layer, False) - legend.moveLayer(layer, group) + # edge labels + uri.setDataSource(toponame, 'edge_data', 'geom', '', 'edge_id') + layer = QgsVectorLayer(uri.uri(), u'%s.edge label' % toponame, provider) + layer.loadNamedStyle(os.path.join(template_dir, 'edge_label.qml')) + registry.addMapLayers([layer]) + legend.setLayerVisible(layer, False) + legend.setLayerExpanded(layer, False) + legend.moveLayer(layer, group) - # face_left - uri.setDataSource(toponame, 'edge_data', 'geom', '', 'edge_id') - layer = QgsVectorLayer(uri.uri(), u'%s.face_left' % toponame, provider) - layer.loadNamedStyle(os.path.join(template_dir, 'face_left.qml')) - registry.addMapLayer(layer) - legend.setLayerVisible(layer, False) - legend.setLayerExpanded(layer, False) - legend.moveLayer(layer, group) + # face_left + uri.setDataSource(toponame, 'edge_data', 'geom', '', 'edge_id') + layer = QgsVectorLayer(uri.uri(), u'%s.face_left' % toponame, provider) + layer.loadNamedStyle(os.path.join(template_dir, 'face_left.qml')) + registry.addMapLayers([layer]) + legend.setLayerVisible(layer, False) + legend.setLayerExpanded(layer, False) + legend.moveLayer(layer, group) - # face_right - uri.setDataSource(toponame, 'edge_data', 'geom', '', 'edge_id') - layer = QgsVectorLayer(uri.uri(), u'%s.face_right' % toponame, provider) - layer.loadNamedStyle(os.path.join(template_dir, 'face_right.qml')) - registry.addMapLayer(layer) - legend.setLayerVisible(layer, False) - legend.setLayerExpanded(layer, False) - legend.moveLayer(layer, group) + # face_right + uri.setDataSource(toponame, 'edge_data', 'geom', '', 'edge_id') + layer = QgsVectorLayer(uri.uri(), u'%s.face_right' % toponame, provider) + layer.loadNamedStyle(os.path.join(template_dir, 'face_right.qml')) + registry.addMapLayers([layer]) + legend.setLayerVisible(layer, False) + legend.setLayerExpanded(layer, False) + legend.moveLayer(layer, group) - # next_left - uri.setDataSource(toponame, 'edge_data', 'geom', '', 'edge_id') - layer = QgsVectorLayer(uri.uri(), u'%s.next_left' % toponame, provider) - layer.loadNamedStyle(os.path.join(template_dir, 'next_left.qml')) - registry.addMapLayer(layer) - legend.setLayerVisible(layer, False) - legend.setLayerExpanded(layer, False) - legend.moveLayer(layer, group) + # next_left + uri.setDataSource(toponame, 'edge_data', 'geom', '', 'edge_id') + layer = QgsVectorLayer(uri.uri(), u'%s.next_left' % toponame, provider) + layer.loadNamedStyle(os.path.join(template_dir, 'next_left.qml')) + registry.addMapLayers([layer]) + legend.setLayerVisible(layer, False) + legend.setLayerExpanded(layer, False) + legend.moveLayer(layer, group) - # next_right - uri.setDataSource(toponame, 'edge_data', 'geom', '', 'edge_id') - layer = QgsVectorLayer(uri.uri(), u'%s.next_right' % toponame, provider) - layer.loadNamedStyle(os.path.join(template_dir, 'next_right.qml')) - registry.addMapLayer(layer) - legend.setLayerVisible(layer, False) - legend.setLayerExpanded(layer, False) - legend.moveLayer(layer, group) + # next_right + uri.setDataSource(toponame, 'edge_data', 'geom', '', 'edge_id') + layer = QgsVectorLayer(uri.uri(), u'%s.next_right' % toponame, provider) + layer.loadNamedStyle(os.path.join(template_dir, 'next_right.qml')) + registry.addMapLayers([layer]) + legend.setLayerVisible(layer, False) + legend.setLayerExpanded(layer, False) + legend.moveLayer(layer, group) - # face_seed - layer = db.toSqlLayer(u'SELECT face_id, ST_PointOnSurface(topology.ST_GetFaceGeometry(%s, face_id)) as geom ' \ - 'FROM %s.face WHERE face_id > 0' % (quoteStr(toponame), quoteId(toponame)), - 'geom', 'face_id', u'%s.face_seed' % toponame) - layer.loadNamedStyle(os.path.join(template_dir, 'face_seed.qml')) - registry.addMapLayer(layer) - legend.setLayerVisible(layer, False) - legend.setLayerExpanded(layer, False) - legend.moveLayer(layer, group) + # face_seed + layer = db.toSqlLayer(u'SELECT face_id, ST_PointOnSurface(topology.ST_GetFaceGeometry(%s, face_id)) as geom ' \ + 'FROM %s.face WHERE face_id > 0' % (quoteStr(toponame), quoteId(toponame)), + 'geom', 'face_id', u'%s.face_seed' % toponame) + layer.loadNamedStyle(os.path.join(template_dir, 'face_seed.qml')) + registry.addMapLayers([layer]) + legend.setLayerVisible(layer, False) + legend.setLayerExpanded(layer, False) + legend.moveLayer(layer, group) - # TODO: add polygon0, polygon1 and polygon2 ? + # TODO: add polygon0, polygon1 and polygon2 ? - finally: - # restore canvas render flag - iface.mapCanvas().setRenderFlag( prevRenderFlagState ) + finally: + # restore canvas render flag + iface.mapCanvas().setRenderFlag( prevRenderFlagState ) - return True + return True diff --git a/python/plugins/db_manager/db_tree.py b/python/plugins/db_manager/db_tree.py index 39e6497188c..651e3500deb 100644 --- a/python/plugins/db_manager/db_tree.py +++ b/python/plugins/db_manager/db_tree.py @@ -29,121 +29,121 @@ from .db_model import DBModel from .db_plugins.plugin import DBPlugin, Schema, Table class DBTree(QTreeView): - def __init__(self, mainWindow): - QTreeView.__init__(self, mainWindow) - self.mainWindow = mainWindow + def __init__(self, mainWindow): + QTreeView.__init__(self, mainWindow) + self.mainWindow = mainWindow - self.setModel( DBModel(self) ) - self.setHeaderHidden(True) - self.setEditTriggers(QTreeView.EditKeyPressed|QTreeView.SelectedClicked) + self.setModel( DBModel(self) ) + self.setHeaderHidden(True) + self.setEditTriggers(QTreeView.EditKeyPressed|QTreeView.SelectedClicked) - self.setDragEnabled(True) - self.setAcceptDrops(True) - self.setDropIndicatorShown(True) + self.setDragEnabled(True) + self.setAcceptDrops(True) + self.setDropIndicatorShown(True) - self.connect(self.selectionModel(), SIGNAL("currentChanged(const QModelIndex&, const QModelIndex&)"), self.currentItemChanged) - self.connect(self, SIGNAL("expanded(const QModelIndex&)"), self.itemChanged) - self.connect(self, SIGNAL("collapsed(const QModelIndex&)"), self.itemChanged) - self.connect(self.model(), SIGNAL("dataChanged(const QModelIndex&, const QModelIndex&)"), self.modelDataChanged) - self.connect(self.model(), SIGNAL("notPopulated"), self.collapse) + self.connect(self.selectionModel(), SIGNAL("currentChanged(const QModelIndex&, const QModelIndex&)"), self.currentItemChanged) + self.connect(self, SIGNAL("expanded(const QModelIndex&)"), self.itemChanged) + self.connect(self, SIGNAL("collapsed(const QModelIndex&)"), self.itemChanged) + self.connect(self.model(), SIGNAL("dataChanged(const QModelIndex&, const QModelIndex&)"), self.modelDataChanged) + self.connect(self.model(), SIGNAL("notPopulated"), self.collapse) - def refreshItem(self, item=None): - if item == None: - item = self.currentItem() - if item == None: return - self.model().refreshItem(item) + def refreshItem(self, item=None): + if item == None: + item = self.currentItem() + if item == None: return + self.model().refreshItem(item) - def showSystemTables(self, show): - pass + def showSystemTables(self, show): + pass - def currentItem(self): - indexes = self.selectedIndexes() - if len(indexes) <= 0: - return - return self.model().getItem(indexes[0]) + def currentItem(self): + indexes = self.selectedIndexes() + if len(indexes) <= 0: + return + return self.model().getItem(indexes[0]) - def currentDatabase(self): - item = self.currentItem() - if item == None: return + def currentDatabase(self): + item = self.currentItem() + if item == None: return - if isinstance(item, (DBPlugin, Schema, Table)): - return item.database() - return None + if isinstance(item, (DBPlugin, Schema, Table)): + return item.database() + return None - def currentSchema(self): - item = self.currentItem() - if item == None: return + def currentSchema(self): + item = self.currentItem() + if item == None: return - if isinstance(item, (Schema, Table)): - return item.schema() - return None + if isinstance(item, (Schema, Table)): + return item.schema() + return None - def currentTable(self): - item = self.currentItem() - if item == None: return + def currentTable(self): + item = self.currentItem() + if item == None: return - if isinstance(item, Table): - return item - return None + if isinstance(item, Table): + return item + return None - def itemChanged(self, index): - self.setCurrentIndex(index) - self.emit( SIGNAL('selectedItemChanged'), self.currentItem() ) + def itemChanged(self, index): + self.setCurrentIndex(index) + self.emit( SIGNAL('selectedItemChanged'), self.currentItem() ) - def modelDataChanged(self, indexFrom, indexTo): - self.itemChanged(indexTo) + def modelDataChanged(self, indexFrom, indexTo): + self.itemChanged(indexTo) - def currentItemChanged(self, current, previous): - self.itemChanged(current) + def currentItemChanged(self, current, previous): + self.itemChanged(current) - def contextMenuEvent(self, ev): - index = self.indexAt( ev.pos() ) - if not index.isValid(): - return + def contextMenuEvent(self, ev): + index = self.indexAt( ev.pos() ) + if not index.isValid(): + return - if index != self.currentIndex(): - self.itemChanged(index) + if index != self.currentIndex(): + self.itemChanged(index) - item = self.currentItem() + item = self.currentItem() - menu = QMenu(self) + menu = QMenu(self) - if isinstance(item, (Table, Schema)): - menu.addAction("Rename", self.rename) - menu.addAction("Delete", self.delete) + if isinstance(item, (Table, Schema)): + menu.addAction("Rename", self.rename) + menu.addAction("Delete", self.delete) - if isinstance(item, Table): - menu.addSeparator() - menu.addAction("Add to QGis canvas", self.addLayer) + if isinstance(item, Table): + menu.addSeparator() + menu.addAction("Add to QGis canvas", self.addLayer) - elif isinstance(item, DBPlugin) and item.database() is not None: - menu.addAction("Re-connect", self.reconnect) + elif isinstance(item, DBPlugin) and item.database() is not None: + menu.addAction("Re-connect", self.reconnect) - if not menu.isEmpty(): - menu.exec_(ev.globalPos()) + if not menu.isEmpty(): + menu.exec_(ev.globalPos()) - menu.deleteLater() + menu.deleteLater() - def rename(self): - index = self.currentIndex() - item = self.model().getItem(index) - if isinstance(item, (Table, Schema)): - self.edit( index ) + def rename(self): + index = self.currentIndex() + item = self.model().getItem(index) + if isinstance(item, (Table, Schema)): + self.edit( index ) - def delete(self): - item = self.currentItem() - if isinstance(item, (Table, Schema)): - self.mainWindow.invokeCallback(item.database().deleteActionSlot) + def delete(self): + item = self.currentItem() + if isinstance(item, (Table, Schema)): + self.mainWindow.invokeCallback(item.database().deleteActionSlot) - def addLayer(self): - table = self.currentTable() - if table is not None: - QgsMapLayerRegistry.instance().addMapLayer(table.toMapLayer()) + def addLayer(self): + table = self.currentTable() + if table is not None: + QgsMapLayerRegistry.instance().addMapLayers([table.toMapLayer()]) - def reconnect(self): - db = self.currentDatabase() - if db is not None: - self.mainWindow.invokeCallback(db.reconnectActionSlot) + def reconnect(self): + db = self.currentDatabase() + if db is not None: + self.mainWindow.invokeCallback(db.reconnectActionSlot) diff --git a/python/plugins/db_manager/dlg_sql_window.py b/python/plugins/db_manager/dlg_sql_window.py index 640ec7f9c87..1145929edca 100644 --- a/python/plugins/db_manager/dlg_sql_window.py +++ b/python/plugins/db_manager/dlg_sql_window.py @@ -35,193 +35,193 @@ from .completer import SqlCompleter class DlgSqlWindow(QDialog, Ui_Dialog): - def __init__(self, iface, db, parent=None): - QDialog.__init__(self, parent) - self.iface = iface - self.db = db - self.setupUi(self) - self.setWindowTitle( u"%s - %s [%s]" % (self.windowTitle(), db.connection().connectionName(), db.connection().typeNameString()) ) + def __init__(self, iface, db, parent=None): + QDialog.__init__(self, parent) + self.iface = iface + self.db = db + self.setupUi(self) + self.setWindowTitle( u"%s - %s [%s]" % (self.windowTitle(), db.connection().connectionName(), db.connection().typeNameString()) ) - self.defaultLayerName = 'QueryLayer' + self.defaultLayerName = 'QueryLayer' - settings = QSettings() - self.restoreGeometry(settings.value("/DB_Manager/sqlWindow/geometry").toByteArray()) + settings = QSettings() + self.restoreGeometry(settings.value("/DB_Manager/sqlWindow/geometry").toByteArray()) - self.editSql.setAcceptRichText(False) - SqlCompleter(self.editSql, self.db) - SqlHighlighter(self.editSql, self.db) + self.editSql.setAcceptRichText(False) + SqlCompleter(self.editSql, self.db) + SqlHighlighter(self.editSql, self.db) - # allow to copy results - copyAction = QAction("copy", self) - self.viewResult.addAction( copyAction ) - copyAction.setShortcuts(QKeySequence.Copy) - QObject.connect(copyAction, SIGNAL("triggered()"), self.copySelectedResults) + # allow to copy results + copyAction = QAction("copy", self) + self.viewResult.addAction( copyAction ) + copyAction.setShortcuts(QKeySequence.Copy) + QObject.connect(copyAction, SIGNAL("triggered()"), self.copySelectedResults) - self.connect(self.btnExecute, SIGNAL("clicked()"), self.executeSql) - self.connect(self.btnClear, SIGNAL("clicked()"), self.clearSql) - self.connect(self.buttonBox.button(QDialogButtonBox.Close), SIGNAL("clicked()"), self.close) + self.connect(self.btnExecute, SIGNAL("clicked()"), self.executeSql) + self.connect(self.btnClear, SIGNAL("clicked()"), self.clearSql) + self.connect(self.buttonBox.button(QDialogButtonBox.Close), SIGNAL("clicked()"), self.close) - # 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.connect(self.loadLayerBtn, SIGNAL("clicked()"), self.loadSqlLayer) - self.connect(self.getColumnsBtn, SIGNAL("clicked()"), self.fillColumnCombos) - self.connect(self.loadAsLayerGroup, SIGNAL("toggled(bool)"), self.loadAsLayerToggled) - self.loadAsLayerToggled(False) + # 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.connect(self.loadLayerBtn, SIGNAL("clicked()"), self.loadSqlLayer) + self.connect(self.getColumnsBtn, SIGNAL("clicked()"), self.fillColumnCombos) + self.connect(self.loadAsLayerGroup, SIGNAL("toggled(bool)"), self.loadAsLayerToggled) + self.loadAsLayerToggled(False) - def closeEvent(self, e): - """ save window state """ - settings = QSettings() - settings.setValue("/DB_Manager/sqlWindow/geometry", QVariant(self.saveGeometry())) + def closeEvent(self, e): + """ save window state """ + settings = QSettings() + settings.setValue("/DB_Manager/sqlWindow/geometry", QVariant(self.saveGeometry())) - QDialog.closeEvent(self, e) + QDialog.closeEvent(self, e) - def loadAsLayerToggled(self, checked): - self.loadAsLayerGroup.setChecked( checked ) - self.loadAsLayerWidget.setVisible( checked ) + def loadAsLayerToggled(self, checked): + self.loadAsLayerGroup.setChecked( checked ) + self.loadAsLayerWidget.setVisible( checked ) - def getSql(self): - # If the selection obtained from an editor spans a line break, - # the text will contain a Unicode U+2029 paragraph separator - # character instead of a newline \n character - # (see https://qt-project.org/doc/qt-4.8/qtextcursor.html#selectedText) - sql = self.editSql.textCursor().selectedText().replace(unichr(0x2029), "\n") - if sql.isEmpty(): - sql = self.editSql.toPlainText() - # try to sanitize query - sql = sql.replace( QRegExp( ";\\s*$" ), "" ) - return sql + def getSql(self): + # If the selection obtained from an editor spans a line break, + # the text will contain a Unicode U+2029 paragraph separator + # character instead of a newline \n character + # (see https://qt-project.org/doc/qt-4.8/qtextcursor.html#selectedText) + sql = self.editSql.textCursor().selectedText().replace(unichr(0x2029), "\n") + if sql.isEmpty(): + sql = self.editSql.toPlainText() + # try to sanitize query + sql = sql.replace( QRegExp( ";\\s*$" ), "" ) + return sql - def clearSql(self): - self.editSql.clear() + def clearSql(self): + self.editSql.clear() - def executeSql(self): - sql = self.getSql() - if sql.isEmpty(): return + def executeSql(self): + sql = self.getSql() + if sql.isEmpty(): return - QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) + QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) - # delete the old model - old_model = self.viewResult.model() - self.viewResult.setModel(None) - if old_model: old_model.deleteLater() + # delete the old model + old_model = self.viewResult.model() + self.viewResult.setModel(None) + if old_model: old_model.deleteLater() - self.uniqueCombo.clear() - self.geomCombo.clear() + self.uniqueCombo.clear() + self.geomCombo.clear() - try: - # set the new model - model = self.db.sqlResultModel( sql, self ) - self.viewResult.setModel( model ) - self.lblResult.setText("%d rows, %.1f seconds" % (model.affectedRows(), model.secs())) + try: + # set the new model + model = self.db.sqlResultModel( sql, self ) + self.viewResult.setModel( model ) + self.lblResult.setText("%d rows, %.1f seconds" % (model.affectedRows(), model.secs())) - except BaseError, e: - QApplication.restoreOverrideCursor() - DlgDbError.showError(e, self) - return + except BaseError, e: + QApplication.restoreOverrideCursor() + DlgDbError.showError(e, self) + return - cols = self.viewResult.model().columnNames() - cols.sort() - self.uniqueCombo.addItems( cols ) - self.geomCombo.addItems( cols ) + cols = self.viewResult.model().columnNames() + cols.sort() + self.uniqueCombo.addItems( cols ) + self.geomCombo.addItems( cols ) - self.update() - QApplication.restoreOverrideCursor() + self.update() + QApplication.restoreOverrideCursor() - def loadSqlLayer(self): - uniqueFieldName = self.uniqueCombo.currentText() - geomFieldName = self.geomCombo.currentText() + def loadSqlLayer(self): + uniqueFieldName = self.uniqueCombo.currentText() + geomFieldName = self.geomCombo.currentText() - if geomFieldName.isEmpty() or uniqueFieldName.isEmpty(): - QMessageBox.warning(self, self.tr( "Sorry" ), self.tr( "You must fill the required fields: \ngeometry column - column with unique integer values" ) ) - return + if geomFieldName.isEmpty() or uniqueFieldName.isEmpty(): + QMessageBox.warning(self, self.tr( "Sorry" ), self.tr( "You must fill the required fields: \ngeometry column - column with unique integer values" ) ) + return - query = self.getSql() - if query.isEmpty(): - return + query = self.getSql() + if query.isEmpty(): + return - QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) + QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) - from qgis.core import QgsMapLayer, QgsMapLayerRegistry - layerType = QgsMapLayer.VectorLayer if self.vectorRadio.isChecked() else QgsMapLayer.RasterLayer + from qgis.core import QgsMapLayer, QgsMapLayerRegistry + layerType = QgsMapLayer.VectorLayer if self.vectorRadio.isChecked() else QgsMapLayer.RasterLayer - # get a new layer name - names = [] - for layer in QgsMapLayerRegistry.instance().mapLayers().values(): - names.append( layer.name() ) + # get a new layer name + names = [] + for layer in QgsMapLayerRegistry.instance().mapLayers().values(): + names.append( layer.name() ) - layerName = self.layerNameEdit.text() - if layerName.isEmpty(): - layerName = self.defaultLayerName - newLayerName = layerName - index = 1 - while newLayerName in names: - index += 1 - newLayerName = u"%s_%d" % (layerName, index) + layerName = self.layerNameEdit.text() + if layerName.isEmpty(): + layerName = self.defaultLayerName + newLayerName = layerName + index = 1 + while newLayerName in names: + index += 1 + newLayerName = u"%s_%d" % (layerName, index) - # create the layer - layer = self.db.toSqlLayer(query, geomFieldName, uniqueFieldName, newLayerName, layerType, self.avoidSelectById.isChecked()) - if layer.isValid(): - QgsMapLayerRegistry.instance().addMapLayer(layer, True) + # create the layer + layer = self.db.toSqlLayer(query, geomFieldName, uniqueFieldName, newLayerName, layerType, self.avoidSelectById.isChecked()) + if layer.isValid(): + QgsMapLayerRegistry.instance().addMapLayers([layer], True) - QApplication.restoreOverrideCursor() + QApplication.restoreOverrideCursor() - def fillColumnCombos(self): - query = self.getSql() - if query.isEmpty(): return + def fillColumnCombos(self): + query = self.getSql() + if query.isEmpty(): return - QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) - self.uniqueCombo.clear() - self.geomCombo.clear() + QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) + self.uniqueCombo.clear() + self.geomCombo.clear() - # get a new alias - aliasIndex = 0 - while True: - alias = "_%s__%d" % ("subQuery", aliasIndex) - escaped = '\\b("?)' + QRegExp.escape(alias) + '\\1\\b' - if not query.contains( QRegExp(escaped, Qt.CaseInsensitive) ): - break - aliasIndex += 1 + # get a new alias + aliasIndex = 0 + while True: + alias = "_%s__%d" % ("subQuery", aliasIndex) + escaped = '\\b("?)' + QRegExp.escape(alias) + '\\1\\b' + if not query.contains( QRegExp(escaped, Qt.CaseInsensitive) ): + break + aliasIndex += 1 - # get all the columns - cols = [] - connector = self.db.connector - sql = u"SELECT * FROM (%s\n) AS %s LIMIT 0" % ( unicode(query), connector.quoteId(alias) ) + # get all the columns + cols = [] + connector = self.db.connector + sql = u"SELECT * FROM (%s\n) AS %s LIMIT 0" % ( unicode(query), connector.quoteId(alias) ) - c = None - try: - c = connector._execute(None, sql) - cols = connector._get_cursor_columns(c) + c = None + try: + c = connector._execute(None, sql) + cols = connector._get_cursor_columns(c) - except BaseError as e: - QApplication.restoreOverrideCursor() - DlgDbError.showError(e, self) - return + except BaseError as e: + QApplication.restoreOverrideCursor() + DlgDbError.showError(e, self) + return - finally: - if c: - c.close() - del c + finally: + if c: + c.close() + del c - cols.sort() - self.uniqueCombo.addItems( cols ) - self.geomCombo.addItems( cols ) + cols.sort() + self.uniqueCombo.addItems( cols ) + self.geomCombo.addItems( cols ) - QApplication.restoreOverrideCursor() + QApplication.restoreOverrideCursor() - def copySelectedResults(self): - if len(self.viewResult.selectedIndexes()) <= 0: - return - model = self.viewResult.model() + def copySelectedResults(self): + if len(self.viewResult.selectedIndexes()) <= 0: + return + model = self.viewResult.model() - # convert to string using tab as separator - text = model.headerToString( "\t" ) - for idx in self.viewResult.selectionModel().selectedRows(): - text += "\n" + model.rowToString( idx.row(), "\t" ) + # convert to string using tab as separator + text = model.headerToString( "\t" ) + for idx in self.viewResult.selectionModel().selectedRows(): + text += "\n" + model.rowToString( idx.row(), "\t" ) - QApplication.clipboard().setText( text, QClipboard.Selection ) - QApplication.clipboard().setText( text, QClipboard.Clipboard ) + QApplication.clipboard().setText( text, QClipboard.Selection ) + QApplication.clipboard().setText( text, QClipboard.Clipboard ) diff --git a/python/plugins/db_manager/layer_preview.py b/python/plugins/db_manager/layer_preview.py index e651c68a316..3449eac7e97 100644 --- a/python/plugins/db_manager/layer_preview.py +++ b/python/plugins/db_manager/layer_preview.py @@ -29,92 +29,92 @@ from qgis.core import QgsVectorLayer, QgsMapLayerRegistry from .db_plugins.plugin import DbError, Table class LayerPreview(QgsMapCanvas): - def __init__(self, parent=None): - QgsMapCanvas.__init__(self, parent) - self.setCanvasColor(QColor(255,255,255)) + def __init__(self, parent=None): + QgsMapCanvas.__init__(self, parent) + self.setCanvasColor(QColor(255,255,255)) - self.item = None - self.dirty = False + self.item = None + self.dirty = False - # reuse settings from QGIS - settings = QSettings() - self.enableAntiAliasing( settings.value( "/qgis/enable_anti_aliasing", QVariant(False) ).toBool() ) - self.useImageToRender( settings.value( "/qgis/use_qimage_to_render", QVariant(False) ).toBool() ) - action = settings.value( "/qgis/wheel_action", QVariant(0) ).toInt()[0] - zoomFactor = settings.value( "/qgis/zoom_factor", QVariant(2) ).toDouble()[0] - self.setWheelAction( QgsMapCanvas.WheelAction(action), zoomFactor ) + # reuse settings from QGIS + settings = QSettings() + self.enableAntiAliasing( settings.value( "/qgis/enable_anti_aliasing", QVariant(False) ).toBool() ) + self.useImageToRender( settings.value( "/qgis/use_qimage_to_render", QVariant(False) ).toBool() ) + action = settings.value( "/qgis/wheel_action", QVariant(0) ).toInt()[0] + zoomFactor = settings.value( "/qgis/zoom_factor", QVariant(2) ).toDouble()[0] + self.setWheelAction( QgsMapCanvas.WheelAction(action), zoomFactor ) - self._clear() + self._clear() - def refresh(self): - self.setDirty(True) - self.loadPreview( self.item ) + def refresh(self): + self.setDirty(True) + self.loadPreview( self.item ) - def loadPreview(self, item, force=False): - if item == self.item and not self.dirty: - return - self._clear() - if item is None: - return + def loadPreview(self, item, force=False): + if item == self.item and not self.dirty: + return + self._clear() + if item is None: + return - if isinstance(item, Table) and item.type in [Table.VectorType, Table.RasterType]: - # update the preview, but first let the manager chance to show the canvas - runPrev = lambda: self._loadTablePreview( item ) - QTimer.singleShot(50, runPrev) - else: - return + if isinstance(item, Table) and item.type in [Table.VectorType, Table.RasterType]: + # update the preview, but first let the manager chance to show the canvas + runPrev = lambda: self._loadTablePreview( item ) + QTimer.singleShot(50, runPrev) + else: + return - self.item = item - self.connect(self.item, SIGNAL('aboutToChange'), self.setDirty) + self.item = item + self.connect(self.item, SIGNAL('aboutToChange'), self.setDirty) - def setDirty(self, val=True): - self.dirty = val + def setDirty(self, val=True): + self.dirty = val - def _clear(self): - """ remove any layers from preview canvas """ - if self.item is not None: - self.disconnect(self.item, SIGNAL('aboutToChange'), self.setDirty) - self.item = None - self.dirty = False + def _clear(self): + """ remove any layers from preview canvas """ + if self.item is not None: + self.disconnect(self.item, SIGNAL('aboutToChange'), self.setDirty) + self.item = None + self.dirty = False - self.currentLayerId = None - self.setLayerSet( [] ) + self.currentLayerId = None + self.setLayerSet( [] ) - def _loadTablePreview(self, table, limit=False): - """ if has geometry column load to map canvas """ - QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) - self.setRenderFlag(False) - newLayerId = None + def _loadTablePreview(self, table, limit=False): + """ if has geometry column load to map canvas """ + QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) + self.setRenderFlag(False) + newLayerId = None - if table.geomType: - # limit the query result if required - if limit and table.rowCount > 1000: - uniqueField = table.getValidQGisUniqueFields(True) - if uniqueField == None: - QMessageBox.warning(self, "Sorry", "Unable to find a valid unique field") - return + if table.geomType: + # limit the query result if required + if limit and table.rowCount > 1000: + uniqueField = table.getValidQGisUniqueFields(True) + if uniqueField == None: + QMessageBox.warning(self, "Sorry", "Unable to find a valid unique field") + return - uri = table.database().uri() - uri.setDataSource("", u"(SELECT * FROM %s LIMIT 1000)" % table.quotedName(), table.geomColumn, "", uniqueField.name) - provider = table.database().dbplugin().providerName() - vl = QgsVectorLayer(uri.uri(), table.name, provider) - else: - vl = table.toMapLayer() + uri = table.database().uri() + uri.setDataSource("", u"(SELECT * FROM %s LIMIT 1000)" % table.quotedName(), table.geomColumn, "", uniqueField.name) + provider = table.database().dbplugin().providerName() + vl = QgsVectorLayer(uri.uri(), table.name, provider) + else: + vl = table.toMapLayer() - if not vl.isValid(): - self.setLayerSet( [] ) - else: - newLayerId = vl.id() if hasattr(vl, 'id') else vl.getLayerID() - self.setLayerSet( [ QgsMapCanvasLayer(vl) ] ) - QgsMapLayerRegistry.instance().addMapLayer(vl, False) - self.zoomToFullExtent() + if not vl.isValid(): + self.setLayerSet( [] ) + else: + newLayerId = vl.id() if hasattr(vl, 'id') else vl.getLayerID() + self.setLayerSet( [ QgsMapCanvasLayer(vl) ] ) + QgsMapLayerRegistry.instance().addMapLayers([vl], False) + self.zoomToFullExtent() - # remove old layer (if any) and set new - if self.currentLayerId: - QgsMapLayerRegistry.instance().removeMapLayer(self.currentLayerId, False) - self.currentLayerId = newLayerId + # remove old layer (if any) and set new + if self.currentLayerId: + QgsMapLayerRegistry.instance().removeMapLayer(self.currentLayerId, False) + self.currentLayerId = newLayerId - self.setRenderFlag(True) - QApplication.restoreOverrideCursor() + self.setRenderFlag(True) + QApplication.restoreOverrideCursor() diff --git a/python/plugins/fTools/tools/doMeanCoords.py b/python/plugins/fTools/tools/doMeanCoords.py index f0964af49c0..5a70c9d4428 100644 --- a/python/plugins/fTools/tools/doMeanCoords.py +++ b/python/plugins/fTools/tools/doMeanCoords.py @@ -98,7 +98,7 @@ class Dialog(QDialog, Ui_Dialog): addToTOC = QMessageBox.question(self, self.tr("Coordinate statistics"), self.tr("Created output point shapefile:\n%1\n\nWould you like to add the new layer to the TOC?").arg( outPath ), QMessageBox.Yes, QMessageBox.No, QMessageBox.NoButton) if addToTOC == QMessageBox.Yes: vlayer = QgsVectorLayer(outPath, unicode(outName), "ogr") - QgsMapLayerRegistry.instance().addMapLayer(vlayer) + QgsMapLayerRegistry.instance().addMapLayers([vlayer]) self.populateLayers() self.progressBar.setValue(0) self.buttonOk.setEnabled( True ) diff --git a/python/plugins/fTools/tools/doPointsInPolygon.py b/python/plugins/fTools/tools/doPointsInPolygon.py index fa79fbbdd44..266f3e224d4 100644 --- a/python/plugins/fTools/tools/doPointsInPolygon.py +++ b/python/plugins/fTools/tools/doPointsInPolygon.py @@ -120,7 +120,7 @@ class Dialog(QDialog, Ui_Dialog): fileInfo = QFileInfo( self.outShape.text() ) layerName = fileInfo.completeBaseName() layer = QgsVectorLayer(self.outShape.text(), layerName, "ogr") - QgsMapLayerRegistry.instance().addMapLayer(layer) + QgsMapLayerRegistry.instance().addMapLayers([layer]) self.populateLayers() self.restoreGui() diff --git a/python/plugins/fTools/tools/doRandPoints.py b/python/plugins/fTools/tools/doRandPoints.py index 601c1d72b1b..7c49c55cf8c 100644 --- a/python/plugins/fTools/tools/doRandPoints.py +++ b/python/plugins/fTools/tools/doRandPoints.py @@ -128,7 +128,7 @@ class Dialog(QDialog, Ui_Dialog): self.tr("Created output point shapefile:\n%1\n\nWould you like to add the new layer to the TOC?").arg(outPath), QMessageBox.Yes, QMessageBox.No, QMessageBox.NoButton) if addToTOC == QMessageBox.Yes: self.vlayer = QgsVectorLayer(outPath, unicode(outName), "ogr") - QgsMapLayerRegistry.instance().addMapLayer(self.vlayer) + QgsMapLayerRegistry.instance().addMapLayer([self.vlayer]) self.populateLayers() self.progressBar.setValue(0) self.buttonOk.setEnabled( True ) diff --git a/python/plugins/fTools/tools/doRegPoints.py b/python/plugins/fTools/tools/doRegPoints.py index 69d84adb4f5..3eaf2c71aff 100644 --- a/python/plugins/fTools/tools/doRegPoints.py +++ b/python/plugins/fTools/tools/doRegPoints.py @@ -92,7 +92,7 @@ class Dialog(QDialog, Ui_Dialog): addToTOC = QMessageBox.question(self, self.tr("Generate Regular Points"), self.tr("Created output point shapefile:\n%1\n\nWould you like to add the new layer to the TOC?").arg( outPath ), QMessageBox.Yes, QMessageBox.No, QMessageBox.NoButton) if addToTOC == QMessageBox.Yes: self.vlayer = QgsVectorLayer(outPath, unicode(outName), "ogr") - QgsMapLayerRegistry.instance().addMapLayer(self.vlayer) + QgsMapLayerRegistry.instance().addMapLayer([self.vlayer]) self.populateLayers() self.progressBar.setValue(0) self.buttonOk.setEnabled( True ) diff --git a/python/plugins/fTools/tools/doSpatialJoin.py b/python/plugins/fTools/tools/doSpatialJoin.py index 23276bc84f3..5026d56f71b 100644 --- a/python/plugins/fTools/tools/doSpatialJoin.py +++ b/python/plugins/fTools/tools/doSpatialJoin.py @@ -109,7 +109,7 @@ class Dialog(QDialog, Ui_Dialog): .arg(unicode(outPath)), QMessageBox.Yes, QMessageBox.No, QMessageBox.NoButton) if addToTOC == QMessageBox.Yes: self.vlayer = QgsVectorLayer(outPath, unicode(outName), "ogr") - QgsMapLayerRegistry.instance().addMapLayer(self.vlayer) + QgsMapLayerRegistry.instance().addMapLayer([self.vlayer]) self.progressBar.setValue(0) self.buttonOk.setEnabled( True ) diff --git a/python/plugins/fTools/tools/doSumLines.py b/python/plugins/fTools/tools/doSumLines.py index 49b68e1dcca..db890087a74 100644 --- a/python/plugins/fTools/tools/doSumLines.py +++ b/python/plugins/fTools/tools/doSumLines.py @@ -81,7 +81,7 @@ class Dialog(QDialog, Ui_Dialog): addToTOC = QMessageBox.question(self, self.tr("Sum line lengths"), self.tr("Created output shapefile:\n%1\n\nWould you like to add the new layer to the TOC?").arg(unicode(outPath)), QMessageBox.Yes, QMessageBox.No, QMessageBox.NoButton) if addToTOC == QMessageBox.Yes: self.vlayer = QgsVectorLayer(outPath, unicode(outName), "ogr") - QgsMapLayerRegistry.instance().addMapLayer(self.vlayer) + QgsMapLayerRegistry.instance().addMapLayers([self.vlayer]) self.populateLayers() self.progressBar.setValue(0) self.buttonOk.setEnabled( True ) diff --git a/python/plugins/fTools/tools/ftools_utils.py b/python/plugins/fTools/tools/ftools_utils.py index 0339e39e08c..b9091842102 100644 --- a/python/plugins/fTools/tools/ftools_utils.py +++ b/python/plugins/fTools/tools/ftools_utils.py @@ -285,7 +285,7 @@ def addShapeToCanvas( shapefile_path ): vlayer_new = QgsVectorLayer( shapefile_path, layer_name, "ogr" ) print layer_name if vlayer_new.isValid(): - QgsMapLayerRegistry.instance().addMapLayer( vlayer_new ) + QgsMapLayerRegistry.instance().addMapLayers( [vlayer_new] ) return True else: return False diff --git a/python/plugins/osm/OsmLoadDlg.py b/python/plugins/osm/OsmLoadDlg.py index 8907de0ecd3..2b43ff7cf5b 100755 --- a/python/plugins/osm/OsmLoadDlg.py +++ b/python/plugins/osm/OsmLoadDlg.py @@ -192,7 +192,7 @@ class OsmLoadDlg(QDialog, Ui_OsmLoadDlg): if self.chkCustomRenderer.isChecked(): self.setCustomRenderer(polygonLayer) - QgsMapLayerRegistry.instance().addMapLayer(polygonLayer) + QgsMapLayerRegistry.instance().addMapLayers([polygonLayer]) # add line layer lineLayer = QgsVectorLayer(self.fname+"?type=line"+observer + tag + style, basename+" lines", "osm") @@ -206,7 +206,7 @@ class OsmLoadDlg(QDialog, Ui_OsmLoadDlg): if self.chkCustomRenderer.isChecked(): self.setCustomRenderer(lineLayer) - QgsMapLayerRegistry.instance().addMapLayer(lineLayer) + QgsMapLayerRegistry.instance().addMapLayers([lineLayer]) # add point layer pointLayer = QgsVectorLayer(self.fname+"?type=point"+observer + tag + style, basename+" points", "osm") @@ -220,7 +220,7 @@ class OsmLoadDlg(QDialog, Ui_OsmLoadDlg): if self.chkCustomRenderer.isChecked(): self.setCustomRenderer(pointLayer) - QgsMapLayerRegistry.instance().addMapLayer(pointLayer) + QgsMapLayerRegistry.instance().addMapLayers([pointLayer]) # remember layers self.polygonLayer=polygonLayer diff --git a/python/plugins/sextante/algs/ftools/ftools_utils.py b/python/plugins/sextante/algs/ftools/ftools_utils.py index afe0a1da4e0..fc0a511af4b 100644 --- a/python/plugins/sextante/algs/ftools/ftools_utils.py +++ b/python/plugins/sextante/algs/ftools/ftools_utils.py @@ -266,7 +266,7 @@ def addShapeToCanvas( shapefile_path ): vlayer_new = QgsVectorLayer( shapefile_path, layer_name, "ogr" ) print layer_name if vlayer_new.isValid(): - QgsMapLayerRegistry.instance().addMapLayer( vlayer_new ) + QgsMapLayerRegistry.instance().addMapLayers( [vlayer_new] ) return True else: return False diff --git a/python/plugins/sextante/core/QGisLayers.py b/python/plugins/sextante/core/QGisLayers.py index 3a304669ad0..e63d84134be 100644 --- a/python/plugins/sextante/core/QGisLayers.py +++ b/python/plugins/sextante/core/QGisLayers.py @@ -44,7 +44,7 @@ class QGisLayers: for layer in layers: if layer.type() == layer.RasterLayer: - if layer.usesProvider() and layer.providerKey() == 'gdal':#only gdal file-based layers + if layer.providerType() == 'gdal':#only gdal file-based layers raster.append(layer) return raster @@ -52,12 +52,12 @@ class QGisLayers: def getVectorLayers(shapetype=-1): layers = QGisLayers.iface.legendInterface().layers() vector = list() - for layer in layers: - if layer.type() == layer.VectorLayer: - if shapetype == QGisLayers.ALL_TYPES or layer.geometryType() == shapetype: - uri = unicode(layer.source()) + for layer in layers: + if layer.type() == layer.VectorLayer: + if shapetype == QGisLayers.ALL_TYPES or layer.geometryType() == shapetype: + uri = unicode(layer.source()) if not uri.endswith("csv") and not uri.endswith("dbf"): - + vector.append(layer) return vector @@ -112,7 +112,7 @@ class QGisLayers: else: style = SextanteConfig.getSetting(SextanteConfig.VECTOR_POLYGON_STYLE) qgslayer.loadNamedStyle(style) - QgsMapLayerRegistry.instance().addMapLayer(qgslayer) + QgsMapLayerRegistry.instance().addMapLayers([qgslayer]) else: qgslayer = QgsRasterLayer(layer, name) if qgslayer.isValid(): @@ -121,7 +121,7 @@ class QGisLayers: if style == None: style = SextanteConfig.getSetting(SextanteConfig.RASTER_STYLE) qgslayer.loadNamedStyle(style) - QgsMapLayerRegistry.instance().addMapLayer(qgslayer) + QgsMapLayerRegistry.instance().addMapLayers([qgslayer]) QGisLayers.iface.legendInterface().refreshLayerSymbology(qgslayer) else: if prjSetting: @@ -172,51 +172,51 @@ class QGisLayers: @staticmethod def features(layer): - '''this returns an iterator over features in a vector layer, considering the - selection that might exist in the layer, and the SEXTANTE configuration that + '''this returns an iterator over features in a vector layer, considering the + selection that might exist in the layer, and the SEXTANTE configuration that indicates whether to use only selected feature or all of them. This should be used by algorithms instead of calling the QGis API directly, to ensure a consistent behaviour across algorithms''' return Features(layer) - - + + class Features(): - - def __init__(self, layer): + + def __init__(self, layer): self.layer = layer - self.selection = False; + self.selection = False; if SextanteConfig.getSetting(SextanteConfig.USE_SELECTED): self.selected = layer.selectedFeatures() if len(self.selected) > 0: - self.selection = True - self.idx = 0; - + self.selection = True + self.idx = 0; + def __iter__(self): return self - + def next(self): if self.selection: - if self.idx < len(self.selected): + if self.idx < len(self.selected): feature = self.selected[self.idx] self.idx += 1 return feature else: - raise StopIteration() + raise StopIteration() else: f = QgsFeature() if self.layer.dataProvider().nextFeature(f): return f else: raise StopIteration() - + def __len__(self): if self.selection: return int(self.layer.selectedFeatureCount()) else: return int(self.layer.dataProvider().featureCount()) - - - + + + diff --git a/python/plugins/sextante/gdal/OgrAlgorithm.py b/python/plugins/sextante/gdal/OgrAlgorithm.py index 2f9b84f7168..6ff8df6690c 100644 --- a/python/plugins/sextante/gdal/OgrAlgorithm.py +++ b/python/plugins/sextante/gdal/OgrAlgorithm.py @@ -44,7 +44,7 @@ class OgrAlgorithm(GeoAlgorithm): return uri; provider = layer.dataProvider().name() qDebug("inputLayer provider '%s'" % provider) - #qDebug("inputLayer layer '%s'" % layer.providerKey()) + #qDebug("inputLayer layer '%s'" % layer.providerType()) qDebug("inputLayer.source '%s'" % layer.source()) if provider == 'spatialite': #dbname='/geodata/osm_ch.sqlite' table="places" (Geometry) sql= diff --git a/python/plugins/sextante/gui/SextantePostprocessing.py b/python/plugins/sextante/gui/SextantePostprocessing.py index ac7b3c3e587..78f34c7caf2 100644 --- a/python/plugins/sextante/gui/SextantePostprocessing.py +++ b/python/plugins/sextante/gui/SextantePostprocessing.py @@ -47,7 +47,7 @@ class SextantePostprocessing: try: if out.value.startswith("memory:"): layer = out.memoryLayer - QgsMapLayerRegistry.instance().addMapLayer(layer) + QgsMapLayerRegistry.instance().addMapLayers([layer]) else: if SextanteConfig.getSetting(SextanteConfig.USE_FILENAME_AS_LAYER_NAME): name = os.path.basename(out.value)