@@ -38,6 +38,7 @@ def __init__(self, parent=None):
38
38
39
39
self .item = None
40
40
self .dirty = False
41
+ self .currentLayer = None
41
42
42
43
# reuse settings from QGIS
43
44
settings = QSettings ()
@@ -46,8 +47,6 @@ def __init__(self, parent=None):
46
47
zoomFactor = settings .value ("/qgis/zoom_factor" , 2 , type = float )
47
48
self .setWheelAction (QgsMapCanvas .WheelAction (action ), zoomFactor )
48
49
49
- self ._clear ()
50
-
51
50
def refresh (self ):
52
51
self .setDirty (True )
53
52
self .loadPreview (self .item )
@@ -80,19 +79,18 @@ def _clear(self):
80
79
self .disconnect (self .item , SIGNAL ('aboutToChange' ), self .setDirty )
81
80
except RuntimeError :
82
81
pass
82
+
83
83
self .item = None
84
84
self .dirty = False
85
-
86
- self .currentLayerId = None
87
- self .setLayerSet ([])
85
+ self ._loadTablePreview (None )
88
86
89
87
def _loadTablePreview (self , table , limit = False ):
90
88
""" if has geometry column load to map canvas """
91
89
QApplication .setOverrideCursor (QCursor (Qt .WaitCursor ))
92
90
self .setRenderFlag (False )
93
- newLayerId = None
91
+ vl = None
94
92
95
- if table .geomType :
93
+ if table and table .geomType :
96
94
# limit the query result if required
97
95
if limit and table .rowCount > 1000 :
98
96
uniqueField = table .getValidQGisUniqueFields (True )
@@ -112,17 +110,21 @@ def _loadTablePreview(self, table, limit=False):
112
110
vl = table .toMapLayer ()
113
111
114
112
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
121
115
122
116
# 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
126
128
127
129
self .setRenderFlag (True )
128
130
QApplication .restoreOverrideCursor ()
0 commit comments