@@ -175,8 +175,18 @@ def save(self, mainwindow):
175175 qtoolbars_dict = dtype_workbench_class ._get_uielements_from_mainwindow (mainwindow , QToolBar )
176176 qdockwidgets_dict = dtype_workbench_class ._get_uielements_from_mainwindow (mainwindow , QDockWidget )
177177
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+ )
180190
181191 self ._mainwindow_state = bytes (mainwindow .saveState ())
182192
@@ -236,14 +246,24 @@ def get_parent(el):
236246 }
237247
238248 @staticmethod
239- def _save_uielements (uiobjects_dict , uielements_dict ):
249+ def _save_uielements (uiobjects_dict , uielements_dict , show_unnamed_warning ):
240250
241251 for name_internal , uiobject in uiobjects_dict .items ():
242- try :
252+ if name_internal in uielements_dict . keys () :
243253 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 )
247267 for name_internal in (uielements_dict .keys () - uiobjects_dict .keys ()):
248268 uielements_dict [name_internal ].existence = False
249269
@@ -275,19 +295,25 @@ def from_mainwindow(
275295 if not isinstance (config , config_class ) and config is not None :
276296 raise QgistTypeError (translate ('global' , '"config" must be a "config_class" object or None. (dtype_workbench from_mainwindow)' ))
277297
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 )
280306 for _ , uiobject in dtype_workbench_class ._get_uielements_from_mainwindow (
281307 mainwindow , QToolBar
282308 ).items ()
283- ]
309+ ) if ui_dict is not None ]
284310
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 )
287313 for _ , uiobject in dtype_workbench_class ._get_uielements_from_mainwindow (
288314 mainwindow , QDockWidget
289315 ).items ()
290- ]
316+ ) if ui_dict is not None ]
291317
292318 mainwindow_state = base64 .encodebytes (bytes (mainwindow .saveState ())).decode ('ASCII' )
293319
0 commit comments