manuskript/manuskript/ui/views/treeView.py

117 lines
4.1 KiB
Python
Raw Normal View History

2015-06-09 22:32:43 +12:00
#!/usr/bin/env python
#--!-- coding: utf8 --!--
from qt import *
from enums import *
from functions import *
from ui.views.dndView import *
from ui.views.outlineBasics import *
2015-06-18 03:15:13 +12:00
from ui.views.treeDelegates import *
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
2015-06-09 22:32:43 +12:00
def setModel(self, model):
QTreeView.setModel(self, model)
# Hiding columns
for c in range(1, self.model().columnCount()):
self.hideColumn(c)
2015-06-18 03:15:13 +12:00
# Setting delegate
self.titleDelegate = treeTitleDelegate()
self.setItemDelegateForColumn(Outline.title.value, self.titleDelegate)
2015-06-09 22:32:43 +12:00
2015-06-27 01:55:34 +12:00
def makePopupMenu(self):
menu = outlineBasics.makePopupMenu(self)
first = menu.actions()[0]
2015-06-30 00:21:57 +12:00
# Open item in new tab
sel = self.selectedIndexes()
pos = self.viewport().mapFromGlobal(QCursor.pos())
mouseIndex = self.indexAt(pos)
2015-06-27 01:55:34 +12:00
2015-06-30 00:21:57 +12:00
if mouseIndex.isValid():
mouseTitle = mouseIndex.internalPointer().title()
else:
mouseTitle = self.tr("Root")
if mouseIndex in sel and len(sel) > 1:
actionTitle = self.tr("Open {} items in new tabs").format(len(sel))
self._indexesToOpen = sel
else:
actionTitle = self.tr("Open {} in a new tab").format(mouseTitle)
self._indexesToOpen = [mouseIndex]
self.actNewTab = QAction(actionTitle, menu)
self.actNewTab.triggered.connect(self.openNewTab)
menu.insertAction(first, self.actNewTab)
menu.insertSeparator(first)
# Expand /collapse item
if mouseIndex.isValid():
#index = self.currentIndex()
item = mouseIndex.internalPointer()
2015-06-27 01:55:34 +12:00
self.actExpand = QAction(self.tr("Expand {}").format(item.title()), menu)
self.actExpand.triggered.connect(self.expandCurrentIndex)
menu.insertAction(first, self.actExpand)
self.actCollapse = QAction(self.tr("Collapse {}").format(item.title()), menu)
self.actCollapse.triggered.connect(self.collapseCurrentIndex)
menu.insertAction(first, self.actCollapse)
menu.insertSeparator(first)
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)
self.actCollapseAll = QAction(self.tr("Collapse All"), menu)
self.actCollapseAll.triggered.connect(self.collapseAll)
menu.insertAction(first, self.actCollapseAll)
menu.insertSeparator(first)
return menu
2015-06-30 00:21:57 +12:00
def openNewTab(self):
mainWindow().mainEditor.openIndexes(self._indexesToOpen, newTab=True)
2015-06-27 01:55:34 +12:00
def expandCurrentIndex(self, index=None):
if index is None or type(index) == bool:
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)
self.expandCurrentIndex(index=idx)
def collapseCurrentIndex(self, index=None):
if index is None or type(index) == bool:
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)
2015-06-09 22:32:43 +12:00
def dragMoveEvent(self, event):
dndView.dragMoveEvent(self, event)
QTreeView.dragMoveEvent(self, event)
2015-06-30 00:21:57 +12:00
def mousePressEvent(self, event):
if event.button() == Qt.RightButton:
# Capture mouse press so that selection doesn't change
# on right click
pass
else:
QTreeView.mousePressEvent(self, event)