diff --git a/nw/gui/doceditor.py b/nw/gui/doceditor.py
index 175be69b..74554b4e 100644
--- a/nw/gui/doceditor.py
+++ b/nw/gui/doceditor.py
@@ -34,8 +34,9 @@ class GuiDocEditor(QTextEdit):
logger.debug("Initialising DocEditor ...")
# Class Variables
- self.mainConf = nw.CONFIG
- self.theParent = theParent
+ self.mainConf = nw.CONFIG
+ self.theParent = theParent
+ self.docChanged = False
# Document Variables
self.charCount = 0
@@ -92,11 +93,17 @@ class GuiDocEditor(QTextEdit):
# Class Methods
##
+ def setDocumentChanged(self, bValue):
+ self.docChanged = bValue
+ self.theParent.statusBar.setDocumentStatus(self.docChanged)
+ return
+
def setText(self, theText):
self.setPlainText(theText)
self.lastEdit = time()
self._runCounter()
self.wcTimer.start()
+ self.setDocumentChanged(False)
return True
def getText(self):
@@ -200,6 +207,7 @@ class GuiDocEditor(QTextEdit):
def _docChange(self, thePos, charsRemoved, charsAdded):
self.lastEdit = time()
+ self.setDocumentChanged(True)
if not self.wcTimer.isActive():
self.wcTimer.start()
if self.mainConf.doReplace and not self.hasSelection:
diff --git a/nw/gui/doctree.py b/nw/gui/doctree.py
index 1c60349c..c0fe0e6c 100644
--- a/nw/gui/doctree.py
+++ b/nw/gui/doctree.py
@@ -163,7 +163,7 @@ class GuiDocTree(QTreeWidget):
pItem.insertChild(nIndex, cItem)
self.clearSelection()
cItem.setSelected(True)
- self.theProject.projChanged = True
+ self.theProject.setProjectChanged(True)
return
def saveTreeOrder(self):
@@ -209,7 +209,7 @@ class GuiDocTree(QTreeWidget):
nwItemS.setParent(self.theProject.trashRoot)
self.clearSelection()
trItemP.setSelected(True)
- self.theProject.projChanged = True
+ self.theProject.setProjectChanged(True)
elif nwItemS.itemType == nwItemType.FOLDER:
logger.debug("User requested folder %s deleted" % tHandle)
@@ -222,7 +222,7 @@ class GuiDocTree(QTreeWidget):
trItemP.takeChild(tIndex)
self.clearSelection()
trItemP.setSelected(True)
- self.theProject.projChanged = True
+ self.theProject.setProjectChanged(True)
else:
self.theParent.makeAlert(["Cannot delete folder.","It is not empty."],2)
return
@@ -233,7 +233,7 @@ class GuiDocTree(QTreeWidget):
if trItemS.childCount() == 0:
self.takeTopLevelItem(tIndex)
self.theParent.mainMenu.setAvailableRoot()
- self.theProject.projChanged = True
+ self.theProject.setProjectChanged(True)
else:
self.theParent.makeAlert(["Cannot delete root folder.","It is not empty."],2)
return
@@ -391,7 +391,7 @@ class GuiDocTree(QTreeWidget):
pHandle = trItemP.text(self.C_HANDLE)
nwItemS.setParent(pHandle)
self.setTreeItemValues(tHandle)
- self.theProject.projChanged = True
+ self.theProject.setProjectChanged(True)
return
def _moveOrphanedItem(self, tHandle, dHandle):
@@ -406,7 +406,7 @@ class GuiDocTree(QTreeWidget):
pHandle = trItemP.text(self.C_HANDLE)
nwItemS.setParent(pHandle)
self.setTreeItemValues(tHandle)
- self.theProject.projChanged = True
+ self.theProject.setProjectChanged(True)
return
##
diff --git a/nw/gui/statusbar.py b/nw/gui/statusbar.py
index f6a2aba9..6b29aef7 100644
--- a/nw/gui/statusbar.py
+++ b/nw/gui/statusbar.py
@@ -15,7 +15,6 @@ import nw
from os import path
from PyQt5.QtWidgets import QStatusBar, QLabel, QFrame
-from PyQt5.QtGui import QIcon
logger = logging.getLogger(__name__)
@@ -29,9 +28,20 @@ class GuiMainStatus(QStatusBar):
self.mainConf = nw.CONFIG
self.boxCounts = QLabel()
+ self.boxCounts.setToolTip("Character, Word, Paragraph Count")
self.boxCounts.setFrameStyle(QFrame.Panel | QFrame.Sunken);
self.addPermanentWidget(self.boxCounts)
+ self.projChanged = QLabel("P")
+ self.projChanged.setToolTip("Project Changes Saved")
+ self.projChanged.setFrameStyle(QFrame.Panel | QFrame.Sunken);
+ self.addPermanentWidget(self.projChanged)
+
+ self.docChanged = QLabel("D")
+ self.docChanged.setToolTip("Document Changes Saved")
+ self.docChanged.setFrameStyle(QFrame.Panel | QFrame.Sunken);
+ self.addPermanentWidget(self.docChanged)
+
self.boxDocHandle = QLabel()
self.boxDocHandle.setFrameStyle(QFrame.Panel | QFrame.Sunken);
if self.mainConf.debugGUI:
@@ -41,6 +51,8 @@ class GuiMainStatus(QStatusBar):
self.setCounts(0,0,0)
self.setDocHandleCount(None)
+ self.setProjectStatus(None)
+ self.setDocumentStatus(None)
self.setSizeGripEnabled(True)
@@ -50,6 +62,28 @@ class GuiMainStatus(QStatusBar):
self.showMessage(theMessage, int(timeOut*1000))
return
+ def setProjectStatus(self, isChanged):
+ if isChanged is None:
+ self.projChanged.setStyleSheet("QLabel {background-color: rgba(120,120,120,1.0);}")
+ elif isChanged == True:
+ self.projChanged.setStyleSheet("QLabel {background-color: rgba(120,120,40,1.0);}")
+ elif isChanged == False:
+ self.projChanged.setStyleSheet("QLabel {background-color: rgba(40,120,0,1.0);}")
+ else:
+ self.projChanged.setStyleSheet("QLabel {background-color: rgba(120,120,120,1.0);}")
+ return
+
+ def setDocumentStatus(self, isChanged):
+ if isChanged is None:
+ self.docChanged.setStyleSheet("QLabel {background-color: rgba(120,120,120,1.0);}")
+ elif isChanged == True:
+ self.docChanged.setStyleSheet("QLabel {background-color: rgba(120,120,40,1.0);}")
+ elif isChanged == False:
+ self.docChanged.setStyleSheet("QLabel {background-color: rgba(40,120,0,1.0);}")
+ else:
+ self.docChanged.setStyleSheet("QLabel {background-color: rgba(120,120,120,1.0);}")
+ return
+
def setCounts(self, cC, wC, pC):
self.boxCounts.setText("C: {:n} W: {:n} P: {:n}".format(cC,wC,pC))
return
diff --git a/nw/gui/winmain.py b/nw/gui/winmain.py
index 4b67339e..5467c0b4 100644
--- a/nw/gui/winmain.py
+++ b/nw/gui/winmain.py
@@ -186,7 +186,7 @@ class GuiMain(QMainWindow):
self.theDocument.theItem.setWordCount(self.docEditor.wordCount)
self.theDocument.theItem.setParaCount(self.docEditor.paraCount)
self.theDocument.saveDocument(docHtml)
- self.docEditor.theDoc.setModified(False)
+ self.docEditor.setDocumentChanged(False)
return
##
@@ -311,7 +311,7 @@ class GuiMain(QMainWindow):
return False
if self.theDocument.theItem is None:
return False
- if not self.docEditor.theDoc.isModified():
+ if not self.docEditor.docChanged:
return False
return True
diff --git a/nw/project/project.py b/nw/project/project.py
index 79b22a05..1ba4685a 100644
--- a/nw/project/project.py
+++ b/nw/project/project.py
@@ -33,7 +33,7 @@ class NWProject():
# Internal
self.mainConf = nw.CONFIG
self.theParent = theParent
- self.projChanged = False
+ self.projChanged = None
# Project Settings
self.projTree = None
@@ -112,7 +112,7 @@ class NWProject():
def clearProject(self):
- self.projChanged = False
+ self.projChanged = None
# Project Settings
self.projTree = {}
@@ -200,7 +200,7 @@ class NWProject():
self.theParent.statusBar.setStatus("Opened Project: %s" % self.projName)
self._scanProjectFolder()
- self.projChanged = False
+ self.setProjectChanged(False)
return True
@@ -259,7 +259,7 @@ class NWProject():
self.mainConf.setRecent(self.projPath)
self.theParent.statusBar.setStatus("Saved Project: %s" % self.projName)
- self.projChanged = False
+ self.setProjectChanged(False)
return True
@@ -269,17 +269,17 @@ class NWProject():
def setProjectPath(self, projPath):
self.projPath = projPath
- self.projChanged = True
+ self.setProjectChanged(True)
return True
def setProjectName(self, projName):
self.projName = projName.strip()
- self.projChanged = True
+ self.setProjectChanged(True)
return True
def setBookTitle(self, bookTitle):
self.bookTitle = bookTitle.strip()
- self.projChanged = True
+ self.setProjectChanged(True)
return True
def setBookAuthors(self, bookAuthors):
@@ -289,16 +289,21 @@ class NWProject():
if bookAuthor == "":
continue
self.bookAuthors.append(bookAuthor)
- self.projChanged = True
+ self.setProjectChanged(True)
return True
def setTreeOrder(self, newOrder):
if len(self.treeOrder) != len(newOrder):
logger.warning("Size of new and old tree order does not match")
self.treeOrder = newOrder
- self.projChanged = True
+ self.setProjectChanged(True)
return True
+ def setProjectChanged(self, bValue):
+ self.projChanged = bValue
+ self.theParent.statusBar.setProjectStatus(self.projChanged)
+ return
+
##
# Get Functions
##
@@ -402,7 +407,7 @@ class NWProject():
else:
logger.error("Only one trash folder allowed")
- self.projChanged = True
+ self.setProjectChanged(True)
return