manuskript/manuskript/ui/views/outlineBasics.py

205 lines
7.2 KiB
Python
Raw Normal View History

#!/usr/bin/env python
2016-02-07 00:34:22 +13:00
# --!-- coding: utf8 --!--
from PyQt5.QtCore import Qt, QSignalMapper
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QAbstractItemView, qApp, QMenu, QAction
from manuskript import settings
from manuskript.enums import Outline
from manuskript.functions import mainWindow
from manuskript.functions import toInt
from manuskript.models.outlineModel import outlineItem
class outlineBasics(QAbstractItemView):
def __init__(self, parent=None):
pass
2016-02-07 00:34:22 +13:00
def getSelection(self):
sel = []
for i in self.selectedIndexes():
2016-02-07 00:34:22 +13:00
if i.column() != 0:
continue
if not i in sel:
sel.append(i)
return sel
2016-02-07 00:34:22 +13:00
def mouseReleaseEvent(self, event):
if event.button() == Qt.RightButton:
2015-06-27 01:55:34 +12:00
self.menu = self.makePopupMenu()
2015-06-10 07:20:26 +12:00
self.menu.popup(event.globalPos())
else:
QAbstractItemView.mouseReleaseEvent(self, event)
2016-02-07 00:34:22 +13:00
2015-06-27 01:55:34 +12:00
def makePopupMenu(self):
index = self.currentIndex()
sel = self.getSelection()
clipboard = qApp.clipboard()
2016-02-07 00:34:22 +13:00
2015-06-27 01:55:34 +12:00
menu = QMenu(self)
2016-02-07 00:34:22 +13:00
2017-10-15 08:39:16 +13:00
# Add / remove items
self.actOpen = QAction(QIcon.fromTheme("go-right"), qApp.translate("outlineBasic", "Open Item"), menu)
self.actOpen.triggered.connect(self.openItem)
menu.addAction(self.actOpen)
menu.addSeparator()
2015-06-27 01:55:34 +12:00
# Add / remove items
self.actAddFolder = QAction(QIcon.fromTheme("folder-new"), qApp.translate("outlineBasics", "New Folder"), menu)
self.actAddFolder.triggered.connect(self.addFolder)
menu.addAction(self.actAddFolder)
2016-02-07 00:34:22 +13:00
2015-06-27 01:55:34 +12:00
self.actAddText = QAction(QIcon.fromTheme("document-new"), qApp.translate("outlineBasics", "New Text"), menu)
self.actAddText.triggered.connect(self.addText)
menu.addAction(self.actAddText)
2016-02-07 00:34:22 +13:00
2015-06-27 01:55:34 +12:00
self.actDelete = QAction(QIcon.fromTheme("edit-delete"), qApp.translate("outlineBasics", "Delete"), menu)
self.actDelete.triggered.connect(self.delete)
menu.addAction(self.actDelete)
2016-02-07 00:34:22 +13:00
2015-06-27 01:55:34 +12:00
menu.addSeparator()
2016-02-07 00:34:22 +13:00
2015-06-27 01:55:34 +12:00
# Copy, cut, paste
self.actCopy = QAction(QIcon.fromTheme("edit-copy"), qApp.translate("outlineBasics", "Copy"), menu)
self.actCopy.triggered.connect(self.copy)
menu.addAction(self.actCopy)
2016-02-07 00:34:22 +13:00
2015-06-27 01:55:34 +12:00
self.actCut = QAction(QIcon.fromTheme("edit-cut"), qApp.translate("outlineBasics", "Cut"), menu)
self.actCut.triggered.connect(self.cut)
menu.addAction(self.actCut)
2016-02-07 00:34:22 +13:00
2015-06-27 01:55:34 +12:00
self.actPaste = QAction(QIcon.fromTheme("edit-paste"), qApp.translate("outlineBasics", "Paste"), menu)
self.actPaste.triggered.connect(self.paste)
menu.addAction(self.actPaste)
2016-02-07 00:34:22 +13:00
2015-06-27 01:55:34 +12:00
menu.addSeparator()
2016-02-07 00:34:22 +13:00
2015-06-27 01:55:34 +12:00
# POV
self.menuPOV = QMenu(qApp.translate("outlineBasics", "Set POV"), menu)
mw = mainWindow()
2015-09-29 22:17:03 +13:00
a = QAction(QIcon.fromTheme("dialog-no"), qApp.translate("outlineBasics", "None"), self.menuPOV)
2015-06-27 01:55:34 +12:00
a.triggered.connect(lambda: self.setPOV(""))
self.menuPOV.addAction(a)
self.menuPOV.addSeparator()
2016-02-07 00:34:22 +13:00
2015-06-27 01:55:34 +12:00
menus = []
for i in [self.tr("Main"), self.tr("Secondary"), self.tr("Minor")]:
m = QMenu(i, self.menuPOV)
menus.append(m)
self.menuPOV.addMenu(m)
2016-02-07 00:34:22 +13:00
2015-06-27 01:55:34 +12:00
mpr = QSignalMapper(self.menuPOV)
for i in range(mw.mdlCharacter.rowCount()):
a = QAction(mw.mdlCharacter.icon(i), mw.mdlCharacter.name(i), self.menuPOV)
2015-06-27 01:55:34 +12:00
a.triggered.connect(mpr.map)
mpr.setMapping(a, int(mw.mdlCharacter.ID(i)))
2016-02-07 00:34:22 +13:00
imp = toInt(mw.mdlCharacter.importance(i))
2016-02-07 00:34:22 +13:00
menus[2 - imp].addAction(a)
2015-06-27 01:55:34 +12:00
mpr.mapped.connect(self.setPOV)
menu.addMenu(self.menuPOV)
2016-02-07 00:34:22 +13:00
2015-06-27 01:55:34 +12:00
# Status
self.menuStatus = QMenu(qApp.translate("outlineBasics", "Set Status"), menu)
2016-02-07 00:34:22 +13:00
# a = QAction(QIcon.fromTheme("dialog-no"), qApp.translate("outlineBasics", "None"), self.menuStatus)
# a.triggered.connect(lambda: self.setStatus(""))
# self.menuStatus.addAction(a)
# self.menuStatus.addSeparator()
2015-06-27 01:55:34 +12:00
mpr = QSignalMapper(self.menuStatus)
for i in range(mw.mdlStatus.rowCount()):
a = QAction(mw.mdlStatus.item(i, 0).text(), self.menuStatus)
a.triggered.connect(mpr.map)
mpr.setMapping(a, i)
self.menuStatus.addAction(a)
mpr.mapped.connect(self.setStatus)
menu.addMenu(self.menuStatus)
2016-02-07 00:34:22 +13:00
2015-06-27 01:55:34 +12:00
# Labels
self.menuLabel = QMenu(qApp.translate("outlineBasics", "Set Label"), menu)
mpr = QSignalMapper(self.menuLabel)
for i in range(mw.mdlLabels.rowCount()):
a = QAction(mw.mdlLabels.item(i, 0).icon(),
2016-02-07 00:34:22 +13:00
mw.mdlLabels.item(i, 0).text(),
2015-06-27 01:55:34 +12:00
self.menuLabel)
a.triggered.connect(mpr.map)
mpr.setMapping(a, i)
self.menuLabel.addAction(a)
mpr.mapped.connect(self.setLabel)
menu.addMenu(self.menuLabel)
2016-02-07 00:34:22 +13:00
2015-06-27 01:55:34 +12:00
if len(sel) > 0 and index.isValid() and not index.internalPointer().isFolder() \
2016-02-07 00:34:22 +13:00
or not clipboard.mimeData().hasFormat("application/xml"):
2015-06-27 01:55:34 +12:00
self.actPaste.setEnabled(False)
2016-02-07 00:34:22 +13:00
2015-06-27 01:55:34 +12:00
if len(sel) > 0 and index.isValid() and not index.internalPointer().isFolder():
self.actAddFolder.setEnabled(False)
self.actAddText.setEnabled(False)
2016-02-07 00:34:22 +13:00
2015-06-27 01:55:34 +12:00
if len(sel) == 0:
2017-10-15 08:39:16 +13:00
self.actOpen.setEnabled(False)
2015-06-27 01:55:34 +12:00
self.actCopy.setEnabled(False)
self.actCut.setEnabled(False)
self.actDelete.setEnabled(False)
self.menuPOV.setEnabled(False)
self.menuStatus.setEnabled(False)
self.menuLabel.setEnabled(False)
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
2017-10-15 08:39:16 +13:00
def openItem(self):
idx = self.currentIndex()
from manuskript.functions import MW
MW.openIndex(idx)
2015-06-10 07:29:17 +12:00
def addFolder(self):
self.addItem("folder")
2016-02-07 00:34:22 +13:00
2015-06-16 01:46:31 +12:00
def addText(self):
self.addItem("text")
2016-02-07 00:34:22 +13:00
def addItem(self, _type="folder"):
2015-06-10 07:29:17 +12:00
if len(self.selectedIndexes()) == 0:
parent = self.rootIndex()
else:
parent = self.currentIndex()
2016-02-07 00:34:22 +13:00
if _type == "text":
2015-06-25 20:01:28 +12:00
_type = settings.defaultTextType
2016-02-07 00:34:22 +13:00
item = outlineItem(title=qApp.translate("outlineBasics", "New"), _type=_type)
2015-06-10 07:29:17 +12:00
self.model().appendItem(item, parent)
2016-02-07 00:34:22 +13:00
def copy(self):
mimeData = self.model().mimeData(self.selectionModel().selectedIndexes())
qApp.clipboard().setMimeData(mimeData)
2016-02-07 00:34:22 +13:00
def paste(self):
index = self.currentIndex()
if len(self.getSelection()) == 0:
2015-06-10 07:29:17 +12:00
index = self.rootIndex()
data = qApp.clipboard().mimeData()
self.model().dropMimeData(data, Qt.CopyAction, -1, 0, index)
2016-02-07 00:34:22 +13:00
def cut(self):
self.copy()
self.delete()
2016-02-07 00:34:22 +13:00
def delete(self):
self.model().removeIndexes(self.getSelection())
2016-02-07 00:34:22 +13:00
2015-06-10 07:20:26 +12:00
def setPOV(self, POV):
for i in self.getSelection():
self.model().setData(i.sibling(i.row(), Outline.POV.value), str(POV))
2016-02-07 00:34:22 +13:00
2015-06-10 07:20:26 +12:00
def setStatus(self, status):
for i in self.getSelection():
self.model().setData(i.sibling(i.row(), Outline.status.value), str(status))
2016-02-07 00:34:22 +13:00
2015-06-10 07:20:26 +12:00
def setLabel(self, label):
for i in self.getSelection():
2016-02-07 00:34:22 +13:00
self.model().setData(i.sibling(i.row(), Outline.label.value), str(label))