Simplified the GUI and removed button bar for document as we're no longer using rich text
This commit is contained in:
+40
-141
@@ -15,19 +15,18 @@ import nw
|
|||||||
|
|
||||||
from time import time
|
from time import time
|
||||||
|
|
||||||
from PyQt5.QtWidgets import QWidget, QTextEdit, QVBoxLayout, QToolBar, QAction
|
from PyQt5.QtWidgets import QTextEdit
|
||||||
from PyQt5.QtCore import Qt, QSize, QTimer
|
from PyQt5.QtCore import QTimer
|
||||||
from PyQt5.QtGui import QIcon
|
|
||||||
|
|
||||||
from nw.gui.dochighlight import GuiDocHighlighter
|
from nw.gui.dochighlight import GuiDocHighlighter
|
||||||
from nw.gui.wordcounter import WordCounter
|
from nw.gui.wordcounter import WordCounter
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
class GuiDocEditor(QWidget):
|
class GuiDocEditor(QTextEdit):
|
||||||
|
|
||||||
def __init__(self, theParent):
|
def __init__(self, theParent):
|
||||||
QWidget.__init__(self)
|
QTextEdit.__init__(self)
|
||||||
|
|
||||||
logger.debug("Initialising DocEditor ...")
|
logger.debug("Initialising DocEditor ...")
|
||||||
|
|
||||||
@@ -51,33 +50,21 @@ class GuiDocEditor(QWidget):
|
|||||||
# Editor State
|
# Editor State
|
||||||
self.hasSelection = False
|
self.hasSelection = False
|
||||||
|
|
||||||
self.outerBox = QVBoxLayout()
|
|
||||||
self.guiEditor = QTextEdit()
|
|
||||||
if self.mainConf.textFixedW:
|
if self.mainConf.textFixedW:
|
||||||
self.guiEditor.setLineWrapMode(QTextEdit.FixedPixelWidth)
|
self.setLineWrapMode(QTextEdit.FixedPixelWidth)
|
||||||
self.guiEditor.setLineWrapColumnOrWidth(self.mainConf.textWidth)
|
self.setLineWrapColumnOrWidth(self.mainConf.textWidth)
|
||||||
else:
|
else:
|
||||||
mTB = self.mainConf.textMargin[0]
|
mTB = self.mainConf.textMargin[0]
|
||||||
mLR = self.mainConf.textMargin[1]
|
mLR = self.mainConf.textMargin[1]
|
||||||
self.guiEditor.setViewportMargins(mLR,mTB,mLR,mTB)
|
self.setViewportMargins(mLR,mTB,mLR,mTB)
|
||||||
|
|
||||||
self.hLight = GuiDocHighlighter(self.guiEditor.document())
|
self.theDoc = self.document()
|
||||||
|
|
||||||
self.setLayout(self.outerBox)
|
|
||||||
|
|
||||||
self.editToolBar = QToolBar()
|
|
||||||
self._buildTabToolBar()
|
|
||||||
|
|
||||||
self.outerBox.addWidget(self.editToolBar)
|
|
||||||
self.outerBox.addWidget(self.guiEditor)
|
|
||||||
|
|
||||||
self.guiEditor.setMinimumWidth(400)
|
|
||||||
self.guiEditor.setAcceptRichText(False)
|
|
||||||
self.guiEditor.keyPressEvent = self.keyPressEvent
|
|
||||||
|
|
||||||
self.theDoc = self.guiEditor.document()
|
|
||||||
self.theDoc.setDocumentMargin(0)
|
self.theDoc.setDocumentMargin(0)
|
||||||
self.theDoc.contentsChange.connect(self._docChange)
|
self.theDoc.contentsChange.connect(self._docChange)
|
||||||
|
self.hLight = GuiDocHighlighter(self.theDoc)
|
||||||
|
|
||||||
|
self.setMinimumWidth(400)
|
||||||
|
self.setAcceptRichText(False)
|
||||||
|
|
||||||
# Set Up Word Count Thread and Timer
|
# Set Up Word Count Thread and Timer
|
||||||
self.wcInterval = self.mainConf.wordCountTimer
|
self.wcInterval = self.mainConf.wordCountTimer
|
||||||
@@ -97,14 +84,14 @@ class GuiDocEditor(QWidget):
|
|||||||
##
|
##
|
||||||
|
|
||||||
def setText(self, theText):
|
def setText(self, theText):
|
||||||
self.guiEditor.setPlainText(theText)
|
self.setPlainText(theText)
|
||||||
self.lastEdit = time()
|
self.lastEdit = time()
|
||||||
self._runCounter()
|
self._runCounter()
|
||||||
self.wcTimer.start()
|
self.wcTimer.start()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def getText(self):
|
def getText(self):
|
||||||
theText = self.guiEditor.toPlainText()
|
theText = self.toPlainText()
|
||||||
return theText
|
return theText
|
||||||
|
|
||||||
def changeWidth(self):
|
def changeWidth(self):
|
||||||
@@ -112,11 +99,11 @@ class GuiDocEditor(QWidget):
|
|||||||
set to True.
|
set to True.
|
||||||
"""
|
"""
|
||||||
if self.mainConf.textFixedW:
|
if self.mainConf.textFixedW:
|
||||||
tW = self.guiEditor.width()
|
tW = self.width()
|
||||||
sW = self.guiEditor.verticalScrollBar().width()
|
sW = self.verticalScrollBar().width()
|
||||||
tM = int((tW - sW - self.mainConf.textWidth)/2)
|
tM = int((tW - sW - self.mainConf.textWidth)/2)
|
||||||
mTB = self.mainConf.textMargin[0]
|
mTB = self.mainConf.textMargin[0]
|
||||||
self.guiEditor.setViewportMargins(tM,mTB,0,mTB)
|
self.setViewportMargins(tM,mTB,0,mTB)
|
||||||
return
|
return
|
||||||
|
|
||||||
##
|
##
|
||||||
@@ -130,8 +117,8 @@ class GuiDocEditor(QWidget):
|
|||||||
want to trigger autoreplace on selections. Autoreplace on selections messes with undo/redo
|
want to trigger autoreplace on selections. Autoreplace on selections messes with undo/redo
|
||||||
history.
|
history.
|
||||||
"""
|
"""
|
||||||
self.hasSelection = self.guiEditor.textCursor().hasSelection()
|
self.hasSelection = self.textCursor().hasSelection()
|
||||||
QTextEdit.keyPressEvent(self.guiEditor, keyEvent)
|
QTextEdit.keyPressEvent(self, keyEvent)
|
||||||
return
|
return
|
||||||
|
|
||||||
def _docChange(self, thePos, charsRemoved, charsAdded):
|
def _docChange(self, thePos, charsRemoved, charsAdded):
|
||||||
@@ -151,7 +138,7 @@ class GuiDocEditor(QWidget):
|
|||||||
return
|
return
|
||||||
|
|
||||||
theText = theBlock.text()
|
theText = theBlock.text()
|
||||||
theCursor = self.guiEditor.textCursor()
|
theCursor = self.textCursor()
|
||||||
thePos = theCursor.positionInBlock()
|
thePos = theCursor.positionInBlock()
|
||||||
theLen = len(theText)
|
theLen = len(theText)
|
||||||
|
|
||||||
@@ -163,42 +150,42 @@ class GuiDocEditor(QWidget):
|
|||||||
theThree = theText[thePos-3:thePos]
|
theThree = theText[thePos-3:thePos]
|
||||||
|
|
||||||
if self.mainConf.doReplaceDQuote and theTwo == " \"":
|
if self.mainConf.doReplaceDQuote and theTwo == " \"":
|
||||||
self.guiEditor.textCursor().deletePreviousChar()
|
theCursor.deletePreviousChar()
|
||||||
self.guiEditor.textCursor().insertText(self.typSQOpen)
|
theCursor.insertText(self.typSQOpen)
|
||||||
|
|
||||||
elif self.mainConf.doReplaceDQuote and theOne == "\"":
|
elif self.mainConf.doReplaceDQuote and theOne == "\"":
|
||||||
self.guiEditor.textCursor().deletePreviousChar()
|
theCursor.deletePreviousChar()
|
||||||
if thePos == 1:
|
if thePos == 1:
|
||||||
self.guiEditor.textCursor().insertText(self.typDQOpen)
|
theCursor.insertText(self.typDQOpen)
|
||||||
else:
|
else:
|
||||||
self.guiEditor.textCursor().insertText(self.typDQClose)
|
theCursor.insertText(self.typDQClose)
|
||||||
|
|
||||||
elif self.mainConf.doReplaceSQuote and theTwo == " '":
|
elif self.mainConf.doReplaceSQuote and theTwo == " '":
|
||||||
self.guiEditor.textCursor().deletePreviousChar()
|
theCursor.deletePreviousChar()
|
||||||
self.guiEditor.textCursor().insertText(self.typSQOpen)
|
theCursor.insertText(self.typSQOpen)
|
||||||
|
|
||||||
elif self.mainConf.doReplaceSQuote and theOne == "'":
|
elif self.mainConf.doReplaceSQuote and theOne == "'":
|
||||||
self.guiEditor.textCursor().deletePreviousChar()
|
theCursor.deletePreviousChar()
|
||||||
if thePos == 1:
|
if thePos == 1:
|
||||||
self.guiEditor.textCursor().insertText(self.typSQOpen)
|
theCursor.insertText(self.typSQOpen)
|
||||||
else:
|
else:
|
||||||
self.guiEditor.textCursor().insertText(self.typSQClose)
|
theCursor.insertText(self.typSQClose)
|
||||||
|
|
||||||
elif self.mainConf.doReplaceDash and theTwo == "--":
|
elif self.mainConf.doReplaceDash and theTwo == "--":
|
||||||
self.guiEditor.textCursor().deletePreviousChar()
|
theCursor.deletePreviousChar()
|
||||||
self.guiEditor.textCursor().deletePreviousChar()
|
theCursor.deletePreviousChar()
|
||||||
self.guiEditor.textCursor().insertText("–")
|
theCursor.insertText("–")
|
||||||
|
|
||||||
elif self.mainConf.doReplaceDash and theTwo == "–-":
|
elif self.mainConf.doReplaceDash and theTwo == "–-":
|
||||||
self.guiEditor.textCursor().deletePreviousChar()
|
theCursor.deletePreviousChar()
|
||||||
self.guiEditor.textCursor().deletePreviousChar()
|
theCursor.deletePreviousChar()
|
||||||
self.guiEditor.textCursor().insertText("—")
|
theCursor.insertText("—")
|
||||||
|
|
||||||
elif self.mainConf.doReplaceDots and theThree == "...":
|
elif self.mainConf.doReplaceDots and theThree == "...":
|
||||||
self.guiEditor.textCursor().deletePreviousChar()
|
theCursor.deletePreviousChar()
|
||||||
self.guiEditor.textCursor().deletePreviousChar()
|
theCursor.deletePreviousChar()
|
||||||
self.guiEditor.textCursor().deletePreviousChar()
|
theCursor.deletePreviousChar()
|
||||||
self.guiEditor.textCursor().insertText("…")
|
theCursor.insertText("…")
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -230,92 +217,4 @@ class GuiDocEditor(QWidget):
|
|||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
##
|
|
||||||
# Key Shortcut Handlers
|
|
||||||
##
|
|
||||||
|
|
||||||
def _doBold(self):
|
|
||||||
theCursor = self.guiEditor.textCursor()
|
|
||||||
if theCursor.hasSelection():
|
|
||||||
selBeg = theCursor.selectionStart()
|
|
||||||
selEnd = theCursor.selectionEnd()
|
|
||||||
selText = theCursor.selectedText()
|
|
||||||
theText = "**%s**" % theCursor.selectedText()
|
|
||||||
theCursor.removeSelectedText()
|
|
||||||
theCursor.setPosition(selBeg)
|
|
||||||
self.guiEditor.textCursor().insertText(theText)
|
|
||||||
return
|
|
||||||
|
|
||||||
##
|
|
||||||
# GUI Builder
|
|
||||||
##
|
|
||||||
|
|
||||||
def _buildTabToolBar(self):
|
|
||||||
toolBar = self.editToolBar
|
|
||||||
toolBar.setToolButtonStyle(Qt.ToolButtonIconOnly)
|
|
||||||
toolBar.setIconSize(QSize(16,16))
|
|
||||||
|
|
||||||
# Text > Bold
|
|
||||||
tbTextBold = QAction(QIcon.fromTheme("format-text-bold"), "Bold (Ctrl+B)", toolBar)
|
|
||||||
tbTextBold.setStatusTip("Toggle Selected Text Bold")
|
|
||||||
tbTextBold.setShortcut("Ctrl+B")
|
|
||||||
tbTextBold.triggered.connect(self._doBold)
|
|
||||||
toolBar.addAction(tbTextBold)
|
|
||||||
|
|
||||||
# Text > Italics
|
|
||||||
tbTextItalic = QAction(QIcon.fromTheme("format-text-italic"), "Italic (Ctrl+I)", toolBar)
|
|
||||||
tbTextItalic.setShortcut("Ctrl+I")
|
|
||||||
tbTextItalic.setStatusTip("Toggle Selected Text Italic")
|
|
||||||
toolBar.addAction(tbTextItalic)
|
|
||||||
|
|
||||||
# Text > Underline
|
|
||||||
tbTextUnderline = QAction(QIcon.fromTheme("format-text-underline"), "Underline (Ctrl+U)", toolBar)
|
|
||||||
tbTextUnderline.setShortcut("Ctrl+U")
|
|
||||||
tbTextUnderline.setStatusTip("Toggle Selected Text Underline")
|
|
||||||
toolBar.addAction(tbTextUnderline)
|
|
||||||
|
|
||||||
# Text > Strikethrough
|
|
||||||
tbTextStrikethrough = QAction(QIcon.fromTheme("format-text-strikethrough"), "Strikethrough (Ctrl+D)", toolBar)
|
|
||||||
tbTextStrikethrough.setShortcut("Ctrl+D")
|
|
||||||
tbTextStrikethrough.setStatusTip("Toggle Selected Text Strikethrough")
|
|
||||||
toolBar.addAction(tbTextStrikethrough)
|
|
||||||
|
|
||||||
# --------------------
|
|
||||||
toolBar.addSeparator()
|
|
||||||
|
|
||||||
# Edit > Cut
|
|
||||||
tbEditCut = QAction(QIcon.fromTheme("edit-cut"), "Cut (Ctrl+X)", toolBar)
|
|
||||||
tbEditCut.setShortcut("Ctrl+X")
|
|
||||||
tbEditCut.setStatusTip("Cut Selected Text")
|
|
||||||
toolBar.addAction(tbEditCut)
|
|
||||||
|
|
||||||
# Edit > Copy
|
|
||||||
tbEditCopy = QAction(QIcon.fromTheme("edit-copy"), "Copy (Ctrl+C)", toolBar)
|
|
||||||
tbEditCopy.setShortcut("Ctrl+C")
|
|
||||||
tbEditCopy.setStatusTip("Copy Selected Text")
|
|
||||||
toolBar.addAction(tbEditCopy)
|
|
||||||
|
|
||||||
# Edit > Paste
|
|
||||||
tbEditPaste = QAction(QIcon.fromTheme("edit-paste"), "Paste (Ctrl+V)", toolBar)
|
|
||||||
tbEditPaste.setShortcut("Ctrl+V")
|
|
||||||
tbEditPaste.setStatusTip("Paste Text")
|
|
||||||
toolBar.addAction(tbEditPaste)
|
|
||||||
|
|
||||||
# --------------------
|
|
||||||
toolBar.addSeparator()
|
|
||||||
|
|
||||||
# Edit > Undo
|
|
||||||
tbEditUndo = QAction(QIcon.fromTheme("edit-undo"), "Undo (Ctrl+Z)", toolBar)
|
|
||||||
tbEditUndo.setShortcut("Ctrl+Z")
|
|
||||||
tbEditUndo.setStatusTip("Undo Last Change")
|
|
||||||
toolBar.addAction(tbEditUndo)
|
|
||||||
|
|
||||||
# Edit > Redo
|
|
||||||
tbEditRedo = QAction(QIcon.fromTheme("edit-redo"), "Redo (Ctrl+Y)", toolBar)
|
|
||||||
tbEditRedo.setShortcut("Ctrl+Y")
|
|
||||||
tbEditRedo.setStatusTip("Revert Last Undo")
|
|
||||||
toolBar.addAction(tbEditRedo)
|
|
||||||
|
|
||||||
return
|
|
||||||
|
|
||||||
# END Class GuiDocEditor
|
# END Class GuiDocEditor
|
||||||
|
|||||||
@@ -361,12 +361,6 @@ class GuiMain(QMainWindow):
|
|||||||
menuPaste.setStatusTip("Paste Text from Clipboard")
|
menuPaste.setStatusTip("Paste Text from Clipboard")
|
||||||
editMenu.addAction(menuPaste)
|
editMenu.addAction(menuPaste)
|
||||||
|
|
||||||
# Edit > Paste Plain Text
|
|
||||||
menuPastePlain = QAction(QIcon.fromTheme("edit-paste"), "Paste Plain Text", menuBar)
|
|
||||||
menuPastePlain.setShortcut("Ctrl+Shift+V")
|
|
||||||
menuPastePlain.setStatusTip("Paste Plain Text from Clipboard")
|
|
||||||
editMenu.addAction(menuPastePlain)
|
|
||||||
|
|
||||||
# Edit > Separator
|
# Edit > Separator
|
||||||
editMenu.addSeparator()
|
editMenu.addSeparator()
|
||||||
|
|
||||||
@@ -377,51 +371,6 @@ class GuiMain(QMainWindow):
|
|||||||
|
|
||||||
############################################################################################
|
############################################################################################
|
||||||
|
|
||||||
# # Format
|
|
||||||
# formatMenu = menuBar.addMenu("&Format")
|
|
||||||
|
|
||||||
# # Format > Font Style
|
|
||||||
# menuFont = QAction(QIcon.fromTheme("preferences-desktop-font"), "Font Family", menuBar)
|
|
||||||
# menuFont.setStatusTip("Set Font for Selected text")
|
|
||||||
# formatMenu.addAction(menuFont)
|
|
||||||
|
|
||||||
# # Format > Separator
|
|
||||||
# formatMenu.addSeparator()
|
|
||||||
|
|
||||||
# # Format > Bold
|
|
||||||
# menuBold = QAction(QIcon.fromTheme("format-text-bold"), "Bold Text", menuBar)
|
|
||||||
# menuBold.setShortcut("Ctrl+B")
|
|
||||||
# menuBold.setStatusTip("Toggle Bold for Selected Text")
|
|
||||||
# formatMenu.addAction(menuBold)
|
|
||||||
|
|
||||||
# # Format > Italic
|
|
||||||
# menuItalic = QAction(QIcon.fromTheme("format-text-italic"), "Italic Text", menuBar)
|
|
||||||
# menuItalic.setShortcut("Ctrl+I")
|
|
||||||
# menuItalic.setStatusTip("Toggle Italic for Selected Text")
|
|
||||||
# formatMenu.addAction(menuItalic)
|
|
||||||
|
|
||||||
# # Format > Underline
|
|
||||||
# menuUnderline = QAction(QIcon.fromTheme("format-text-underline"), "Underline Text", menuBar)
|
|
||||||
# menuUnderline.setShortcut("Ctrl+U")
|
|
||||||
# menuUnderline.setStatusTip("Toggle Underline for Selected Text")
|
|
||||||
# formatMenu.addAction(menuUnderline)
|
|
||||||
|
|
||||||
# # Format > Strikethrough
|
|
||||||
# menuStrikethrough = QAction(QIcon.fromTheme("format-text-strikethrough"), "Strikethrough Text", menuBar)
|
|
||||||
# menuStrikethrough.setShortcut("Ctrl+D")
|
|
||||||
# menuStrikethrough.setStatusTip("Toggle Strikethrough for Selected Text")
|
|
||||||
# formatMenu.addAction(menuStrikethrough)
|
|
||||||
|
|
||||||
# # Format > Separator
|
|
||||||
# formatMenu.addSeparator()
|
|
||||||
|
|
||||||
# # Format > Clear
|
|
||||||
# menuClear = QAction(QIcon.fromTheme("edit-clear"), "Clear Formatting", menuBar)
|
|
||||||
# menuClear.setStatusTip("Clear Formatting for Selected Text")
|
|
||||||
# formatMenu.addAction(menuClear)
|
|
||||||
|
|
||||||
############################################################################################
|
|
||||||
|
|
||||||
# Help
|
# Help
|
||||||
helpMenu = menuBar.addMenu("&Help")
|
helpMenu = menuBar.addMenu("&Help")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user