Tree context menu can now add files, folders and roots.

This commit is contained in:
Veronica K. B. Olsen
2019-04-23 21:42:11 +02:00
parent 06d1d3c7cc
commit 30c1241488
6 changed files with 98 additions and 116 deletions
+9 -28
View File
@@ -53,44 +53,25 @@ class GuiDocTree(QTreeWidget):
return
def newTreeItem(self, itemType):
def newTreeItem(self, pHandle, itemType, itemClass):
rHandle = self._getSelectedHandle()
logger.verbose("Adding item relative to handle %s" % rHandle)
# Figure out where to put the new item
if rHandle is None:
nwType = nwItemType.ROOT
pHandle = None
else:
rItem = self.theProject.projTree[rHandle]
if rItem.itemType == nwItemType.FILE:
pHandle = rItem.parHandle
else:
pHandle = rHandle
logger.verbose("Adding new item of type %s and class %s to handle %s" % (
itemType.name,itemClass.name,str(pHandle))
)
# Create the new item
if itemType == nwItemType.FILE:
tHandle = self.theProject.newFile("New File", nwItemClass.NONE, pHandle)
if itemType == nwItemType.FILE:
tHandle = self.theProject.newFile("New File", itemClass, pHandle)
elif itemType == nwItemType.FOLDER:
if pHandle is None:
logger.error("Failed to add new item")
return
pItem = self.theProject.projTree[rHandle]
if pItem.itemClass == nwItemClass.NOVEL:
tHandle = self.theProject.newFolder("New Chapter", nwItemClass.CHAPTER, pHandle)
elif pItem.itemClass == nwItemClass.CHAPTER:
tHandle = self.theProject.newFolder("New Chapter", nwItemClass.CHAPTER, pItem.parHandle)
else:
tHandle = self.theProject.newFolder("New Folder", nwItemClass.NONE, pHandle)
tHandle = self.theProject.newFolder("New Folder", itemClass, pHandle)
elif itemType == nwItemType.ROOT:
tHandle = self.theProject.newRoot("Root Folder", nwItemClass.NONE)
tHandle = self.theProject.newRoot(NWItem.CLASS_NAME[itemClass], itemClass)
else:
logger.error("Failed to add new item")
return
# Add the new item to the tree
nwItem = self.theProject.projTree[tHandle]
nwItem = self.theProject.getItem(tHandle)
self._addTreeItem(nwItem)
return
+14 -49
View File
@@ -13,8 +13,11 @@
import logging
import nw
from copy import copy
from PyQt5.QtWidgets import QMenu, QAction
from nw.project.item import NWItem
from nw.enum import nwItemType, nwItemClass, nwItemAction
logger = logging.getLogger(__name__)
@@ -175,56 +178,18 @@ class GuiDocTreeCtx(QMenu):
return
def _buildMenuAddRoot(self, vActs):
for itemClass in vActs[nwItemAction.ADD_ROOT]["Class"]:
self._buildSubMenuAddRoot(itemClass)
return
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)
def _buildSubMenuAddRoot(self, itemClass):
mnuSub = QAction("Add "+NWItem.CLASS_NAME[itemClass], self)
mnuSub.triggered.connect(lambda: self._ctxSignal(
nwItemAction.ADD_ROOT,
itemClass,
nwItemType.ROOT
))
self.addAction(mnuSub)
return
##
+35 -10
View File
@@ -25,7 +25,7 @@ from nw.gui.projecteditor import GuiProjectEditor
from nw.gui.statusbar import GuiMainStatus
from nw.project.project import NWProject
from nw.project.document import NWDoc
from nw.enum import nwItemType, nwDocAction
from nw.enum import nwItemType, nwDocAction, nwItemAction
logger = logging.getLogger(__name__)
@@ -86,9 +86,9 @@ class GuiMain(QMainWindow):
return
#
##
# Project Actions
#
##
def newProject(self):
logger.info("Creating new project")
@@ -137,9 +137,9 @@ class GuiMain(QMainWindow):
self._setWindowTitle(self.theProject.projName)
return True
#
##
# Document Actions
#
##
def openDocument(self, tHandle):
self.stackPane.setCurrentIndex(self.stackDoc)
@@ -155,9 +155,9 @@ class GuiMain(QMainWindow):
self.theDocument.saveDocument(docHtml)
return
#
##
# Internal Functions
#
##
def _treeDoubleClick(self, tItem, colNo):
tHandle = tItem.text(3)
@@ -213,6 +213,31 @@ class GuiMain(QMainWindow):
print(selHandle, selAction, selClass, selType, selTarget)
if selAction == nwItemAction.ADD_ROOT:
self.treeView.newTreeItem(selHandle, selType, selClass)
elif selAction == nwItemAction.ADD_FOLDER:
self.treeView.newTreeItem(selHandle, selType, selClass)
elif selAction == nwItemAction.ADD_FILE:
self.treeView.newTreeItem(selHandle, selType, selClass)
elif selAction == nwItemAction.MOVE_UP:
pass
elif selAction == nwItemAction.MOVE_DOWN:
pass
elif selAction == nwItemAction.MOVE_TO:
pass
elif selAction == nwItemAction.MOVE_TRASH:
pass
elif selAction == nwItemAction.SPLIT:
pass
elif selAction == nwItemAction.MERGE:
pass
elif selAction == nwItemAction.DELETE:
pass
elif selAction == nwItemAction.DELETE_ROOT:
pass
elif selAction == nwItemAction.EMPTY_TRASH:
pass
return
##
@@ -243,9 +268,9 @@ class GuiMain(QMainWindow):
self.docEditor.changeWidth()
return
#
##
# GUI Builders
#
##
def _buildMenu(self):
menuBar = self.menuBar()
@@ -277,7 +302,7 @@ class GuiMain(QMainWindow):
for recentProject in self.mainConf.recentList:
if recentProject == "": continue
menuItem = QAction(QIcon.fromTheme("folder-open"), "%d: %s" % (itemCount,recentProject), fileMenu)
menuItem.triggered.connect(self.openRecentProject, itemCount)
menuItem.triggered.connect(lambda: self.openRecentProject(itemCount))
recentMenu.addAction(menuItem)
itemCount += 1