From abd9d441adf9adca341598e04bbdf230b733f0f1 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" Date: Sat, 29 Sep 2018 20:33:19 +0200 Subject: [PATCH] Started adding project and doc classes. --- nw/__init__.py | 4 ++++ nw/gui/doctabs.py | 38 ++++++++++++++++++++++++++------ nw/gui/projecteditor.py | 48 +++++++++++++++++++++++++++++++++++++++++ nw/gui/winmain.py | 47 ++++++++++++++++++++++++++++++++++++++-- nw/project/document.py | 26 ++++++++++++++++++++++ nw/project/project.py | 33 ++++++++++++++++++++++++++++ 6 files changed, 187 insertions(+), 9 deletions(-) create mode 100644 nw/gui/projecteditor.py create mode 100644 nw/project/document.py create mode 100644 nw/project/project.py diff --git a/nw/__init__.py b/nw/__init__.py index 5f7d6a68..6c253bed 100644 --- a/nw/__init__.py +++ b/nw/__init__.py @@ -74,6 +74,10 @@ logger = logging.getLogger(__name__) # Load the main config as a global object CONFIG = Config() +# Constants +DOCTYPE_DOC = 0 +DOCTYPE_PROJECT = 1 + def main(sysArgs): """ Parses command line, sets up logging, and launches main GUI. diff --git a/nw/gui/doctabs.py b/nw/gui/doctabs.py index 2b672480..fa1d1260 100644 --- a/nw/gui/doctabs.py +++ b/nw/gui/doctabs.py @@ -13,11 +13,12 @@ import logging import nw -from os import path -from PyQt5.QtCore import Qt -from PyQt5.QtWidgets import QTabWidget, QWidget, QVBoxLayout +from os import path +from PyQt5.QtCore import Qt +from PyQt5.QtWidgets import QTabWidget, QWidget, QVBoxLayout -from nw.gui.doceditor import GuiDocEditor +from nw.gui.doceditor import GuiDocEditor +from nw.gui.projecteditor import GuiProjectEditor logger = logging.getLogger(__name__) @@ -36,14 +37,37 @@ class GuiDocTabs(QTabWidget): return - def createTab(self, docFile=None): - if docFile is None: + def createTab(self, theName=None, tabType=None): + if tabType == nw.DOCTYPE_DOC: + self._createTabDoc(theName) + return True + elif tabType == nw.DOCTYPE_PROJECT: + self._createTabProject(theName) + return True + return False + + # + # Internal Functions + # + + def _createTabDoc(self, docName=None): + if docName is None: tabName = "New Document" else: - tabName = docFile + tabName = docName thisTab = GuiDocEditor() self.tabList.append(thisTab) self.addTab(self.tabList[-1],tabName) return True + def _createTabProject(self, projectName=None): + if projectName is None: + tabName = "New Project" + else: + tabName = projectName + thisTab = GuiProjectEditor() + self.tabList.append(thisTab) + self.addTab(self.tabList[-1],tabName) + return True + # END Class GuiDocTabs diff --git a/nw/gui/projecteditor.py b/nw/gui/projecteditor.py new file mode 100644 index 00000000..76c011c9 --- /dev/null +++ b/nw/gui/projecteditor.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -* +"""novelWriter GUI Project Editor + + novelWriter – GUI Project Editor +=================================== + Class holding the project editor + + File History: + Created: 2018-09-29 [0.1.0] + +""" + +import logging +import nw + +from PyQt5.QtWidgets import QWidget, QVBoxLayout, QGroupBox, QFormLayout, QLabel, QLineEdit, QPlainTextEdit + +logger = logging.getLogger(__name__) + +class GuiProjectEditor(QWidget): + + def __init__(self): + QWidget.__init__(self) + + logger.debug("Initialising ProjectEditor ...") + + self.outerBox = QVBoxLayout() + self.setLayout(self.outerBox) + + self.mainGroup = QGroupBox("Project Settings") + self.mainForm = QFormLayout() + + self.editName = QLineEdit() + self.editTitle = QLineEdit() + self.editAuthors = QPlainTextEdit() + + self.mainForm.addRow("Working Name", self.editName) + self.mainForm.addRow("Book Title", self.editTitle) + self.mainForm.addRow("Book Authors", self.editAuthors) + + self.mainGroup.setLayout(self.mainForm) + self.outerBox.addWidget(self.mainGroup) + + logger.debug("ProjectEditor initialisation complete") + + return + +# END Class GuiProjectEditor diff --git a/nw/gui/winmain.py b/nw/gui/winmain.py index 94a61d70..e693b9f7 100644 --- a/nw/gui/winmain.py +++ b/nw/gui/winmain.py @@ -36,7 +36,6 @@ class GuiMain(QMainWindow): self.setWindowIcon(QIcon(path.join(self.mainConf.appPath,"..","novelWriter.svg"))) self.statBar = self.statusBar() - self.statBar.showMessage("Hello Kitty!") self.docTabs = GuiDocTabs() @@ -59,11 +58,12 @@ class GuiMain(QMainWindow): self._buildMenu() - self.docTabs.createTab() + # self.docTabs.createTab() self.show() logger.debug("GUI initialisation complete") + self.statBar.showMessage("Ready") return @@ -78,6 +78,17 @@ class GuiMain(QMainWindow): self.setWindowTitle(winTitle) return True + # + # Project Actions + # + + def newProject(self): + + logger.info("Creating new project") + self.docTabs.createTab(tabType=nw.DOCTYPE_PROJECT) + + return + # # Internal Functions # @@ -88,6 +99,38 @@ class GuiMain(QMainWindow): # File fileMenu = menuBar.addMenu("&File") + # File > New Project + menuNewProject = QAction(QIcon.fromTheme("folder-new"), "New Project", menuBar) + menuNewProject.setStatusTip("Create New Project") + menuNewProject.triggered.connect(self.newProject) + fileMenu.addAction(menuNewProject) + + # File > Open Project + menuOpenProject = QAction(QIcon.fromTheme("folder-open"), "Open Project", menuBar) + menuOpenProject.setStatusTip("Open Project") + fileMenu.addAction(menuOpenProject) + + # File > Save Project + menuSaveProject = QAction(QIcon.fromTheme("document-save"), "Save Project", menuBar) + menuSaveProject.setStatusTip("Save Project") + fileMenu.addAction(menuSaveProject) + + # File > Recent Project + menuRecentProject = QAction(QIcon.fromTheme("document-open-recent"), "Open Recent Project", menuBar) + menuRecentProject.setStatusTip("Open Recent Project") + fileMenu.addAction(menuRecentProject) + + # --------------------- + fileMenu.addSeparator() + + # File > Project Settings + menuProjectSettings = QAction(QIcon.fromTheme("document-properties"), "Project Settings", menuBar) + menuProjectSettings.setStatusTip("Project Settings") + fileMenu.addAction(menuProjectSettings) + + # --------------------- + fileMenu.addSeparator() + # File > New menuNew = QAction(QIcon.fromTheme("document-new"), "&New", menuBar) menuNew.setShortcut("Ctrl+N") diff --git a/nw/project/document.py b/nw/project/document.py new file mode 100644 index 00000000..1c8cf24b --- /dev/null +++ b/nw/project/document.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -* +"""novelWriter Project Document + + novelWriter – Project Document +================================ + Class holding a document + + File History: + Created: 2018-09-29 [0.1.0] + +""" + +import logging +import nw + +from os import path + +logger = logging.getLogger(__name__) + +class NWDoc(): + + def __init__(self): + + return + +# END Class NWDoc diff --git a/nw/project/project.py b/nw/project/project.py new file mode 100644 index 00000000..24db0882 --- /dev/null +++ b/nw/project/project.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -* +"""novelWriter Project Wrapper + + novelWriter – Project Wrapper +=============================== + Class holding a project + + File History: + Created: 2018-09-29 [0.1.0] + +""" + +import logging +import nw + +from os import path + +logger = logging.getLogger(__name__) + +class NWProject(): + + def __init__(self): + + self.projFolder = None + self.projTree = [] + + return + + def buildProjectTree(self): + + return True + +# END Class NWProject