diff --git a/openpype/tools/sceneinventory/switch_dialog.py b/openpype/tools/sceneinventory/switch_dialog.py index 37659b2370..f539294ded 100644 --- a/openpype/tools/sceneinventory/switch_dialog.py +++ b/openpype/tools/sceneinventory/switch_dialog.py @@ -1,11 +1,14 @@ import collections +import logging from Qt import QtWidgets, QtCore -from avalon import io, api, style +from avalon import io, api from avalon.vendor import qtawesome from .widgets import SearchComboBox +log = logging.getLogger("SwitchAssetDialog") + class ValidationState: def __init__(self): @@ -969,19 +972,16 @@ class SwitchAssetDialog(QtWidgets.QDialog): try: api.switch(container, repre_doc) except Exception: - log.warning( - ( - "Couldn't switch asset." - "See traceback for more information." - ), - exc_info=True + msg = ( + "Couldn't switch asset." + "See traceback for more information." ) - dialog = QtWidgets.QMessageBox() - dialog.setStyleSheet(style.load_stylesheet()) + log.warning(msg, exc_info=True) + dialog = QtWidgets.QMessageBox(self) dialog.setWindowTitle("Switch asset failed") - msg = "Switch asset failed. "\ - "Search console log for more details" - dialog.setText(msg) + dialog.setText( + "Switch asset failed. Search console log for more details" + ) dialog.exec_() self.switched.emit() diff --git a/openpype/tools/sceneinventory/view.py b/openpype/tools/sceneinventory/view.py index 08d5499355..80f26a881d 100644 --- a/openpype/tools/sceneinventory/view.py +++ b/openpype/tools/sceneinventory/view.py @@ -22,7 +22,7 @@ log = logging.getLogger("SceneInventory") class SceneInvetoryView(QtWidgets.QTreeView): data_changed = QtCore.Signal() - hierarchy_view = QtCore.Signal(bool) + hierarchy_view_changed = QtCore.Signal(bool) def __init__(self, parent=None): super(SceneInvetoryView, self).__init__(parent=parent) @@ -41,10 +41,15 @@ class SceneInvetoryView(QtWidgets.QTreeView): self.sync_server = manager.modules_by_name["sync_server"] self.sync_enabled = self.sync_server.enabled + def _set_hierarchy_view(self, enabled): + if enabled == self._hierarchy_view: + return + self._hierarchy_view = enabled + self.hierarchy_view_changed.emit(enabled) + def _enter_hierarchy(self, items): self._selected = set(i["objectName"] for i in items) - self._hierarchy_view = True - self.hierarchy_view.emit(True) + self._set_hierarchy_view(True) self.data_changed.emit() self.expandToDepth(1) self.setStyleSheet(""" @@ -54,8 +59,7 @@ class SceneInvetoryView(QtWidgets.QTreeView): """) def _leave_hierarchy(self): - self._hierarchy_view = False - self.hierarchy_view.emit(False) + self._set_hierarchy_view(False) self.data_changed.emit() self.setStyleSheet("QTreeView {}") @@ -189,8 +193,9 @@ class SceneInvetoryView(QtWidgets.QTreeView): try: api.update(item, version_name) except AssertionError: - self._show_version_error_dialog(version_name, - [item]) + self._show_version_error_dialog( + version_name, [item] + ) log.warning("Update failed", exc_info=True) self.data_changed.emit() diff --git a/openpype/tools/sceneinventory/window.py b/openpype/tools/sceneinventory/window.py index 35ff2b5a55..e71af6a93d 100644 --- a/openpype/tools/sceneinventory/window.py +++ b/openpype/tools/sceneinventory/window.py @@ -5,14 +5,13 @@ from Qt import QtWidgets, QtCore from avalon.vendor import qtawesome from avalon import io, api -from avalon.tools import lib as tools_lib -from avalon.tools.delegates import VersionDelegate - from openpype import style +from openpype.tools.utils.delegates import VersionDelegate from openpype.tools.utils.lib import ( qt_app_context, preserve_expanded_rows, - preserve_selection + preserve_selection, + FamilyConfigCache ) from .model import ( @@ -37,14 +36,13 @@ class SceneInventoryWindow(QtWidgets.QDialog): self.windowFlags() | QtCore.Qt.WindowStaysOnTopHint ) - self.resize(1100, 480) - self.setWindowTitle( - "Scene Inventory 1.0 - {}".format( - os.getenv("AVALON_PROJECT") or "" - ) - ) + project_name = os.getenv("AVALON_PROJECT") or "" + self.setWindowTitle("Scene Inventory 1.0 - {}".format(project_name)) self.setObjectName("SceneInventory") - self.setProperty("saveWindowPref", True) # Maya only property! + # Maya only property + self.setProperty("saveWindowPref", True) + + self.resize(1100, 480) # region control filter_label = QtWidgets.QLabel("Search", self) @@ -67,9 +65,9 @@ class SceneInventoryWindow(QtWidgets.QDialog): control_layout.addWidget(refresh_button) # endregion control - self.family_config_cache = tools_lib.global_family_cache() + family_config_cache = FamilyConfigCache(io) - model = InventoryModel(self.family_config_cache) + model = InventoryModel(family_config_cache) proxy = FilterProxyModel() proxy.setSourceModel(model) proxy.setDynamicSortFilter(True) @@ -95,23 +93,27 @@ class SceneInventoryWindow(QtWidgets.QDialog): layout.addWidget(view) # signals - text_filter.textChanged.connect(proxy.setFilterRegExp) - outdated_only_checkbox.stateChanged.connect(proxy.set_filter_outdated) - refresh_button.clicked.connect(self.refresh) + text_filter.textChanged.connect(self._on_text_filter_change) + outdated_only_checkbox.stateChanged.connect( + self._on_outdated_state_change + ) + view.hierarchy_view_changed.connect( + self._on_hiearchy_view_change + ) view.data_changed.connect(self.refresh) - view.hierarchy_view.connect(model.set_hierarchy_view) - view.hierarchy_view.connect(proxy.set_hierarchy_view) + refresh_button.clicked.connect(self.refresh) + self._outdated_only_checkbox = outdated_only_checkbox self._view = view - self.refresh_button = refresh_button - self.model = model - self.proxy = proxy + self._model = model + self._proxy = proxy self._version_delegate = version_delegate - - self.family_config_cache.refresh() + self._family_config_cache = family_config_cache self._first_show = True + family_config_cache.refresh() + def showEvent(self, event): super(SceneInventoryWindow, self).showEvent(event) if self._first_show: @@ -131,18 +133,30 @@ class SceneInventoryWindow(QtWidgets.QDialog): def refresh(self, items=None): with preserve_expanded_rows( tree_view=self._view, - role=self.model.UniqueRole + role=self._model.UniqueRole ): with preserve_selection( tree_view=self._view, - role=self.model.UniqueRole, + role=self._model.UniqueRole, current_index=False ): kwargs = {"items": items} - if self.view._hierarchy_view: - # TODO do not touch view's inner attribute - kwargs["selected"] = self.view._selected - self.model.refresh(**kwargs) + # TODO do not touch view's inner attribute + if self._view._hierarchy_view: + kwargs["selected"] = self._view._selected + self._model.refresh(**kwargs) + + def _on_hiearchy_view_change(self, enabled): + self._proxy.set_hierarchy_view(enabled) + self._model.set_hierarchy_view(enabled) + + def _on_text_filter_change(self, text_filter): + self._proxy.setFilterRegExp(text_filter) + + def _on_outdated_state_change(self): + self._proxy.set_filter_outdated( + self._outdated_only_checkbox.isChecked() + ) def show(root=None, debug=False, parent=None, items=None):