mirror of
https://github.com/ynput/ayon-core.git
synced 2026-01-01 16:34:53 +01:00
use controlled to handle last opened info
This commit is contained in:
parent
936363a660
commit
407b6b518e
2 changed files with 114 additions and 45 deletions
|
|
@ -115,13 +115,19 @@ class SettingsCategoryWidget(QtWidgets.QWidget):
|
|||
"settings to update them to you current running OpenPype version."
|
||||
)
|
||||
|
||||
def __init__(self, user_role, parent=None):
|
||||
def __init__(self, controller, parent=None):
|
||||
super(SettingsCategoryWidget, self).__init__(parent)
|
||||
|
||||
self.user_role = user_role
|
||||
self._controller = controller
|
||||
controller.event_system.add_callback(
|
||||
"edit.mode.changed",
|
||||
self._edit_mode_changed
|
||||
)
|
||||
|
||||
self.entity = None
|
||||
self._edit_mode = None
|
||||
self._last_saved_info = None
|
||||
self._reset_crashed = False
|
||||
|
||||
self._state = CategoryState.Idle
|
||||
|
||||
|
|
@ -192,11 +198,16 @@ class SettingsCategoryWidget(QtWidgets.QWidget):
|
|||
)
|
||||
raise TypeError("Unknown type: {}".format(label))
|
||||
|
||||
def _edit_mode_changed(self, event):
|
||||
self.set_edit_mode(event["edit_mode"])
|
||||
|
||||
def set_edit_mode(self, enabled):
|
||||
if enabled is self._edit_mode:
|
||||
return
|
||||
|
||||
self.save_btn.setEnabled(enabled)
|
||||
self._edit_mode = enabled
|
||||
|
||||
self.save_btn.setEnabled(enabled and not self._reset_crashed)
|
||||
if enabled:
|
||||
tooltip = (
|
||||
"Someone else has opened settings UI."
|
||||
|
|
@ -302,7 +313,7 @@ class SettingsCategoryWidget(QtWidgets.QWidget):
|
|||
|
||||
footer_layout = QtWidgets.QHBoxLayout(footer_widget)
|
||||
footer_layout.setContentsMargins(5, 5, 5, 5)
|
||||
if self.user_role == "developer":
|
||||
if self._controller.user_role == "developer":
|
||||
self._add_developer_ui(footer_layout, footer_widget)
|
||||
|
||||
footer_layout.addWidget(empty_label, 1)
|
||||
|
|
@ -683,14 +694,16 @@ class SettingsCategoryWidget(QtWidgets.QWidget):
|
|||
)
|
||||
|
||||
def _on_reset_crash(self):
|
||||
self._reset_crashed = True
|
||||
self.save_btn.setEnabled(False)
|
||||
|
||||
if self.breadcrumbs_model is not None:
|
||||
self.breadcrumbs_model.set_entity(None)
|
||||
|
||||
def _on_reset_success(self):
|
||||
self._reset_crashed = True
|
||||
if not self.save_btn.isEnabled():
|
||||
self.save_btn.setEnabled(True)
|
||||
self.save_btn.setEnabled(self._edit_mode)
|
||||
|
||||
if self.breadcrumbs_model is not None:
|
||||
path = self.breadcrumbs_bar.path()
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ from Qt import QtWidgets, QtGui, QtCore
|
|||
from openpype import style
|
||||
|
||||
from openpype.lib import is_admin_password_required
|
||||
from openpype.lib.events import EventSystem
|
||||
from openpype.widgets import PasswordDialog
|
||||
|
||||
from openpype.settings.lib import (
|
||||
|
|
@ -24,6 +25,81 @@ from .widgets import (
|
|||
from .search_dialog import SearchEntitiesDialog
|
||||
|
||||
|
||||
class SettingsController:
|
||||
"""Controller for settings tools.
|
||||
|
||||
Added when tool was finished for checks of last opened in settings
|
||||
categories and being able communicated with main widget logic.
|
||||
"""
|
||||
|
||||
def __init__(self, user_role):
|
||||
self._user_role = user_role
|
||||
self._event_system = EventSystem()
|
||||
|
||||
self._opened_info = None
|
||||
self._last_opened_info = None
|
||||
self._edit_mode = None
|
||||
|
||||
@property
|
||||
def user_role(self):
|
||||
return self._user_role
|
||||
|
||||
@property
|
||||
def event_system(self):
|
||||
return self._event_system
|
||||
|
||||
@property
|
||||
def opened_info(self):
|
||||
return self._opened_info
|
||||
|
||||
@property
|
||||
def last_opened_info(self):
|
||||
return self._last_opened_info
|
||||
|
||||
@property
|
||||
def edit_mode(self):
|
||||
return self._edit_mode
|
||||
|
||||
def ui_closed(self):
|
||||
if self._opened_info is not None:
|
||||
closed_settings_ui(self._opened_info)
|
||||
|
||||
self._opened_info = None
|
||||
self._edit_mode = None
|
||||
|
||||
def set_edit_mode(self, enabled):
|
||||
if self._edit_mode is enabled:
|
||||
return
|
||||
|
||||
opened_info = None
|
||||
if enabled:
|
||||
opened_info = opened_settings_ui()
|
||||
self._last_opened_info = opened_info
|
||||
|
||||
self._opened_info = opened_info
|
||||
self._edit_mode = enabled
|
||||
|
||||
self.event_system.emit(
|
||||
"edit.mode.changed",
|
||||
{"edit_mode": enabled},
|
||||
"controller"
|
||||
)
|
||||
|
||||
def update_last_opened_info(self):
|
||||
print("update_last_opened_info")
|
||||
last_opened_info = get_last_opened_info()
|
||||
enabled = False
|
||||
if (
|
||||
last_opened_info is None
|
||||
or self._opened_info == last_opened_info
|
||||
):
|
||||
enabled = True
|
||||
|
||||
self._last_opened_info = last_opened_info
|
||||
|
||||
self.set_edit_mode(enabled)
|
||||
|
||||
|
||||
class MainWidget(QtWidgets.QWidget):
|
||||
trigger_restart = QtCore.Signal()
|
||||
|
||||
|
|
@ -33,11 +109,12 @@ class MainWidget(QtWidgets.QWidget):
|
|||
def __init__(self, user_role, parent=None, reset_on_show=True):
|
||||
super(MainWidget, self).__init__(parent)
|
||||
|
||||
controller = SettingsController(user_role)
|
||||
|
||||
# Object referencing to this machine and time when UI was opened
|
||||
# - is used on close event
|
||||
self._last_opened_info = None
|
||||
self._edit_mode = None
|
||||
self._main_reset = False
|
||||
self._controller = controller
|
||||
|
||||
self._user_passed = False
|
||||
self._reset_on_show = reset_on_show
|
||||
|
|
@ -55,8 +132,8 @@ class MainWidget(QtWidgets.QWidget):
|
|||
|
||||
header_tab_widget = SettingsTabWidget(parent=self)
|
||||
|
||||
studio_widget = SystemWidget(user_role, header_tab_widget)
|
||||
project_widget = ProjectWidget(user_role, header_tab_widget)
|
||||
studio_widget = SystemWidget(controller, header_tab_widget)
|
||||
project_widget = ProjectWidget(controller, header_tab_widget)
|
||||
|
||||
tab_widgets = [
|
||||
studio_widget,
|
||||
|
|
@ -151,45 +228,24 @@ class MainWidget(QtWidgets.QWidget):
|
|||
# Trigger reset with 100ms delay
|
||||
QtCore.QTimer.singleShot(100, self.reset)
|
||||
|
||||
elif not self._last_opened_info:
|
||||
self._check_on_ui_open()
|
||||
|
||||
def closeEvent(self, event):
|
||||
if self._last_opened_info:
|
||||
closed_settings_ui(self._last_opened_info)
|
||||
self._last_opened_info = None
|
||||
self._controller.ui_closed()
|
||||
|
||||
super(MainWidget, self).closeEvent(event)
|
||||
|
||||
def _check_on_ui_open(self):
|
||||
last_opened_info = get_last_opened_info()
|
||||
if last_opened_info is not None:
|
||||
if self._last_opened_info != last_opened_info:
|
||||
self._last_opened_info = None
|
||||
else:
|
||||
self._last_opened_info = opened_settings_ui()
|
||||
|
||||
if self._last_opened_info is not None:
|
||||
if self._edit_mode is not True:
|
||||
self._set_edit_mode(True)
|
||||
def _check_on_reset(self):
|
||||
self._controller.update_last_opened_info()
|
||||
if self._controller.edit_mode:
|
||||
return
|
||||
|
||||
if self._edit_mode is False:
|
||||
return
|
||||
# if self._edit_mode is False:
|
||||
# return
|
||||
|
||||
dialog = SettingsUIOpenedElsewhere(last_opened_info, self)
|
||||
dialog = SettingsUIOpenedElsewhere(
|
||||
self._controller.last_opened_info, self
|
||||
)
|
||||
dialog.exec_()
|
||||
edit_enabled = dialog.result() == 1
|
||||
if edit_enabled:
|
||||
self._last_opened_info = opened_settings_ui()
|
||||
self._set_edit_mode(edit_enabled)
|
||||
|
||||
def _set_edit_mode(self, mode):
|
||||
if self._edit_mode is mode:
|
||||
return
|
||||
|
||||
self._edit_mode = mode
|
||||
for tab_widget in self.tab_widgets:
|
||||
tab_widget.set_edit_mode(mode)
|
||||
self._controller.set_edit_mode(dialog.result() == 1)
|
||||
|
||||
def _show_password_dialog(self):
|
||||
if self._password_dialog:
|
||||
|
|
@ -235,7 +291,7 @@ class MainWidget(QtWidgets.QWidget):
|
|||
for tab_widget in self.tab_widgets:
|
||||
tab_widget.reset()
|
||||
self._main_reset = False
|
||||
self._check_on_ui_open()
|
||||
self._check_on_reset()
|
||||
|
||||
def _update_search_dialog(self, clear=False):
|
||||
if self._search_dialog.isVisible():
|
||||
|
|
@ -280,7 +336,7 @@ class MainWidget(QtWidgets.QWidget):
|
|||
self._update_search_dialog()
|
||||
|
||||
if not self._main_reset:
|
||||
self._check_on_ui_open()
|
||||
self._check_on_reset()
|
||||
|
||||
def keyPressEvent(self, event):
|
||||
if event.matches(QtGui.QKeySequence.Find):
|
||||
|
|
@ -306,8 +362,8 @@ class SettingsUIOpenedElsewhere(QtWidgets.QDialog):
|
|||
"Someone else has opened Settings UI. That may cause data loss."
|
||||
" Please contact the person on the other side."
|
||||
"<br/><br/>You can open the UI in view-only mode or take"
|
||||
" the control which will cause the other settings won't be able"
|
||||
" to save changes.<br/>"
|
||||
" the control which will cause settings on the other side"
|
||||
" won't be able to save changes.<br/>"
|
||||
), self)
|
||||
message_label.setWordWrap(True)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue