From b48460d579e275dae09248168ae3748e2eb77716 Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Mon, 14 Mar 2022 17:17:33 +0100 Subject: [PATCH] added function for getting a project icon --- openpype/tools/launcher/models.py | 24 ++++++---------- openpype/tools/utils/lib.py | 46 +++++++++++++++++++++++-------- 2 files changed, 44 insertions(+), 26 deletions(-) diff --git a/openpype/tools/launcher/models.py b/openpype/tools/launcher/models.py index 08bf43a451..8dbc45aadb 100644 --- a/openpype/tools/launcher/models.py +++ b/openpype/tools/launcher/models.py @@ -16,7 +16,7 @@ from openpype.lib.applications import ( ) from openpype.tools.utils.lib import ( DynamicQThread, - get_qta_icon_by_name_and_color, + get_project_icon, ) from openpype.tools.utils.assets_widget import ( AssetModel, @@ -403,7 +403,7 @@ class LauncherModel(QtCore.QObject): self._dbcon = dbcon # Available project names self._project_names = set() - self._project_icons_by_name = {} + self._project_docs_by_name = {} # Context data self._asset_docs = [] @@ -464,8 +464,8 @@ class LauncherModel(QtCore.QObject): """Available project names.""" return self._project_names - def get_icon_for_project(self, project_name): - return self._project_icons_by_name.get(project_name) + def get_project_doc(self, project_name): + return self._project_docs_by_name.get(project_name) @property def asset_filter_data_by_id(self): @@ -523,15 +523,13 @@ class LauncherModel(QtCore.QObject): """Refresh projects.""" current_project = self.project_name project_names = set() - project_icons_by_name = {} + project_docs_by_name = {} for project_doc in self._dbcon.projects(only_active=True): project_name = project_doc["name"] project_names.add(project_name) - project_icons_by_name[project_name] = ( - project_doc.get("data", {}).get("icon") - ) + project_docs_by_name[project_name] = project_doc - self._project_icons_by_name = project_icons_by_name + self._project_docs_by_name = project_docs_by_name self._project_names = project_names self.projects_refreshed.emit() if ( @@ -830,7 +828,6 @@ class ProjectModel(QtGui.QStandardItemModel): super(ProjectModel, self).__init__(parent=parent) self._launcher_model = launcher_model - self.project_icon = qtawesome.icon("fa.map", color="white") self._project_names = set() launcher_model.projects_refreshed.connect(self._on_refresh) @@ -875,13 +872,10 @@ class ProjectModel(QtGui.QStandardItemModel): for row in reversed(sorted(row_counts.keys())): items = [] for project_name in row_counts[row]: - icon_name = self._launcher_model.get_icon_for_project( + project_doc = self._launcher_model.get_project_doc( project_name ) - icon = get_qta_icon_by_name_and_color(icon_name, "white") - if not icon: - icon = self.project_icon - + icon = get_project_icon(project_doc) item = QtGui.QStandardItem(icon, project_name) items.append(item) diff --git a/openpype/tools/utils/lib.py b/openpype/tools/utils/lib.py index 3ad2d12883..4754a85bf1 100644 --- a/openpype/tools/utils/lib.py +++ b/openpype/tools/utils/lib.py @@ -122,18 +122,42 @@ def get_qta_icon_by_name_and_color(icon_name, icon_color): return icon +def get_project_icon(project_doc): + if project_doc: + icon_name = project_doc.get("data", {}).get("icon") + icon = get_qta_icon_by_name_and_color(icon_name, "white") + if icon: + return icon + + return get_qta_icon_by_name_and_color( + "fa.map", get_default_entity_icon_color() + ) + + +def get_asset_icon_name(asset_doc, has_children=True): + if asset_doc: + asset_data = asset_doc.get("data") or {} + icon_name = asset_data.get("icon") + if icon_name: + return icon_name + + if has_children: + return "folder" + return "folder-o" + + +def get_asset_icon_color(asset_doc): + if asset_doc: + asset_data = asset_doc.get("data") or {} + icon_color = asset_data.get("color") + if icon_color: + return icon_color + return get_default_entity_icon_color() + + def get_asset_icon(asset_doc, has_children=False): - asset_data = asset_doc.get("data") or {} - icon_color = asset_data.get("color") or get_default_entity_icon_color() - icon_name = asset_data.get("icon") - if not icon_name: - # Use default icons if no custom one is specified. - # If it has children show a full folder, otherwise - # show an open folder - if has_children: - icon_name = "folder" - else: - icon_name = "folder-o" + icon_name = get_asset_icon_name(asset_doc, has_children) + icon_color = get_asset_icon_color(asset_doc) return get_qta_icon_by_name_and_color(icon_name, icon_color)