fixed mouse press/release in instance view

This commit is contained in:
iLLiCiTiT 2020-10-05 19:54:38 +02:00
parent 81a0aab10b
commit 939b03d74c

View file

@ -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)