Files
novelWriter/nw/gui/doctreectx.py
T
2019-04-22 14:22:06 +02:00

242 lines
7.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# -*- coding: utf-8 -*-
"""novelWriter GUI Document Tree Context Menu
novelWriter GUI Document Tree Context Menu
==============================================
Class holding the context menu of the left side document tree view
File History:
Created: 2019-04-14 [0.0.1]
"""
import logging
import nw
from PyQt5.QtWidgets import QMenu, QAction
from nw.enum import nwItemType, nwItemClass, nwItemAction
logger = logging.getLogger(__name__)
class GuiDocTreeCtx(QMenu):
def __init__(self, theDocTree, theProject, thePosition):
QMenu.__init__(self, theDocTree)
logger.debug("Initialising DocTree ContextMenu ...")
self.mainConf = nw.CONFIG
self.theProject = theProject
self.theDocTree = theDocTree
self.selAction = None
self.selClass = None
self.selType = None
self.selTarget = None
selItems = self.theDocTree.selectedItems()
if len(selItems) == 0:
self.selHandle = None
else:
self.selHandle = selItems[0].text(3)
print(self.selHandle)
self._buildMenu()
logger.debug("DocTree ContextMenu initialisation complete")
self.exec_(self.theDocTree.viewport().mapToGlobal(thePosition))
return
def _buildMenu(self):
vActs = self.theProject.getActionList(self.selHandle)
if nwItemAction.ADD_ROOT in vActs.keys():
self._buildMenuAddRoot(vActs)
if nwItemAction.ADD_FOLDER in vActs.keys():
self._buildMenuAddFolder(vActs)
if nwItemAction.ADD_FILE in vActs.keys():
self._buildMenuAddFile(vActs)
if nwItemAction.MOVE_UP in vActs.keys():
self._buildMenuMoveUp(vActs)
if nwItemAction.MOVE_DOWN in vActs.keys():
self._buildMenuMoveDown(vActs)
if nwItemAction.MOVE_TRASH in vActs.keys():
self._buildMenuMoveTrash(vActs)
if nwItemAction.MOVE_TO in vActs.keys():
self._buildMenuMoveTo(vActs)
if nwItemAction.SPLIT in vActs.keys():
self._buildMenuSplit(vActs)
if nwItemAction.MERGE in vActs.keys():
self._buildMenuMerge(vActs)
if nwItemAction.DELETE in vActs.keys():
self._buildMenuDelete(vActs)
if nwItemAction.DELETE_ROOT in vActs.keys():
self._buildMenuDeleteRoot(vActs)
if nwItemAction.EMPTY_TRASH in vActs.keys():
self._buildMenuEmptyTrash(vActs)
return
##
# Build Sub Menus
##
def _buildMenuDelete(self, vActs):
mnuItem = QAction("Delete Permanently", self)
mnuItem.triggered.connect(lambda: self._ctxSignal(
nwItemAction.DELETE, None, None
))
self.addAction(mnuItem)
return
def _buildMenuDeleteRoot(self, vActs):
mnuItem = QAction("Remove Root", self)
mnuItem.triggered.connect(lambda: self._ctxSignal(
nwItemAction.DELETE_ROOT, None, None
))
self.addAction(mnuItem)
return
def _buildMenuEmptyTrash(self, vActs):
mnuItem = QAction("Empty Trash", self)
mnuItem.triggered.connect(lambda: self._ctxSignal(
nwItemAction.EMPTY_TRASH, None, None
))
self.addAction(mnuItem)
return
def _buildMenuSplit(self, vActs):
mnuItem = QAction("Split File", self)
mnuItem.triggered.connect(lambda: self._ctxSignal(
nwItemAction.SPLIT, None, None
))
self.addAction(mnuItem)
return
def _buildMenuMerge(self, vActs):
mnuItem = QAction("Merge Folder", self)
mnuItem.triggered.connect(lambda: self._ctxSignal(
nwItemAction.MERGE, None, None
))
self.addAction(mnuItem)
return
def _buildMenuMoveUp(self, vActs):
mnuItem = QAction("Move Up", self)
mnuItem.triggered.connect(lambda: self._ctxSignal(
nwItemAction.MOVE_UP, None, None
))
self.addAction(mnuItem)
return
def _buildMenuMoveDown(self, vActs):
mnuItem = QAction("Move Down", self)
mnuItem.triggered.connect(lambda: self._ctxSignal(
nwItemAction.MOVE_DOWN, None, None
))
self.addAction(mnuItem)
return
def _buildMenuMoveTrash(self, vActs):
mnuItem = QAction("Move to Trash", self)
mnuItem.triggered.connect(lambda: self._ctxSignal(
nwItemAction.MOVE_TRASH, None, None
))
self.addAction(mnuItem)
return
def _buildMenuMoveTo(self, vActs):
mnuItem = QAction("Move to", self)
mnuItem.triggered.connect(lambda: self._ctxSignal(
nwItemAction.MOVE_TO, None, None,
None
))
self.addAction(mnuItem)
return
def _buildMenuAddFile(self, vActs):
mnuItem = QAction("Add File", self)
mnuItem.triggered.connect(lambda: self._ctxSignal(
nwItemAction.ADD_FILE,
vActs[nwItemAction.ADD_FILE]["Class"],
nwItemType.FILE
))
self.addAction(mnuItem)
return
def _buildMenuAddFolder(self, vActs):
mnuItem = QAction("Add Folder", self)
mnuItem.triggered.connect(lambda: self._ctxSignal(
nwItemAction.ADD_FOLDER,
vActs[nwItemAction.ADD_FOLDER]["Class"],
nwItemType.FOLDER
))
self.addAction(mnuItem)
return
def _buildMenuAddRoot(self, vActs):
vClass = vActs[nwItemAction.ADD_ROOT]["Class"]
mnuItem = QMenu("Add Root Item", self)
if nwItemClass.NOVEL in vClass:
mnuSub = QAction("Novel", self)
mnuSub.triggered.connect(lambda: self._ctxSignal(
nwItemAction.ADD_ROOT,
nwItemClass.NOVEL,
nwItemType.ROOT
))
mnuItem.addAction(mnuSub)
if nwItemClass.CHARACTER in vClass:
mnuSub = QAction("Characters", self)
mnuSub.triggered.connect(lambda: self._ctxSignal(
nwItemAction.ADD_ROOT,
nwItemClass.CHARACTER,
nwItemType.ROOT
))
mnuItem.addAction(mnuSub)
if nwItemClass.WORLD in vClass:
mnuSub = QAction("Locations", self)
mnuSub.triggered.connect(lambda: self._ctxSignal(
nwItemAction.ADD_ROOT,
nwItemClass.WORLD,
nwItemType.ROOT
))
mnuItem.addAction(mnuSub)
if nwItemClass.TIMELINE in vClass:
mnuSub = QAction("Timeline", self)
mnuSub.triggered.connect(lambda: self._ctxSignal(
nwItemAction.ADD_ROOT,
nwItemClass.TIMELINE,
nwItemType.ROOT
))
mnuItem.addAction(mnuSub)
if nwItemClass.OBJECT in vClass:
mnuSub = QAction("Objects", self)
mnuSub.triggered.connect(lambda: self._ctxSignal(
nwItemAction.ADD_ROOT,
nwItemClass.OBJECT,
nwItemType.ROOT
))
mnuItem.addAction(mnuSub)
self.addMenu(mnuItem)
return
##
# Menu Signal
##
def _ctxSignal(self, theAction, theClass, theType, theTarget=None):
self.selAction = theAction
self.selClass = theClass
self.selType = theType
self.selTarget = theTarget
return
# END Class GuiDocTreeCtx