mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-24 12:54:40 +01:00
162 lines
5.3 KiB
Python
162 lines
5.3 KiB
Python
from qtpy import QtWidgets, QtCore, QtGui
|
|
|
|
from openpype.tools.settings import style
|
|
|
|
from openpype import resources
|
|
|
|
from .widgets import (
|
|
SyncProjectListWidget,
|
|
SyncRepresentationSummaryWidget
|
|
)
|
|
|
|
|
|
class SyncServerWindow(QtWidgets.QDialog):
|
|
"""
|
|
Main window that contains list of synchronizable projects and summary
|
|
view with all synchronizable representations for first project
|
|
"""
|
|
|
|
def __init__(self, sync_server, parent=None):
|
|
super(SyncServerWindow, self).__init__(parent)
|
|
self.sync_server = sync_server
|
|
self.setWindowFlags(QtCore.Qt.Window)
|
|
self.setFocusPolicy(QtCore.Qt.StrongFocus)
|
|
|
|
self.setStyleSheet(style.load_stylesheet())
|
|
self.setWindowIcon(QtGui.QIcon(resources.get_openpype_icon_filepath()))
|
|
self.resize(1450, 700)
|
|
|
|
self.timer = QtCore.QTimer()
|
|
self.timer.timeout.connect(self._hide_message)
|
|
|
|
body = QtWidgets.QWidget(self)
|
|
footer = QtWidgets.QWidget(self)
|
|
footer.setFixedHeight(20)
|
|
|
|
left_column = QtWidgets.QWidget(body)
|
|
left_column_layout = QtWidgets.QVBoxLayout(left_column)
|
|
|
|
self.projects = SyncProjectListWidget(sync_server, self)
|
|
self.projects.refresh() # force selection of default
|
|
left_column_layout.addWidget(self.projects)
|
|
self.pause_btn = QtWidgets.QPushButton("Pause server")
|
|
|
|
left_column_layout.addWidget(self.pause_btn)
|
|
|
|
checkbox = QtWidgets.QCheckBox("Show only enabled", self)
|
|
checkbox.setStyleSheet("QCheckBox{spacing: 5px;"
|
|
"padding:5px 5px 5px 5px;}")
|
|
checkbox.setChecked(True)
|
|
self.show_only_enabled_chk = checkbox
|
|
|
|
left_column_layout.addWidget(self.show_only_enabled_chk)
|
|
|
|
repres = SyncRepresentationSummaryWidget(
|
|
sync_server,
|
|
project=self.projects.current_project,
|
|
parent=self)
|
|
container = QtWidgets.QWidget()
|
|
container_layout = QtWidgets.QHBoxLayout(container)
|
|
container_layout.setContentsMargins(0, 0, 0, 0)
|
|
split = QtWidgets.QSplitter()
|
|
split.addWidget(left_column)
|
|
split.addWidget(repres)
|
|
split.setSizes([180, 950, 200])
|
|
container_layout.addWidget(split)
|
|
|
|
body_layout = QtWidgets.QHBoxLayout(body)
|
|
body_layout.addWidget(container)
|
|
body_layout.setContentsMargins(0, 0, 0, 0)
|
|
|
|
self.message = QtWidgets.QLabel(footer)
|
|
self.message.hide()
|
|
|
|
footer_layout = QtWidgets.QVBoxLayout(footer)
|
|
footer_layout.addWidget(self.message)
|
|
footer_layout.setContentsMargins(20, 0, 0, 0)
|
|
|
|
layout = QtWidgets.QVBoxLayout(self)
|
|
layout.addWidget(body)
|
|
layout.addWidget(footer)
|
|
|
|
self.setWindowTitle("Sync Queue")
|
|
|
|
self.projects.project_changed.connect(
|
|
self._on_project_change
|
|
)
|
|
|
|
self.pause_btn.clicked.connect(self._pause)
|
|
self.pause_btn.setAutoDefault(False)
|
|
self.pause_btn.setDefault(False)
|
|
repres.message_generated.connect(self._update_message)
|
|
self.projects.message_generated.connect(self._update_message)
|
|
|
|
self.show_only_enabled_chk.stateChanged.connect(
|
|
self._on_enabled_change
|
|
)
|
|
|
|
self.representationWidget = repres
|
|
|
|
def showEvent(self, event):
|
|
self.representationWidget.set_project(self.projects.current_project)
|
|
self.projects.refresh()
|
|
self._set_running(True)
|
|
super().showEvent(event)
|
|
|
|
def closeEvent(self, event):
|
|
self._set_running(False)
|
|
super().closeEvent(event)
|
|
|
|
def _on_project_change(self):
|
|
if self.projects.current_project is None:
|
|
return
|
|
|
|
self.representationWidget.set_project(self.projects.current_project)
|
|
|
|
project_name = self.projects.current_project
|
|
if not self.sync_server.get_sync_project_setting(project_name):
|
|
self.projects.message_generated.emit(
|
|
"Project {} not active anymore".format(project_name))
|
|
self.projects.refresh()
|
|
return
|
|
|
|
def _on_enabled_change(self):
|
|
"""Called when enabled projects only checkbox is toggled."""
|
|
self.projects.show_only_enabled = \
|
|
self.show_only_enabled_chk.isChecked()
|
|
self.projects.refresh()
|
|
self.representationWidget.set_project(None)
|
|
|
|
def _set_running(self, running):
|
|
self.representationWidget.model.is_running = running
|
|
self.representationWidget.model.timer.setInterval(0)
|
|
|
|
def _pause(self):
|
|
if self.sync_server.is_paused():
|
|
self.sync_server.unpause_server()
|
|
self.pause_btn.setText("Pause server")
|
|
else:
|
|
self.sync_server.pause_server()
|
|
self.pause_btn.setText("Unpause server")
|
|
self.projects.refresh()
|
|
|
|
def _update_message(self, value):
|
|
"""
|
|
Update and show message in the footer
|
|
"""
|
|
self.message.setText(value)
|
|
if self.message.isVisible():
|
|
self.message.repaint()
|
|
else:
|
|
self.message.show()
|
|
msec_delay = 3000
|
|
self.timer.start(msec_delay)
|
|
|
|
def _hide_message(self):
|
|
"""
|
|
Hide message in footer
|
|
|
|
Called automatically by self.timer after a while
|
|
"""
|
|
self.message.setText("")
|
|
self.message.hide()
|