diff --git a/openpype/lib/__init__.py b/openpype/lib/__init__.py
index c556f2adc1..a2a16bcc00 100644
--- a/openpype/lib/__init__.py
+++ b/openpype/lib/__init__.py
@@ -171,6 +171,7 @@ from .editorial import (
from .openpype_version import (
get_openpype_version,
get_build_version,
+ get_expected_version,
is_running_from_build,
is_current_version_studio_latest
)
@@ -306,6 +307,7 @@ __all__ = [
"get_openpype_version",
"get_build_version",
+ "get_expected_version",
"is_running_from_build",
"is_current_version_studio_latest",
]
diff --git a/openpype/lib/openpype_version.py b/openpype/lib/openpype_version.py
index 839222018c..201bf646e9 100644
--- a/openpype/lib/openpype_version.py
+++ b/openpype/lib/openpype_version.py
@@ -153,6 +153,17 @@ def get_expected_studio_version(staging=None):
return None
+def get_expected_version(staging=None):
+ expected_version = get_expected_studio_version(staging)
+ if expected_version is None:
+ # Look for latest if expected version is not set in settings
+ expected_version = get_latest_version(
+ staging=staging,
+ remote=True
+ )
+ return expected_version
+
+
def is_current_version_studio_latest():
"""Is currently running OpenPype version which is defined by studio.
@@ -166,16 +177,13 @@ def is_current_version_studio_latest():
bool: True when is using studio
"""
output = None
- # Skip if is not running from build
- if not is_running_from_build():
- return output
-
- # Skip if build does not support version control
- if not op_version_control_available():
- return output
-
- # Skip if path to folder with zip files is not accessible
- if not openpype_path_is_accessible():
+ # Skip if is not running from build or build does not support version
+ # control or path to folder with zip files is not accessible
+ if (
+ not is_running_from_build()
+ or not op_version_control_available()
+ or not openpype_path_is_accessible()
+ ):
return output
# Get OpenPypeVersion class
@@ -183,14 +191,7 @@ def is_current_version_studio_latest():
# Convert current version to OpenPypeVersion object
current_version = OpenPypeVersion(version=get_openpype_version())
- staging = is_running_staging()
# Get expected version (from settings)
- expected_version = get_expected_studio_version(staging)
- if expected_version is None:
- # Look for latest if expected version is not set in settings
- expected_version = get_latest_version(
- staging=staging,
- remote=True
- )
+ expected_version = get_expected_version()
# Check if current version is expected version
return current_version == expected_version
diff --git a/openpype/style/data.json b/openpype/style/data.json
index b3dffd7c71..6e1b6e822b 100644
--- a/openpype/style/data.json
+++ b/openpype/style/data.json
@@ -51,8 +51,10 @@
"border-hover": "rgba(168, 175, 189, .3)",
"border-focus": "rgb(92, 173, 214)",
- "delete-btn-bg": "rgb(201, 54, 54)",
- "delete-btn-bg-disabled": "rgba(201, 54, 54, 64)",
+ "warning-btn-bg": "rgb(201, 54, 54)",
+
+ "warning-btn-bg": "rgb(201, 54, 54)",
+ "warning-btn-bg-disabled": "rgba(201, 54, 54, 64)",
"tab-widget": {
"bg": "#21252B",
diff --git a/openpype/style/style.css b/openpype/style/style.css
index 7f7f30e2bc..65e8d0cb40 100644
--- a/openpype/style/style.css
+++ b/openpype/style/style.css
@@ -734,11 +734,11 @@ QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {
background: {color:bg-view-hover};
}
-#DeleteButton {
- background: {color:delete-btn-bg};
+#WarningButton {
+ background: {color:warning-btn-bg};
}
-#DeleteButton:disabled {
- background: {color:delete-btn-bg-disabled};
+#WarningButton:disabled {
+ background: {color:warning-btn-bg-disabled};
}
/* Launcher specific stylesheets */
diff --git a/openpype/tools/project_manager/project_manager/style.py b/openpype/tools/project_manager/project_manager/style.py
index 9fa7a5520b..980c637bca 100644
--- a/openpype/tools/project_manager/project_manager/style.py
+++ b/openpype/tools/project_manager/project_manager/style.py
@@ -95,7 +95,7 @@ class ResourceCache:
def get_warning_pixmap(cls):
src_image = get_warning_image()
colors = get_objected_colors()
- color_value = colors["delete-btn-bg"]
+ color_value = colors["warning-btn-bg"]
return paint_image_with_color(
src_image,
diff --git a/openpype/tools/project_manager/project_manager/widgets.py b/openpype/tools/project_manager/project_manager/widgets.py
index 4b5aca35ef..e58dcc7d0c 100644
--- a/openpype/tools/project_manager/project_manager/widgets.py
+++ b/openpype/tools/project_manager/project_manager/widgets.py
@@ -369,7 +369,7 @@ class ConfirmProjectDeletion(QtWidgets.QDialog):
cancel_btn = QtWidgets.QPushButton("Cancel", self)
cancel_btn.setToolTip("Cancel deletion of the project")
confirm_btn = QtWidgets.QPushButton("Permanently Delete Project", self)
- confirm_btn.setObjectName("DeleteButton")
+ confirm_btn.setObjectName("WarningButton")
confirm_btn.setEnabled(False)
confirm_btn.setToolTip("Confirm deletion")
diff --git a/openpype/tools/tray/pype_tray.py b/openpype/tools/tray/pype_tray.py
index 5af82b2c64..c32cf17e18 100644
--- a/openpype/tools/tray/pype_tray.py
+++ b/openpype/tools/tray/pype_tray.py
@@ -17,7 +17,9 @@ from openpype.api import (
from openpype.lib import (
get_openpype_execute_args,
is_current_version_studio_latest,
- is_running_from_build
+ is_running_from_build,
+ get_expected_version,
+ get_openpype_version
)
from openpype.modules import TrayModulesManager
from openpype import style
@@ -32,15 +34,30 @@ from .pype_info_widget import PypeInfoWidget
class VersionDialog(QtWidgets.QDialog):
+ restart_requested = QtCore.Signal()
+
+ _min_width = 400
+ _min_height = 130
+
def __init__(self, parent=None):
super(VersionDialog, self).__init__(parent)
-
- label_widget = QtWidgets.QLabel(
- "Your version does not match to studio version", self
+ self.setWindowTitle("Wrong OpenPype version")
+ icon = QtGui.QIcon(resources.get_openpype_icon_filepath())
+ self.setWindowIcon(icon)
+ self.setWindowFlags(
+ self.windowFlags()
+ | QtCore.Qt.WindowStaysOnTopHint
)
+ self.setMinimumWidth(self._min_width)
+ self.setMinimumHeight(self._min_height)
+
+ label_widget = QtWidgets.QLabel(self)
+ label_widget.setWordWrap(True)
+
ignore_btn = QtWidgets.QPushButton("Ignore", self)
- restart_btn = QtWidgets.QPushButton("Restart and Install", self)
+ ignore_btn.setObjectName("WarningButton")
+ restart_btn = QtWidgets.QPushButton("Restart and Change", self)
btns_layout = QtWidgets.QHBoxLayout()
btns_layout.addStretch(1)
@@ -55,10 +72,22 @@ class VersionDialog(QtWidgets.QDialog):
ignore_btn.clicked.connect(self._on_ignore)
restart_btn.clicked.connect(self._on_reset)
+ self._label_widget = label_widget
+
+ self.setStyleSheet(style.load_stylesheet())
+
+ def update_versions(self, current_version, expected_version):
+ message = (
+ "Your OpenPype version {} does"
+ " not match to studio version {}"
+ ).format(str(current_version), str(expected_version))
+ self._label_widget.setText(message)
+
def _on_ignore(self):
self.reject()
def _on_reset(self):
+ self.restart_requested.emit()
self.accept()
@@ -115,9 +144,22 @@ class TrayManager:
if self._version_dialog is None:
self._version_dialog = VersionDialog()
- result = self._version_dialog.exec_()
- if result:
- self.restart()
+ self._version_dialog.restart_requested.connect(
+ self._restart_and_install
+ )
+
+ if self._version_dialog.isVisible():
+ return
+
+ expected_version = get_expected_version()
+ current_version = get_openpype_version()
+ self._version_dialog.update_versions(
+ current_version, expected_version
+ )
+ self._version_dialog.exec_()
+
+ def _restart_and_install(self):
+ self.restart()
def execute_in_main_thread(self, callback, *args, **kwargs):
if isinstance(callback, WrappedCallbackItem):