Skip to content

Commit a5bc809

Browse files
committed
fixed #8
2 parents 28a6591 + 079ef11 commit a5bc809

File tree

9 files changed

+230
-129
lines changed

9 files changed

+230
-129
lines changed

i18n/qgist_de.ts

Lines changed: 81 additions & 61 deletions
Large diffs are not rendered by default.

i18n/qgist_en.ts

Lines changed: 81 additions & 61 deletions
Large diffs are not rendered by default.

qgist/workbench/core.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
WORKBENCH_WIDGET_WIDTH,
6060
)
6161
from .dtype_fsm import dtype_fsm_class
62+
from .error import QgistUnnamedElementError
6263
from .ui_manager import ui_manager_class
6364
from ..config import (
6465
config_class,
@@ -278,6 +279,6 @@ def _save_workbench(self):
278279

279280
try:
280281
self._fsm.save_workbench(self._fsm.active_workbench, self._mainwindow)
281-
except Qgist_ALL_Errors as e:
282+
except Qgist_ALL_Errors + (QgistUnnamedElementError,) as e:
282283
msg_critical(e, self._mainwindow)
283284
return

qgist/workbench/dtype_fsm.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ def __init__(self, workbench_list, mainwindow, active_workbench = None, config =
7272
self._config = config
7373

7474
self._workbench_dict = {
75-
item['name']: dtype_workbench_class(mainwindow = mainwindow, **item)
75+
item['name']: dtype_workbench_class(mainwindow = mainwindow, config = self._config, **item)
7676
for item in workbench_list
7777
}
7878
if active_workbench is not None and active_workbench not in self._workbench_dict.keys():
@@ -135,7 +135,11 @@ def new_workbench(self, name, mainwindow):
135135
if len(name) == 0:
136136
raise QgistWorkbenchNameError(translate('global', '"name" is empty. (dtype_fsm new)'))
137137

138-
self._workbench_dict[name] = dtype_workbench_class.from_mainwindow(name, mainwindow)
138+
self._workbench_dict[name] = dtype_workbench_class.from_mainwindow(
139+
name = name,
140+
mainwindow = mainwindow,
141+
config = self._config,
142+
)
139143
self._active_workbench = name
140144

141145
self._update_config()
@@ -215,3 +219,13 @@ def active_workbench(self):
215219
def active_workbench(self, value):
216220

217221
raise QgistAttributeError(translate('global', '"active_workbench" must not be changed. (dtype_fsm active)'))
222+
223+
@property
224+
def config(self):
225+
226+
return self._config
227+
228+
@config.setter
229+
def config(self, value):
230+
231+
raise QgistAttributeError(translate('global', '"config" must not be changed. (dtype_fsm config)'))

qgist/workbench/dtype_uielement.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
# IMPORT (Internal)
3939
# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
4040

41+
from .error import QgistUnnamedElementError
4142
from ..error import (
4243
QgistAttributeError,
4344
QgistTypeError,
@@ -62,7 +63,7 @@ def __init__(self,
6263
if not isinstance(name_internal, str):
6364
raise QgistTypeError(translate('global', '"internal_name" must be str. (dtype_uielement)'))
6465
if len(name_internal) == 0:
65-
raise QgistValueError(translate('global', 'Unnamed UI element. (dtype_uielement)'))
66+
raise QgistUnnamedElementError(translate('global', 'Unnamed UI element. (dtype_uielement)'))
6667
self._name_internal = name_internal
6768

6869
if not isinstance(name_translated, str):

qgist/workbench/dtype_workbench.py

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@
4747
# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
4848

4949
from .dtype_uielement import dtype_uielement_class
50+
from .error import QgistUnnamedElementError
51+
from ..config import config_class
5052
from ..error import (
5153
QgistTypeError,
5254
QgistValueError,
@@ -68,8 +70,14 @@ def __init__(self,
6870
toolbars_list = None,
6971
dockwidgets_list = None,
7072
mainwindow = None,
73+
config = None,
7174
):
7275

76+
if not isinstance(config, config_class) and config is not None:
77+
raise QgistTypeError(translate('global', '"config" must be a "config_class" object or None. (dtype_workbench)'))
78+
79+
self._config = config
80+
7381
if not isinstance(name, str):
7482
raise QgistTypeError(translate('global', '"name" must be str. (dtype_workbench)'))
7583
if len(name) == 0:
@@ -144,8 +152,18 @@ def activate(self, mainwindow):
144152
qtoolbars_dict = dtype_workbench_class._get_uielements_from_mainwindow(mainwindow, QToolBar)
145153
qdockwidgets_dict = dtype_workbench_class._get_uielements_from_mainwindow(mainwindow, QDockWidget)
146154

147-
dtype_workbench_class._activate_uielements(qtoolbars_dict, self._toolbars_dict)
148-
dtype_workbench_class._activate_uielements(qdockwidgets_dict, self._dockwidgets_dict)
155+
show_unnamed_warning = False if self._config is None else self._config.get('show_unnamed_warning', False)
156+
157+
dtype_workbench_class._activate_uielements(
158+
uiobjects_dict = qtoolbars_dict,
159+
uielements_dict = self._toolbars_dict,
160+
show_unnamed_warning = show_unnamed_warning,
161+
)
162+
dtype_workbench_class._activate_uielements(
163+
uiobjects_dict = qdockwidgets_dict,
164+
uielements_dict = self._dockwidgets_dict,
165+
show_unnamed_warning = show_unnamed_warning,
166+
)
149167

150168
mainwindow.restoreState(self._mainwindow_state)
151169

@@ -180,7 +198,7 @@ def toolbars(self):
180198
return (self._toolbars_dict[name] for name in sorted(self.toolbars_keys()))
181199

182200
@staticmethod
183-
def _activate_uielements(uiobjects_dict, uielements_dict):
201+
def _activate_uielements(uiobjects_dict, uielements_dict, show_unnamed_warning):
184202

185203
for name_internal, uiobject in uiobjects_dict.items():
186204
if name_internal in uielements_dict.keys():
@@ -191,6 +209,11 @@ def _activate_uielements(uiobjects_dict, uielements_dict):
191209
try:
192210
uielement = dtype_uielement_class.from_uiobject(uiobject)
193211
uielements_dict[uielement.name_internal] = uielement
212+
except QgistUnnamedElementError as e:
213+
"""implementing #8, enabling the user to disable warnings
214+
which are mainly caused by other plugins"""
215+
if show_unnamed_warning:
216+
msg_warning(e)
194217
except Qgist_ALL_Errors as e:
195218
msg_warning(e)
196219
for name_internal in (uielements_dict.keys() - uiobjects_dict.keys()):
@@ -243,10 +266,14 @@ def name(self, value):
243266
def from_mainwindow(
244267
name = '',
245268
mainwindow = None,
269+
config = None,
246270
):
247271

272+
# name is checked by dtype_workbench_class.__init__
248273
if not isinstance(mainwindow, QMainWindow):
249274
raise QgistTypeError(translate('global', '"mainwindow" must be a QGIS mainwindow. (dtype_workbench from_mainwindow)'))
275+
if not isinstance(config, config_class) and config is not None:
276+
raise QgistTypeError(translate('global', '"config" must be a "config_class" object or None. (dtype_workbench from_mainwindow)'))
250277

251278
toolbars_list = [
252279
dtype_uielement_class.from_uiobject(uiobject).as_dict()
@@ -270,4 +297,5 @@ def from_mainwindow(
270297
toolbars_list = toolbars_list,
271298
dockwidgets_list = dockwidgets_list,
272299
mainwindow = mainwindow,
300+
config = config,
273301
)

qgist/workbench/error.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,8 @@
2828
# EXCEPTIONS
2929
# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3030

31+
class QgistUnnamedElementError(Exception):
32+
pass
33+
3134
class QgistWorkbenchNameError(Exception):
3235
pass

qgist/workbench/ui_manager.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,16 @@ def _connect_ui(self):
110110
self._update_workbenches()
111111
self._uptdate_items()
112112

113+
if self._fsm.config is None:
114+
self._ui_dict['checkbox_unnamedwarning'].setEnabled(False)
115+
else:
116+
self._ui_dict['checkbox_unnamedwarning'].setCheckState(
117+
Qt.Checked if self._fsm.config.get('show_unnamed_warning', False) else Qt.Unchecked
118+
)
119+
def change_unnamedwarning():
120+
self._fsm.config['show_unnamed_warning'] = bool(self._ui_dict['checkbox_unnamedwarning'].isChecked())
121+
self._ui_dict['checkbox_unnamedwarning'].stateChanged.connect(change_unnamedwarning)
122+
113123
def _list_workbenches_currentrowchanged(self):
114124

115125
if not bool(self._ui_dict['list_workbenches'].isEnabled()):

qgist/workbench/ui_manager_base.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
QIcon,
4444
)
4545
from PyQt5.QtWidgets import (
46+
QCheckBox,
4647
QDialog,
4748
QHBoxLayout,
4849
QLabel,
@@ -127,6 +128,9 @@ def _init_dialogtoolbar(ui_dict, toolbar_layout, plugin_root_fld):
127128

128129
toolbar_layout.addStretch()
129130

131+
ui_dict['checkbox_unnamedwarning'] = QCheckBox(translate('global', 'Warn if UI elements can not be uniquely identified'))
132+
toolbar_layout.addWidget(ui_dict['checkbox_unnamedwarning'])
133+
130134
@staticmethod
131135
def _get_workbenchlist():
132136

0 commit comments

Comments
 (0)