Skip to content

Commit f8a65b0

Browse files
committed
0.0.4 release
2 parents 3287fed + c6fd233 commit f8a65b0

File tree

5 files changed

+46
-14
lines changed

5 files changed

+46
-14
lines changed

CHANGES.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Changes
22

3+
## 0.0.4 (2019-09-10)
4+
5+
* Fixed #9: Workbenches can be saved even if other plugins contain unnamed UI elements.
6+
* Improved: Handle more cases similar to #7 and #9, which could potentially crash `workbench`.
7+
* Updated screenshots.
8+
39
## 0.0.3 (2019-09-08)
410

511
* Implemented #1: Workbenches can be renamed.

docs/workbench_01.png

-642 Bytes
Loading

docs/workbench_02.png

-887 Bytes
Loading

metadata.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
name=QGIST Workbench
2323
description=Organizing Toolbars
2424
about=QGIST Workbench is a QGIS plugin for organizing toolbars and dockwidgets.
25-
version=0.0.3
25+
version=0.0.4
2626
qgisMinimumVersion=3.0
2727
author=QGIST project
2828
email=info@qgist.org

qgist/workbench/dtype_workbench.py

Lines changed: 39 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)