Connect the change of view methods to all relevant actions

This commit is contained in:
Veronica Berglyd Olsen
2022-05-14 18:27:18 +02:00
parent 864b06a0e7
commit e8a0a6d5f9
4 changed files with 48 additions and 38 deletions
+8 -7
View File
@@ -132,13 +132,14 @@ class nwState(Enum):
class nwView(Enum):
PROJECT = 0
NOVEL = 1
OUTLINE = 2
DETAILS = 3
STATS = 4
SET_PROJ = 5
SET_MAIN = 6
EDITOR = 0
PROJECT = 1
NOVEL = 2
OUTLINE = 3
DETAILS = 4
STATS = 5
SET_PROJ = 6
SET_MAIN = 7
# END Enum nwView
+1
View File
@@ -115,6 +115,7 @@ class GuiItemDetails(QWidget):
self.usageData = QLabel("")
self.usageData.setFont(fntValue)
self.usageData.setAlignment(Qt.AlignLeft)
self.usageData.setWordWrap(True)
# Character Count
self.cCountName = QLabel(" "+self.tr("Characters"))
+5 -1
View File
@@ -26,11 +26,12 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
import logging
import novelwriter
from PyQt5.QtCore import Qt, QT_TRANSLATE_NOOP
from PyQt5.QtCore import Qt, QT_TRANSLATE_NOOP, pyqtSignal
from PyQt5.QtWidgets import (
QScrollArea, QWidget, QGridLayout, QHBoxLayout, QGroupBox, QLabel
)
from novelwriter.enum import nwView
from novelwriter.common import checkInt
from novelwriter.constants import trConst, nwKeyWords, nwLabels
@@ -46,6 +47,8 @@ class GuiOutlineDetails(QScrollArea):
"H4": QT_TRANSLATE_NOOP("GuiOutlineDetails", "Section"),
}
viewChangeRequested = pyqtSignal(nwView)
def __init__(self, theParent):
QScrollArea.__init__(self, theParent)
@@ -329,6 +332,7 @@ class GuiOutlineDetails(QScrollArea):
if len(theLink) > 0:
theBits = theLink.split("=")
if len(theBits) == 2:
self.viewChangeRequested.emit(nwView.PROJECT)
self.theParent.docViewer.loadFromTag(theBits[1])
return
+34 -30
View File
@@ -128,6 +128,7 @@ class GuiMain(QMainWindow):
self.treeView.wordCountsChanged.connect(self._updateStatusWordCount)
self.viewsBar.viewChangeRequested.connect(self._changeView)
self.projMeta.viewChangeRequested.connect(self._changeView)
# Project Tree Stack
self.projStack = QStackedWidget()
@@ -161,32 +162,32 @@ class GuiMain(QMainWindow):
self.splitOutline.addWidget(self.projMeta)
self.splitOutline.setSizes(self.mainConf.getOutlinePanePos())
# Main Tabs : Editor / Outline
# Splitter : Project Tree / Main Tabs
self.splitMain = QSplitter(Qt.Horizontal)
self.splitMain.setContentsMargins(0, 0, mPx, 0)
self.splitMain.addWidget(self.treePane)
self.splitMain.addWidget(self.splitDocs)
self.splitMain.setSizes(self.mainConf.getMainPanePos())
# Main Stack : Editor / Outline
self.mainStack = QStackedWidget()
self.mainStack.addWidget(self.splitDocs)
self.mainStack.addWidget(self.splitMain)
self.mainStack.addWidget(self.splitOutline)
self.mainStack.currentChanged.connect(self._mainStackChanged)
# Splitter : Project Tree / Main Tabs
self.splitMain = QSplitter(Qt.Horizontal)
self.splitMain.setContentsMargins(mPx, mPx, mPx, mPx)
self.splitMain.addWidget(self.treePane)
self.splitMain.addWidget(self.mainStack)
self.splitMain.setSizes(self.mainConf.getMainPanePos())
# Indices of Splitter Widgets
self.idxTree = self.splitMain.indexOf(self.treePane)
self.idxMain = self.splitMain.indexOf(self.mainStack)
self.idxMain = self.splitMain.indexOf(self.splitDocs)
self.idxEditor = self.splitDocs.indexOf(self.docEditor)
self.idxViewer = self.splitDocs.indexOf(self.splitView)
self.idxViewDoc = self.splitView.indexOf(self.docViewer)
self.idxViewMeta = self.splitView.indexOf(self.viewMeta)
# Indices of Tab Widgets
self.idxTabEdit = self.mainStack.indexOf(self.splitDocs)
self.idxTabProj = self.mainStack.indexOf(self.splitOutline)
self.idxTreeView = self.projStack.indexOf(self.treeView)
self.idxNovelView = self.projStack.indexOf(self.novelView)
self.idxEditorView = self.mainStack.indexOf(self.splitMain)
self.idxOutlineView = self.mainStack.indexOf(self.splitOutline)
self.idxTreeView = self.projStack.indexOf(self.treeView)
self.idxNovelView = self.projStack.indexOf(self.novelView)
# Splitter Behaviour
self.splitMain.setCollapsible(self.idxTree, False)
@@ -205,7 +206,7 @@ class GuiMain(QMainWindow):
# Set Main Window Elements
self.setMenuBar(self.mainMenu)
self.setCentralWidget(self.splitMain)
self.setCentralWidget(self.mainStack)
self.setStatusBar(self.statusBar)
self.addToolBar(Qt.LeftToolBarArea, self.viewsBar)
@@ -418,7 +419,7 @@ class GuiMain(QMainWindow):
self.theIndex.clearIndex()
self.clearGUI()
self.hasProject = False
self.mainStack.setCurrentWidget(self.splitDocs)
self._changeView(nwView.PROJECT)
return saveOK
@@ -434,7 +435,7 @@ class GuiMain(QMainWindow):
return False
# Switch main tab to editor view
self.mainStack.setCurrentWidget(self.splitDocs)
self._changeView(nwView.PROJECT)
# Try to open the project
if not self.theProject.openProject(projFile):
@@ -573,7 +574,7 @@ class GuiMain(QMainWindow):
return False
self.closeDocument()
self.mainStack.setCurrentWidget(self.splitDocs)
self._changeView(nwView.EDITOR)
if self.docEditor.loadText(tHandle, tLine):
if changeFocus:
self.docEditor.setFocus()
@@ -656,7 +657,7 @@ class GuiMain(QMainWindow):
return False
# Make sure main tab is in Editor view
self.mainStack.setCurrentWidget(self.splitDocs)
self._changeView(nwView.EDITOR)
logger.debug("Viewing document with handle '%s'", tHandle)
if self.docViewer.loadText(tHandle):
@@ -902,7 +903,7 @@ class GuiMain(QMainWindow):
return False
logger.verbose("Forcing a rebuild of the Project Outline")
self.mainStack.setCurrentWidget(self.splitOutline)
self._changeView(nwView.OUTLINE)
self.projView.refreshTree(overRide=True)
return True
@@ -1221,13 +1222,13 @@ class GuiMain(QMainWindow):
elif tabIdx == self.idxNovelView:
self.novelView.setFocus()
elif paneNo == nwWidget.EDITOR:
self.mainStack.setCurrentWidget(self.splitDocs)
self._changeView(nwView.EDITOR)
self.docEditor.setFocus()
elif paneNo == nwWidget.VIEWER:
self.mainStack.setCurrentWidget(self.splitDocs)
self._changeView(nwView.EDITOR)
self.docViewer.setFocus()
elif paneNo == nwWidget.OUTLINE:
self.mainStack.setCurrentWidget(self.splitOutline)
self._changeView(nwView.OUTLINE)
self.projView.setFocus()
return
@@ -1260,7 +1261,6 @@ class GuiMain(QMainWindow):
self.mainMenu.setFocusMode(self.isFocusMode)
if self.isFocusMode:
logger.debug("Activating Focus Mode")
self.mainStack.setCurrentWidget(self.splitDocs)
self.switchFocus(nwWidget.EDITOR)
else:
logger.debug("Deactivating Focus Mode")
@@ -1487,12 +1487,16 @@ class GuiMain(QMainWindow):
def _changeView(self, view):
"""Handle the requested change of view from the GuiViewBar.
"""
if view == nwView.PROJECT:
self.mainStack.setCurrentWidget(self.splitDocs)
if view == nwView.EDITOR:
# Only change the main stack, but not the project stack
self.mainStack.setCurrentWidget(self.splitMain)
elif view == nwView.PROJECT:
self.mainStack.setCurrentWidget(self.splitMain)
self.projStack.setCurrentWidget(self.treeView)
elif view == nwView.NOVEL:
self.mainStack.setCurrentWidget(self.splitDocs)
self.mainStack.setCurrentWidget(self.splitMain)
self.projStack.setCurrentWidget(self.novelView)
elif view == nwView.OUTLINE:
@@ -1582,7 +1586,7 @@ class GuiMain(QMainWindow):
"""Triggered when there is a change to a novel item in the
project tree.
"""
if self.mainStack.currentIndex() == self.idxTabProj:
if self.mainStack.currentIndex() == self.idxOutlineView:
logger.verbose("Novel tree changed while Outline tab active")
if self.hasProject:
self.treeView.flushTreeOrder()
@@ -1614,9 +1618,9 @@ class GuiMain(QMainWindow):
def _mainStackChanged(self, tabIndex):
"""Activated when the main window tab is changed.
"""
if tabIndex == self.idxTabEdit:
if tabIndex == self.idxEditorView:
logger.verbose("Editor tab activated")
elif tabIndex == self.idxTabProj:
elif tabIndex == self.idxOutlineView:
logger.verbose("Project outline tab activated")
if self.hasProject:
self.projView.refreshTree()