ayon-core/openpype/modules/settings_action.py
Roy Nieterau 25295c8677 Merge remote-tracking branch 'upstream/develop' into deadline_remove_framespertask
# Conflicts:
#	openpype/modules/deadline/plugins/publish/submit_max_deadline.py
2023-04-06 11:38:28 +02:00

128 lines
3.9 KiB
Python

from openpype.modules import OpenPypeModule, ITrayAction
class SettingsAction(OpenPypeModule, ITrayAction):
"""Action to show Settings tool."""
name = "settings"
label = "Studio Settings"
admin_action = True
def initialize(self, _modules_settings):
# This action is always enabled
self.enabled = True
# User role
# TODO should be changeable
self.user_role = "manager"
# Tray attributes
self.settings_window = None
def tray_init(self):
"""Initialization in tray implementation of ITrayAction."""
self.create_settings_window()
def tray_exit(self):
# Close settings UI to remove settings lock
if self.settings_window:
self.settings_window.close()
def on_action_trigger(self):
"""Implementation for action trigger of ITrayAction."""
self.show_settings_window()
def create_settings_window(self):
"""Initializa Settings Qt window."""
if self.settings_window:
return
from openpype.tools.settings import MainWidget
self.settings_window = MainWidget(self.user_role, reset_on_show=False)
self.settings_window.trigger_restart.connect(self._on_trigger_restart)
def _on_trigger_restart(self):
self.manager.restart_tray()
def show_settings_window(self):
"""Show settings tool window.
Raises:
AssertionError: Window must be already created. Call
`create_settings_window` before calling this method.
"""
if not self.settings_window:
raise AssertionError("Window is not initialized.")
# Store if was visible
was_visible = self.settings_window.isVisible()
was_minimized = self.settings_window.isMinimized()
# Show settings gui
self.settings_window.show()
if was_minimized:
self.settings_window.showNormal()
# Pull window to the front.
self.settings_window.raise_()
self.settings_window.activateWindow()
# Reset content if was not visible
if not was_visible and not was_minimized:
self.settings_window.reset()
class LocalSettingsAction(OpenPypeModule, ITrayAction):
"""Action to show Settings tool."""
name = "local_settings"
label = "Settings"
def initialize(self, _modules_settings):
# This action is always enabled
self.enabled = True
# Tray attributes
self.settings_window = None
self._first_trigger = True
def tray_init(self):
"""Initialization in tray implementation of ITrayAction."""
self.create_settings_window()
def on_action_trigger(self):
"""Implementation for action trigger of ITrayAction."""
self.show_settings_window()
def create_settings_window(self):
"""Initializa Settings Qt window."""
if self.settings_window:
return
from openpype.tools.settings import LocalSettingsWindow
self.settings_window = LocalSettingsWindow()
def show_settings_window(self):
"""Show settings tool window.
Raises:
AssertionError: Window must be already created. Call
`create_settings_window` before calling this method.
"""
if not self.settings_window:
raise AssertionError("Window is not initialized.")
# Store if was visible
was_visible = self.settings_window.isVisible()
# Show settings gui
self.settings_window.show()
# Pull window to the front.
self.settings_window.raise_()
self.settings_window.activateWindow()
# 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()