manuskript/manuskript/ui/views/treeView.py

102 lines
3.6 KiB
Python
Raw Normal View History

2015-06-09 22:32:43 +12:00
#!/usr/bin/env python
2016-02-07 00:34:22 +13:00
# --!-- coding: utf8 --!--
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QCursor
from PyQt5.QtWidgets import QTreeView, QAction
2015-06-09 22:32:43 +12:00
2016-02-07 00:34:22 +13:00
from manuskript.enums import Outline
from manuskript.functions import mainWindow
from manuskript.ui.views.dndView import dndView
from manuskript.ui.views.outlineBasics import outlineBasics
from manuskript.ui.views.treeDelegates import treeTitleDelegate
2015-06-09 22:32:43 +12:00
class treeView(QTreeView, dndView, outlineBasics):
2015-06-09 22:32:43 +12:00
def __init__(self, parent=None):
QTreeView.__init__(self, parent)
dndView.__init__(self, parent)
outlineBasics.__init__(self, parent)
2015-06-30 00:21:57 +12:00
self._indexesToOpen = None
2016-02-07 00:34:22 +13:00
2015-06-09 22:32:43 +12:00
def setModel(self, model):
QTreeView.setModel(self, model)
2016-02-07 00:34:22 +13:00
2015-06-09 22:32:43 +12:00
# Hiding columns
2017-11-18 00:16:39 +13:00
for c in range(self.model().columnCount()):
2015-06-09 22:32:43 +12:00
self.hideColumn(c)
2016-02-07 00:34:22 +13:00
2017-11-18 00:16:39 +13:00
self.showColumn(Outline.title)
2015-06-18 03:15:13 +12:00
# Setting delegate
self.titleDelegate = treeTitleDelegate()
2017-11-16 08:58:12 +13:00
self.setItemDelegateForColumn(Outline.title, self.titleDelegate)
2016-02-07 00:34:22 +13:00
2015-06-27 01:55:34 +12:00
def makePopupMenu(self):
menu = outlineBasics.makePopupMenu(self)
first = menu.actions()[3]
2016-02-07 00:34:22 +13:00
2015-06-30 00:21:57 +12:00
# Open item in new tab
#sel = self.selectedIndexes()
2015-06-30 00:21:57 +12:00
pos = self.viewport().mapFromGlobal(QCursor.pos())
mouseIndex = self.indexAt(pos)
2016-02-07 00:34:22 +13:00
2015-06-30 00:21:57 +12:00
# Expand /collapse item
if mouseIndex.isValid():
2016-02-07 00:34:22 +13:00
# index = self.currentIndex()
item = mouseIndex.internalPointer()
2017-10-24 00:45:08 +13:00
if item.isFolder():
self.actExpand = QAction(self.tr("Expand {}").format(item.title()), menu)
self.actExpand.triggered.connect(self.expandCurrentIndex)
menu.insertAction(first, self.actExpand)
2016-02-07 00:34:22 +13:00
2017-10-24 00:45:08 +13:00
self.actCollapse = QAction(self.tr("Collapse {}").format(item.title()), menu)
self.actCollapse.triggered.connect(self.collapseCurrentIndex)
menu.insertAction(first, self.actCollapse)
2016-02-07 00:34:22 +13:00
2017-10-24 00:45:08 +13:00
menu.insertSeparator(first)
2016-02-07 00:34:22 +13:00
2015-06-30 00:21:57 +12:00
# Expand /collapse all
2015-06-27 01:55:34 +12:00
self.actExpandAll = QAction(self.tr("Expand All"), menu)
self.actExpandAll.triggered.connect(self.expandAll)
menu.insertAction(first, self.actExpandAll)
2016-02-07 00:34:22 +13:00
2015-06-27 01:55:34 +12:00
self.actCollapseAll = QAction(self.tr("Collapse All"), menu)
self.actCollapseAll.triggered.connect(self.collapseAll)
menu.insertAction(first, self.actCollapseAll)
2016-02-07 00:34:22 +13:00
2015-06-27 01:55:34 +12:00
menu.insertSeparator(first)
2016-02-07 00:34:22 +13:00
2015-06-27 01:55:34 +12:00
return menu
2016-02-07 00:34:22 +13:00
2015-06-27 01:55:34 +12:00
def expandCurrentIndex(self, index=None):
2021-02-22 11:45:34 +13:00
if index == None or type(index) == bool:
2016-02-07 00:34:22 +13:00
index = self._indexesToOpen[0] # self.currentIndex()
2015-06-27 01:55:34 +12:00
self.expand(index)
for i in range(self.model().rowCount(index)):
idx = self.model().index(i, 0, index)
2016-02-07 00:34:22 +13:00
self.expandCurrentIndex(index=idx)
2015-06-27 01:55:34 +12:00
def collapseCurrentIndex(self, index=None):
2021-02-22 11:45:34 +13:00
if index == None or type(index) == bool:
2016-02-07 00:34:22 +13:00
index = self._indexesToOpen[0] # self.currentIndex()
2015-06-27 01:55:34 +12:00
self.collapse(index)
for i in range(self.model().rowCount(index)):
idx = self.model().index(i, 0, index)
self.collapseCurrentIndex(index=idx)
2016-02-07 00:34:22 +13:00
2015-06-09 22:32:43 +12:00
def dragMoveEvent(self, event):
dndView.dragMoveEvent(self, event)
QTreeView.dragMoveEvent(self, event)
2016-02-07 00:34:22 +13:00
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)