manuskript/manuskript/ui/views/outlineView.py
TheJackiMonster 6ea209e523
Prevent right-click for popup menus to select item (fix #919)
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
2023-02-13 21:34:35 +01:00

96 lines
4.3 KiB
Python

#!/usr/bin/env python
# --!-- coding: utf8 --!--
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QTreeView, QHeaderView
from manuskript import settings
from manuskript.enums import Outline
from manuskript.ui.views.dndView import dndView
from manuskript.ui.views.outlineBasics import outlineBasics
from manuskript.ui.views.outlineDelegates import outlineTitleDelegate, outlineCharacterDelegate, outlineCompileDelegate, \
outlineStatusDelegate, outlineGoalPercentageDelegate, outlineLabelDelegate
class outlineView(QTreeView, dndView, outlineBasics):
def __init__(self, parent=None, modelCharacters=None, modelLabels=None, modelStatus=None):
QTreeView.__init__(self, parent)
dndView.__init__(self)
outlineBasics.__init__(self, parent)
self.modelCharacters = modelCharacters
self.modelLabels = modelLabels
self.modelStatus = modelStatus
self.header().setStretchLastSection(False)
def setModelCharacters(self, model):
# This is used by outlineCharacterDelegate to select character
self.modelCharacters = model
def setModelLabels(self, model):
# This is used by outlineLabelDelegate to display labels
self.modelLabels = model
def setModelStatus(self, model):
# This is used by outlineStatusDelegate to display statuses
self.modelStatus = model
def setModel(self, model):
QTreeView.setModel(self, model)
# Setting delegates
self.outlineTitleDelegate = outlineTitleDelegate(self)
# self.outlineTitleDelegate.setView(self)
self.setItemDelegateForColumn(Outline.title, self.outlineTitleDelegate)
self.outlineCharacterDelegate = outlineCharacterDelegate(self.modelCharacters)
self.setItemDelegateForColumn(Outline.POV, self.outlineCharacterDelegate)
self.outlineCompileDelegate = outlineCompileDelegate()
self.setItemDelegateForColumn(Outline.compile, self.outlineCompileDelegate)
self.outlineStatusDelegate = outlineStatusDelegate(self.modelStatus)
self.setItemDelegateForColumn(Outline.status, self.outlineStatusDelegate)
self.outlineGoalPercentageDelegate = outlineGoalPercentageDelegate()
self.setItemDelegateForColumn(Outline.goalPercentage, self.outlineGoalPercentageDelegate)
self.outlineLabelDelegate = outlineLabelDelegate(self.modelLabels)
self.setItemDelegateForColumn(Outline.label, self.outlineLabelDelegate)
# Hiding columns
self.hideColumns()
self.header().setSectionResizeMode(Outline.title, QHeaderView.Stretch)
self.header().setSectionResizeMode(Outline.POV, QHeaderView.ResizeToContents)
self.header().setSectionResizeMode(Outline.status, QHeaderView.ResizeToContents)
self.header().setSectionResizeMode(Outline.label, QHeaderView.ResizeToContents)
self.header().setSectionResizeMode(Outline.compile, QHeaderView.ResizeToContents)
self.header().setSectionResizeMode(Outline.wordCount, QHeaderView.ResizeToContents)
self.header().setSectionResizeMode(Outline.goal, QHeaderView.ResizeToContents)
self.header().setSectionResizeMode(Outline.goalPercentage, QHeaderView.ResizeToContents)
def hideColumns(self):
if not self.model():
# outlineView is probably not initialized, because editorWidgets shows index cards or text.
return
for c in range(self.model().columnCount()):
self.hideColumn(c)
for c in settings.outlineViewColumns:
self.showColumn(c)
def setRootIndex(self, index):
QTreeView.setRootIndex(self, index)
self.outlineGoalPercentageDelegate = outlineGoalPercentageDelegate(index)
self.setItemDelegateForColumn(Outline.goalPercentage, self.outlineGoalPercentageDelegate)
def dragMoveEvent(self, event):
dndView.dragMoveEvent(self, event)
QTreeView.dragMoveEvent(self, event)
def mousePressEvent(self, event):
# Prevent selecting item while right-clicking for popup menu!
if event.button() != Qt.RightButton:
QTreeView.mousePressEvent(self, event)
outlineBasics.mousePressEvent(self, event)
def mouseReleaseEvent(self, event):
QTreeView.mouseReleaseEvent(self, event)
outlineBasics.mouseReleaseEvent(self, event)