mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-24 21:04:40 +01:00
Merge pull request #1737 from pypeclub/bugfix/local_settings_crash
Local settings UI crash on missing defaults
This commit is contained in:
commit
c16879111e
2 changed files with 55 additions and 9 deletions
|
|
@ -114,6 +114,7 @@ class LocalSettingsAction(PypeModule, ITrayAction):
|
|||
|
||||
# Tray attributes
|
||||
self.settings_window = None
|
||||
self._first_trigger = True
|
||||
|
||||
def connect_with_modules(self, *_a, **_kw):
|
||||
return
|
||||
|
|
@ -153,6 +154,9 @@ class LocalSettingsAction(PypeModule, ITrayAction):
|
|||
self.settings_window.raise_()
|
||||
self.settings_window.activateWindow()
|
||||
|
||||
# Reset content if was not visible
|
||||
if not was_visible:
|
||||
# Do not reset if it's first trigger of action
|
||||
if self._first_trigger:
|
||||
self._first_trigger = False
|
||||
elif not was_visible:
|
||||
# Reset content if was not visible
|
||||
self.settings_window.reset()
|
||||
|
|
|
|||
|
|
@ -168,9 +168,6 @@ class LocalSettingsWindow(QtWidgets.QWidget):
|
|||
|
||||
scroll_widget = QtWidgets.QScrollArea(self)
|
||||
scroll_widget.setObjectName("GroupWidget")
|
||||
settings_widget = LocalSettingsWidget(scroll_widget)
|
||||
|
||||
scroll_widget.setWidget(settings_widget)
|
||||
scroll_widget.setWidgetResizable(True)
|
||||
|
||||
footer = QtWidgets.QWidget(self)
|
||||
|
|
@ -191,7 +188,12 @@ class LocalSettingsWindow(QtWidgets.QWidget):
|
|||
save_btn.clicked.connect(self._on_save_clicked)
|
||||
reset_btn.clicked.connect(self._on_reset_clicked)
|
||||
|
||||
self.settings_widget = settings_widget
|
||||
# Do not create local settings widget in init phase as it's using
|
||||
# settings objects that must be OK to be able create this widget
|
||||
# - we want to show dialog if anything goes wrong
|
||||
# - without reseting nothing is shown
|
||||
self._settings_widget = None
|
||||
self._scroll_widget = scroll_widget
|
||||
self.reset_btn = reset_btn
|
||||
self.save_btn = save_btn
|
||||
|
||||
|
|
@ -203,13 +205,53 @@ class LocalSettingsWindow(QtWidgets.QWidget):
|
|||
def reset(self):
|
||||
if self._reset_on_show:
|
||||
self._reset_on_show = False
|
||||
value = get_local_settings()
|
||||
self.settings_widget.update_local_settings(value)
|
||||
|
||||
error_msg = None
|
||||
try:
|
||||
# Create settings widget if is not created yet
|
||||
if self._settings_widget is None:
|
||||
self._settings_widget = LocalSettingsWidget(
|
||||
self._scroll_widget
|
||||
)
|
||||
self._scroll_widget.setWidget(self._settings_widget)
|
||||
|
||||
value = get_local_settings()
|
||||
self._settings_widget.update_local_settings(value)
|
||||
|
||||
except Exception as exc:
|
||||
error_msg = str(exc)
|
||||
|
||||
crashed = error_msg is not None
|
||||
# Enable/Disable save button if crashed or not
|
||||
self.save_btn.setEnabled(not crashed)
|
||||
# Show/Hide settings widget if crashed or not
|
||||
if self._settings_widget:
|
||||
self._settings_widget.setVisible(not crashed)
|
||||
|
||||
if not crashed:
|
||||
return
|
||||
|
||||
# Show message with error
|
||||
title = "Something went wrong"
|
||||
msg = (
|
||||
"Bug: Loading of settings failed."
|
||||
" Please contact your project manager or OpenPype team."
|
||||
"\n\nError message:\n{}"
|
||||
).format(error_msg)
|
||||
|
||||
dialog = QtWidgets.QMessageBox(
|
||||
QtWidgets.QMessageBox.Critical,
|
||||
title,
|
||||
msg,
|
||||
QtWidgets.QMessageBox.Ok,
|
||||
self
|
||||
)
|
||||
dialog.exec_()
|
||||
|
||||
def _on_reset_clicked(self):
|
||||
self.reset()
|
||||
|
||||
def _on_save_clicked(self):
|
||||
value = self.settings_widget.settings_value()
|
||||
value = self._settings_widget.settings_value()
|
||||
save_local_settings(value)
|
||||
self.reset()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue