From 60e36787dba0e4dcaa3fcb03f99f15a506ccd385 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Wed, 24 Feb 2021 18:03:14 +0100 Subject: [PATCH] fill comboboxes with sites and added ability to define project settings --- .../local_settings/projects_widget.py | 125 ++++++++++++++---- 1 file changed, 100 insertions(+), 25 deletions(-) diff --git a/pype/tools/settings/local_settings/projects_widget.py b/pype/tools/settings/local_settings/projects_widget.py index 831dbfcbd7..303bb39e3d 100644 --- a/pype/tools/settings/local_settings/projects_widget.py +++ b/pype/tools/settings/local_settings/projects_widget.py @@ -1,7 +1,10 @@ import platform from Qt import QtWidgets, QtCore from pype.tools.settings.settings import ProjectListWidget -from pype.settings.constants import PROJECT_ANATOMY_KEY +from pype.settings.constants import ( + PROJECT_ANATOMY_KEY, + DEFAULT_PROJECT_KEY +) from .widgets import SpacerWidget LOCAL_ROOTS_KEY = "roots" @@ -20,6 +23,11 @@ class _ProjectListWidget(ProjectListWidget): self.current_project = new_project_name self.project_changed.emit() + def project_name(self): + if self.current_project == self.default: + return DEFAULT_PROJECT_KEY + return self.current_project + class RootsWidget(QtWidgets.QWidget): value_changed = QtCore.Signal() @@ -51,22 +59,27 @@ class RootsWidget(QtWidgets.QWidget): if self._project_name is None or self._site_name is None: return - default_root_values = self.local_default_project_values() or {} + default_root_values = self._get_site_value_for_project( + DEFAULT_PROJECT_KEY + ) + if self._project_name == DEFAULT_PROJECT_KEY: + project_root_values = default_root_values + else: + project_root_values = self._get_site_value_for_project( + self._project_name + ) roots_entity = ( self.project_settings[PROJECT_ANATOMY_KEY][LOCAL_ROOTS_KEY] ) - is_in_default = self.project_settings.project_name is None + is_in_default = self._project_name == DEFAULT_PROJECT_KEY for root_name, path_entity in roots_entity.items(): platform_entity = path_entity[platform.system().lower()] root_widget = QtWidgets.QWidget(self) key_label = QtWidgets.QLabel(root_name, root_widget) - - root_input_widget = QtWidgets.QWidget(root_widget) - root_input_layout = QtWidgets.QVBoxLayout(root_input_widget) - - value_input = QtWidgets.QLineEdit(root_input_widget) + value_input = QtWidgets.QLineEdit(root_widget) + # Placeholder placeholder = None if not is_in_default: placeholder = default_root_values.get(root_name) @@ -75,29 +88,36 @@ class RootsWidget(QtWidgets.QWidget): if not placeholder: placeholder = platform_entity.value + value_input.setPlaceholderText(placeholder) + # Root value + project_value = project_root_values.get(root_name) + if project_value: + value_input.setText(project_value) + + # Register change callback def _on_root_change(): self._on_root_value_change(root_name) value_input.textChanged.connect(_on_root_change) - root_input_layout.addWidget(value_input) - root_layout = QtWidgets.QHBoxLayout(root_widget) root_layout.addWidget(key_label) - root_layout.addWidget(root_input_widget) + root_layout.addWidget(value_input) self.content_layout.addWidget(root_widget) self.widgts_by_root_name[root_name] = value_input self.content_layout.addWidget(SpacerWidget(self), 1) - def local_default_project_values(self): - default_project = self.local_project_settings.get(None) + def _get_site_value_for_project(self, project_name): + default_project = self.local_project_settings.get(project_name) if default_project: - return default_project.get(LOCAL_ROOTS_KEY) - return None + root_value = default_project.get(LOCAL_ROOTS_KEY) + if root_value: + return root_value.get(self._site_name) or {} + return {} def set_value(self, local_project_settings): self.local_project_settings = local_project_settings @@ -119,7 +139,6 @@ class RootSiteWidget(QtWidgets.QWidget): super(RootSiteWidget, self).__init__(parent) self.project_settings = project_settings - self.widgts_by_root_name = {} self._project_name = None sites_widget = QtWidgets.QWidget(self) @@ -142,17 +161,74 @@ class RootSiteWidget(QtWidgets.QWidget): self.remote_site_combo = remote_site_combo self.roots_widget = roots_widget - def _fill_active_site_combo(self): - if self._project_name is None: - return + def _active_site_values(self): + global_entity = self.project_settings["project_settings"]["global"] + sites_entity = global_entity["sync_server"]["sites"] + return tuple(sites_entity.keys()) - def _fill_remote_site_combo(self): - if self._project_name is None: - return + def _remote_site_values(self): + global_entity = self.project_settings["project_settings"]["global"] + sites_entity = global_entity["sync_server"]["sites"] + return tuple(sites_entity.keys()) def _change_combobox_values(self): + self.active_site_combo.clear() + self.remote_site_combo.clear() + if self._project_name is None: + return + + active_site_values = self._active_site_values() + remote_site_values = self._remote_site_values() + # Set sites from local settings in comboboxes - pass + active_site = None + remote_site = None + + project_values = self.local_project_settings.get(self._project_name) + if project_values: + active_site = project_values.get("active_site") + remote_site = project_values.get("remote_site") + + if ( + (not active_site or not remote_site) + and self._project_name is not DEFAULT_PROJECT_KEY + ): + default_values = self.local_project_settings.get( + DEFAULT_PROJECT_KEY + ) + if default_values: + if not active_site: + active_site = default_values.get("active_site") + if not remote_site: + remote_site = default_values.get("remote_site") + + self.active_site_combo.addItems(active_site_values) + self.remote_site_combo.addItems(remote_site_values) + + # Find and set remote site in combobox + if remote_site: + idx = self.remote_site_combo.findText(active_site) + if idx >= 0: + index = self.remote_site_combo.model().index(idx, 0) + self.remote_site_combo.setCurrentIndex(index) + + # Find and set active site in combobox + if active_site: + idx = self.active_site_combo.findText(active_site) + if idx < 0: + active_site = None + else: + index = self.active_site_combo.model().index(idx, 0) + self.active_site_combo.setCurrentIndex(index) + + # Prepare value to change active site in roots widget + if not active_site: + if not active_site_values: + active_site = None + else: + active_site = self.active_site_combo.currentText() + + self._change_active_site(active_site) def set_value(self, local_project_settings): self.local_project_settings = local_project_settings @@ -165,8 +241,7 @@ class RootSiteWidget(QtWidgets.QWidget): # Set roots project to None so all changes below are ignored self.roots_widget.change_project(None) - self._fill_active_site_combo() - self._fill_remote_site_combo() + # Aply changes in site comboboxes self._change_combobox_values() # Change project name in roots widget