Rewrite how lipsum text is inserted
This commit is contained in:
@@ -86,6 +86,7 @@ class GuiEditLabel(QDialog):
|
||||
|
||||
@classmethod
|
||||
def getLabel(cls, parent: QWidget, text: str) -> tuple[str, bool]:
|
||||
"""Pop the dialog and return the result."""
|
||||
cls = GuiEditLabel(parent, text=text)
|
||||
cls.exec_()
|
||||
label = cls.itemLabel
|
||||
|
||||
@@ -140,6 +140,7 @@ class nwDocInsert(Enum):
|
||||
NEW_PAGE = 7
|
||||
VSPACE_S = 8
|
||||
VSPACE_M = 9
|
||||
LIPSUM = 10
|
||||
|
||||
# END Enum nwDocInsert
|
||||
|
||||
|
||||
@@ -58,6 +58,7 @@ from novelwriter.common import minmax, transferCase
|
||||
from novelwriter.constants import nwKeyWords, nwLabels, nwShortcode, nwUnicode, trConst
|
||||
from novelwriter.core.item import NWItem
|
||||
from novelwriter.core.index import countWords
|
||||
from novelwriter.tools.lipsum import GuiLipsum
|
||||
from novelwriter.core.document import NWDocument
|
||||
from novelwriter.gui.dochighlight import GuiDocHighlighter
|
||||
from novelwriter.gui.editordocument import GuiTextDocument
|
||||
@@ -850,18 +851,23 @@ class GuiDocEditor(QPlainTextEdit):
|
||||
text = "[vspace:2]"
|
||||
newBlock = True
|
||||
goAfter = False
|
||||
elif insert == nwDocInsert.LIPSUM:
|
||||
text = GuiLipsum.getLipsum(self)
|
||||
newBlock = True
|
||||
goAfter = False
|
||||
else:
|
||||
return False
|
||||
else:
|
||||
return False
|
||||
|
||||
if newBlock:
|
||||
self.insertNewBlock(text, defaultAfter=goAfter)
|
||||
else:
|
||||
cursor = self.textCursor()
|
||||
cursor.beginEditBlock()
|
||||
cursor.insertText(text)
|
||||
cursor.endEditBlock()
|
||||
if text:
|
||||
if newBlock:
|
||||
self.insertNewBlock(text, defaultAfter=goAfter)
|
||||
else:
|
||||
cursor = self.textCursor()
|
||||
cursor.beginEditBlock()
|
||||
cursor.insertText(text)
|
||||
cursor.endEditBlock()
|
||||
|
||||
return True
|
||||
|
||||
|
||||
@@ -593,8 +593,10 @@ class GuiMainMenu(QMenuBar):
|
||||
)
|
||||
|
||||
# Insert > Placeholder Text
|
||||
self.aLipsumText = self.mInsBreaks.addAction(self.tr("Placeholder Text"))
|
||||
self.aLipsumText.triggered.connect(self.mainGui.showLoremIpsumDialog)
|
||||
self.aLipsumText = self.insMenu.addAction(self.tr("Placeholder Text"))
|
||||
self.aLipsumText.triggered.connect(
|
||||
lambda: self.requestDocInsert.emit(nwDocInsert.LIPSUM)
|
||||
)
|
||||
|
||||
return
|
||||
|
||||
|
||||
@@ -56,7 +56,6 @@ from novelwriter.dialogs.wordlist import GuiWordList
|
||||
from novelwriter.dialogs.preferences import GuiPreferences
|
||||
from novelwriter.dialogs.projdetails import GuiProjectDetails
|
||||
from novelwriter.dialogs.projsettings import GuiProjectSettings
|
||||
from novelwriter.tools.lipsum import GuiLipsum
|
||||
from novelwriter.tools.manuscript import GuiManuscript
|
||||
from novelwriter.tools.projwizard import GuiProjectWizard
|
||||
from novelwriter.tools.dictionaries import GuiDictionaries
|
||||
@@ -908,17 +907,6 @@ class GuiMain(QMainWindow):
|
||||
dialog.loadContent()
|
||||
return
|
||||
|
||||
@pyqtSlot()
|
||||
def showLoremIpsumDialog(self) -> None:
|
||||
"""Open the insert lorem ipsum text dialog."""
|
||||
if SHARED.hasProject:
|
||||
dialog = GuiLipsum(self)
|
||||
dialog.setModal(False)
|
||||
dialog.show()
|
||||
dialog.raise_()
|
||||
qApp.processEvents()
|
||||
return
|
||||
|
||||
@pyqtSlot()
|
||||
def showProjectWordListDialog(self) -> None:
|
||||
"""Open the project word list dialog."""
|
||||
|
||||
+29
-23
@@ -26,10 +26,10 @@ from __future__ import annotations
|
||||
import random
|
||||
import logging
|
||||
|
||||
from PyQt5.QtCore import Qt
|
||||
from PyQt5.QtCore import Qt, pyqtSlot
|
||||
from PyQt5.QtWidgets import (
|
||||
QDialog, QGridLayout, QHBoxLayout, QVBoxLayout, QLabel, QDialogButtonBox,
|
||||
QSpinBox
|
||||
QDialog, QDialogButtonBox, QGridLayout, QHBoxLayout, QLabel, QSpinBox,
|
||||
QVBoxLayout, QWidget
|
||||
)
|
||||
|
||||
from novelwriter import CONFIG, SHARED
|
||||
@@ -41,15 +41,15 @@ logger = logging.getLogger(__name__)
|
||||
|
||||
class GuiLipsum(QDialog):
|
||||
|
||||
def __init__(self, mainGui):
|
||||
super().__init__(parent=mainGui)
|
||||
def __init__(self, parent: QWidget) -> None:
|
||||
super().__init__(parent=parent)
|
||||
|
||||
logger.debug("Create: GuiLipsum")
|
||||
self.setObjectName("GuiLipsum")
|
||||
if CONFIG.osDarwin:
|
||||
self.setWindowFlag(Qt.WindowType.Tool)
|
||||
|
||||
self.mainGui = mainGui
|
||||
self._lipsumText = ""
|
||||
|
||||
self.setWindowTitle(self.tr("Insert Placeholder Text"))
|
||||
|
||||
@@ -92,7 +92,7 @@ class GuiLipsum(QDialog):
|
||||
|
||||
# Buttons
|
||||
self.buttonBox = QDialogButtonBox()
|
||||
self.buttonBox.rejected.connect(self._doClose)
|
||||
self.buttonBox.rejected.connect(self.close)
|
||||
|
||||
self.btnClose = self.buttonBox.addButton(QDialogButtonBox.Close)
|
||||
self.btnClose.setAutoDefault(False)
|
||||
@@ -101,6 +101,8 @@ class GuiLipsum(QDialog):
|
||||
self.btnSave.clicked.connect(self._doInsert)
|
||||
self.btnSave.setAutoDefault(False)
|
||||
|
||||
self.rejected.connect(self.close)
|
||||
|
||||
# Assemble
|
||||
self.outerBox = QVBoxLayout()
|
||||
self.outerBox.addLayout(self.innerBox)
|
||||
@@ -112,33 +114,37 @@ class GuiLipsum(QDialog):
|
||||
|
||||
return
|
||||
|
||||
def __del__(self): # pragma: no cover
|
||||
def __del__(self) -> None: # pragma: no cover
|
||||
logger.debug("Delete: GuiLipsum")
|
||||
return
|
||||
|
||||
@property
|
||||
def lipsumText(self) -> str:
|
||||
"""Return the generated text."""
|
||||
return self._lipsumText
|
||||
|
||||
@classmethod
|
||||
def getLipsum(cls, parent: QWidget) -> str:
|
||||
"""Pop the dialog and return the lipsum text."""
|
||||
cls = GuiLipsum(parent)
|
||||
cls.exec_()
|
||||
text = cls.lipsumText
|
||||
cls.deleteLater()
|
||||
return text
|
||||
|
||||
##
|
||||
# Slots
|
||||
# Private Slots
|
||||
##
|
||||
|
||||
def _doInsert(self):
|
||||
"""Load the text and insert it in the open document.
|
||||
"""
|
||||
@pyqtSlot()
|
||||
def _doInsert(self) -> None:
|
||||
"""Generate the text."""
|
||||
lipsumFile = CONFIG.assetPath("text") / "lipsum.txt"
|
||||
lipsumText = readTextFile(lipsumFile).splitlines()
|
||||
|
||||
if self.randSwitch.isChecked():
|
||||
random.shuffle(lipsumText)
|
||||
|
||||
pCount = self.paraCount.value()
|
||||
inText = "\n\n".join(lipsumText[0:pCount]) + "\n\n"
|
||||
|
||||
self.mainGui.docEditor.insertText(inText)
|
||||
|
||||
return
|
||||
|
||||
def _doClose(self):
|
||||
"""Close the dialog window without doing anything.
|
||||
"""
|
||||
self._lipsumText = "\n\n".join(lipsumText[0:pCount]) + "\n\n"
|
||||
self.close()
|
||||
return
|
||||
|
||||
|
||||
Reference in New Issue
Block a user