From 08e9262b0fca027d13f0d74605051648aed3d75d Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Tue, 4 Oct 2022 17:39:07 +0200 Subject: [PATCH] fix crashing multivalue of files widget --- openpype/widgets/attribute_defs/files_widget.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/openpype/widgets/attribute_defs/files_widget.py b/openpype/widgets/attribute_defs/files_widget.py index 259cb774b0d..3f1e6a34e15 100644 --- a/openpype/widgets/attribute_defs/files_widget.py +++ b/openpype/widgets/attribute_defs/files_widget.py @@ -283,6 +283,15 @@ def add_filepaths(self, items): if not items: return + if self._multivalue: + _items = [] + for item in items: + if isinstance(item, (tuple, list, set)): + _items.extend(item) + else: + _items.append(item) + items = _items + file_items = FileDefItem.from_value(items, self._allow_sequences) if not file_items: return @@ -615,6 +624,7 @@ def __init__(self, *args, **kwargs): self.customContextMenuRequested.connect(self._on_context_menu_request) self._remove_btn = remove_btn + self._multivalue = False def setSelectionModel(self, *args, **kwargs): """Catch selection model set to register signal callback. @@ -629,12 +639,13 @@ def setSelectionModel(self, *args, **kwargs): def set_multivalue(self, multivalue): """Disable remove button on multivalue.""" + self._multivalue = multivalue self._remove_btn.setVisible(not multivalue) def update_remove_btn_visibility(self): model = self.model() visible = False - if model: + if not self._multivalue and model: visible = model.rowCount() > 0 self._remove_btn.setVisible(visible) @@ -749,12 +760,13 @@ def __init__(self, single_item, allow_sequences, extensions_label, parent): self._layout = layout def _set_multivalue(self, multivalue): - if self._multivalue == multivalue: + if self._multivalue is multivalue: return self._multivalue = multivalue self._files_view.set_multivalue(multivalue) self._files_model.set_multivalue(multivalue) self._files_proxy_model.set_multivalue(multivalue) + self.setEnabled(not multivalue) def set_value(self, value, multivalue): self._in_set_value = True