Moved the code for browsing for projects to the open projects dialog

This commit is contained in:
Veronica K. B. Olsen
2020-05-24 19:37:59 +02:00
parent f020447166
commit 1252d9728a
2 changed files with 49 additions and 42 deletions
+36 -20
View File
@@ -28,25 +28,27 @@
import logging
import nw
from os import path
from datetime import datetime
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QKeySequence
from PyQt5.QtWidgets import (
QDialog, QHBoxLayout, QVBoxLayout, QGridLayout, QPushButton, QTreeWidget,
QAbstractItemView, QTreeWidgetItem, QDialogButtonBox, QLabel, QShortcut
QAbstractItemView, QTreeWidgetItem, QDialogButtonBox, QLabel, QShortcut,
QFileDialog, QLineEdit
)
from nw.common import formatInt
from nw.constants import nwFiles
logger = logging.getLogger(__name__)
class GuiProjectLoad(QDialog):
NONE_STATE = 0
BROWSE_STATE = 1
NEW_STATE = 2
OPEN_STATE = 3
NONE_STATE = 0
NEW_STATE = 1
OPEN_STATE = 2
def __init__(self, theParent):
QDialog.__init__(self, theParent)
@@ -88,16 +90,23 @@ class GuiProjectLoad(QDialog):
treeHead.setTextAlignment(1, Qt.AlignRight)
treeHead.setTextAlignment(2, Qt.AlignRight)
self.lblRecent = QLabel("<b>Recently Opened:</b>")
self.lblPath = QLabel("<b>Path:</b>")
self.selPath = QLabel("")
self.selPath.setWordWrap(True)
self.lblRecent = QLabel("<b>Recently Opened Projects</b>")
self.lblPath = QLabel("<b>Path</b>")
self.selPath = QLineEdit("")
self.selPath.setEnabled(False)
self.projectForm.addWidget(self.lblRecent, 0, 0, 1, 2)
self.projectForm.addWidget(self.listBox, 1, 0, 1, 2)
self.projectForm.addWidget(self.lblPath, 2, 0, 1, 1, Qt.AlignTop)
self.projectForm.addWidget(self.selPath, 2, 1, 1, 1, Qt.AlignTop)
self.browseButton = QPushButton("...")
self.browseButton.setMaximumWidth(30)
self.browseButton.clicked.connect(self._doBrowse)
self.projectForm.addWidget(self.lblRecent, 0, 0, 1, 3)
self.projectForm.addWidget(self.listBox, 1, 0, 1, 3)
self.projectForm.addWidget(self.lblPath, 2, 0, 1, 1)
self.projectForm.addWidget(self.selPath, 2, 1, 1, 1)
self.projectForm.addWidget(self.browseButton, 2, 2, 1, 1)
self.projectForm.setColumnStretch(0, 0)
self.projectForm.setColumnStretch(1, 1)
self.projectForm.setColumnStretch(2, 0)
self.projectForm.setVerticalSpacing(4)
self.projectForm.setHorizontalSpacing(8)
@@ -110,9 +119,6 @@ class GuiProjectLoad(QDialog):
self.newButton = self.buttonBox.addButton("New", QDialogButtonBox.ActionRole)
self.newButton.clicked.connect(self._doNewProject)
self.browseButton = self.buttonBox.addButton("Browse", QDialogButtonBox.ActionRole)
self.browseButton.clicked.connect(self._doBrowse)
self.outerBox.addLayout(self.innerBox)
self.outerBox.addWidget(self.buttonBox)
self.setLayout(self.outerBox)
@@ -160,10 +166,20 @@ class GuiProjectLoad(QDialog):
project browser dialog.
"""
logger.verbose("GuiProjectLoad browse button clicked")
self._saveDialogState()
self.openPath = None
self.openState = self.BROWSE_STATE
self.accept()
if self.mainConf.showGUI:
dlgOpt = QFileDialog.Options()
dlgOpt |= QFileDialog.DontUseNativeDialog
projFile, _ = QFileDialog.getOpenFileName(
self, "Open novelWriter Project", "",
"novelWriter Project File (%s);;All Files (*)" % nwFiles.PROJ_FILE,
options=dlgOpt
)
if projFile:
thePath = path.abspath(path.dirname(projFile))
self.selPath.setText(thePath)
self.openPath = thePath
self.openState = self.OPEN_STATE
self.accept()
return
def _doClose(self):
+13 -22
View File
@@ -264,8 +264,6 @@ class GuiMain(QMainWindow):
if dlgProj.result() == QDialog.Accepted:
if dlgProj.openState == GuiProjectLoad.OPEN_STATE:
self.openProject(dlgProj.openPath)
elif dlgProj.openState == GuiProjectLoad.BROWSE_STATE:
self.openProject(dlgProj.openPath)
elif dlgProj.openState == GuiProjectLoad.NEW_STATE:
self.newProject()
@@ -354,13 +352,11 @@ class GuiMain(QMainWindow):
return saveOK
def openProject(self, projFile=None):
def openProject(self, projFile):
"""Open a project. The parameter projFile is passed from the
open recent projects menu, so it can be set. If not, we pop the
dialog.
open recent projects menu, and must be set to be forwarded to
the project class. Otherwise, we just return.
"""
if projFile is None:
projFile = self.openProjectDialog()
if projFile is None:
return False
@@ -484,6 +480,8 @@ class GuiMain(QMainWindow):
return True
def saveDocument(self):
"""Save the current documents.
"""
if self.hasProject:
self.docEditor.saveText()
return True
@@ -491,7 +489,6 @@ class GuiMain(QMainWindow):
def viewDocument(self, tHandle=None):
"""Load a document for viewing in the view panel.
"""
if tHandle is None:
tHandle = self.treeView.getSelectedHandle()
if tHandle is None:
@@ -521,7 +518,6 @@ class GuiMain(QMainWindow):
"""Import the text contained in an out-of-project text file, and
insert the text into the currently open document.
"""
lastPath = self.mainConf.lastPath
extFilter = [
@@ -610,6 +606,8 @@ class GuiMain(QMainWindow):
##
def openSelectedItem(self):
"""Open the selected documents.
"""
tHandle = self.treeView.getSelectedHandle()
if tHandle is None:
logger.warning("No item selected")
@@ -626,6 +624,8 @@ class GuiMain(QMainWindow):
return True
def editItem(self):
"""Open the edit item dialog.
"""
tHandle = self.treeView.getSelectedHandle()
if tHandle is None:
logger.warning("No item selected")
@@ -654,7 +654,6 @@ class GuiMain(QMainWindow):
def rebuildIndex(self):
"""Rebuild the entire index.
"""
if not self.hasProject:
return False
@@ -708,19 +707,9 @@ class GuiMain(QMainWindow):
# Main Dialogs
##
def openProjectDialog(self):
dlgOpt = QFileDialog.Options()
dlgOpt |= QFileDialog.DontUseNativeDialog
projFile, _ = QFileDialog.getOpenFileName(
self, "Open novelWriter Project", "",
"novelWriter Project File (%s);;All Files (*)" % nwFiles.PROJ_FILE,
options=dlgOpt
)
if projFile:
return projFile
return None
def saveProjectDialog(self):
"""Select where to save project.
"""
dlgOpt = QFileDialog.Options()
dlgOpt |= QFileDialog.ShowDirsOnly
dlgOpt |= QFileDialog.DontUseNativeDialog
@@ -732,6 +721,8 @@ class GuiMain(QMainWindow):
return None
def newProjectDialog(self):
"""Select where to save new project.
"""
dlgOpt = QFileDialog.Options()
dlgOpt |= QFileDialog.ShowDirsOnly
dlgOpt |= QFileDialog.DontUseNativeDialog