diff --git a/openpype/tools/tray/pype_tray.py b/openpype/tools/tray/pype_tray.py index 99d431172a..bc1eeaad90 100644 --- a/openpype/tools/tray/pype_tray.py +++ b/openpype/tools/tray/pype_tray.py @@ -33,7 +33,8 @@ from openpype.settings import ( ) from openpype.tools.utils import ( WrappedCallbackItem, - paint_image_with_color + paint_image_with_color, + get_warning_pixmap ) from .pype_info_widget import PypeInfoWidget @@ -76,7 +77,7 @@ class PixmapLabel(QtWidgets.QLabel): super(PixmapLabel, self).resizeEvent(event) -class VersionDialog(QtWidgets.QDialog): +class VersionUpdateDialog(QtWidgets.QDialog): restart_requested = QtCore.Signal() ignore_requested = QtCore.Signal() @@ -84,7 +85,7 @@ class VersionDialog(QtWidgets.QDialog): _min_height = 130 def __init__(self, parent=None): - super(VersionDialog, self).__init__(parent) + super(VersionUpdateDialog, self).__init__(parent) icon = QtGui.QIcon(resources.get_openpype_icon_filepath()) self.setWindowIcon(icon) @@ -152,11 +153,11 @@ class VersionDialog(QtWidgets.QDialog): ) def showEvent(self, event): - super().showEvent(event) + super(VersionUpdateDialog, self).showEvent(event) self._restart_accepted = False def closeEvent(self, event): - super().closeEvent(event) + super(VersionUpdateDialog, self).closeEvent(event) if self._restart_accepted or self._current_is_higher: return # Trigger ignore requested only if restart was not clicked and current @@ -202,6 +203,63 @@ class VersionDialog(QtWidgets.QDialog): self.accept() +class BuildVersionDialog(QtWidgets.QDialog): + """Build/Installation version is too low for current OpenPype version. + + This dialog tells to user that it's build OpenPype is too old. + """ + def __init__(self, parent=None): + super(BuildVersionDialog, self).__init__(parent) + + icon = QtGui.QIcon(resources.get_openpype_icon_filepath()) + self.setWindowIcon(icon) + self.setWindowTitle("Outdated OpenPype installation") + self.setWindowFlags( + self.windowFlags() + | QtCore.Qt.WindowStaysOnTopHint + ) + + top_widget = QtWidgets.QWidget(self) + + warning_pixmap = get_warning_pixmap() + warning_icon_label = PixmapLabel(warning_pixmap, top_widget) + + message = ( + "Your installation of OpenPype does not match minimum" + " requirements.

Please update OpenPype installation" + " to newer version." + ) + content_label = QtWidgets.QLabel(message, self) + + top_layout = QtWidgets.QHBoxLayout(top_widget) + top_layout.setContentsMargins(0, 0, 0, 0) + top_layout.addWidget( + warning_icon_label, 0, + QtCore.Qt.AlignTop | QtCore.Qt.AlignHCenter + ) + top_layout.addWidget(content_label, 1) + + footer_widget = QtWidgets.QWidget(self) + ok_btn = QtWidgets.QPushButton("I understand", footer_widget) + + footer_layout = QtWidgets.QHBoxLayout(footer_widget) + footer_layout.setContentsMargins(0, 0, 0, 0) + footer_layout.addStretch(1) + footer_layout.addWidget(ok_btn) + + main_layout = QtWidgets.QVBoxLayout(self) + main_layout.addWidget(top_widget, 0) + main_layout.addStretch(1) + main_layout.addWidget(footer_widget, 0) + + self.setStyleSheet(style.load_stylesheet()) + + ok_btn.clicked.connect(self._on_ok_clicked) + + def _on_ok_clicked(self): + self.close() + + class TrayManager: """Cares about context of application. @@ -272,7 +330,7 @@ class TrayManager: return if self._version_dialog is None: - self._version_dialog = VersionDialog() + self._version_dialog = VersionUpdateDialog() self._version_dialog.restart_requested.connect( self._restart_and_install ) @@ -383,6 +441,10 @@ class TrayManager: self._validate_settings_defaults() + if not op_version_control_available(): + dialog = BuildVersionDialog() + dialog.exec_() + def _validate_settings_defaults(self): valid = True try: