mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-25 05:14:40 +01:00
fill comboboxes with sites and added ability to define project settings
This commit is contained in:
parent
7b6d0d20df
commit
60e36787db
1 changed files with 100 additions and 25 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue