mirror of
https://github.com/ynput/ayon-core.git
synced 2026-01-01 16:34:53 +01:00
fixed mouse press/release in instance view
This commit is contained in:
parent
81a0aab10b
commit
939b03d74c
1 changed files with 82 additions and 43 deletions
|
|
@ -160,6 +160,8 @@ class InstanceView(OverviewView):
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
super(InstanceView, self).__init__(parent)
|
super(InstanceView, self).__init__(parent)
|
||||||
self.viewport().setMouseTracking(True)
|
self.viewport().setMouseTracking(True)
|
||||||
|
self._pressed_group_index = None
|
||||||
|
self._pressed_expander = None
|
||||||
|
|
||||||
def mouseMoveEvent(self, event):
|
def mouseMoveEvent(self, event):
|
||||||
index = self.indexAt(event.pos())
|
index = self.indexAt(event.pos())
|
||||||
|
|
@ -204,53 +206,90 @@ class InstanceView(OverviewView):
|
||||||
model.setData(index, new_state, QtCore.Qt.CheckStateRole)
|
model.setData(index, new_state, QtCore.Qt.CheckStateRole)
|
||||||
self.toggled.emit(index, new_state)
|
self.toggled.emit(index, new_state)
|
||||||
|
|
||||||
|
def _mouse_press(self, event):
|
||||||
|
if event.button() != QtCore.Qt.LeftButton:
|
||||||
|
return
|
||||||
|
|
||||||
|
self._pressed_group_index = None
|
||||||
|
self._pressed_expander = None
|
||||||
|
|
||||||
|
pos_index = self.indexAt(event.pos())
|
||||||
|
if not pos_index.isValid():
|
||||||
|
return
|
||||||
|
|
||||||
|
if pos_index.data(Roles.TypeRole) != model.InstanceType:
|
||||||
|
self._pressed_group_index = pos_index
|
||||||
|
if event.pos().x() < 20:
|
||||||
|
self._pressed_expander = True
|
||||||
|
else:
|
||||||
|
self._pressed_expander = False
|
||||||
|
|
||||||
|
elif event.pos().x() < 20:
|
||||||
|
indexes = self.selectionModel().selectedIndexes()
|
||||||
|
any_checked = False
|
||||||
|
if pos_index in indexes:
|
||||||
|
for index in indexes:
|
||||||
|
if index.data(QtCore.Qt.CheckStateRole):
|
||||||
|
any_checked = True
|
||||||
|
break
|
||||||
|
|
||||||
|
for index in indexes:
|
||||||
|
self.toggled.emit(index, not any_checked)
|
||||||
|
return True
|
||||||
|
self.toggled.emit(pos_index, not any_checked)
|
||||||
|
|
||||||
|
elif event.pos().x() > self.width() - 20:
|
||||||
|
self.show_perspective.emit(pos_index)
|
||||||
|
|
||||||
def mousePressEvent(self, event):
|
def mousePressEvent(self, event):
|
||||||
if event.button() == QtCore.Qt.LeftButton:
|
if self._mouse_press(event):
|
||||||
pos_index = self.indexAt(event.pos())
|
return
|
||||||
if (
|
|
||||||
pos_index.isValid()
|
|
||||||
and pos_index.data(Roles.TypeRole) == model.InstanceType
|
|
||||||
):
|
|
||||||
if event.pos().x() < 20:
|
|
||||||
indexes = self.selectionModel().selectedIndexes()
|
|
||||||
any_checked = False
|
|
||||||
if pos_index in indexes:
|
|
||||||
for index in indexes:
|
|
||||||
if index.data(QtCore.Qt.CheckStateRole):
|
|
||||||
any_checked = True
|
|
||||||
break
|
|
||||||
|
|
||||||
for index in indexes:
|
|
||||||
self.toggled.emit(index, not any_checked)
|
|
||||||
return
|
|
||||||
|
|
||||||
else:
|
|
||||||
self.toggled.emit(pos_index, not any_checked)
|
|
||||||
|
|
||||||
elif event.pos().x() > self.width() - 20:
|
|
||||||
self.show_perspective.emit(pos_index)
|
|
||||||
|
|
||||||
return super(InstanceView, self).mousePressEvent(event)
|
return super(InstanceView, self).mousePressEvent(event)
|
||||||
|
|
||||||
def mouseReleaseEvent(self, event):
|
def _mouse_release(self, event, pressed_expander, pressed_index):
|
||||||
if event.button() == QtCore.Qt.LeftButton:
|
if event.button() != QtCore.Qt.LeftButton:
|
||||||
|
return
|
||||||
|
|
||||||
|
pos_index = self.indexAt(event.pos())
|
||||||
|
if not pos_index.isValid():
|
||||||
|
return
|
||||||
|
|
||||||
|
if pos_index.data(Roles.TypeRole) == model.InstanceType:
|
||||||
indexes = self.selectionModel().selectedIndexes()
|
indexes = self.selectionModel().selectedIndexes()
|
||||||
if len(indexes) == 1:
|
if len(indexes) == 1 and indexes[0] == pos_index:
|
||||||
index = indexes[0]
|
if event.pos().x() < 20:
|
||||||
pos_index = self.indexAt(event.pos())
|
self.toggled.emit(indexes[0], None)
|
||||||
if index == pos_index:
|
elif event.pos().x() > self.width() - 20:
|
||||||
# If instance or Plugin
|
self.show_perspective.emit(indexes[0])
|
||||||
if index.data(Roles.TypeRole) == model.InstanceType:
|
return True
|
||||||
if event.pos().x() < 20:
|
return
|
||||||
self.toggled.emit(index, None)
|
|
||||||
elif event.pos().x() > self.width() - 20:
|
if pressed_index != pos_index:
|
||||||
self.show_perspective.emit(index)
|
return
|
||||||
else:
|
|
||||||
if event.pos().x() >= EXPANDER_WIDTH:
|
if self.state() == QtWidgets.QTreeView.State.DragSelectingState:
|
||||||
self.group_toggle(index)
|
indexes = self.selectionModel().selectedIndexes()
|
||||||
self.item_expand(index, True)
|
if len(indexes) != 1 or indexes[0] != pos_index:
|
||||||
event.accept()
|
return
|
||||||
return True
|
|
||||||
|
if event.pos().x() < EXPANDER_WIDTH:
|
||||||
|
if pressed_expander is True:
|
||||||
|
self.item_expand(pos_index)
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
if pressed_expander is False:
|
||||||
|
self.group_toggle(pos_index)
|
||||||
|
self.item_expand(pos_index, True)
|
||||||
|
return True
|
||||||
|
|
||||||
|
def mouseReleaseEvent(self, event):
|
||||||
|
pressed_index = self._pressed_group_index
|
||||||
|
pressed_expander = self._pressed_expander is True
|
||||||
|
self._pressed_group_index = None
|
||||||
|
self._pressed_expander = None
|
||||||
|
result = self._mouse_release(event, pressed_expander, pressed_index)
|
||||||
|
if result:
|
||||||
|
return
|
||||||
return super(InstanceView, self).mouseReleaseEvent(event)
|
return super(InstanceView, self).mouseReleaseEvent(event)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue