From 8c34f8f7a3fbab16b861ee6872a5b4bc758b8226 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" Date: Sat, 25 May 2019 19:07:57 +0200 Subject: [PATCH 1/7] Pressing F2 is equivalent to pressing Ctrl+E --- nw/gui/mainmenu.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nw/gui/mainmenu.py b/nw/gui/mainmenu.py index b3b3117e..f770d1c3 100644 --- a/nw/gui/mainmenu.py +++ b/nw/gui/mainmenu.py @@ -204,7 +204,7 @@ class GuiMainMenu(QMenuBar): # Project > Edit menuItem = QAction(QIcon.fromTheme("document-properties"), "&Edit Item", self) menuItem.setStatusTip("Change Item Settings") - menuItem.setShortcut("Ctrl+E") + menuItem.setShortcuts(["Ctrl+E", "F2"]) menuItem.triggered.connect(self.theParent.editItem) self.projMenu.addAction(menuItem) From dbdf28f339454ef57664489a62bf59f564e8a255 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" Date: Sat, 25 May 2019 19:12:30 +0200 Subject: [PATCH 2/7] Align text on split view move --- nw/gui/winmain.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/nw/gui/winmain.py b/nw/gui/winmain.py index bd0bcfe4..76f98219 100644 --- a/nw/gui/winmain.py +++ b/nw/gui/winmain.py @@ -75,6 +75,7 @@ class GuiMain(QMainWindow): self.splitView = QSplitter(Qt.Horizontal) self.splitView.addWidget(self.docEditor) self.splitView.addWidget(self.docViewer) + self.splitView.splitterMoved.connect(self._splitViewMove) self.splitMain = QSplitter(Qt.Horizontal) self.splitMain.addWidget(self.treePane) @@ -557,4 +558,10 @@ class GuiMain(QMainWindow): self.docEditor.changeWidth() return + def _splitViewMove(self, pWidth, pHeight): + """Alert dependent GUI elements that the main pane splitter has been moved. + """ + self.docEditor.changeWidth() + return + # END Class GuiMain From b4a405c57e6c832bf7c3fd1b99e3969466ea948b Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" Date: Sat, 25 May 2019 19:30:18 +0200 Subject: [PATCH 3/7] Doxument view can now be closed --- nw/gui/mainmenu.py | 7 +++++++ nw/gui/winmain.py | 13 +++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/nw/gui/mainmenu.py b/nw/gui/mainmenu.py index f770d1c3..3eb9d9b6 100644 --- a/nw/gui/mainmenu.py +++ b/nw/gui/mainmenu.py @@ -263,6 +263,13 @@ class GuiMainMenu(QMenuBar): menuItem.triggered.connect(lambda : self.theParent.viewDocument(None)) self.docuMenu.addAction(menuItem) + # Document > Close Preview + menuItem = QAction(QIcon.fromTheme("text-html"), "Close Document View", self) + menuItem.setStatusTip("Close Document View Pane") + menuItem.setShortcut("Ctrl+Shift+R") + menuItem.triggered.connect(self.theParent.closeDocViewer) + self.docuMenu.addAction(menuItem) + # # Document > Separator # self.docuMenu.addSeparator() diff --git a/nw/gui/winmain.py b/nw/gui/winmain.py index 76f98219..54738d59 100644 --- a/nw/gui/winmain.py +++ b/nw/gui/winmain.py @@ -172,8 +172,7 @@ class GuiMain(QMainWindow): def clearGUI(self): self.treeView.clearTree() self.docEditor.clearEditor() - self.docViewer.clearViewer() - self.docViewer.setVisible(False) + self.closeDocViewer() return True ## @@ -451,6 +450,16 @@ class GuiMain(QMainWindow): self.docViewer.setFocus() return + def closeDocViewer(self): + self.docViewer.clearViewer() + self.theProject.setLastViewed(None) + bPos = self.splitMain.sizes() + self.docViewer.setVisible(False) + vPos = [bPos[1],0] + self.splitView.setSizes(vPos) + self.docEditor.changeWidth() + return + ## # Internal Functions ## From c40649b22d65efe5978e5cf3e98463eafdfeb11c Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" Date: Sat, 25 May 2019 19:40:31 +0200 Subject: [PATCH 4/7] Slight modification to main GUI test --- nw/gui/winmain.py | 2 +- tests/test_gui.py | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/nw/gui/winmain.py b/nw/gui/winmain.py index 54738d59..bfe86601 100644 --- a/nw/gui/winmain.py +++ b/nw/gui/winmain.py @@ -458,7 +458,7 @@ class GuiMain(QMainWindow): vPos = [bPos[1],0] self.splitView.setSizes(vPos) self.docEditor.changeWidth() - return + return not self.docViewer.isVisible() ## # Internal Functions diff --git a/tests/test_gui.py b/tests/test_gui.py index 4abe812d..d3c6d431 100644 --- a/tests/test_gui.py +++ b/tests/test_gui.py @@ -76,7 +76,7 @@ def testMainWindows(qtbot, nwTempGUI, nwRef): assert nwGUI.treeView._getTreeItem("811786ad1ae74") is not None # Select the 'New Scene' file - nwGUI.treeView.setFocus() + nwGUI.setFocus(1) nwGUI.treeView._getTreeItem("73475cb40a568").setExpanded(True) nwGUI.treeView._getTreeItem("25fc0e7096fc6").setExpanded(True) nwGUI.treeView._getTreeItem("31489056e0916").setSelected(True) @@ -85,7 +85,7 @@ def testMainWindows(qtbot, nwTempGUI, nwRef): assert nwGUI.mainMenu._toggleSpellCheck() # Type something into the document - nwGUI.docEditor.setFocus() + nwGUI.setFocus(2) for c in "# Hello World!": qtbot.keyClick(nwGUI.docEditor, c, delay=keyDelay) qtbot.keyClick(nwGUI.docEditor, Qt.Key_Return, delay=keyDelay) @@ -142,10 +142,12 @@ def testMainWindows(qtbot, nwTempGUI, nwRef): qtbot.wait(stepDelay) # Open and view the edited document + nwGUI.setFocus(3) assert nwGUI.openDocument("31489056e0916") assert nwGUI.viewDocument("31489056e0916") qtbot.wait(stepDelay) assert nwGUI.saveProject() + assert nwGUI.closeDocViewer() # Check the files projFile = path.join(nwTempGUI,"nwProject.nwx") From f986325f4ed038932a3038cf033a37229c3bea50 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" Date: Sat, 25 May 2019 19:44:54 +0200 Subject: [PATCH 5/7] Added icon and shortcut to close project --- nw/gui/mainmenu.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nw/gui/mainmenu.py b/nw/gui/mainmenu.py index 3eb9d9b6..c30b6b79 100644 --- a/nw/gui/mainmenu.py +++ b/nw/gui/mainmenu.py @@ -155,8 +155,9 @@ class GuiMainMenu(QMenuBar): self.projMenu.addAction(menuItem) # Project > Close Project - menuItem = QAction("Close Project", self) + menuItem = QAction(QIcon.fromTheme("document-revert"), "Close Project", self) menuItem.setStatusTip("Close Project") + menuItem.setShortcut("Ctrl+Shift+W") menuItem.triggered.connect(lambda : self.theParent.closeProject(False)) self.projMenu.addAction(menuItem) From 9dd956bc92715f40db83e2a23e8e958fcebb1c35 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" Date: Sat, 25 May 2019 19:59:43 +0200 Subject: [PATCH 6/7] Added exit yes/no dialog --- nw/gui/mainmenu.py | 5 ++--- nw/gui/winmain.py | 20 ++++++++++++++++---- tests/test_gui.py | 3 +++ 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/nw/gui/mainmenu.py b/nw/gui/mainmenu.py index c30b6b79..91f7651f 100644 --- a/nw/gui/mainmenu.py +++ b/nw/gui/mainmenu.py @@ -13,7 +13,7 @@ import logging import nw -from PyQt5.QtWidgets import qApp, QMenuBar, QAction, QMessageBox +from PyQt5.QtWidgets import QMenuBar, QAction, QMessageBox from PyQt5.QtGui import QIcon from nw.enum import nwItemType, nwItemClass, nwDocAction @@ -91,8 +91,7 @@ class GuiMainMenu(QMenuBar): def _menuExit(self): self.theParent.closeMain() - qApp.quit() - return True + return def _toggleSpellCheck(self): self.theProject.setSpellCheck(self.toolsSpellCheck.isChecked()) diff --git a/nw/gui/winmain.py b/nw/gui/winmain.py index bfe86601..4fa127af 100644 --- a/nw/gui/winmain.py +++ b/nw/gui/winmain.py @@ -14,7 +14,7 @@ import logging import nw from os import path -from PyQt5.QtWidgets import QWidget, QMainWindow, QVBoxLayout, QFrame, QSplitter, QFileDialog, QStackedWidget, QShortcut, QMessageBox +from PyQt5.QtWidgets import qApp, QWidget, QMainWindow, QVBoxLayout, QFrame, QSplitter, QFileDialog, QStackedWidget, QShortcut, QMessageBox from PyQt5.QtGui import QIcon, QPixmap, QColor from PyQt5.QtCore import Qt, QTimer @@ -428,7 +428,17 @@ class GuiMain(QMainWindow): # Main Window Actions ## - def closeMain(self): + def closeMain(self, isYes=False): + + if not isYes: + msgBox = QMessageBox() + msgRes = msgBox.question( + self, "Exit", + "Do you want to exit %s?" % nw.__package__ + ) + if msgRes != QMessageBox.Yes: + return False + logger.info("Exiting %s" % nw.__package__) if self._takeDocumentAction(): self.saveDocument() @@ -439,7 +449,10 @@ class GuiMain(QMainWindow): self.mainConf.setMainPanePos(self.splitMain.sizes()) self.mainConf.setDocPanePos(self.splitView.sizes()) self.mainConf.saveConfig() - return + + qApp.quit() + + return True def setFocus(self, paneNo): if paneNo == 1: @@ -526,7 +539,6 @@ class GuiMain(QMainWindow): def closeEvent(self, theEvent): self.closeMain() - QMainWindow.closeEvent(self,theEvent) return ## diff --git a/tests/test_gui.py b/tests/test_gui.py index d3c6d431..94ce7eb4 100644 --- a/tests/test_gui.py +++ b/tests/test_gui.py @@ -155,6 +155,7 @@ def testMainWindows(qtbot, nwTempGUI, nwRef): sceneFile = path.join(nwTempGUI,"data_3","1489056e0916_main.nwd") assert cmpFiles(sceneFile, path.join(nwRef,"gui","1_1489056e0916_main.nwd")) + nwGUI.closeMain(True) # qtbot.stopForInteraction() @pytest.mark.gui @@ -216,6 +217,7 @@ def testProjectEditor(qtbot, nwTempGUI, nwRef): projFile = path.join(nwTempGUI,"nwProject.nwx") assert cmpFiles(projFile, path.join(nwRef,"gui","2_nwProject.nwx"), [2]) + nwGUI.closeMain(True) # qtbot.stopForInteraction() @pytest.mark.gui @@ -261,4 +263,5 @@ def testItemEditor(qtbot, nwTempGUI, nwRef): projFile = path.join(nwTempGUI,"nwProject.nwx") assert cmpFiles(projFile, path.join(nwRef,"gui","3_nwProject.nwx"), [2]) + nwGUI.closeMain(True) # qtbot.stopForInteraction() From 0f608d444225edbe221bc344116f00c9e0195167 Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" Date: Sat, 25 May 2019 20:09:03 +0200 Subject: [PATCH 7/7] Cleaned up import statements --- nw/gui/docdetails.py | 2 -- nw/gui/doceditor.py | 2 +- nw/gui/doctree.py | 3 +-- nw/gui/mainmenu.py | 2 +- nw/gui/statusbar.py | 1 - nw/gui/winmain.py | 7 +++++-- 6 files changed, 8 insertions(+), 9 deletions(-) diff --git a/nw/gui/docdetails.py b/nw/gui/docdetails.py index b1f91345..bfe2f26d 100644 --- a/nw/gui/docdetails.py +++ b/nw/gui/docdetails.py @@ -13,11 +13,9 @@ import logging import nw -from os import path from PyQt5.QtGui import QFont from PyQt5.QtWidgets import QFrame, QGridLayout, QLabel -from nw.enum import nwItemType, nwItemClass, nwItemLayout from nw.constants import nwLabels logger = logging.getLogger(__name__) diff --git a/nw/gui/doceditor.py b/nw/gui/doceditor.py index b16a7928..7ba063d7 100644 --- a/nw/gui/doceditor.py +++ b/nw/gui/doceditor.py @@ -16,9 +16,9 @@ import enchant from time import time +from PyQt5.QtCore import Qt, QTimer from PyQt5.QtWidgets import QTextEdit, QAction, QMenu, QShortcut from PyQt5.QtGui import QTextCursor, QTextOption, QIcon, QKeySequence -from PyQt5.QtCore import Qt, QTimer from nw.gui.dochighlight import GuiDocHighlighter from nw.gui.wordcounter import WordCounter diff --git a/nw/gui/doctree.py b/nw/gui/doctree.py index 5ff18107..da074375 100644 --- a/nw/gui/doctree.py +++ b/nw/gui/doctree.py @@ -13,10 +13,9 @@ import logging import nw -from os import path from PyQt5.QtCore import Qt, QSize from PyQt5.QtGui import QIcon, QFont, QColor -from PyQt5.QtWidgets import QTreeWidget, QTreeWidgetItem, QAbstractItemView, QInputDialog, QLineEdit, QApplication +from PyQt5.QtWidgets import QTreeWidget, QTreeWidgetItem, QAbstractItemView, QApplication from nw.project.item import NWItem from nw.enum import nwItemType, nwItemClass, nwAlert diff --git a/nw/gui/mainmenu.py b/nw/gui/mainmenu.py index 91f7651f..7cb5274d 100644 --- a/nw/gui/mainmenu.py +++ b/nw/gui/mainmenu.py @@ -13,8 +13,8 @@ import logging import nw -from PyQt5.QtWidgets import QMenuBar, QAction, QMessageBox from PyQt5.QtGui import QIcon +from PyQt5.QtWidgets import QMenuBar, QAction, QMessageBox from nw.enum import nwItemType, nwItemClass, nwDocAction diff --git a/nw/gui/statusbar.py b/nw/gui/statusbar.py index 6b29aef7..3e68690f 100644 --- a/nw/gui/statusbar.py +++ b/nw/gui/statusbar.py @@ -13,7 +13,6 @@ import logging import nw -from os import path from PyQt5.QtWidgets import QStatusBar, QLabel, QFrame logger = logging.getLogger(__name__) diff --git a/nw/gui/winmain.py b/nw/gui/winmain.py index 4fa127af..6eabeeb9 100644 --- a/nw/gui/winmain.py +++ b/nw/gui/winmain.py @@ -14,9 +14,12 @@ import logging import nw from os import path -from PyQt5.QtWidgets import qApp, QWidget, QMainWindow, QVBoxLayout, QFrame, QSplitter, QFileDialog, QStackedWidget, QShortcut, QMessageBox -from PyQt5.QtGui import QIcon, QPixmap, QColor from PyQt5.QtCore import Qt, QTimer +from PyQt5.QtGui import QIcon, QPixmap, QColor +from PyQt5.QtWidgets import ( + qApp, QWidget, QMainWindow, QVBoxLayout, QFrame, QSplitter, QFileDialog, + QShortcut, QMessageBox +) from nw.theme import Theme from nw.gui.doctree import GuiDocTree