+2
-2
@@ -48,7 +48,7 @@ class Config:
|
||||
self.guiTheme = "default"
|
||||
self.winGeometry = [1100, 650]
|
||||
self.treeColWidth = [120, 30, 50]
|
||||
self.mainPanePos = [300, 800]
|
||||
self.mainPanePos = [300, 400, 400]
|
||||
|
||||
## Project
|
||||
self.autoSaveProj = 60
|
||||
@@ -138,7 +138,7 @@ class Config:
|
||||
)
|
||||
if confParser.has_option(cnfSec,"mainpane"):
|
||||
self.mainPanePos = self.unpackList(
|
||||
confParser.get(cnfSec,"mainpane"), 2, self.mainPanePos
|
||||
confParser.get(cnfSec,"mainpane"), 3, self.mainPanePos
|
||||
)
|
||||
|
||||
## Project
|
||||
|
||||
+13
-3
@@ -79,7 +79,8 @@ class GuiDocEditor(QTextEdit):
|
||||
if self.mainConf.doJustify:
|
||||
self.theDoc.setDefaultTextOption(QTextOption(Qt.AlignJustify))
|
||||
|
||||
self.setMinimumWidth(400)
|
||||
self.setReadOnly(True)
|
||||
self.setMinimumWidth(300)
|
||||
self.setAcceptRichText(False)
|
||||
self.setFontPointSize(self.mainConf.textSize)
|
||||
|
||||
@@ -165,11 +166,20 @@ class GuiDocEditor(QTextEdit):
|
||||
set to True.
|
||||
"""
|
||||
if self.mainConf.textFixedW:
|
||||
vBar = self.verticalScrollBar()
|
||||
if vBar.isVisible():
|
||||
sW = vBar.width()
|
||||
else:
|
||||
sW = 0
|
||||
tW = self.width()
|
||||
sW = self.verticalScrollBar().width()
|
||||
tM = int((tW - sW - self.mainConf.textWidth)/2)
|
||||
mTB = self.mainConf.textMargin[0]
|
||||
self.setViewportMargins(tM,mTB,0,mTB)
|
||||
if tM >= 10:
|
||||
self.setViewportMargins(tM,mTB,0,mTB)
|
||||
self.setLineWrapColumnOrWidth(self.mainConf.textWidth)
|
||||
else:
|
||||
self.setViewportMargins(10,mTB,0,mTB)
|
||||
self.setLineWrapColumnOrWidth(tW - sW - 20)
|
||||
return
|
||||
|
||||
def docAction(self, theAction):
|
||||
|
||||
@@ -28,6 +28,11 @@ class GuiDocViewer(QTextBrowser):
|
||||
self.mainConf = nw.CONFIG
|
||||
self.theParent = theParent
|
||||
|
||||
self.theDoc = self.document()
|
||||
|
||||
self.theDoc.setDocumentMargin(self.mainConf.textMargin[0])
|
||||
self.setMinimumWidth(300)
|
||||
|
||||
logger.debug("DocViewer initialisation complete")
|
||||
|
||||
return
|
||||
|
||||
+9
-9
@@ -98,7 +98,7 @@ class GuiMainMenu(QMenuBar):
|
||||
self.theProject.setSpellCheck(self.toolsSpellCheck.isChecked())
|
||||
self.theParent.docEditor.setSpellCheck(self.toolsSpellCheck.isChecked())
|
||||
logger.verbose("Spell check is set to %s" % str(self.theProject.spellCheck))
|
||||
return
|
||||
return True
|
||||
|
||||
def _showAbout(self):
|
||||
msgBox = QMessageBox()
|
||||
@@ -251,10 +251,10 @@ class GuiMainMenu(QMenuBar):
|
||||
self.docuMenu.addSeparator()
|
||||
|
||||
# Document > Preview
|
||||
menuItem = QAction(QIcon.fromTheme("text-html"), "Preview Document", self)
|
||||
menuItem.setStatusTip("Preview Document")
|
||||
menuItem = QAction(QIcon.fromTheme("text-html"), "View Document", self)
|
||||
menuItem.setStatusTip("View Document in HTML")
|
||||
menuItem.setShortcut("Ctrl+R")
|
||||
menuItem.triggered.connect(self.theParent._previewDocument)
|
||||
menuItem.triggered.connect(self.theParent.viewDocument)
|
||||
self.docuMenu.addAction(menuItem)
|
||||
|
||||
# # Document > Separator
|
||||
@@ -292,11 +292,11 @@ class GuiMainMenu(QMenuBar):
|
||||
self.viewMenu.addAction(menuItem)
|
||||
|
||||
# # View > Document Pane 2
|
||||
# menuItem = QAction(QIcon.fromTheme("go-last"), "Right Document Pane", self)
|
||||
# menuItem.setStatusTip("Move to Right Document Pane")
|
||||
# menuItem.setShortcut("Ctrl+3")
|
||||
# menuItem.triggered.connect(lambda : self.theParent.setFocus(3))
|
||||
# self.viewMenu.addAction(menuItem)
|
||||
menuItem = QAction(QIcon.fromTheme("go-last"), "Right Document Pane", self)
|
||||
menuItem.setStatusTip("Move to Right Document Pane")
|
||||
menuItem.setShortcut("Ctrl+3")
|
||||
menuItem.triggered.connect(lambda : self.theParent.setFocus(3))
|
||||
self.viewMenu.addAction(menuItem)
|
||||
|
||||
return
|
||||
|
||||
|
||||
+41
-21
@@ -64,12 +64,6 @@ class GuiMain(QMainWindow):
|
||||
self.importLabels = []
|
||||
|
||||
# Assemble Main Window
|
||||
self.stackPane = QStackedWidget()
|
||||
self.stackNone = self.stackPane.addWidget(QWidget())
|
||||
self.stackDoc = self.stackPane.addWidget(self.docEditor)
|
||||
self.stackView = self.stackPane.addWidget(self.docViewer)
|
||||
self.stackPane.setCurrentIndex(self.stackNone)
|
||||
|
||||
self.treePane = QFrame()
|
||||
self.treeBox = QVBoxLayout()
|
||||
self.treeBox.addWidget(self.treeView)
|
||||
@@ -78,12 +72,26 @@ class GuiMain(QMainWindow):
|
||||
|
||||
self.splitMain = QSplitter(Qt.Horizontal)
|
||||
self.splitMain.addWidget(self.treePane)
|
||||
self.splitMain.addWidget(self.stackPane)
|
||||
self.splitMain.addWidget(self.docEditor)
|
||||
self.splitMain.addWidget(self.docViewer)
|
||||
self.splitMain.setSizes(self.mainConf.mainPanePos)
|
||||
self.splitMain.splitterMoved.connect(self._splitMainMove)
|
||||
|
||||
self.setCentralWidget(self.splitMain)
|
||||
|
||||
self.idxTree = self.splitMain.indexOf(self.treePane)
|
||||
self.idxEditor = self.splitMain.indexOf(self.docEditor)
|
||||
self.idxViewer = self.splitMain.indexOf(self.docViewer)
|
||||
|
||||
self.splitMain.setCollapsible(self.idxTree, False)
|
||||
self.splitMain.setCollapsible(self.idxEditor, False)
|
||||
self.splitMain.setCollapsible(self.idxViewer, True)
|
||||
|
||||
self.docViewer.setVisible(False)
|
||||
pPos = self.mainConf.mainPanePos
|
||||
tPos = [pPos[0], pPos[1]+pPos[2]]
|
||||
self.splitMain.setSizes(tPos)
|
||||
|
||||
# Build GUI Elements
|
||||
self.treeView.itemSelectionChanged.connect(self._treeSingleClick)
|
||||
self.treeView.itemDoubleClicked.connect(self._treeDoubleClick)
|
||||
@@ -186,6 +194,10 @@ class GuiMain(QMainWindow):
|
||||
self.docEditor.setPwl(path.join(self.theProject.projMeta,"wordlist.txt"))
|
||||
self.docEditor.setSpellCheck(self.theProject.spellCheck)
|
||||
self.mainMenu.updateMenu()
|
||||
if self.theProject.lastEdited is not None:
|
||||
self.openDocument(self.theProject.lastEdited)
|
||||
if self.theProject.lastViewed is not None:
|
||||
self.viewDocument(self.theProject.lastViewed)
|
||||
return True
|
||||
|
||||
def saveProject(self):
|
||||
@@ -204,11 +216,12 @@ class GuiMain(QMainWindow):
|
||||
def openDocument(self, tHandle):
|
||||
if self._takeDocumentAction():
|
||||
self.saveDocument()
|
||||
self.stackPane.setCurrentIndex(self.stackDoc)
|
||||
self.docEditor.setText(self.theDocument.openDocument(tHandle))
|
||||
self.docEditor.setReadOnly(False)
|
||||
self.docEditor.setCursorPosition(self.theDocument.theItem.cursorPos)
|
||||
self.docEditor.changeWidth()
|
||||
self.docEditor.setFocus()
|
||||
self.theProject.setLastEdited(tHandle)
|
||||
return True
|
||||
|
||||
def saveDocument(self):
|
||||
@@ -223,24 +236,34 @@ class GuiMain(QMainWindow):
|
||||
self.docEditor.setDocumentChanged(False)
|
||||
return True
|
||||
|
||||
def _previewDocument(self):
|
||||
def viewDocument(self, tHandle=None):
|
||||
|
||||
tHandle = self.treeView.getSelectedHandle()
|
||||
if tHandle is None:
|
||||
tHandle = self.treeView.getSelectedHandle()
|
||||
if tHandle is None:
|
||||
logger.warning("No document selected")
|
||||
return
|
||||
return False
|
||||
|
||||
tItem = self.theProject.getItem(tHandle)
|
||||
if tItem.itemType == nwItemType.FILE:
|
||||
logger.debug("Generating preview for item %s" % tHandle)
|
||||
self.stackPane.setCurrentIndex(self.stackView)
|
||||
aDoc = ToHtml(self.theProject, self)
|
||||
aDoc.setText(tHandle)
|
||||
aDoc.tokenizeText()
|
||||
aDoc.doConvert()
|
||||
self.docViewer.setHtml(aDoc.theResult)
|
||||
self.theProject.setLastViewed(tHandle)
|
||||
|
||||
return
|
||||
bPos = self.splitMain.sizes()
|
||||
self.docViewer.setVisible(True)
|
||||
if bPos[2] == 0:
|
||||
bWidth = bPos[1]+bPos[2]
|
||||
bPos[1] = int(bWidth/2)
|
||||
bPos[2] = bWidth-bPos[1]
|
||||
self.splitMain.setSizes(bPos)
|
||||
self.docEditor.changeWidth()
|
||||
|
||||
return True
|
||||
|
||||
##
|
||||
# Tree Item Actions
|
||||
@@ -326,8 +349,9 @@ class GuiMain(QMainWindow):
|
||||
if paneNo == 1:
|
||||
self.treeView.setFocus()
|
||||
elif paneNo == 2:
|
||||
if self.stackPane.currentIndex() == self.stackDoc:
|
||||
self.docEditor.setFocus()
|
||||
self.docEditor.setFocus()
|
||||
elif paneNo == 3:
|
||||
self.docViewer.setFocus()
|
||||
return
|
||||
|
||||
##
|
||||
@@ -361,8 +385,6 @@ class GuiMain(QMainWindow):
|
||||
return True
|
||||
|
||||
def _takeDocumentAction(self):
|
||||
if self.stackPane.currentIndex() != self.stackDoc:
|
||||
return False
|
||||
if self.theDocument.theItem is None:
|
||||
return False
|
||||
if not self.docEditor.docChanged:
|
||||
@@ -397,8 +419,7 @@ class GuiMain(QMainWindow):
|
||||
"""Extend QMainWindow.resizeEvent to signal dependent GUI elements that its pane may have changed size.
|
||||
"""
|
||||
QMainWindow.resizeEvent(self,theEvent)
|
||||
if self.stackPane.currentIndex() == self.stackDoc:
|
||||
self.docEditor.changeWidth()
|
||||
self.docEditor.changeWidth()
|
||||
return
|
||||
|
||||
def closeEvent(self, theEvent):
|
||||
@@ -441,8 +462,7 @@ class GuiMain(QMainWindow):
|
||||
def _splitMainMove(self, pWidth, pHeight):
|
||||
"""Alert dependent GUI elements that the main pane splitter has been moved.
|
||||
"""
|
||||
if self.stackPane.currentIndex() == self.stackDoc:
|
||||
self.docEditor.changeWidth()
|
||||
self.docEditor.changeWidth()
|
||||
return
|
||||
|
||||
# END Class GuiMain
|
||||
|
||||
+19
-1
@@ -56,6 +56,8 @@ class NWProject():
|
||||
self.spellCheck = False
|
||||
self.statusCols = None
|
||||
self.importCols = None
|
||||
self.lastEdited = None
|
||||
self.lastViewed = None
|
||||
|
||||
# Set Defaults
|
||||
self.clearProject()
|
||||
@@ -209,6 +211,10 @@ class NWProject():
|
||||
if xItem.text is None: continue
|
||||
if xItem.tag == "spellCheck":
|
||||
self.spellCheck = checkBool(xItem.text,False)
|
||||
if xItem.tag == "lastEdited":
|
||||
self.lastEdited = checkString(xItem.text,None,True)
|
||||
if xItem.tag == "lastViewed":
|
||||
self.lastViewed = checkString(xItem.text,None,True)
|
||||
elif xChild.tag == "content":
|
||||
logger.debug("Found project content")
|
||||
for xItem in xChild:
|
||||
@@ -267,6 +273,8 @@ class NWProject():
|
||||
# Save Project Settings
|
||||
xSettings = etree.SubElement(nwXML,"settings")
|
||||
self._saveProjectValue(xSettings,"spellCheck",self.spellCheck)
|
||||
self._saveProjectValue(xSettings,"lastEdited",self.lastEdited)
|
||||
self._saveProjectValue(xSettings,"lastViewed",self.lastViewed)
|
||||
|
||||
# Save Tree Content
|
||||
logger.debug("Writing project content")
|
||||
@@ -335,10 +343,20 @@ class NWProject():
|
||||
self.setProjectChanged(True)
|
||||
return True
|
||||
|
||||
def setLastEdited(self, tHandle):
|
||||
self.lastEdited = tHandle
|
||||
self.setProjectChanged(True)
|
||||
return True
|
||||
|
||||
def setLastViewed(self, tHandle):
|
||||
self.lastViewed = tHandle
|
||||
self.setProjectChanged(True)
|
||||
return True
|
||||
|
||||
def setProjectChanged(self, bValue):
|
||||
self.projChanged = bValue
|
||||
self.theParent.setProjectStatus(self.projChanged)
|
||||
return
|
||||
return self.projChanged
|
||||
|
||||
##
|
||||
# Get Functions
|
||||
|
||||
@@ -10,7 +10,7 @@ QTextEdit {
|
||||
QTextBrowser {
|
||||
background-color: #141414;
|
||||
color: #c7cfd0;
|
||||
padding: 40px;
|
||||
/* padding: 40px; */
|
||||
}
|
||||
|
||||
QTreeView, QHeaderView {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<novelWriterXML appVersion="0.1.2" fileVersion="1.0" timeStamp="2019-05-18 13:47:34">
|
||||
<novelWriterXML appVersion="0.1.3" fileVersion="1.0" timeStamp="2019-05-18 18:12:49">
|
||||
<project>
|
||||
<name>Sample Project</name>
|
||||
<title>Sample Project</title>
|
||||
@@ -8,6 +8,8 @@
|
||||
</project>
|
||||
<settings>
|
||||
<spellCheck>False</spellCheck>
|
||||
<lastEdited>96b68994dfa3d</lastEdited>
|
||||
<lastViewed>96b68994dfa3d</lastViewed>
|
||||
</settings>
|
||||
<content count="15">
|
||||
<item handle="7031beac91f75" order="0" parent="None">
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
</project>
|
||||
<settings>
|
||||
<spellCheck>False</spellCheck>
|
||||
<lastEdited>None</lastEdited>
|
||||
<lastViewed>None</lastViewed>
|
||||
</settings>
|
||||
<content count="6">
|
||||
<item handle="73475cb40a568" order="0" parent="None">
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
</project>
|
||||
<settings>
|
||||
<spellCheck>False</spellCheck>
|
||||
<lastEdited>None</lastEdited>
|
||||
<lastViewed>None</lastViewed>
|
||||
</settings>
|
||||
<content count="6">
|
||||
<item handle="73475cb40a568" order="0" parent="None">
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
</project>
|
||||
<settings>
|
||||
<spellCheck>False</spellCheck>
|
||||
<lastEdited>None</lastEdited>
|
||||
<lastViewed>None</lastViewed>
|
||||
</settings>
|
||||
<content count="6">
|
||||
<item handle="73475cb40a568" order="0" parent="None">
|
||||
|
||||
@@ -4,7 +4,7 @@ timestamp = 2019-05-18 15:06:44
|
||||
[Sizes]
|
||||
geometry = 1100, 650
|
||||
treecols = 120, 30, 50
|
||||
mainpane = 300, 800
|
||||
mainpane = 300, 400, 400
|
||||
|
||||
[Project]
|
||||
autosaveproject = 60
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
</project>
|
||||
<settings>
|
||||
<spellCheck>False</spellCheck>
|
||||
<lastEdited>None</lastEdited>
|
||||
<lastViewed>None</lastViewed>
|
||||
</settings>
|
||||
<content count="6">
|
||||
<item handle="73475cb40a568" order="None" parent="None">
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
</project>
|
||||
<settings>
|
||||
<spellCheck>False</spellCheck>
|
||||
<lastEdited>None</lastEdited>
|
||||
<lastViewed>None</lastViewed>
|
||||
</settings>
|
||||
<content count="10">
|
||||
<item handle="73475cb40a568" order="None" parent="None">
|
||||
|
||||
@@ -70,7 +70,7 @@ def testConfigSetMainPanePos(nwTemp,nwRef):
|
||||
refConf = path.join(nwRef, "novelwriter.conf")
|
||||
assert theConf.setMainPanePos([0, 0])
|
||||
assert theConf.confChanged
|
||||
assert theConf.setMainPanePos([300, 800])
|
||||
assert theConf.setMainPanePos([300, 400, 400])
|
||||
assert theConf.saveConfig()
|
||||
assert cmpFiles(tmpConf, refConf, [2])
|
||||
assert not theConf.confChanged
|
||||
|
||||
@@ -47,6 +47,8 @@ def testMainWindows(qtbot, nwTempGUI, nwRef):
|
||||
nwGUI.treeView._getTreeItem("25fc0e7096fc6").setExpanded(True)
|
||||
nwGUI.treeView._getTreeItem("31489056e0916").setSelected(True)
|
||||
assert nwGUI.openSelectedItem()
|
||||
nwGUI.mainMenu.toolsSpellCheck.setChecked(True)
|
||||
assert nwGUI.mainMenu._toggleSpellCheck()
|
||||
|
||||
# Type something into the document
|
||||
nwGUI.docEditor.setFocus()
|
||||
@@ -103,6 +105,10 @@ def testMainWindows(qtbot, nwTempGUI, nwRef):
|
||||
assert nwGUI.saveDocument()
|
||||
qtbot.wait(stepDelay)
|
||||
|
||||
# Open and view the edited document
|
||||
assert nwGUI.openDocument("31489056e0916")
|
||||
assert nwGUI.viewDocument("31489056e0916")
|
||||
|
||||
# Check the files
|
||||
projFile = path.join(nwTempGUI,"nwProject.nwx")
|
||||
assert cmpFiles(projFile, path.join(nwRef,"gui","1_nwProject.nwx"), [2])
|
||||
|
||||
Reference in New Issue
Block a user