Moved the document title element into the document instead of main GUI
This commit is contained in:
@@ -32,7 +32,7 @@ from time import time
|
|||||||
|
|
||||||
from PyQt5.QtCore import Qt, QTimer
|
from PyQt5.QtCore import Qt, QTimer
|
||||||
from PyQt5.QtWidgets import (
|
from PyQt5.QtWidgets import (
|
||||||
qApp, QTextEdit, QAction, QMenu, QShortcut, QMessageBox
|
qApp, QTextEdit, QAction, QMenu, QShortcut, QMessageBox, QLabel
|
||||||
)
|
)
|
||||||
from PyQt5.QtGui import (
|
from PyQt5.QtGui import (
|
||||||
QTextCursor, QTextOption, QKeySequence, QFont, QColor, QPalette,
|
QTextCursor, QTextOption, QKeySequence, QFont, QColor, QPalette,
|
||||||
@@ -41,6 +41,7 @@ from PyQt5.QtGui import (
|
|||||||
|
|
||||||
from nw.project import NWDoc
|
from nw.project import NWDoc
|
||||||
from nw.gui.tools import GuiDocHighlighter, WordCounter
|
from nw.gui.tools import GuiDocHighlighter, WordCounter
|
||||||
|
from nw.gui.elements.doctitlebar import GuiDocTitleBar
|
||||||
from nw.tools import NWSpellSimple
|
from nw.tools import NWSpellSimple
|
||||||
from nw.constants import nwUnicode, nwDocAction
|
from nw.constants import nwUnicode, nwDocAction
|
||||||
|
|
||||||
@@ -82,6 +83,10 @@ class GuiDocEditor(QTextEdit):
|
|||||||
self.qDocument.setDocumentMargin(self.mainConf.textMargin)
|
self.qDocument.setDocumentMargin(self.mainConf.textMargin)
|
||||||
self.qDocument.contentsChange.connect(self._docChange)
|
self.qDocument.contentsChange.connect(self._docChange)
|
||||||
|
|
||||||
|
# Document Title
|
||||||
|
self.docTitle = GuiDocTitleBar(self, self.theProject)
|
||||||
|
self.docTitle.setGeometry(0,0,self.docTitle.width(),self.docTitle.height())
|
||||||
|
|
||||||
# Syntax
|
# Syntax
|
||||||
self.hLight = GuiDocHighlighter(self.qDocument, self.theParent)
|
self.hLight = GuiDocHighlighter(self.qDocument, self.theParent)
|
||||||
|
|
||||||
@@ -150,7 +155,7 @@ class GuiDocEditor(QTextEdit):
|
|||||||
|
|
||||||
self.setDocumentChanged(False)
|
self.setDocumentChanged(False)
|
||||||
self.theParent.noticeBar.hideNote()
|
self.theParent.noticeBar.hideNote()
|
||||||
self.theParent.updateEditTitle()
|
self.docTitle.setTitleFromHandle(self.theHandle)
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@@ -265,7 +270,7 @@ class GuiDocEditor(QTextEdit):
|
|||||||
else:
|
else:
|
||||||
self.theParent.noticeBar.showNote("This document is read only.")
|
self.theParent.noticeBar.showNote("This document is read only.")
|
||||||
|
|
||||||
self.theParent.updateEditTitle()
|
self.docTitle.setTitleFromHandle(self.theHandle)
|
||||||
self.hLight.spellCheck = spTemp
|
self.hLight.spellCheck = spTemp
|
||||||
qApp.restoreOverrideCursor()
|
qApp.restoreOverrideCursor()
|
||||||
|
|
||||||
@@ -321,9 +326,16 @@ class GuiDocEditor(QTextEdit):
|
|||||||
else:
|
else:
|
||||||
tM = self.mainConf.textMargin
|
tM = self.mainConf.textMargin
|
||||||
|
|
||||||
|
tB = self.lineWidth()
|
||||||
|
tW = self.width() - 2*tB
|
||||||
|
tH = self.docTitle.height()
|
||||||
|
self.docTitle.setGeometry(tB, tB, tW, tH)
|
||||||
|
|
||||||
docFormat = self.qDocument.rootFrame().frameFormat()
|
docFormat = self.qDocument.rootFrame().frameFormat()
|
||||||
docFormat.setLeftMargin(tM)
|
docFormat.setLeftMargin(tM)
|
||||||
docFormat.setRightMargin(tM)
|
docFormat.setRightMargin(tM)
|
||||||
|
if docFormat.topMargin() < tH:
|
||||||
|
docFormat.setTopMargin(tH + 2)
|
||||||
|
|
||||||
# Updating root frame triggers a QTextDocument->contentsChange
|
# Updating root frame triggers a QTextDocument->contentsChange
|
||||||
# signal, which we do not want as it re-runs the syntax
|
# signal, which we do not want as it re-runs the syntax
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ import nw
|
|||||||
|
|
||||||
from PyQt5.QtCore import Qt
|
from PyQt5.QtCore import Qt
|
||||||
from PyQt5.QtGui import QPalette, QColor
|
from PyQt5.QtGui import QPalette, QColor
|
||||||
from PyQt5.QtWidgets import QLabel
|
from PyQt5.QtWidgets import QLabel, QFrame, QStyle
|
||||||
|
|
||||||
from nw.constants import nwUnicode
|
from nw.constants import nwUnicode
|
||||||
|
|
||||||
@@ -50,14 +50,22 @@ class GuiDocTitleBar(QLabel):
|
|||||||
self.theHandle = None
|
self.theHandle = None
|
||||||
|
|
||||||
self.setText("")
|
self.setText("")
|
||||||
self.setContentsMargins(8,2,8,2)
|
self.setIndent(0)
|
||||||
|
self.setMargin(0)
|
||||||
|
self.setContentsMargins(0,0,0,0)
|
||||||
self.setAutoFillBackground(True)
|
self.setAutoFillBackground(True)
|
||||||
self.setAlignment(Qt.AlignCenter)
|
self.setAlignment(Qt.AlignCenter)
|
||||||
self.setWordWrap(True)
|
self.setWordWrap(True)
|
||||||
docPalette = self.palette()
|
self.setFrameShape(QFrame.NoFrame)
|
||||||
docPalette.setColor(QPalette.Window, QColor(*self.theTheme.colBack))
|
self.setLineWidth(0)
|
||||||
docPalette.setColor(QPalette.Text, QColor(*self.theTheme.colText))
|
lblPalette = self.palette()
|
||||||
self.setPalette(docPalette)
|
lblPalette.setColor(QPalette.Window, QColor(*self.theTheme.colBack))
|
||||||
|
lblPalette.setColor(QPalette.Text, QColor(*self.theTheme.colText))
|
||||||
|
self.setPalette(lblPalette)
|
||||||
|
|
||||||
|
lblFont = self.font()
|
||||||
|
lblFont.setPointSizeF(0.9*self.theTheme.defFontSize)
|
||||||
|
self.setFont(lblFont)
|
||||||
|
|
||||||
logger.debug("DocTitleBar initialisation complete")
|
logger.debug("DocTitleBar initialisation complete")
|
||||||
|
|
||||||
@@ -103,7 +111,7 @@ class GuiDocTitleBar(QLabel):
|
|||||||
"""Capture a click on the title and ensure that the item is
|
"""Capture a click on the title and ensure that the item is
|
||||||
selected in the project tree.
|
selected in the project tree.
|
||||||
"""
|
"""
|
||||||
self.theParent.treeView.setSelectedHandle(self.theHandle)
|
self.theParent.theParent.treeView.setSelectedHandle(self.theHandle)
|
||||||
return
|
return
|
||||||
|
|
||||||
# END Class GuiDocTitleBar
|
# END Class GuiDocTitleBar
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ from PyQt5.QtGui import QTextOption, QFont, QPalette, QColor, QTextCursor
|
|||||||
|
|
||||||
from nw.convert import ToHtml
|
from nw.convert import ToHtml
|
||||||
from nw.constants import nwAlert, nwItemType, nwDocAction
|
from nw.constants import nwAlert, nwItemType, nwDocAction
|
||||||
|
from nw.gui.elements.doctitlebar import GuiDocTitleBar
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -56,6 +57,10 @@ class GuiDocViewer(QTextBrowser):
|
|||||||
self.setOpenExternalLinks(False)
|
self.setOpenExternalLinks(False)
|
||||||
self.initViewer()
|
self.initViewer()
|
||||||
|
|
||||||
|
# Document Title
|
||||||
|
self.docTitle = GuiDocTitleBar(self, self.theProject)
|
||||||
|
self.docTitle.setGeometry(0,0,self.docTitle.width(),self.docTitle.height())
|
||||||
|
|
||||||
theOpt = QTextOption()
|
theOpt = QTextOption()
|
||||||
if self.mainConf.doJustify:
|
if self.mainConf.doJustify:
|
||||||
theOpt.setAlignment(Qt.AlignJustify)
|
theOpt.setAlignment(Qt.AlignJustify)
|
||||||
@@ -74,7 +79,7 @@ class GuiDocViewer(QTextBrowser):
|
|||||||
self.clear()
|
self.clear()
|
||||||
self.setSearchPaths([""])
|
self.setSearchPaths([""])
|
||||||
self.theHandle = None
|
self.theHandle = None
|
||||||
self.theParent.updateViewTitle()
|
self.docTitle.setTitleFromHandle(self.theHandle)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def initViewer(self):
|
def initViewer(self):
|
||||||
@@ -137,10 +142,10 @@ class GuiDocViewer(QTextBrowser):
|
|||||||
self.verticalScrollBar().setValue(sPos)
|
self.verticalScrollBar().setValue(sPos)
|
||||||
self.theHandle = tHandle
|
self.theHandle = tHandle
|
||||||
self.theProject.setLastViewed(tHandle)
|
self.theProject.setLastViewed(tHandle)
|
||||||
|
self.docTitle.setTitleFromHandle(self.theHandle)
|
||||||
|
|
||||||
# Make sure the main GUI knows we changed the content
|
# Make sure the main GUI knows we changed the content
|
||||||
self.theParent.viewMeta.refreshReferences(tHandle)
|
self.theParent.viewMeta.refreshReferences(tHandle)
|
||||||
self.theParent.updateViewTitle()
|
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@@ -184,6 +189,26 @@ class GuiDocViewer(QTextBrowser):
|
|||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
##
|
||||||
|
# Events
|
||||||
|
##
|
||||||
|
|
||||||
|
def resizeEvent(self, theEvent):
|
||||||
|
"""Make sure the document title is the same width as the window.
|
||||||
|
"""
|
||||||
|
QTextBrowser.resizeEvent(self, theEvent)
|
||||||
|
|
||||||
|
tB = self.lineWidth()
|
||||||
|
tW = self.width() - 2*tB
|
||||||
|
tH = self.docTitle.height()
|
||||||
|
self.docTitle.setGeometry(tB, tB, tW, tH)
|
||||||
|
|
||||||
|
docFormat = self.qDocument.rootFrame().frameFormat()
|
||||||
|
if docFormat.topMargin() < tH:
|
||||||
|
docFormat.setTopMargin(tH + 2)
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
##
|
##
|
||||||
# Internal Functions
|
# Internal Functions
|
||||||
##
|
##
|
||||||
|
|||||||
@@ -110,6 +110,10 @@ class GuiTheme:
|
|||||||
self.getPixmap = self.theIcons.getPixmap
|
self.getPixmap = self.theIcons.getPixmap
|
||||||
self.loadDecoration = self.theIcons.loadDecoration
|
self.loadDecoration = self.theIcons.loadDecoration
|
||||||
|
|
||||||
|
# Extract Other Info
|
||||||
|
self.defFont = qApp.font()
|
||||||
|
self.defFontSize = self.defFont.pointSizeF()
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|||||||
+2
-28
@@ -43,7 +43,7 @@ from nw.gui import (
|
|||||||
GuiMainMenu, GuiMainStatus, GuiTheme, GuiDocTree, GuiDocEditor, GuiExport,
|
GuiMainMenu, GuiMainStatus, GuiTheme, GuiDocTree, GuiDocEditor, GuiExport,
|
||||||
GuiDocViewer, GuiDocDetails, GuiSearchBar, GuiNoticeBar, GuiDocViewDetails,
|
GuiDocViewer, GuiDocDetails, GuiSearchBar, GuiNoticeBar, GuiDocViewDetails,
|
||||||
GuiConfigEditor, GuiProjectEditor, GuiItemEditor, GuiProjectOutline,
|
GuiConfigEditor, GuiProjectEditor, GuiItemEditor, GuiProjectOutline,
|
||||||
GuiSessionLogView, GuiDocMerge, GuiDocSplit, GuiProjectLoad, GuiDocTitleBar
|
GuiSessionLogView, GuiDocMerge, GuiDocSplit, GuiProjectLoad
|
||||||
)
|
)
|
||||||
from nw.project import NWProject, NWDoc, NWItem, NWIndex, NWBackup
|
from nw.project import NWProject, NWDoc, NWItem, NWIndex, NWBackup
|
||||||
from nw.tools import countWords
|
from nw.tools import countWords
|
||||||
@@ -65,10 +65,6 @@ class GuiMain(QMainWindow):
|
|||||||
self.hasProject = False
|
self.hasProject = False
|
||||||
self.isZenMode = False
|
self.isZenMode = False
|
||||||
|
|
||||||
# Init early to avoid circular dependencies
|
|
||||||
self.docEditor = None
|
|
||||||
self.docViewer = None
|
|
||||||
|
|
||||||
# Some runtime info useful for debugging
|
# Some runtime info useful for debugging
|
||||||
logger.info("OS: %s" % self.mainConf.osType)
|
logger.info("OS: %s" % self.mainConf.osType)
|
||||||
logger.info("Kernel: %s" % self.mainConf.kernelVer)
|
logger.info("Kernel: %s" % self.mainConf.kernelVer)
|
||||||
@@ -94,8 +90,6 @@ class GuiMain(QMainWindow):
|
|||||||
# Main GUI Elements
|
# Main GUI Elements
|
||||||
self.statusBar = GuiMainStatus(self)
|
self.statusBar = GuiMainStatus(self)
|
||||||
self.noticeBar = GuiNoticeBar(self)
|
self.noticeBar = GuiNoticeBar(self)
|
||||||
self.viewTitle = GuiDocTitleBar(self, self.theProject)
|
|
||||||
self.editTitle = GuiDocTitleBar(self, self.theProject)
|
|
||||||
self.docEditor = GuiDocEditor(self, self.theProject)
|
self.docEditor = GuiDocEditor(self, self.theProject)
|
||||||
self.docViewer = GuiDocViewer(self, self.theProject)
|
self.docViewer = GuiDocViewer(self, self.theProject)
|
||||||
self.viewMeta = GuiDocViewDetails(self, self.theProject)
|
self.viewMeta = GuiDocViewDetails(self, self.theProject)
|
||||||
@@ -123,7 +117,6 @@ class GuiMain(QMainWindow):
|
|||||||
self.docEdit.setSpacing(0)
|
self.docEdit.setSpacing(0)
|
||||||
self.docEdit.addWidget(self.searchBar)
|
self.docEdit.addWidget(self.searchBar)
|
||||||
self.docEdit.addWidget(self.noticeBar)
|
self.docEdit.addWidget(self.noticeBar)
|
||||||
self.docEdit.addWidget(self.editTitle)
|
|
||||||
self.docEdit.addWidget(self.docEditor)
|
self.docEdit.addWidget(self.docEditor)
|
||||||
self.editPane.setLayout(self.docEdit)
|
self.editPane.setLayout(self.docEdit)
|
||||||
|
|
||||||
@@ -131,10 +124,9 @@ class GuiMain(QMainWindow):
|
|||||||
self.docView = QVBoxLayout()
|
self.docView = QVBoxLayout()
|
||||||
self.docView.setContentsMargins(0,0,0,0)
|
self.docView.setContentsMargins(0,0,0,0)
|
||||||
self.docView.setSpacing(0)
|
self.docView.setSpacing(0)
|
||||||
self.docView.addWidget(self.viewTitle)
|
|
||||||
self.docView.addWidget(self.docViewer)
|
self.docView.addWidget(self.docViewer)
|
||||||
self.docView.addWidget(self.viewMeta)
|
self.docView.addWidget(self.viewMeta)
|
||||||
self.docView.setStretch(1, 1)
|
self.docView.setStretch(0, 1)
|
||||||
self.viewPane.setLayout(self.docView)
|
self.viewPane.setLayout(self.docView)
|
||||||
|
|
||||||
self.splitView = QSplitter(Qt.Horizontal)
|
self.splitView = QSplitter(Qt.Horizontal)
|
||||||
@@ -614,24 +606,6 @@ class GuiMain(QMainWindow):
|
|||||||
logger.debug("Document action requested, but no document has focus")
|
logger.debug("Document action requested, but no document has focus")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def updateEditTitle(self):
|
|
||||||
"""Ensure the editor title is up to date with the editor text.
|
|
||||||
This should only be called by loadText and clearEditor in the
|
|
||||||
editor class.
|
|
||||||
"""
|
|
||||||
if self.docEditor is not None:
|
|
||||||
self.editTitle.setTitleFromHandle(self.docEditor.theHandle)
|
|
||||||
return
|
|
||||||
|
|
||||||
def updateViewTitle(self):
|
|
||||||
"""Ensure the viewer title is up to date with the viewer text.
|
|
||||||
This should only be called by loadText and clearViewer in the
|
|
||||||
viewer class.
|
|
||||||
"""
|
|
||||||
if self.docViewer is not None:
|
|
||||||
self.viewTitle.setTitleFromHandle(self.docViewer.theHandle)
|
|
||||||
return
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# Tree Item Actions
|
# Tree Item Actions
|
||||||
##
|
##
|
||||||
|
|||||||
Reference in New Issue
Block a user