Files
novelWriter/nw/gui/mainmenu.py
T
2019-04-27 10:32:46 +02:00

307 lines
12 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 Main Menu
novelWriter GUI Main Menu
=============================
Class holding the main window
File History:
Created: 2019-04-27 [0.0.1] (Split from winmain)
"""
import logging
import nw
from PyQt5.QtWidgets import QMenu
# from os import path
# from PyQt5.QtWidgets import qApp, QWidget, QMainWindow, QVBoxLayout, QFrame, QSplitter, QAction, QToolBar, QFileDialog, QStackedWidget
# from PyQt5.QtCore import Qt, QSize, pyqtSlot
# from PyQt5.QtGui import QIcon
# from nw.gui.doctree import GuiDocTree
# from nw.gui.doctreectx import GuiDocTreeCtx
# from nw.gui.doceditor import GuiDocEditor
# from nw.gui.docdetails import GuiDocDetails
# 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.project.item import NWItem
# from nw.enum import nwItemType, nwItemClass, nwDocAction, nwItemAction
logger = logging.getLogger(__name__)
class GuiMainMenu(QMenu):
def __init__(self, theParent, theProject):
QMenu.__init__(self, theParent)
logger.debug("Initialising Main Menu ...")
self.mainConf = nw.CONFIG
self.theProject = NWProject()
self.theDocument = NWDoc(self.theProject, self)
self._buildMenu()
logger.debug("Main Menu initialisation complete")
return
def openRecentProject(self, menuItem, recentItem):
logger.verbose("User requested opening recent project #%d" % recentItem)
self.theProject.openProject(self.mainConf.recentList[recentItem])
self.treeView.buildTree()
self._setWindowTitle(self.theProject.projName)
return True
##
# GUI Builders
##
def _buildMenu(self):
# Project
projMenu = self.addMenu("&Project")
# Project > New Project
menuItem = QAction(QIcon.fromTheme("folder-new"), "New Project", self)
menuItem.setStatusTip("Create New Project")
menuItem.triggered.connect(self.newProject)
projMenu.addAction(menuItem)
# Project > Open Project
menuItem = QAction(QIcon.fromTheme("folder-open"), "Open Project", self)
menuItem.setStatusTip("Open Project")
menuItem.setShortcut("Ctrl+Shift+O")
menuItem.triggered.connect(self.openProject)
projMenu.addAction(menuItem)
# Project > Save Project
menuItem = QAction(QIcon.fromTheme("document-save"), "Save Project", self)
menuItem.setStatusTip("Save Project")
menuItem.setShortcut("Ctrl+Shift+S")
menuItem.triggered.connect(self.saveProject)
projMenu.addAction(menuItem)
# Project > Recent Projects
recentMenu = projMenu.addMenu(QIcon.fromTheme("document-open-recent"),"Recent Projects")
for n in range(len(self.mainConf.recentList)):
recentProject = self.mainConf.recentList[n]
if recentProject == "": continue
menuItem = QAction(QIcon.fromTheme("folder-open"), "%d: %s" % (n,recentProject), projMenu)
menuItem.triggered.connect(lambda menuItem, n=n : self.openRecentProject(menuItem, n))
recentMenu.addAction(menuItem)
# Project > Separator
projMenu.addSeparator()
# Project > Project Settings
menuItem = QAction(QIcon.fromTheme("document-properties"), "Project Settings", self)
menuItem.setStatusTip("Project Settings")
menuItem.triggered.connect(self.editProject)
projMenu.addAction(menuItem)
# Project > Separator
projMenu.addSeparator()
# Project > Exit
menuItem = QAction(QIcon.fromTheme("application-exit"), "Exit", self)
menuItem.setStatusTip("Exit %s" % nw.__package__)
menuItem.setShortcut("Ctrl+Q")
menuItem.triggered.connect(self._menuExit)
projMenu.addAction(menuItem)
############################################################################################
# Item
itemMenu = self.addMenu("&Item")
# Item > New
menuItem = QAction(QIcon.fromTheme("document-new"), "&New Document", self)
menuItem.setStatusTip("Create New Document")
menuItem.setShortcut("Ctrl+N")
itemMenu.addAction(menuItem)
# Item > Open
menuItem = QAction(QIcon.fromTheme("document-open"), "&Open Document", self)
menuItem.setStatusTip("Open Selected Document")
menuItem.setShortcut("Ctrl+O")
itemMenu.addAction(menuItem)
# Item > Save
menuItem = QAction(QIcon.fromTheme("document-save"), "&Save Document", self)
menuItem.setStatusTip("Save Current Document")
menuItem.setShortcut("Ctrl+S")
menuItem.triggered.connect(self.saveDocument)
itemMenu.addAction(menuItem)
# Item > Separator
itemMenu.addSeparator()
# Item > New Folder
menuItem = QAction(QIcon.fromTheme("folder-new"), "New Folder", self)
menuItem.setStatusTip("New Folder")
menuItem.setShortcut("Ctrl+Shift+N")
itemMenu.addAction(menuItem)
# Item > New Root
rootMenu = itemMenu.addMenu(QIcon.fromTheme("folder-new"), "Create Root Group")
self.rootItems = {}
self.rootItems[nwItemClass.NOVEL] = QAction(QIcon.fromTheme("folder-new"), "Novel Root", rootMenu)
self.rootItems[nwItemClass.PLOT] = QAction(QIcon.fromTheme("folder-new"), "Plot Root", rootMenu)
self.rootItems[nwItemClass.CHARACTER] = QAction(QIcon.fromTheme("folder-new"), "Character Root", rootMenu)
self.rootItems[nwItemClass.WORLD] = QAction(QIcon.fromTheme("folder-new"), "Location Root", rootMenu)
self.rootItems[nwItemClass.TIMELINE] = QAction(QIcon.fromTheme("folder-new"), "Timeline Root", rootMenu)
self.rootItems[nwItemClass.OBJECT] = QAction(QIcon.fromTheme("folder-new"), "Object Root", rootMenu)
self.rootItems[nwItemClass.CUSTOM] = QAction(QIcon.fromTheme("folder-new"), "Custom Root", rootMenu)
rootMenu.addActions(self.rootItems.values())
# Item > Separator
itemMenu.addSeparator()
# Item > Delete Item
menuItem = QAction(QIcon.fromTheme("folder-delete"), "Delete Item", self)
menuItem.setStatusTip("Delete Selected Item")
menuItem.setShortcut("Del")
itemMenu.addAction(menuItem)
############################################################################################
# Edit
editMenu = self.addMenu("&Edit")
# Edit > Undo
menuItem = QAction(QIcon.fromTheme("edit-undo"), "Undo", self)
menuItem.setStatusTip("Undo Last Change")
menuItem.setShortcut("Ctrl+Z")
menuItem.triggered.connect(lambda: self.docEditor.docAction(nwDocAction.UNDO))
editMenu.addAction(menuItem)
# Edit > Redo
menuItem = QAction(QIcon.fromTheme("edit-redo"), "Redo", self)
menuItem.setStatusTip("Redo Last Change")
menuItem.setShortcut("Ctrl+Y")
menuItem.triggered.connect(lambda: self.docEditor.docAction(nwDocAction.REDO))
editMenu.addAction(menuItem)
# Edit > Separator
editMenu.addSeparator()
# Edit > Cut
menuItem = QAction(QIcon.fromTheme("edit-cut"), "Cut", self)
menuItem.setStatusTip("Cut Selected Text")
menuItem.setShortcut("Ctrl+X")
menuItem.triggered.connect(lambda: self.docEditor.docAction(nwDocAction.CUT))
editMenu.addAction(menuItem)
# Edit > Copy
menuItem = QAction(QIcon.fromTheme("edit-copy"), "Copy", self)
menuItem.setStatusTip("Copy Selected Text")
menuItem.setShortcut("Ctrl+C")
menuItem.triggered.connect(lambda: self.docEditor.docAction(nwDocAction.COPY))
editMenu.addAction(menuItem)
# Edit > Paste
menuItem = QAction(QIcon.fromTheme("edit-paste"), "Paste", self)
menuItem.setStatusTip("Paste Text from Clipboard")
menuItem.setShortcut("Ctrl+V")
menuItem.triggered.connect(lambda: self.docEditor.docAction(nwDocAction.PASTE))
editMenu.addAction(menuItem)
# Edit > Separator
editMenu.addSeparator()
# Edit > Select All
menuItem = QAction(QIcon.fromTheme("edit-select-all"), "Select All", self)
menuItem.setStatusTip("Select All Text in Document")
menuItem.setShortcut("Ctrl+A")
menuItem.triggered.connect(lambda: self.docEditor.docAction(nwDocAction.SEL_ALL))
editMenu.addAction(menuItem)
# Edit > Select Paragraph
menuItem = QAction(QIcon.fromTheme("edit-select-all"), "Select Paragraph", self)
menuItem.setStatusTip("Select All Text in Paragraph")
menuItem.setShortcut("Ctrl+Shift+A")
menuItem.triggered.connect(lambda: self.docEditor.docAction(nwDocAction.SEL_PARA))
editMenu.addAction(menuItem)
# Edit > Separator
editMenu.addSeparator()
# Edit > Settings
menuItem = QAction(QIcon.fromTheme("applications-system"), "Program Setting", self)
menuItem.setStatusTip("Change %s Settings" % nw.__package__)
editMenu.addAction(menuItem)
############################################################################################
# Format
fmtMenu = self.addMenu("&Format")
# Format > Bold Text
menuItem = QAction(QIcon.fromTheme("format-text-bold"), "Bold Text", self)
menuItem.setStatusTip("Make Selected Text Bold")
menuItem.setShortcut("Ctrl+B")
menuItem.triggered.connect(lambda: self.docEditor.docAction(nwDocAction.BOLD))
fmtMenu.addAction(menuItem)
# Format > Italic Text
menuItem = QAction(QIcon.fromTheme("format-text-italic"), "Italic Text", self)
menuItem.setStatusTip("Make Selected Text Italic")
menuItem.setShortcut("Ctrl+I")
menuItem.triggered.connect(lambda: self.docEditor.docAction(nwDocAction.ITALIC))
fmtMenu.addAction(menuItem)
# Format > Underline Text
menuItem = QAction(QIcon.fromTheme("format-text-underline"), "Underline Text", self)
menuItem.setStatusTip("Underline Selected Text")
menuItem.setShortcut("Ctrl+U")
menuItem.triggered.connect(lambda: self.docEditor.docAction(nwDocAction.U_LINE))
fmtMenu.addAction(menuItem)
# Edit > Separator
fmtMenu.addSeparator()
# Format > Double Quotes
menuItem = QAction(QIcon.fromTheme("insert-text"), "Wrap Double Quotes", self)
menuItem.setStatusTip("Wrap Selected Text in Double Quotes")
menuItem.setShortcut("Ctrl+D")
menuItem.triggered.connect(lambda: self.docEditor.docAction(nwDocAction.D_QUOTE))
fmtMenu.addAction(menuItem)
# Format > Single Quotes
menuItem = QAction(QIcon.fromTheme("insert-text"), "Wrap Single Quotes", self)
menuItem.setStatusTip("Wrap Selected Text in Single Quotes")
menuItem.setShortcut("Ctrl+Shift+D")
menuItem.triggered.connect(lambda: self.docEditor.docAction(nwDocAction.S_QUOTE))
fmtMenu.addAction(menuItem)
############################################################################################
# Help
helpMenu = self.addMenu("&Help")
# Help > About
menuItem = QAction(QIcon.fromTheme("help-about"), "About %s" % nw.__package__, self)
menuItem.setStatusTip("About %s" % nw.__package__)
menuItem.triggered.connect(self._showAbout)
helpMenu.addAction(menuItem)
# Help > About Qt5
menuItem = QAction(QIcon.fromTheme("help-about"), "About Qt5", self)
menuItem.setStatusTip("About Qt5")
helpMenu.addAction(menuItem)
if not self.mainConf.debugGUI:
return
############################################################################################
# Debug GUI
debugMenu = self.addMenu("&Debug")
return
# END Class GuiMainMenu