Skip to content

Commit eea81e8

Browse files
committedSep 4, 2015
[DBManager] remove layers from QgsMapLayerRegistry once refreshing a table, previewing a different layer or closing the DBManager main window (fix #12938)
1 parent e6f4fa6 commit eea81e8

File tree

2 files changed

+22
-16
lines changed

2 files changed

+22
-16
lines changed
 

‎python/plugins/db_manager/db_manager.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ def __init__(self, iface, parent=None):
5858

5959
def closeEvent(self, e):
6060
self.unregisterAllActions()
61+
# clear preview, this will delete the layer in preview tab
62+
self.preview.loadPreview(None)
6163

6264
# save the window state
6365
settings = QSettings()
@@ -82,6 +84,8 @@ def itemChanged(self, item):
8284
QApplication.setOverrideCursor(Qt.WaitCursor)
8385
try:
8486
self.reloadButtons()
87+
# clear preview, this will delete the layer in preview tab
88+
self.preview.loadPreview(None)
8589
self.refreshTabs()
8690
except BaseError as e:
8791
DlgDbError.showError(e, self)

‎python/plugins/db_manager/layer_preview.py

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ def __init__(self, parent=None):
3838

3939
self.item = None
4040
self.dirty = False
41+
self.currentLayer = None
4142

4243
# reuse settings from QGIS
4344
settings = QSettings()
@@ -46,8 +47,6 @@ def __init__(self, parent=None):
4647
zoomFactor = settings.value("/qgis/zoom_factor", 2, type=float)
4748
self.setWheelAction(QgsMapCanvas.WheelAction(action), zoomFactor)
4849

49-
self._clear()
50-
5150
def refresh(self):
5251
self.setDirty(True)
5352
self.loadPreview(self.item)
@@ -80,19 +79,18 @@ def _clear(self):
8079
self.disconnect(self.item, SIGNAL('aboutToChange'), self.setDirty)
8180
except RuntimeError:
8281
pass
82+
8383
self.item = None
8484
self.dirty = False
85-
86-
self.currentLayerId = None
87-
self.setLayerSet([])
85+
self._loadTablePreview(None)
8886

8987
def _loadTablePreview(self, table, limit=False):
9088
""" if has geometry column load to map canvas """
9189
QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
9290
self.setRenderFlag(False)
93-
newLayerId = None
91+
vl = None
9492

95-
if table.geomType:
93+
if table and table.geomType:
9694
# limit the query result if required
9795
if limit and table.rowCount > 1000:
9896
uniqueField = table.getValidQGisUniqueFields(True)
@@ -112,17 +110,21 @@ def _loadTablePreview(self, table, limit=False):
112110
vl = table.toMapLayer()
113111

114112
if not vl.isValid():
115-
self.setLayerSet([])
116-
else:
117-
newLayerId = vl.id() if hasattr(vl, 'id') else vl.id()
118-
self.setLayerSet([QgsMapCanvasLayer(vl)])
119-
QgsMapLayerRegistry.instance().addMapLayers([vl], False)
120-
self.zoomToFullExtent()
113+
vl.deleteLater()
114+
vl = None
121115

122116
# remove old layer (if any) and set new
123-
if self.currentLayerId:
124-
QgsMapLayerRegistry.instance().removeMapLayers([self.currentLayerId], False)
125-
self.currentLayerId = newLayerId
117+
if self.currentLayer:
118+
QgsMapLayerRegistry.instance().removeMapLayers([self.currentLayer.id()])
119+
120+
if vl:
121+
self.setLayerSet([QgsMapCanvasLayer(vl)])
122+
QgsMapLayerRegistry.instance().addMapLayers([vl], False)
123+
self.zoomToFullExtent()
124+
else:
125+
self.setLayerSet([])
126+
127+
self.currentLayer = vl
126128

127129
self.setRenderFlag(True)
128130
QApplication.restoreOverrideCursor()

0 commit comments

Comments
 (0)
Please sign in to comment.