mirror of
https://github.com/ynput/ayon-core.git
synced 2026-01-02 08:54:53 +01:00
added group widget for groups
This commit is contained in:
parent
edc9eee884
commit
959fd511cf
1 changed files with 64 additions and 2 deletions
|
|
@ -1021,6 +1021,53 @@ class InstanceListItemWidget(QtWidgets.QWidget):
|
|||
self.active_changed.emit(self.instance.data["uuid"], new_value)
|
||||
|
||||
|
||||
class InstanceListGroupWidget(QtWidgets.QFrame):
|
||||
expand_changed = QtCore.Signal(str, bool)
|
||||
|
||||
def __init__(self, family, parent):
|
||||
super(InstanceListGroupWidget, self).__init__(parent)
|
||||
self.setObjectName("InstanceListGroupWidget")
|
||||
|
||||
self.family = family
|
||||
self._expanded = False
|
||||
|
||||
subset_name_label = QtWidgets.QLabel(family, self)
|
||||
|
||||
expand_btn = QtWidgets.QToolButton(self)
|
||||
expand_btn.setStyleSheet("background: transparent;")
|
||||
expand_btn.setArrowType(QtCore.Qt.RightArrow)
|
||||
expand_btn.setMaximumWidth(14)
|
||||
|
||||
layout = QtWidgets.QHBoxLayout(self)
|
||||
layout.setContentsMargins(5, 0, 2, 0)
|
||||
layout.addWidget(
|
||||
subset_name_label, 1, QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter
|
||||
)
|
||||
layout.addWidget(expand_btn)
|
||||
|
||||
# self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
|
||||
subset_name_label.setAttribute(QtCore.Qt.WA_TranslucentBackground)
|
||||
expand_btn.setAttribute(QtCore.Qt.WA_TranslucentBackground)
|
||||
|
||||
expand_btn.clicked.connect(self._on_expand_clicked)
|
||||
|
||||
self.subset_name_label = subset_name_label
|
||||
self.expand_btn = expand_btn
|
||||
|
||||
def _on_expand_clicked(self):
|
||||
self.expand_changed.emit(self.family, not self._expanded)
|
||||
|
||||
def set_expanded(self, expanded):
|
||||
if self._expanded == expanded:
|
||||
return
|
||||
|
||||
self._expanded = expanded
|
||||
if expanded:
|
||||
self.expand_btn.setArrowType(QtCore.Qt.DownArrow)
|
||||
else:
|
||||
self.expand_btn.setArrowType(QtCore.Qt.RightArrow)
|
||||
|
||||
|
||||
class InstanceListView(_AbstractInstanceView):
|
||||
def __init__(self, controller, parent):
|
||||
super(InstanceListView, self).__init__(parent)
|
||||
|
|
@ -1054,6 +1101,7 @@ class InstanceListView(_AbstractInstanceView):
|
|||
)
|
||||
|
||||
self._group_items = {}
|
||||
self._group_widgets = {}
|
||||
self._widgets_by_id = {}
|
||||
self.instance_view = instance_view
|
||||
self.instance_model = instance_model
|
||||
|
|
@ -1072,7 +1120,7 @@ class InstanceListView(_AbstractInstanceView):
|
|||
if family in self._group_items:
|
||||
continue
|
||||
|
||||
group_item = QtGui.QStandardItem(family)
|
||||
group_item = QtGui.QStandardItem()
|
||||
group_item.setData(family, SORT_VALUE_ROLE)
|
||||
group_item.setFlags(QtCore.Qt.ItemIsEnabled)
|
||||
self._group_items[family] = group_item
|
||||
|
|
@ -1084,12 +1132,24 @@ class InstanceListView(_AbstractInstanceView):
|
|||
sort_at_the_end = True
|
||||
root_item.appendRows(new_group_items)
|
||||
|
||||
for group_item in new_group_items:
|
||||
index = self.instance_model.index(
|
||||
group_item.row(), group_item.column()
|
||||
)
|
||||
proxy_index = self.proxy_model.mapFromSource(index)
|
||||
widget = InstanceListGroupWidget(family, self.instance_view)
|
||||
family = group_item.data(SORT_VALUE_ROLE)
|
||||
self._group_widgets[family] = widget
|
||||
self.instance_view.setIndexWidget(proxy_index, widget)
|
||||
|
||||
for family in tuple(self._group_items.keys()):
|
||||
if family in families:
|
||||
continue
|
||||
|
||||
group_item = self._group_items.pop(family)
|
||||
root_item.removeRow(group_item.row())
|
||||
widget = self._group_widgets.pop(family)
|
||||
widget.deleteLater()
|
||||
|
||||
for family, group_item in self._group_items.items():
|
||||
to_remove = set()
|
||||
|
|
@ -1144,7 +1204,9 @@ class InstanceListView(_AbstractInstanceView):
|
|||
group_index
|
||||
)
|
||||
proxy_index = self.proxy_model.mapFromSource(item_index)
|
||||
widget = InstanceListItemWidget(instance, self)
|
||||
widget = InstanceListItemWidget(
|
||||
instance, self.instance_view
|
||||
)
|
||||
self.instance_view.setIndexWidget(proxy_index, widget)
|
||||
self._widgets_by_id[instance.data["uuid"]] = widget
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue