@@ -175,8 +175,18 @@ def save(self, mainwindow):
175
175
qtoolbars_dict = dtype_workbench_class ._get_uielements_from_mainwindow (mainwindow , QToolBar )
176
176
qdockwidgets_dict = dtype_workbench_class ._get_uielements_from_mainwindow (mainwindow , QDockWidget )
177
177
178
- dtype_workbench_class ._save_uielements (qtoolbars_dict , self ._toolbars_dict )
179
- dtype_workbench_class ._save_uielements (qdockwidgets_dict , self ._dockwidgets_dict )
178
+ show_unnamed_warning = False if self ._config is None else self ._config .get ('show_unnamed_warning' , False )
179
+
180
+ dtype_workbench_class ._save_uielements (
181
+ uiobjects_dict = qtoolbars_dict ,
182
+ uielements_dict = self ._toolbars_dict ,
183
+ show_unnamed_warning = show_unnamed_warning ,
184
+ )
185
+ dtype_workbench_class ._save_uielements (
186
+ uiobjects_dict = qdockwidgets_dict ,
187
+ uielements_dict = self ._dockwidgets_dict ,
188
+ show_unnamed_warning = show_unnamed_warning ,
189
+ )
180
190
181
191
self ._mainwindow_state = bytes (mainwindow .saveState ())
182
192
@@ -236,14 +246,24 @@ def get_parent(el):
236
246
}
237
247
238
248
@staticmethod
239
- def _save_uielements (uiobjects_dict , uielements_dict ):
249
+ def _save_uielements (uiobjects_dict , uielements_dict , show_unnamed_warning ):
240
250
241
251
for name_internal , uiobject in uiobjects_dict .items ():
242
- try :
252
+ if name_internal in uielements_dict . keys () :
243
253
uielements_dict [name_internal ].pull_state_from_uiobject ()
244
- except KeyError :
245
- uielement = dtype_uielement_class .from_uiobject (uiobject )
246
- uielements_dict [uielement .name_internal ] = uielement
254
+ else :
255
+ """try/except-block fixes #9, Certain other plugins inhibit
256
+ saving a workbench because of unnamed UI element"""
257
+ try :
258
+ uielement = dtype_uielement_class .from_uiobject (uiobject )
259
+ uielements_dict [uielement .name_internal ] = uielement
260
+ except QgistUnnamedElementError as e :
261
+ """implementing #8, enabling the user to disable warnings
262
+ which are mainly caused by other plugins"""
263
+ if show_unnamed_warning :
264
+ msg_warning (e )
265
+ except Qgist_ALL_Errors as e :
266
+ msg_warning (e )
247
267
for name_internal in (uielements_dict .keys () - uiobjects_dict .keys ()):
248
268
uielements_dict [name_internal ].existence = False
249
269
@@ -275,19 +295,25 @@ def from_mainwindow(
275
295
if not isinstance (config , config_class ) and config is not None :
276
296
raise QgistTypeError (translate ('global' , '"config" must be a "config_class" object or None. (dtype_workbench from_mainwindow)' ))
277
297
278
- toolbars_list = [
279
- dtype_uielement_class .from_uiobject (uiobject ).as_dict ()
298
+ def uiobject_to_dict (_uiobject ):
299
+ try :
300
+ return dtype_uielement_class .from_uiobject (_uiobject ).as_dict ()
301
+ except QgistUnnamedElementError :
302
+ return None
303
+
304
+ toolbars_list = [ui_dict for ui_dict in (
305
+ uiobject_to_dict (uiobject )
280
306
for _ , uiobject in dtype_workbench_class ._get_uielements_from_mainwindow (
281
307
mainwindow , QToolBar
282
308
).items ()
283
- ]
309
+ ) if ui_dict is not None ]
284
310
285
- dockwidgets_list = [
286
- dtype_uielement_class . from_uiobject (uiobject ). as_dict ( )
311
+ dockwidgets_list = [ui_dict for ui_dict in (
312
+ uiobject_to_dict (uiobject )
287
313
for _ , uiobject in dtype_workbench_class ._get_uielements_from_mainwindow (
288
314
mainwindow , QDockWidget
289
315
).items ()
290
- ]
316
+ ) if ui_dict is not None ]
291
317
292
318
mainwindow_state = base64 .encodebytes (bytes (mainwindow .saveState ())).decode ('ASCII' )
293
319
0 commit comments