mirror of
https://github.com/ynput/ayon-core.git
synced 2026-01-01 16:34:53 +01:00
Merge branch 'feature/1605-settings-task-types-enum-entity' into feature/895-add-option-to-define-paht-to-workfile-template
This commit is contained in:
commit
8019196a5f
29 changed files with 717 additions and 287 deletions
|
|
@ -73,6 +73,7 @@ class IgnoreInputChangesObj:
|
|||
class SettingsCategoryWidget(QtWidgets.QWidget):
|
||||
state_changed = QtCore.Signal()
|
||||
saved = QtCore.Signal(QtWidgets.QWidget)
|
||||
restart_required_trigger = QtCore.Signal()
|
||||
|
||||
def __init__(self, user_role, parent=None):
|
||||
super(SettingsCategoryWidget, self).__init__(parent)
|
||||
|
|
@ -185,9 +186,10 @@ class SettingsCategoryWidget(QtWidgets.QWidget):
|
|||
if self.user_role == "developer":
|
||||
self._add_developer_ui(footer_layout)
|
||||
|
||||
save_btn = QtWidgets.QPushButton("Save")
|
||||
spacer_widget = QtWidgets.QWidget()
|
||||
footer_layout.addWidget(spacer_widget, 1)
|
||||
save_btn = QtWidgets.QPushButton("Save", footer_widget)
|
||||
require_restart_label = QtWidgets.QLabel(footer_widget)
|
||||
require_restart_label.setAlignment(QtCore.Qt.AlignCenter)
|
||||
footer_layout.addWidget(require_restart_label, 1)
|
||||
footer_layout.addWidget(save_btn, 0)
|
||||
|
||||
configurations_layout = QtWidgets.QVBoxLayout(configurations_widget)
|
||||
|
|
@ -205,6 +207,7 @@ class SettingsCategoryWidget(QtWidgets.QWidget):
|
|||
save_btn.clicked.connect(self._save)
|
||||
|
||||
self.save_btn = save_btn
|
||||
self.require_restart_label = require_restart_label
|
||||
self.scroll_widget = scroll_widget
|
||||
self.content_layout = content_layout
|
||||
self.content_widget = content_widget
|
||||
|
|
@ -323,6 +326,15 @@ class SettingsCategoryWidget(QtWidgets.QWidget):
|
|||
def _on_reset_start(self):
|
||||
return
|
||||
|
||||
def _on_require_restart_change(self):
|
||||
value = ""
|
||||
if self.entity.require_restart:
|
||||
value = (
|
||||
"Your changes require restart of"
|
||||
" all running OpenPype processes to take affect."
|
||||
)
|
||||
self.require_restart_label.setText(value)
|
||||
|
||||
def reset(self):
|
||||
self.set_state(CategoryState.Working)
|
||||
|
||||
|
|
@ -339,6 +351,9 @@ class SettingsCategoryWidget(QtWidgets.QWidget):
|
|||
dialog = None
|
||||
try:
|
||||
self._create_root_entity()
|
||||
self.entity.add_require_restart_change_callback(
|
||||
self._on_require_restart_change
|
||||
)
|
||||
|
||||
self.add_children_gui()
|
||||
|
||||
|
|
@ -433,6 +448,15 @@ class SettingsCategoryWidget(QtWidgets.QWidget):
|
|||
return
|
||||
|
||||
def _save(self):
|
||||
# Don't trigger restart if defaults are modified
|
||||
if (
|
||||
self.modify_defaults_checkbox
|
||||
and self.modify_defaults_checkbox.isChecked()
|
||||
):
|
||||
require_restart = False
|
||||
else:
|
||||
require_restart = self.entity.require_restart
|
||||
|
||||
self.set_state(CategoryState.Working)
|
||||
|
||||
if self.items_are_valid():
|
||||
|
|
@ -442,6 +466,10 @@ class SettingsCategoryWidget(QtWidgets.QWidget):
|
|||
|
||||
self.saved.emit(self)
|
||||
|
||||
if require_restart:
|
||||
self.restart_required_trigger.emit()
|
||||
self.require_restart_label.setText("")
|
||||
|
||||
def _on_refresh(self):
|
||||
self.reset()
|
||||
|
||||
|
|
|
|||
|
|
@ -275,8 +275,6 @@ class UnsavedChangesDialog(QtWidgets.QDialog):
|
|||
layout.addWidget(message_label)
|
||||
layout.addWidget(btns_widget)
|
||||
|
||||
self.state = None
|
||||
|
||||
def on_cancel_pressed(self):
|
||||
self.done(0)
|
||||
|
||||
|
|
@ -287,6 +285,48 @@ class UnsavedChangesDialog(QtWidgets.QDialog):
|
|||
self.done(2)
|
||||
|
||||
|
||||
class RestartDialog(QtWidgets.QDialog):
|
||||
message = (
|
||||
"Your changes require restart of process to take effect."
|
||||
" Do you want to restart now?"
|
||||
)
|
||||
|
||||
def __init__(self, parent=None):
|
||||
super(RestartDialog, self).__init__(parent)
|
||||
message_label = QtWidgets.QLabel(self.message)
|
||||
|
||||
btns_widget = QtWidgets.QWidget(self)
|
||||
btns_layout = QtWidgets.QHBoxLayout(btns_widget)
|
||||
|
||||
btn_restart = QtWidgets.QPushButton("Restart")
|
||||
btn_restart.clicked.connect(self.on_restart_pressed)
|
||||
btn_cancel = QtWidgets.QPushButton("Cancel")
|
||||
btn_cancel.clicked.connect(self.on_cancel_pressed)
|
||||
|
||||
btns_layout.addStretch(1)
|
||||
btns_layout.addWidget(btn_restart)
|
||||
btns_layout.addWidget(btn_cancel)
|
||||
|
||||
layout = QtWidgets.QVBoxLayout(self)
|
||||
layout.addWidget(message_label)
|
||||
layout.addWidget(btns_widget)
|
||||
|
||||
self.btn_cancel = btn_cancel
|
||||
self.btn_restart = btn_restart
|
||||
|
||||
def showEvent(self, event):
|
||||
super(RestartDialog, self).showEvent(event)
|
||||
btns_width = max(self.btn_cancel.width(), self.btn_restart.width())
|
||||
self.btn_cancel.setFixedWidth(btns_width)
|
||||
self.btn_restart.setFixedWidth(btns_width)
|
||||
|
||||
def on_cancel_pressed(self):
|
||||
self.done(0)
|
||||
|
||||
def on_restart_pressed(self):
|
||||
self.done(1)
|
||||
|
||||
|
||||
class SpacerWidget(QtWidgets.QWidget):
|
||||
def __init__(self, parent=None):
|
||||
super(SpacerWidget, self).__init__(parent)
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ from .categories import (
|
|||
SystemWidget,
|
||||
ProjectWidget
|
||||
)
|
||||
from .widgets import ShadowWidget
|
||||
from .widgets import ShadowWidget, RestartDialog
|
||||
from . import style
|
||||
|
||||
from openpype.tools.settings import (
|
||||
|
|
@ -14,6 +14,8 @@ from openpype.tools.settings import (
|
|||
|
||||
|
||||
class MainWidget(QtWidgets.QWidget):
|
||||
trigger_restart = QtCore.Signal()
|
||||
|
||||
widget_width = 1000
|
||||
widget_height = 600
|
||||
|
||||
|
|
@ -60,6 +62,9 @@ class MainWidget(QtWidgets.QWidget):
|
|||
for tab_widget in tab_widgets:
|
||||
tab_widget.saved.connect(self._on_tab_save)
|
||||
tab_widget.state_changed.connect(self._on_state_change)
|
||||
tab_widget.restart_required_trigger.connect(
|
||||
self._on_restart_required
|
||||
)
|
||||
|
||||
self.tab_widgets = tab_widgets
|
||||
|
||||
|
|
@ -132,3 +137,15 @@ class MainWidget(QtWidgets.QWidget):
|
|||
|
||||
for tab_widget in self.tab_widgets:
|
||||
tab_widget.reset()
|
||||
|
||||
def _on_restart_required(self):
|
||||
# Don't show dialog if there are not registered slots for
|
||||
# `trigger_restart` signal.
|
||||
# - For example when settings are runnin as standalone tool
|
||||
if self.receivers(self.trigger_restart) < 1:
|
||||
return
|
||||
|
||||
dialog = RestartDialog(self)
|
||||
result = dialog.exec_()
|
||||
if result == 1:
|
||||
self.trigger_restart.emit()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue