AYON: Tools enhancements (#5753)

* moved universal 'TreeView' to utils

* use 'TreeView' in folders widget

* propagate 'set_deselectable' in 'FoldersWidget'

* propagate more public functionality of 'FoldersWidget'

* fix 'set_name_filer' typo

* rename 'get_current_project_name' to 'get_selected_project_name'

* added signals to task and project widgets

* implemented more helper methods in hierarchy model

* added more information to 'FolderItem'

* add empty line after docstring

* fix expected selection of folders in loader

* keep only 'double_clicked' signal

* pass full mouse event to signal
This commit is contained in:
Jakub Trllo 2023-10-13 10:40:41 +02:00 committed by GitHub
parent f5150665bd
commit 9c53837c33
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 350 additions and 131 deletions

View file

@ -1,4 +1,6 @@
from openpype.resources import get_image_path
from openpype.tools.flickcharm import FlickCharm
from qtpy import QtWidgets, QtCore, QtGui, QtSvg
@ -57,3 +59,63 @@ class TreeViewSpinner(QtWidgets.QTreeView):
self.paint_empty(event)
else:
super(TreeViewSpinner, self).paintEvent(event)
class TreeView(QtWidgets.QTreeView):
"""Ultimate TreeView with flick charm and double click signals.
Tree view have deselectable mode, which allows to deselect items by
clicking on item area without any items.
Todos:
Add refresh animation.
"""
double_clicked = QtCore.Signal(QtGui.QMouseEvent)
def __init__(self, *args, **kwargs):
super(TreeView, self).__init__(*args, **kwargs)
self._deselectable = False
self._flick_charm_activated = False
self._flick_charm = FlickCharm(parent=self)
self._before_flick_scroll_mode = None
def is_deselectable(self):
return self._deselectable
def set_deselectable(self, deselectable):
self._deselectable = deselectable
deselectable = property(is_deselectable, set_deselectable)
def mousePressEvent(self, event):
if self._deselectable:
index = self.indexAt(event.pos())
if not index.isValid():
# clear the selection
self.clearSelection()
# clear the current index
self.setCurrentIndex(QtCore.QModelIndex())
super(TreeView, self).mousePressEvent(event)
def mouseDoubleClickEvent(self, event):
self.double_clicked.emit(event)
return super(TreeView, self).mouseDoubleClickEvent(event)
def activate_flick_charm(self):
if self._flick_charm_activated:
return
self._flick_charm_activated = True
self._before_flick_scroll_mode = self.verticalScrollMode()
self._flick_charm.activateOn(self)
self.setVerticalScrollMode(QtWidgets.QAbstractItemView.ScrollPerPixel)
def deactivate_flick_charm(self):
if not self._flick_charm_activated:
return
self._flick_charm_activated = False
self._flick_charm.deactivateFrom(self)
if self._before_flick_scroll_mode is not None:
self.setVerticalScrollMode(self._before_flick_scroll_mode)