from Qt import QtWidgets, QtCore, QtGui from openpype.tools.settings import style from openpype.lib import PypeLogger from openpype import resources from openpype.modules.sync_server.tray.widgets import ( SyncProjectListWidget, SyncRepresentationWidget ) log = PypeLogger().get_logger("SyncServer") 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.pype_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) left_column.setLayout(left_column_layout) repres = SyncRepresentationWidget( 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) container.setLayout(container_layout) 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.setLayout(body_layout) self.setWindowTitle("Sync Server") self.projects.project_changed.connect( lambda: repres.table_view.model().set_project( self.projects.current_project)) self.pause_btn.clicked.connect(self._pause) repres.message_generated.connect(self._update_message) 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()