Skip to content
This repository has been archived by the owner on Sep 20, 2024. It is now read-only.

Local Settings: Additional applications don't break UI #2710

Merged
merged 2 commits into from
Feb 14, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 44 additions & 25 deletions openpype/tools/settings/local_settings/apps_widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,12 @@
class AppVariantWidget(QtWidgets.QWidget):
exec_placeholder = "< Specific path for this machine >"

def __init__(self, group_label, variant_name, variant_entity, parent):
def __init__(
self, group_label, variant_name, variant_label, variant_entity, parent
):
super(AppVariantWidget, self).__init__(parent)

self.executable_input_widget = None
variant_label = variant_entity.label
if variant_label is None:
parent_entity = variant_entity.parent
if hasattr(parent_entity, "get_key_label"):
variant_label = parent_entity.get_key_label(variant_name)

if not variant_label:
variant_label = variant_name
Expand Down Expand Up @@ -107,15 +104,15 @@ def settings_value(self):


class AppGroupWidget(QtWidgets.QWidget):
def __init__(self, group_entity, parent):
def __init__(self, group_entity, group_label, parent, dynamic=False):
super(AppGroupWidget, self).__init__(parent)

variants_entity = group_entity["variants"]
valid_variants = {}
for key, entity in group_entity["variants"].items():
for key, entity in variants_entity.items():
if "enabled" not in entity or entity["enabled"].value:
valid_variants[key] = entity

group_label = group_entity.label
expading_widget = ExpandingWidget(group_label, self)
content_widget = QtWidgets.QWidget(expading_widget)
content_layout = QtWidgets.QVBoxLayout(content_widget)
Expand All @@ -126,8 +123,16 @@ def __init__(self, group_entity, parent):
if "executables" not in variant_entity:
continue

variant_label = variant_entity.label
if dynamic and hasattr(variants_entity, "get_key_label"):
variant_label = variants_entity.get_key_label(variant_name)

variant_widget = AppVariantWidget(
group_label, variant_name, variant_entity, content_widget
group_label,
variant_name,
variant_label,
variant_entity,
content_widget
)
widgets_by_variant_name[variant_name] = variant_widget
content_layout.addWidget(variant_widget)
Expand Down Expand Up @@ -171,6 +176,20 @@ def __init__(self, system_settings_entity, parent):

self.content_layout = layout

def _filter_group_entity(self, entity):
if not entity["enabled"].value:
return False

# Check if has enabled any variant
for variant_entity in entity["variants"].values():
if (
"enabled" not in variant_entity
or variant_entity["enabled"].value
):
return True

return False

def _reset_app_widgets(self):
while self.content_layout.count() > 0:
item = self.content_layout.itemAt(0)
Expand All @@ -181,34 +200,34 @@ def _reset_app_widgets(self):
self.widgets_by_group_name.clear()

app_items = {}
additional_apps = set()
additional_apps_entity = None
for key, entity in self.system_settings_entity["applications"].items():
if key != "additional_apps":
app_items[key] = entity
continue

additional_apps_entity = entity
for _key, _entity in entity.items():
app_items[_key] = _entity
additional_apps.add(_key)

for key, entity in app_items.items():
# Filter not enabled app groups
if not entity["enabled"].value:
if not self._filter_group_entity(entity):
continue

# Check if has enabled any variant
enabled_variant = False
for variant_entity in entity["variants"].values():
if (
"enabled" not in variant_entity
or variant_entity["enabled"].value
):
enabled_variant = True
break

if not enabled_variant:
continue
dynamic = key in additional_apps
group_label = None
if dynamic and hasattr(additional_apps_entity, "get_key_label"):
group_label = additional_apps_entity.get_key_label(key)

if not group_label:
group_label = entity.label
if not group_label:
group_label = key

# Create App group specific widget and store it by the key
group_widget = AppGroupWidget(entity, self)
group_widget = AppGroupWidget(entity, group_label, self, dynamic)
if group_widget.widgets_by_variant_name:
self.widgets_by_group_name[key] = group_widget
self.content_layout.addWidget(group_widget)
Expand Down
6 changes: 5 additions & 1 deletion openpype/tools/settings/local_settings/window.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
)
from openpype.tools.settings import CHILD_OFFSET
from openpype.api import (
Logger,
SystemSettings,
ProjectSettings
)
Expand All @@ -32,7 +33,7 @@
LOCAL_APPS_KEY
)

log = logging.getLogger(__name__)
log = Logger.get_logger(__name__)


class LocalSettingsWidget(QtWidgets.QWidget):
Expand Down Expand Up @@ -250,6 +251,9 @@ def reset(self):
self._settings_widget.update_local_settings(value)

except Exception as exc:
log.warning(
"Failed to create local settings window", exc_info=True
)
error_msg = str(exc)

crashed = error_msg is not None
Expand Down