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