Basic plainText exporter working (preview only)

This commit is contained in:
Olivier Keshavjee 2016-04-07 12:18:20 +02:00
parent 548df14b28
commit 16585c4a2a
11 changed files with 748 additions and 335 deletions

View file

@ -19,6 +19,10 @@ FORMS += ../manuskript/ui/views/basicItemView_ui.ui
FORMS += ../manuskript/ui/views/sldImportance_ui.ui
FORMS += ../manuskript/ui/views/storylineView_ui.ui
FORMS += ../manuskript/ui/exporters/exporter_ui.ui
FORMS += ../manuskript/ui/exporters/exportersManager_ui.ui
FORMS += ../manuskript/ui/exporters/manuskript/plainTextSettings_ui.ui
SOURCES += ../manuskript/exporter/__init__.py
SOURCES += ../manuskript/load_save/version_0.py
@ -59,6 +63,11 @@ SOURCES += ../manuskript/ui/views/textEditCompleter.py
SOURCES += ../manuskript/ui/views/textEditView.py
SOURCES += ../manuskript/ui/views/treeView.py
SOURCES += ../manuskript/ui/welcome.py
SOURCES += ../manuskript/ui/exporters/exporter.py
SOURCES += ../manuskript/ui/exporters/exportersManager.py
SOURCES += ../manuskript/ui/exporters/manuskript/plainTextSettings.py
TRANSLATIONS += manuskript_fr.ts
TRANSLATIONS += manuskript_es.ts

View file

@ -1,4 +1,4 @@
UI := $(wildcard manuskript/ui/*.ui) $(wildcard manuskript/ui/*/*.ui) $(wildcard manuskript/ui/*.qrc)
UI := $(wildcard manuskript/ui/*.ui) $(wildcard manuskript/ui/*/*.ui) $(wildcard manuskript/ui/*/*/*.ui) $(wildcard manuskript/ui/*.qrc)
UIs= $(UI:.ui=.py) $(UI:.qrc=_rc.py)
TS := $(wildcard i18n/*.ts)
QMs= $(TS:.ts=.qm)

View file

@ -81,4 +81,24 @@ class basicFormat:
@classmethod
def preview(cls, settingsWidget, previewWidget):
pass
pass
@classmethod
def shortcodes(cls):
return [
("\n", "\\n")
]
@classmethod
def escapes(cls, text):
for A, B in cls.shortcodes():
text = text.replace(A, B)
return text
@classmethod
def descapes(cls, text):
"""How do we call that?"""
for A, B in cls.shortcodes():
text = text.replace(B, A)
return text

View file

@ -1,11 +1,13 @@
#!/usr/bin/env python
# --!-- coding: utf8 --!--
import re
from PyQt5.QtGui import QFont, QTextCharFormat
from PyQt5.QtWidgets import QPlainTextEdit
from manuskript.exporter.basic import basicExporter, basicFormat
from manuskript.exporter.basic import basicFormat
from manuskript.functions import mainWindow
from manuskript.models.outlineModel import outlineItem
from manuskript.ui.exporters.exporterSettings import exporterSettings
from manuskript.ui.exporters.manuskript.plainTextSettings import exporterSettings
class plainText(basicFormat):
@ -20,7 +22,7 @@ class plainText(basicFormat):
@classmethod
def settingsWidget(cls):
w = exporterSettings()
w = exporterSettings(cls)
return w
@classmethod
@ -31,27 +33,50 @@ class plainText(basicFormat):
@classmethod
def preview(cls, settingsWidget, previewWidget):
previewWidget.setPlainText(cls.concatenate(mainWindow().mdlOutline.rootItem))
settings = settingsWidget.getSettings()
print(settings)
r = cls.concatenate(mainWindow().mdlOutline.rootItem, settings)
# Set preview font
cf = QTextCharFormat()
f = QFont()
f.fromString(settings["Preview"]["PreviewFont"])
cf.setFont(f)
previewWidget.setCurrentCharFormat(cf)
previewWidget.setPlainText(r)
@classmethod
def concatenate(cls, item: outlineItem,
processTitle=lambda x: x + "\n",
processText=lambda x: x + "\n",
processContent=lambda x: x + "\n",
textSep="", folderSep="", textFolderSep="", folderTextSep="") -> str:
def concatenate(cls, item: outlineItem, settings,
processTitle=lambda x: x + "\n") -> str:
s = settings
r = ""
if not item.compile():
# Do we include item
if not item.compile() or s["Content"]["IgnoreCompile"]:
return ""
if item.level() >= 0: # item is not root
# What do we include
l = item.level()
if l >= 0: # item is not root
# Adds item title
r += processTitle(item.title())
if item.isFolder():
if not s["Content"]["More"] and s["Content"]["FolderTitle"] or\
s["Content"]["More"] and s["Content"]["FolderTitle"][l]:
# Adds item text
r += processText(item.text())
r += processTitle(item.title())
elif item.isText():
if not s["Content"]["More"] and s["Content"]["TextTitle"] or \
s["Content"]["More"] and s["Content"]["TextTitle"][l]:
r += processTitle(item.title())
if not s["Content"]["More"] and s["Content"]["TextText"] or \
s["Content"]["More"] and s["Content"]["TextText"][l]:
r += cls.processText(item.text(), settings)
content = ""
@ -63,18 +88,61 @@ class plainText(basicFormat):
if last:
# Between folder
if last == c.type() == "folder":
content += folderSep
elif last == c.type() == "md":
content += textSep
elif last == "folder" and c.type() == "md":
content += folderTextSep
elif last == "md" and c.type() == "folder":
content += textFolderSep
content += s["Separator"]["FF"]
content += cls.concatenate(c)
elif last == c.type() == "md":
content += s["Separator"]["TT"]
elif last == "folder" and c.type() == "md":
content += s["Separator"]["FT"]
elif last == "md" and c.type() == "folder":
content += s["Separator"]["TF"]
content += cls.concatenate(c, settings, processTitle)
last = c.type()
r += processContent(content)
# r += cls.processContent(content, settings)
r += content
return r
@classmethod
def processText(cls, content, settings):
s = settings["Transform"]
if s["Dash"]:
content = content.replace("---", "")
if s["Ellipse"]:
content = content.replace("...", "")
if s["Spaces"]:
o = ""
while o != content:
o = content
content = content.replace(" ", " ")
if s["DoubleQuotes"]:
q = s["DoubleQuotes"].split("___")
s["Custom"].append([True, '"(.*?)"', "{}\\1{}".format(q[0], q[1]), True])
if s["SingleQuote"]:
q = s["SingleQuote"].split("___")
s["Custom"].append([True, "'(.*?)'", "{}\\1{}".format(q[0], q[1]), True])
for enabled, A, B, reg in s["Custom"]:
if not enabled:
continue
if not reg:
content = content.replace(A, B)
else:
content = re.sub(A, B, content)
content += "\n"
return content
return r

View file

View file

@ -1,14 +1,14 @@
#!/usr/bin/env python
# --!-- coding: utf8 --!--
import json
import os
from collections import OrderedDict
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QBrush, QColor
from PyQt5.QtWidgets import QWidget, QVBoxLayout
from PyQt5.QtWidgets import QWidget
from manuskript import exporter
from manuskript.functions import lightBlue, printObjects
from manuskript.functions import lightBlue, writablePath
from manuskript.ui.exporters.exporter_ui import Ui_exporter
from manuskript.ui.exporters.exportersManager import exportersManager

View file

@ -1,211 +0,0 @@
#!/usr/bin/env python
# --!-- coding: utf8 --!--
from PyQt5.QtCore import Qt, QSize
from PyQt5.QtGui import QIcon, QFontMetrics
from PyQt5.QtWidgets import QWidget, QTableWidgetItem, QListWidgetItem, QTreeView
from manuskript.functions import mainWindow
from manuskript.ui.exporters.exporterSettings_ui import Ui_exporterSettings
class exporterSettings(QWidget, Ui_exporterSettings):
def __init__(self, parent=None):
QWidget.__init__(self, parent)
self.setupUi(self)
self.mw = mainWindow()
self.grpContentFilters.setCustomColors(active="lightBlue", inactive="lightgray")
self.grpContentFilters.button.setChecked(False)
#################################################################
# Content
h = self.tblContent.horizontalHeader()
h.setSectionResizeMode(h.ResizeToContents)
h.setSectionResizeMode(0, h.Stretch)
self.contentUpdateTable()
self.chkContentMore.toggled.connect(self.contentUpdateTable)
# Labels
self.lstContentLabels.clear()
h = QFontMetrics(self.font()).height()
for i in range(1, self.mw.mdlLabels.rowCount()):
item = self.mw.mdlLabels.item(i, 0)
if item:
item = QListWidgetItem(item.icon(), item.text())
item.setFlags(item.flags() | Qt.ItemIsUserCheckable)
item.setCheckState(Qt.Checked)
item.setSizeHint(QSize(100, h))
self.lstContentLabels.addItem(item)
self.chkContentLabels.toggled.connect(self.lstContentLabels.setVisible)
self.chkContentLabels.toggled.connect(lambda: self.listWidgetAdjustToContent(self.lstContentLabels))
self.lstContentLabels.setVisible(False)
# Status
self.lstContentStatus.clear()
h = QFontMetrics(self.font()).height()
for i in range(1, self.mw.mdlStatus.rowCount()):
item = self.mw.mdlStatus.item(i, 0)
if item:
item = QListWidgetItem(item.icon(), item.text())
item.setFlags(item.flags() | Qt.ItemIsUserCheckable)
item.setCheckState(Qt.Checked)
item.setSizeHint(QSize(100, h))
self.lstContentStatus.addItem(item)
self.chkContentStatus.toggled.connect(self.lstContentStatus.setVisible)
self.chkContentStatus.toggled.connect(lambda: self.listWidgetAdjustToContent(self.lstContentStatus))
self.lstContentStatus.setVisible(False)
# Root item
self.cmbContentParent.setModel(self.mw.mdlOutline)
v = QTreeView()
self.cmbContentParent.setView(v)
v.setHeaderHidden(True)
for i in range(1, self.mw.mdlOutline.columnCount()):
v.hideColumn(i)
self.chkContentParent.toggled.connect(self.cmbContentParent.setVisible)
self.cmbContentParent.hide()
#################################################################
# Separations
for cmb in [self.cmbSepFF, self.cmbSepTT, self.cmbSepFT, self.cmbSepTF]:
cmb.clear()
cmb.addItem(self.tr("Empty line"), "empty")
cmb.addItem(self.tr("Custom"), "custom")
cmb.currentIndexChanged.connect(self.sepCmbChanged)
#################################################################
# Transformations
h = self.tblReplacements.horizontalHeader()
h.setSectionResizeMode(h.ResizeToContents)
h.setSectionResizeMode(1, h.Stretch)
h.setSectionResizeMode(2, h.Stretch)
# Cf. https://en.wikipedia.org/wiki/Quotation_mark
self.cmbTransDoubleQuotes.clear()
self.cmbTransDoubleQuotes.addItems(["” “", "“ ”", "« »"])
self.cmbTransSingleQuote.clear()
self.cmbTransSingleQuote.addItems([" ", " "])
for cmb in [self.cmbTransDoubleQuotes, self.cmbTransSingleQuote]:
cmb.addItem(self.tr("Custom"), "custom")
cmb.currentIndexChanged.connect(self.transCmbChanged)
cmb.currentIndexChanged.emit(0)
self.btnTransAdd.clicked.connect(self.transAddTableRow)
self.btnTransRemove.clicked.connect(self.transRemoveTableRow)
def sepCmbChanged(self, index):
cmb = self.sender()
map = {
self.cmbSepFF: self.txtSepFF,
self.cmbSepTT: self.txtSepTT,
self.cmbSepFT: self.txtSepFT,
self.cmbSepTF: self.txtSepTF
}
map[cmb].setEnabled(cmb.currentData() == "custom")
def transCmbChanged(self, index):
cmb = self.sender()
map = {
self.cmbTransDoubleQuotes: (self.txtTransDoubleQuotesA, self.lblTransDoubleQuotes, self.txtTransDoubleQuotesB),
self.cmbTransSingleQuote: (self.txtTransSingleQuoteA, self.lblTransSingleQuote, self.txtTransSingleQuoteB),
}
for txt in map[cmb]:
txt.setVisible(cmb.currentData() == "custom")
def contentUpdateTable(self, val=False):
def addFolderRow(text="Folder"):
self.tableWidgetAddRow(self.tblContent, [
self.tableWidgetMakeItem(text, "folder"),
self.tableWidgetMakeItem("", "", True, True),
])
def addTextRow(text="Text"):
self.tableWidgetAddRow(self.tblContent, [
self.tableWidgetMakeItem(text, "text-x-generic"),
self.tableWidgetMakeItem("", "", True, False),
self.tableWidgetMakeItem("", "", True, True),
])
# self.tblContent.clearContents()
self.tblContent.setRowCount(0)
if not val:
addFolderRow()
addTextRow()
else:
level = self.mw.mdlOutline.maxLevel()
for i in range(level):
addFolderRow("{}Level {} folder".format(" " * i, i + 1))
for i in range(level):
addTextRow("{}Level {} text".format(" " * i, i + 1))
self.tableWidgetAdjustToContent(self.tblContent)
def transAddTableRow(self):
self.tableWidgetAddRow(self.tblReplacements, [
self.tableWidgetMakeItem("", "", True, True),
self.tableWidgetMakeItem("", "", False, False),
self.tableWidgetMakeItem("", "", False, False),
self.tableWidgetMakeItem("", "", True, False),
])
def transRemoveTableRow(self):
self.tblReplacements.removeRow(self.tblReplacements.currentRow())
def tableWidgetMakeItem(self, text="", icon="", checkable=False, checked=False):
"""Creates a QTableWidgetItem with the given attributes."""
item = QTableWidgetItem(QIcon.fromTheme(icon), text)
if checkable:
item.setFlags(item.flags() | Qt.ItemIsUserCheckable)
item.setCheckState(Qt.Checked if checked else Qt.Unchecked)
return item
def tableWidgetAddRow(self, table, items):
"""Appends the given items (list of QTableWidgetItems) to table."""
table.setRowCount(table.rowCount() + 1)
k = 0
for i in items:
table.setItem(table.rowCount() - 1, k, i)
k += 1
def tableWidgetAdjustToContent(self, table):
"""Set sizehint of QTableWidget table so that it matches content vertically."""
h = 0
h += table.horizontalHeader().height()
for i in range(table.rowCount()):
h += table.rowHeight(i)
table.setMinimumSize(QSize(0, h + 2))
table.setMaximumSize(QSize(16777215, h + 2))
def listWidgetAdjustToContent(self, lst):
"""Adjust listWidget to content."""
h = 0
for i in range(lst.count()):
h += lst.item(i).sizeHint().height()
lst.setMinimumSize(QSize(0, h+2))
lst.setMaximumSize(QSize(16777215, h+2))

View file

@ -0,0 +1,422 @@
#!/usr/bin/env python
# --!-- coding: utf8 --!--
import json
import os
from PyQt5.QtCore import Qt, QSize
from PyQt5.QtGui import QIcon, QFontMetrics, QFont
from PyQt5.QtWidgets import QWidget, QTableWidgetItem, QListWidgetItem, QTreeView
from manuskript.functions import mainWindow, writablePath
from manuskript.ui.exporters.manuskript.plainTextSettings_ui import Ui_exporterSettings
class exporterSettings(QWidget, Ui_exporterSettings):
def __init__(self, _format, parent=None):
QWidget.__init__(self, parent)
self.setupUi(self)
self.mw = mainWindow()
self._format = _format
self.settings = {}
#################################################################
# Content
self.grpContentFilters.button.setChecked(False)
h = self.tblContent.horizontalHeader()
h.setSectionResizeMode(h.ResizeToContents)
h.setSectionResizeMode(0, h.Stretch)
self.contentUpdateTable()
self.chkContentMore.toggled.connect(self.contentTableToggle)
self.contentTableToggle(False)
# Labels
self.lstContentLabels.clear()
h = QFontMetrics(self.font()).height()
for i in range(0, self.mw.mdlLabels.rowCount()):
item = self.mw.mdlLabels.item(i, 0)
if item:
item = QListWidgetItem(item.icon(), item.text())
item.setFlags(item.flags() | Qt.ItemIsUserCheckable)
item.setCheckState(Qt.Checked)
item.setSizeHint(QSize(100, h))
self.lstContentLabels.addItem(item)
self.chkContentLabels.toggled.connect(self.lstContentLabels.setVisible)
self.chkContentLabels.toggled.connect(lambda: self.listWidgetAdjustToContent(self.lstContentLabels))
self.lstContentLabels.setVisible(False)
# Status
self.lstContentStatus.clear()
h = QFontMetrics(self.font()).height()
for i in range(0, self.mw.mdlStatus.rowCount()):
item = self.mw.mdlStatus.item(i, 0)
if item:
item = QListWidgetItem(item.icon(), item.text())
item.setFlags(item.flags() | Qt.ItemIsUserCheckable)
item.setCheckState(Qt.Checked)
item.setSizeHint(QSize(100, h))
self.lstContentStatus.addItem(item)
self.chkContentStatus.toggled.connect(self.lstContentStatus.setVisible)
self.chkContentStatus.toggled.connect(lambda: self.listWidgetAdjustToContent(self.lstContentStatus))
self.lstContentStatus.setVisible(False)
# Root item
self.cmbContentParent.setModel(self.mw.mdlOutline)
v = QTreeView()
self.cmbContentParent.setView(v)
v.setHeaderHidden(True)
for i in range(1, self.mw.mdlOutline.columnCount()):
v.hideColumn(i)
self.chkContentParent.toggled.connect(self.cmbContentParent.setVisible)
self.cmbContentParent.hide()
#################################################################
# Separations
for cmb in [self.cmbSepFF, self.cmbSepTT, self.cmbSepFT, self.cmbSepTF]:
cmb.clear()
cmb.addItem(self.tr("Empty line"), "empty")
cmb.addItem(self.tr("Custom"), "custom")
cmb.currentIndexChanged.connect(self.sepCmbChanged)
#################################################################
# Transformations
h = self.tblReplacements.horizontalHeader()
h.setSectionResizeMode(h.ResizeToContents)
h.setSectionResizeMode(1, h.Stretch)
h.setSectionResizeMode(2, h.Stretch)
# Cf. https://en.wikipedia.org/wiki/Quotation_mark
self.cmbTransDoubleQuotes.clear()
self.cmbTransDoubleQuotes.addItems(["”___“", "“___”", "«___»"])
self.cmbTransSingleQuote.clear()
self.cmbTransSingleQuote.addItems(["___", "___"])
for cmb in [self.cmbTransDoubleQuotes, self.cmbTransSingleQuote]:
cmb.addItem(self.tr("Custom"), "custom")
cmb.currentIndexChanged.connect(self.transCmbChanged)
cmb.currentIndexChanged.emit(0)
self.btnTransAdd.clicked.connect(self.transAddTableRow)
self.btnTransRemove.clicked.connect(self.transRemoveTableRow)
self.tableWidgetAdjustToContent(self.tblReplacements)
#################################################################
# Preview
self.cmbPreviewFont.setCurrentFont(self.font())
self.spnPreviewSize.setValue(self.font().pointSize())
#################################################################
# Final stuff
self.toolBox.setCurrentIndex(0)
self.loadSettings()
###################################################################################################################
# SETTINGS
###################################################################################################################
def loadSettings(self):
filename = self.getSettingsPath()
print(filename)
if os.path.exists(filename):
with open(filename) as f:
self.settings = json.load(f)
self.updateFromSettings()
# Default values
else:
self.getSettings()
def writeSettings(self):
with open(self.getSettingsPath(), 'w') as f:
# json.dumps(json.loads(json.dumps(allSettings)), indent=4, sort_keys=True)
json.dump(self.settings, f, indent=4, sort_keys=True)
def getSettingsPath(self):
return os.path.join(writablePath(), "exporter.ini")
def updateFromSettings(self):
settings = self.settings
# Content
s = settings["Content"]
self.chkContentMore.setChecked(s["More"])
if not s["More"]:
self.tblContent.item(0, 1).setCheckState(Qt.Checked if s["FolderTitle"] else Qt.Unchecked)
self.tblContent.item(1, 1).setCheckState(Qt.Checked if s["TextTitle"] else Qt.Unchecked)
self.tblContent.item(1, 2).setCheckState(Qt.Checked if s["TextText"] else Qt.Unchecked)
else:
nLevel = len(s["FolderTitle"])
for i in range(nLevel):
self.tblContent.item(i + 2, 1).setCheckState(Qt.Checked if s["FolderTitle"][i] else Qt.Unchecked)
self.tblContent.item(i + 2 + nLevel, 1).setCheckState(Qt.Checked if s["TextTitle"][i] else Qt.Unchecked)
self.tblContent.item(i + 2 + nLevel, 2).setCheckState(Qt.Checked if s["TextText"][i] else Qt.Unchecked)
self.chkContentIgnoreCompile.setChecked(s["IgnoreCompile"])
self.chkContentParent.setChecked(s["Parent"])
self.chkContentLabels.setChecked(s["Labels"])
self.chkContentStatus.setChecked(s["Status"])
# FIXME: parent, labels, status
# Separations
s = settings["Separator"]
for val, cmb, txt in [
("FF", self.cmbSepFF, self.txtSepFF),
("TT", self.cmbSepTT, self.txtSepTT),
("FT", self.cmbSepFT, self.txtSepFT),
("TF", self.cmbSepTF, self.txtSepTF),
]:
if s[val] == "\n":
cmb.setCurrentIndex(0)
else:
cmb.setCurrentIndex(1)
txt.setText(self._format.escapes(s[val]))
# Transformations
s = settings["Transform"]
self.chkTransEllipse.setChecked(s["Ellipse"])
self.chkTransDash.setChecked(s["Dash"])
for val, chk, cmb, txtA, txtB in [
("DoubleQuotes", self.chkTransDoubleQuotes, self.cmbTransDoubleQuotes, self.txtTransDoubleQuotesA, self.txtTransDoubleQuotesB),
("SingleQuote", self.chkTransSingleQuote, self.cmbTransSingleQuote, self.txtTransSingleQuoteA, self.txtTransSingleQuoteB),
]:
chk.setChecked(s[val] != False)
if s[val]:
if cmb.findText(s[val]) != -1:
cmb.setCurrentText(s[val])
else:
cmb.setCurrentIndex(cmb.count() - 1)
txtA.setText(s[val].split("___")[0])
txtB.setText(s[val].split("___")[1])
self.chkTransSpaces.setChecked(s["Spaces"])
for i in s["Custom"]:
self.transAddTableRow(i[0], i[1], i[2], i[3])
# Preview
s = settings["Preview"]
f = QFont()
f.fromString(s["PreviewFont"])
self.cmbPreviewFont.setCurrentFont(f)
self.spnPreviewSize.setValue(f.pointSize())
def getSettings(self):
"""Updates settings from ui, and return."""
# Content
s = self.settings.get("Content", {})
s["More"] = self.chkContentMore.isChecked()
if not s["More"]:
s["FolderTitle"] = self.tblContent.item(0, 1).checkState() == Qt.Checked
s["TextTitle"] = self.tblContent.item(1, 1).checkState() == Qt.Checked
s["TextText"] = self.tblContent.item(1, 2).checkState() == Qt.Checked
else:
s["FolderTitle"] = []
s["TextTitle"] = []
s["TextText"] = []
nLevel = int((self.tblContent.rowCount() - 2) / 2)
print(nLevel)
for row in range(nLevel):
s["FolderTitle"].append(self.tblContent.item(2 + row, 1).checkState() == Qt.Checked)
s["TextTitle"].append(self.tblContent.item(2 + row + nLevel, 1).checkState() == Qt.Checked)
s["TextText"].append(self.tblContent.item(2 + row + nLevel, 2).checkState() == Qt.Checked)
s["IgnoreCompile"] = self.chkContentIgnoreCompile.isChecked()
s["Parent"] = self.chkContentParent.isChecked()
s["Labels"] = self.chkContentLabels.isChecked()
s["Status"] = self.chkContentStatus.isChecked()
self.settings["Content"] = s
# FIXME: parent, labels, status
# Separations
s = self.settings.get("Separator", {})
for val, cmb, txt in [
("FF", self.cmbSepFF, self.txtSepFF),
("TT", self.cmbSepTT, self.txtSepTT),
("FT", self.cmbSepFT, self.txtSepFT),
("TF", self.cmbSepTF, self.txtSepTF),
]:
if cmb.currentIndex() == 0:
s[val] = "\n"
else:
s[val] = self._format.descapes(txt.text())
self.settings["Separator"] = s
# Transformations
s = self.settings.get("Transform", {})
s["Ellipse"] = self.chkTransEllipse.isChecked()
s["Dash"] = self.chkTransDash.isChecked()
for val, chk, cmb, txtA, txtB in [
("DoubleQuotes", self.chkTransDoubleQuotes, self.cmbTransDoubleQuotes, self.txtTransDoubleQuotesA, self.txtTransDoubleQuotesB),
("SingleQuote", self.chkTransSingleQuote, self.cmbTransSingleQuote, self.txtTransSingleQuoteA, self.txtTransSingleQuoteB),
]:
if not chk.isChecked():
s[val] = False
else:
if cmb.currentData() == "custom":
s[val] = txtA.text() + "___" + txtB.text()
else:
s[val] = cmb.currentText()
s["Spaces"] = self.chkTransSpaces.isChecked()
s["Custom"] = []
for i in range(self.tblReplacements.rowCount()):
print(self.getTableRowValues(self.tblReplacements, i))
s["Custom"].append(self.getTableRowValues(self.tblReplacements, i))
self.settings["Transform"] = s
# Preview
s = self.settings.get("Preview", {})
f = self.cmbPreviewFont.currentFont()
f.setPointSize(self.spnPreviewSize.value())
s["PreviewFont"] = f.toString()
self.settings["Preview"] = s
# Save settings
self.writeSettings()
return self.settings
def sepCmbChanged(self, index):
cmb = self.sender()
map = {
self.cmbSepFF: self.txtSepFF,
self.cmbSepTT: self.txtSepTT,
self.cmbSepFT: self.txtSepFT,
self.cmbSepTF: self.txtSepTF
}
map[cmb].setEnabled(cmb.currentData() == "custom")
def transCmbChanged(self, index):
cmb = self.sender()
map = {
self.cmbTransDoubleQuotes: (self.txtTransDoubleQuotesA, self.lblTransDoubleQuotes, self.txtTransDoubleQuotesB),
self.cmbTransSingleQuote: (self.txtTransSingleQuoteA, self.lblTransSingleQuote, self.txtTransSingleQuoteB),
}
for txt in map[cmb]:
txt.setVisible(cmb.currentData() == "custom")
def contentUpdateTable(self):
def addFolderRow(text="Folder"):
self.tableWidgetAddRow(self.tblContent, [
self.tableWidgetMakeItem(text, "folder"),
self.tableWidgetMakeItem("", "", True, True),
])
def addTextRow(text="Text"):
self.tableWidgetAddRow(self.tblContent, [
self.tableWidgetMakeItem(text, "text-x-generic"),
self.tableWidgetMakeItem("", "", True, False),
self.tableWidgetMakeItem("", "", True, True),
])
self.tblContent.setRowCount(0)
# Basic
addFolderRow()
addTextRow()
# Detailed
level = self.mw.mdlOutline.maxLevel()
for i in range(level):
addFolderRow("{}Level {} folder".format(" " * i, i + 1))
for i in range(level):
addTextRow("{}Level {} text".format(" " * i, i + 1))
self.tableWidgetAdjustToContent(self.tblContent)
def contentTableToggle(self, detailed):
for i in range(self.tblContent.rowCount()):
self.tblContent.setRowHidden(i, i in [0, 1] and detailed or (not i in [0, 1] and not detailed))
self.tableWidgetAdjustToContent(self.tblContent)
def getTableRowValues(self, table, row):
r = []
for col in range(table.columnCount()):
item = table.item(row, col)
if not item:
r.append(None)
elif item.flags() & Qt.ItemIsUserCheckable == Qt.ItemIsUserCheckable:
r.append(item.checkState() == Qt.Checked)
else:
r.append(item.text())
return r
def transAddTableRow(self, checked=True, A="", B="", regexp=False):
self.tableWidgetAddRow(self.tblReplacements, [
self.tableWidgetMakeItem("", "", True, checked),
self.tableWidgetMakeItem(A, "", False, False),
self.tableWidgetMakeItem(B, "", False, False),
self.tableWidgetMakeItem("", "", True, regexp),
])
self.tableWidgetAdjustToContent(self.tblReplacements)
def transRemoveTableRow(self):
self.tblReplacements.removeRow(self.tblReplacements.currentRow())
self.tableWidgetAdjustToContent(self.tblReplacements)
def tableWidgetMakeItem(self, text="", icon="", checkable=False, checked=False):
"""Creates a QTableWidgetItem with the given attributes."""
item = QTableWidgetItem(QIcon.fromTheme(icon), text)
if checkable:
item.setFlags(item.flags() | Qt.ItemIsUserCheckable)
item.setCheckState(Qt.Checked if checked else Qt.Unchecked)
else:
item.setFlags(item.flags() & ~Qt.ItemIsUserCheckable)
return item
def tableWidgetAddRow(self, table, items):
"""Appends the given items (list of QTableWidgetItems) to table."""
table.setRowCount(table.rowCount() + 1)
k = 0
for i in items:
table.setItem(table.rowCount() - 1, k, i)
k += 1
def tableWidgetAdjustToContent(self, table):
"""Set sizehint of QTableWidget table so that it matches content vertically."""
h = 0
h += table.horizontalHeader().height()
for i in range(table.rowCount()):
h += table.rowHeight(i)
table.setMinimumSize(QSize(0, h + 2))
table.setMaximumSize(QSize(16777215, h + 2))
def listWidgetAdjustToContent(self, lst):
"""Adjust listWidget to content."""
h = 0
for i in range(lst.count()):
h += lst.item(i).sizeHint().height()
lst.setMinimumSize(QSize(0, h+2))
lst.setMaximumSize(QSize(16777215, h+2))

View file

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'manuskript/ui/exporters/exporterSettings_ui.ui'
# Form implementation generated from reading ui file 'manuskript/ui/exporters/manuskript/plainTextSettings_ui.ui'
#
# Created by: PyQt5 UI code generator 5.4.2
#
@ -27,15 +27,15 @@ class Ui_exporterSettings(object):
" background-color:skyblue;\n"
"}")
self.toolBox.setObjectName("toolBox")
self.page = QtWidgets.QWidget()
self.page.setGeometry(QtCore.QRect(0, 0, 491, 824))
self.page.setObjectName("page")
self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.page)
self.content = QtWidgets.QWidget()
self.content.setGeometry(QtCore.QRect(0, 0, 491, 842))
self.content.setObjectName("content")
self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.content)
self.verticalLayout_5.setObjectName("verticalLayout_5")
self.label = QtWidgets.QLabel(self.page)
self.label = QtWidgets.QLabel(self.content)
self.label.setObjectName("label")
self.verticalLayout_5.addWidget(self.label)
self.tblContent = QtWidgets.QTableWidget(self.page)
self.tblContent = QtWidgets.QTableWidget(self.content)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
@ -60,11 +60,11 @@ class Ui_exporterSettings(object):
self.horizontalLayout_8.setObjectName("horizontalLayout_8")
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_8.addItem(spacerItem)
self.chkContentMore = QtWidgets.QCheckBox(self.page)
self.chkContentMore = QtWidgets.QCheckBox(self.content)
self.chkContentMore.setObjectName("chkContentMore")
self.horizontalLayout_8.addWidget(self.chkContentMore)
self.verticalLayout_5.addLayout(self.horizontalLayout_8)
self.grpContentFilters = collapsibleGroupBox2(self.page)
self.grpContentFilters = collapsibleGroupBox2(self.content)
self.grpContentFilters.setCheckable(True)
self.grpContentFilters.setObjectName("grpContentFilters")
self.formLayout_2 = QtWidgets.QFormLayout(self.grpContentFilters)
@ -83,7 +83,6 @@ class Ui_exporterSettings(object):
self.cmbContentParent = QtWidgets.QComboBox(self.grpContentFilters)
self.cmbContentParent.setFrame(False)
self.cmbContentParent.setObjectName("cmbContentParent")
self.cmbContentParent.addItem("")
self.formLayout_2.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.cmbContentParent)
self.chkContentLabels = QtWidgets.QCheckBox(self.grpContentFilters)
self.chkContentLabels.setObjectName("chkContentLabels")
@ -110,12 +109,13 @@ class Ui_exporterSettings(object):
self.verticalLayout_5.addWidget(self.grpContentFilters)
spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_5.addItem(spacerItem1)
self.toolBox.addItem(self.page, "")
self.page_3 = QtWidgets.QWidget()
self.page_3.setObjectName("page_3")
self.verticalLayout_8 = QtWidgets.QVBoxLayout(self.page_3)
self.toolBox.addItem(self.content, "")
self.separations = QtWidgets.QWidget()
self.separations.setGeometry(QtCore.QRect(0, 0, 511, 522))
self.separations.setObjectName("separations")
self.verticalLayout_8 = QtWidgets.QVBoxLayout(self.separations)
self.verticalLayout_8.setObjectName("verticalLayout_8")
self.label_3 = QtWidgets.QLabel(self.page_3)
self.label_3 = QtWidgets.QLabel(self.separations)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
@ -128,7 +128,7 @@ class Ui_exporterSettings(object):
self.horizontalLayout.addItem(spacerItem2)
self.verticalLayout = QtWidgets.QVBoxLayout()
self.verticalLayout.setObjectName("verticalLayout")
self.pushButton_4 = QtWidgets.QPushButton(self.page_3)
self.pushButton_4 = QtWidgets.QPushButton(self.separations)
self.pushButton_4.setEnabled(True)
self.pushButton_4.setMinimumSize(QtCore.QSize(16, 16))
self.pushButton_4.setMaximumSize(QtCore.QSize(16, 16))
@ -138,12 +138,12 @@ class Ui_exporterSettings(object):
self.pushButton_4.setFlat(True)
self.pushButton_4.setObjectName("pushButton_4")
self.verticalLayout.addWidget(self.pushButton_4)
self.line = QtWidgets.QFrame(self.page_3)
self.line = QtWidgets.QFrame(self.separations)
self.line.setFrameShape(QtWidgets.QFrame.HLine)
self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line.setObjectName("line")
self.verticalLayout.addWidget(self.line)
self.pushButton = QtWidgets.QPushButton(self.page_3)
self.pushButton = QtWidgets.QPushButton(self.separations)
self.pushButton.setEnabled(True)
self.pushButton.setMinimumSize(QtCore.QSize(16, 16))
self.pushButton.setMaximumSize(QtCore.QSize(16, 16))
@ -154,17 +154,17 @@ class Ui_exporterSettings(object):
self.pushButton.setObjectName("pushButton")
self.verticalLayout.addWidget(self.pushButton)
self.horizontalLayout.addLayout(self.verticalLayout)
self.cmbSepFF = QtWidgets.QComboBox(self.page_3)
self.cmbSepFF = QtWidgets.QComboBox(self.separations)
self.cmbSepFF.setObjectName("cmbSepFF")
self.cmbSepFF.addItem("")
self.cmbSepFF.addItem("")
self.horizontalLayout.addWidget(self.cmbSepFF)
self.txtSepFF = QtWidgets.QLineEdit(self.page_3)
self.txtSepFF = QtWidgets.QLineEdit(self.separations)
self.txtSepFF.setEnabled(False)
self.txtSepFF.setObjectName("txtSepFF")
self.horizontalLayout.addWidget(self.txtSepFF)
self.verticalLayout_8.addLayout(self.horizontalLayout)
self.label_4 = QtWidgets.QLabel(self.page_3)
self.label_4 = QtWidgets.QLabel(self.separations)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
@ -177,7 +177,7 @@ class Ui_exporterSettings(object):
self.horizontalLayout_2.addItem(spacerItem3)
self.verticalLayout_3 = QtWidgets.QVBoxLayout()
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.pushButton_5 = QtWidgets.QPushButton(self.page_3)
self.pushButton_5 = QtWidgets.QPushButton(self.separations)
self.pushButton_5.setEnabled(True)
self.pushButton_5.setMinimumSize(QtCore.QSize(16, 16))
self.pushButton_5.setMaximumSize(QtCore.QSize(16, 16))
@ -187,12 +187,12 @@ class Ui_exporterSettings(object):
self.pushButton_5.setFlat(True)
self.pushButton_5.setObjectName("pushButton_5")
self.verticalLayout_3.addWidget(self.pushButton_5)
self.line_2 = QtWidgets.QFrame(self.page_3)
self.line_2 = QtWidgets.QFrame(self.separations)
self.line_2.setFrameShape(QtWidgets.QFrame.HLine)
self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line_2.setObjectName("line_2")
self.verticalLayout_3.addWidget(self.line_2)
self.pushButton_6 = QtWidgets.QPushButton(self.page_3)
self.pushButton_6 = QtWidgets.QPushButton(self.separations)
self.pushButton_6.setEnabled(True)
self.pushButton_6.setMinimumSize(QtCore.QSize(16, 16))
self.pushButton_6.setMaximumSize(QtCore.QSize(16, 16))
@ -203,17 +203,17 @@ class Ui_exporterSettings(object):
self.pushButton_6.setObjectName("pushButton_6")
self.verticalLayout_3.addWidget(self.pushButton_6)
self.horizontalLayout_2.addLayout(self.verticalLayout_3)
self.cmbSepTT = QtWidgets.QComboBox(self.page_3)
self.cmbSepTT = QtWidgets.QComboBox(self.separations)
self.cmbSepTT.setObjectName("cmbSepTT")
self.cmbSepTT.addItem("")
self.cmbSepTT.addItem("")
self.horizontalLayout_2.addWidget(self.cmbSepTT)
self.txtSepTT = QtWidgets.QLineEdit(self.page_3)
self.txtSepTT = QtWidgets.QLineEdit(self.separations)
self.txtSepTT.setEnabled(False)
self.txtSepTT.setObjectName("txtSepTT")
self.horizontalLayout_2.addWidget(self.txtSepTT)
self.verticalLayout_8.addLayout(self.horizontalLayout_2)
self.label_6 = QtWidgets.QLabel(self.page_3)
self.label_6 = QtWidgets.QLabel(self.separations)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
@ -226,7 +226,7 @@ class Ui_exporterSettings(object):
self.horizontalLayout_3.addItem(spacerItem4)
self.verticalLayout_4 = QtWidgets.QVBoxLayout()
self.verticalLayout_4.setObjectName("verticalLayout_4")
self.pushButton_7 = QtWidgets.QPushButton(self.page_3)
self.pushButton_7 = QtWidgets.QPushButton(self.separations)
self.pushButton_7.setEnabled(True)
self.pushButton_7.setMinimumSize(QtCore.QSize(16, 16))
self.pushButton_7.setMaximumSize(QtCore.QSize(16, 16))
@ -236,12 +236,12 @@ class Ui_exporterSettings(object):
self.pushButton_7.setFlat(True)
self.pushButton_7.setObjectName("pushButton_7")
self.verticalLayout_4.addWidget(self.pushButton_7)
self.line_3 = QtWidgets.QFrame(self.page_3)
self.line_3 = QtWidgets.QFrame(self.separations)
self.line_3.setFrameShape(QtWidgets.QFrame.HLine)
self.line_3.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line_3.setObjectName("line_3")
self.verticalLayout_4.addWidget(self.line_3)
self.pushButton_8 = QtWidgets.QPushButton(self.page_3)
self.pushButton_8 = QtWidgets.QPushButton(self.separations)
self.pushButton_8.setEnabled(True)
self.pushButton_8.setMinimumSize(QtCore.QSize(16, 16))
self.pushButton_8.setMaximumSize(QtCore.QSize(16, 16))
@ -252,17 +252,17 @@ class Ui_exporterSettings(object):
self.pushButton_8.setObjectName("pushButton_8")
self.verticalLayout_4.addWidget(self.pushButton_8)
self.horizontalLayout_3.addLayout(self.verticalLayout_4)
self.cmbSepFT = QtWidgets.QComboBox(self.page_3)
self.cmbSepFT = QtWidgets.QComboBox(self.separations)
self.cmbSepFT.setObjectName("cmbSepFT")
self.cmbSepFT.addItem("")
self.cmbSepFT.addItem("")
self.horizontalLayout_3.addWidget(self.cmbSepFT)
self.txtSepFT = QtWidgets.QLineEdit(self.page_3)
self.txtSepFT = QtWidgets.QLineEdit(self.separations)
self.txtSepFT.setEnabled(False)
self.txtSepFT.setObjectName("txtSepFT")
self.horizontalLayout_3.addWidget(self.txtSepFT)
self.verticalLayout_8.addLayout(self.horizontalLayout_3)
self.label_5 = QtWidgets.QLabel(self.page_3)
self.label_5 = QtWidgets.QLabel(self.separations)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
@ -275,7 +275,7 @@ class Ui_exporterSettings(object):
self.horizontalLayout_4.addItem(spacerItem5)
self.verticalLayout_7 = QtWidgets.QVBoxLayout()
self.verticalLayout_7.setObjectName("verticalLayout_7")
self.pushButton_9 = QtWidgets.QPushButton(self.page_3)
self.pushButton_9 = QtWidgets.QPushButton(self.separations)
self.pushButton_9.setEnabled(True)
self.pushButton_9.setMinimumSize(QtCore.QSize(16, 16))
self.pushButton_9.setMaximumSize(QtCore.QSize(16, 16))
@ -285,12 +285,12 @@ class Ui_exporterSettings(object):
self.pushButton_9.setFlat(True)
self.pushButton_9.setObjectName("pushButton_9")
self.verticalLayout_7.addWidget(self.pushButton_9)
self.line_4 = QtWidgets.QFrame(self.page_3)
self.line_4 = QtWidgets.QFrame(self.separations)
self.line_4.setFrameShape(QtWidgets.QFrame.HLine)
self.line_4.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line_4.setObjectName("line_4")
self.verticalLayout_7.addWidget(self.line_4)
self.pushButton_10 = QtWidgets.QPushButton(self.page_3)
self.pushButton_10 = QtWidgets.QPushButton(self.separations)
self.pushButton_10.setEnabled(True)
self.pushButton_10.setMinimumSize(QtCore.QSize(16, 16))
self.pushButton_10.setMaximumSize(QtCore.QSize(16, 16))
@ -301,26 +301,26 @@ class Ui_exporterSettings(object):
self.pushButton_10.setObjectName("pushButton_10")
self.verticalLayout_7.addWidget(self.pushButton_10)
self.horizontalLayout_4.addLayout(self.verticalLayout_7)
self.cmbSepTF = QtWidgets.QComboBox(self.page_3)
self.cmbSepTF = QtWidgets.QComboBox(self.separations)
self.cmbSepTF.setObjectName("cmbSepTF")
self.cmbSepTF.addItem("")
self.cmbSepTF.addItem("")
self.horizontalLayout_4.addWidget(self.cmbSepTF)
self.txtSepTF = QtWidgets.QLineEdit(self.page_3)
self.txtSepTF = QtWidgets.QLineEdit(self.separations)
self.txtSepTF.setEnabled(False)
self.txtSepTF.setObjectName("txtSepTF")
self.horizontalLayout_4.addWidget(self.txtSepTF)
self.verticalLayout_8.addLayout(self.horizontalLayout_4)
spacerItem6 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_8.addItem(spacerItem6)
self.toolBox.addItem(self.page_3, "")
self.page_2 = QtWidgets.QWidget()
self.page_2.setGeometry(QtCore.QRect(0, 0, 511, 548))
self.page_2.setStyleSheet("QGroupBox{font-weight:bold;}")
self.page_2.setObjectName("page_2")
self.verticalLayout_6 = QtWidgets.QVBoxLayout(self.page_2)
self.toolBox.addItem(self.separations, "")
self.transformations = QtWidgets.QWidget()
self.transformations.setGeometry(QtCore.QRect(0, 0, 511, 522))
self.transformations.setStyleSheet("QGroupBox{font-weight:bold;}")
self.transformations.setObjectName("transformations")
self.verticalLayout_6 = QtWidgets.QVBoxLayout(self.transformations)
self.verticalLayout_6.setObjectName("verticalLayout_6")
self.grpTransTypo = collapsibleGroupBox2(self.page_2)
self.grpTransTypo = collapsibleGroupBox2(self.transformations)
self.grpTransTypo.setStyleSheet("")
self.grpTransTypo.setObjectName("grpTransTypo")
self.formLayout = QtWidgets.QFormLayout(self.grpTransTypo)
@ -345,7 +345,6 @@ class Ui_exporterSettings(object):
self.cmbTransDoubleQuotes.setObjectName("cmbTransDoubleQuotes")
self.horizontalLayout_5.addWidget(self.cmbTransDoubleQuotes)
self.txtTransDoubleQuotesA = QtWidgets.QLineEdit(self.grpTransTypo)
self.txtTransDoubleQuotesA.setEnabled(False)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
@ -355,14 +354,13 @@ class Ui_exporterSettings(object):
self.txtTransDoubleQuotesA.setMaximumSize(QtCore.QSize(40, 16777215))
self.txtTransDoubleQuotesA.setStyleSheet("border-radius: 6px;")
self.txtTransDoubleQuotesA.setFrame(False)
self.txtTransDoubleQuotesA.setAlignment(QtCore.Qt.AlignCenter)
self.txtTransDoubleQuotesA.setObjectName("txtTransDoubleQuotesA")
self.horizontalLayout_5.addWidget(self.txtTransDoubleQuotesA)
self.lblTransDoubleQuotes = QtWidgets.QLabel(self.grpTransTypo)
self.lblTransDoubleQuotes.setEnabled(False)
self.lblTransDoubleQuotes.setObjectName("lblTransDoubleQuotes")
self.horizontalLayout_5.addWidget(self.lblTransDoubleQuotes)
self.txtTransDoubleQuotesB = QtWidgets.QLineEdit(self.grpTransTypo)
self.txtTransDoubleQuotesB.setEnabled(False)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
@ -372,6 +370,7 @@ class Ui_exporterSettings(object):
self.txtTransDoubleQuotesB.setMaximumSize(QtCore.QSize(40, 16777215))
self.txtTransDoubleQuotesB.setStyleSheet("border-radius: 6px;")
self.txtTransDoubleQuotesB.setFrame(False)
self.txtTransDoubleQuotesB.setAlignment(QtCore.Qt.AlignCenter)
self.txtTransDoubleQuotesB.setObjectName("txtTransDoubleQuotesB")
self.horizontalLayout_5.addWidget(self.txtTransDoubleQuotesB)
spacerItem7 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
@ -388,7 +387,6 @@ class Ui_exporterSettings(object):
self.cmbTransSingleQuote.setObjectName("cmbTransSingleQuote")
self.horizontalLayout_6.addWidget(self.cmbTransSingleQuote)
self.txtTransSingleQuoteA = QtWidgets.QLineEdit(self.grpTransTypo)
self.txtTransSingleQuoteA.setEnabled(False)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
@ -398,14 +396,13 @@ class Ui_exporterSettings(object):
self.txtTransSingleQuoteA.setMaximumSize(QtCore.QSize(40, 16777215))
self.txtTransSingleQuoteA.setStyleSheet("border-radius: 6px;")
self.txtTransSingleQuoteA.setFrame(False)
self.txtTransSingleQuoteA.setAlignment(QtCore.Qt.AlignCenter)
self.txtTransSingleQuoteA.setObjectName("txtTransSingleQuoteA")
self.horizontalLayout_6.addWidget(self.txtTransSingleQuoteA)
self.lblTransSingleQuote = QtWidgets.QLabel(self.grpTransTypo)
self.lblTransSingleQuote.setEnabled(False)
self.lblTransSingleQuote.setObjectName("lblTransSingleQuote")
self.horizontalLayout_6.addWidget(self.lblTransSingleQuote)
self.txtTransSingleQuoteB = QtWidgets.QLineEdit(self.grpTransTypo)
self.txtTransSingleQuoteB.setEnabled(False)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
@ -415,6 +412,7 @@ class Ui_exporterSettings(object):
self.txtTransSingleQuoteB.setMaximumSize(QtCore.QSize(40, 16777215))
self.txtTransSingleQuoteB.setStyleSheet("border-radius: 6px;")
self.txtTransSingleQuoteB.setFrame(False)
self.txtTransSingleQuoteB.setAlignment(QtCore.Qt.AlignCenter)
self.txtTransSingleQuoteB.setObjectName("txtTransSingleQuoteB")
self.horizontalLayout_6.addWidget(self.txtTransSingleQuoteB)
spacerItem8 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
@ -424,11 +422,16 @@ class Ui_exporterSettings(object):
self.chkTransSpaces.setObjectName("chkTransSpaces")
self.formLayout.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.chkTransSpaces)
self.verticalLayout_6.addWidget(self.grpTransTypo)
self.grpTransCustom = collapsibleGroupBox2(self.page_2)
self.grpTransCustom = collapsibleGroupBox2(self.transformations)
self.grpTransCustom.setObjectName("grpTransCustom")
self.verticalLayout_9 = QtWidgets.QVBoxLayout(self.grpTransCustom)
self.verticalLayout_9.setObjectName("verticalLayout_9")
self.tblReplacements = QtWidgets.QTableWidget(self.grpTransCustom)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.tblReplacements.sizePolicy().hasHeightForWidth())
self.tblReplacements.setSizePolicy(sizePolicy)
self.tblReplacements.setAlternatingRowColors(True)
self.tblReplacements.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
self.tblReplacements.setObjectName("tblReplacements")
@ -466,11 +469,35 @@ class Ui_exporterSettings(object):
self.verticalLayout_6.addWidget(self.grpTransCustom)
spacerItem10 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_6.addItem(spacerItem10)
self.toolBox.addItem(self.page_2, "")
self.toolBox.addItem(self.transformations, "")
self.preview = QtWidgets.QWidget()
self.preview.setObjectName("preview")
self.verticalLayout_11 = QtWidgets.QVBoxLayout(self.preview)
self.verticalLayout_11.setObjectName("verticalLayout_11")
self.groupBox = QtWidgets.QGroupBox(self.preview)
self.groupBox.setObjectName("groupBox")
self.formLayout_3 = QtWidgets.QFormLayout(self.groupBox)
self.formLayout_3.setObjectName("formLayout_3")
self.label_7 = QtWidgets.QLabel(self.groupBox)
self.label_7.setObjectName("label_7")
self.formLayout_3.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_7)
self.cmbPreviewFont = QtWidgets.QFontComboBox(self.groupBox)
self.cmbPreviewFont.setObjectName("cmbPreviewFont")
self.formLayout_3.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.cmbPreviewFont)
self.label_8 = QtWidgets.QLabel(self.groupBox)
self.label_8.setObjectName("label_8")
self.formLayout_3.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_8)
self.spnPreviewSize = QtWidgets.QSpinBox(self.groupBox)
self.spnPreviewSize.setObjectName("spnPreviewSize")
self.formLayout_3.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.spnPreviewSize)
self.verticalLayout_11.addWidget(self.groupBox)
spacerItem11 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_11.addItem(spacerItem11)
self.toolBox.addItem(self.preview, "")
self.verticalLayout_2.addWidget(self.toolBox)
self.retranslateUi(exporterSettings)
self.toolBox.setCurrentIndex(0)
self.toolBox.setCurrentIndex(3)
self.toolBox.layout().setSpacing(0)
QtCore.QMetaObject.connectSlotsByName(exporterSettings)
@ -486,13 +513,12 @@ class Ui_exporterSettings(object):
item.setText(_translate("exporterSettings", "Text"))
self.chkContentMore.setText(_translate("exporterSettings", "I need more granularity"))
self.grpContentFilters.setTitle(_translate("exporterSettings", "Fi&lters"))
self.label_2.setText(_translate("exporterSettings", "Filters what items will be included in the final export."))
self.label_2.setText(_translate("exporterSettings", "<html><head/><body><p>Filters what items will be included in the final export.<br/><span style=\" color:#773333;\">(Not fully implemented yet.)</span></p></body></html>"))
self.chkContentIgnoreCompile.setText(_translate("exporterSettings", "Ignore compile status (include all items)"))
self.chkContentParent.setText(_translate("exporterSettings", "Subitems of:"))
self.cmbContentParent.setItemText(0, _translate("exporterSettings", "Root (all)"))
self.chkContentLabels.setText(_translate("exporterSettings", "Labels"))
self.chkContentStatus.setText(_translate("exporterSettings", "Status"))
self.toolBox.setItemText(self.toolBox.indexOf(self.page), _translate("exporterSettings", "Content"))
self.toolBox.setItemText(self.toolBox.indexOf(self.content), _translate("exporterSettings", "Content"))
self.label_3.setText(_translate("exporterSettings", "Between folders:"))
self.cmbSepFF.setItemText(0, _translate("exporterSettings", "Empty line"))
self.cmbSepFF.setItemText(1, _translate("exporterSettings", "Custom"))
@ -509,7 +535,7 @@ class Ui_exporterSettings(object):
self.cmbSepTF.setItemText(0, _translate("exporterSettings", "Empty line"))
self.cmbSepTF.setItemText(1, _translate("exporterSettings", "Custom"))
self.txtSepTF.setText(_translate("exporterSettings", "\\n"))
self.toolBox.setItemText(self.toolBox.indexOf(self.page_3), _translate("exporterSettings", "Separations"))
self.toolBox.setItemText(self.toolBox.indexOf(self.separations), _translate("exporterSettings", "Separations"))
self.grpTransTypo.setTitle(_translate("exporterSettings", "Typographic replacements:"))
self.chkTransEllipse.setText(_translate("exporterSettings", "Replace ... with …"))
self.chkTransDash.setText(_translate("exporterSettings", "Replace --- with —"))
@ -528,6 +554,10 @@ class Ui_exporterSettings(object):
item = self.tblReplacements.horizontalHeaderItem(3)
item.setText(_translate("exporterSettings", "RegExp"))
item.setWhatsThis(_translate("exporterSettings", "If checked, uses regular expression for replacement. If unchecked, replaced as plain text."))
self.toolBox.setItemText(self.toolBox.indexOf(self.page_2), _translate("exporterSettings", "Transformations"))
self.toolBox.setItemText(self.toolBox.indexOf(self.transformations), _translate("exporterSettings", "Transformations"))
self.groupBox.setTitle(_translate("exporterSettings", "Font"))
self.label_7.setText(_translate("exporterSettings", "Font:"))
self.label_8.setText(_translate("exporterSettings", "Font size:"))
self.toolBox.setItemText(self.toolBox.indexOf(self.preview), _translate("exporterSettings", "Preview"))
from manuskript.ui.collapsibleGroupBox2 import collapsibleGroupBox2

View file

@ -43,18 +43,18 @@ QToolBox::tab:selected, QToolBox::tab:hover{
}</string>
</property>
<property name="currentIndex">
<number>0</number>
<number>3</number>
</property>
<property name="tabSpacing">
<number>0</number>
</property>
<widget class="QWidget" name="page">
<widget class="QWidget" name="content">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>491</width>
<height>824</height>
<height>842</height>
</rect>
</property>
<attribute name="label">
@ -150,7 +150,7 @@ QToolBox::tab:selected, QToolBox::tab:hover{
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Filters what items will be included in the final export.</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Filters what items will be included in the final export.&lt;br/&gt;&lt;span style=&quot; color:#773333;&quot;&gt;(Not fully implemented yet.)&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
@ -227,7 +227,15 @@ QToolBox::tab:selected, QToolBox::tab:hover{
</item>
</layout>
</widget>
<widget class="QWidget" name="page_3">
<widget class="QWidget" name="separations">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>511</width>
<height>522</height>
</rect>
</property>
<attribute name="label">
<string>Separations</string>
</attribute>
@ -286,7 +294,9 @@ QToolBox::tab:selected, QToolBox::tab:hover{
<string/>
</property>
<property name="icon">
<iconset theme="folder"/>
<iconset theme="folder">
<normaloff/>
</iconset>
</property>
<property name="flat">
<bool>true</bool>
@ -321,7 +331,9 @@ QToolBox::tab:selected, QToolBox::tab:hover{
<string/>
</property>
<property name="icon">
<iconset theme="folder"/>
<iconset theme="folder">
<normaloff/>
</iconset>
</property>
<property name="flat">
<bool>true</bool>
@ -410,7 +422,9 @@ QToolBox::tab:selected, QToolBox::tab:hover{
<string/>
</property>
<property name="icon">
<iconset theme="text-x-generic"/>
<iconset theme="text-x-generic">
<normaloff/>
</iconset>
</property>
<property name="flat">
<bool>true</bool>
@ -536,7 +550,9 @@ QToolBox::tab:selected, QToolBox::tab:hover{
<string/>
</property>
<property name="icon">
<iconset theme="folder"/>
<iconset theme="folder">
<normaloff/>
</iconset>
</property>
<property name="flat">
<bool>true</bool>
@ -571,7 +587,9 @@ QToolBox::tab:selected, QToolBox::tab:hover{
<string/>
</property>
<property name="icon">
<iconset theme="text-x-generic"/>
<iconset theme="text-x-generic">
<normaloff/>
</iconset>
</property>
<property name="flat">
<bool>true</bool>
@ -660,7 +678,9 @@ QToolBox::tab:selected, QToolBox::tab:hover{
<string/>
</property>
<property name="icon">
<iconset theme="text-x-generic"/>
<iconset theme="text-x-generic">
<normaloff/>
</iconset>
</property>
<property name="flat">
<bool>true</bool>
@ -695,7 +715,9 @@ QToolBox::tab:selected, QToolBox::tab:hover{
<string/>
</property>
<property name="icon">
<iconset theme="folder"/>
<iconset theme="folder">
<normaloff/>
</iconset>
</property>
<property name="flat">
<bool>true</bool>
@ -745,13 +767,13 @@ QToolBox::tab:selected, QToolBox::tab:hover{
</item>
</layout>
</widget>
<widget class="QWidget" name="page_2">
<widget class="QWidget" name="transformations">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>511</width>
<height>548</height>
<height>522</height>
</rect>
</property>
<property name="styleSheet">
@ -814,9 +836,6 @@ QToolBox::tab:selected, QToolBox::tab:hover{
</item>
<item>
<widget class="QLineEdit" name="txtTransDoubleQuotesA">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
@ -841,13 +860,13 @@ QToolBox::tab:selected, QToolBox::tab:hover{
<property name="frame">
<bool>false</bool>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="lblTransDoubleQuotes">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>…</string>
</property>
@ -855,9 +874,6 @@ QToolBox::tab:selected, QToolBox::tab:hover{
</item>
<item>
<widget class="QLineEdit" name="txtTransDoubleQuotesB">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
@ -882,6 +898,9 @@ QToolBox::tab:selected, QToolBox::tab:hover{
<property name="frame">
<bool>false</bool>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
@ -920,9 +939,6 @@ QToolBox::tab:selected, QToolBox::tab:hover{
</item>
<item>
<widget class="QLineEdit" name="txtTransSingleQuoteA">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
@ -947,13 +963,13 @@ QToolBox::tab:selected, QToolBox::tab:hover{
<property name="frame">
<bool>false</bool>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="lblTransSingleQuote">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>…</string>
</property>
@ -961,9 +977,6 @@ QToolBox::tab:selected, QToolBox::tab:hover{
</item>
<item>
<widget class="QLineEdit" name="txtTransSingleQuoteB">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
@ -988,6 +1001,9 @@ QToolBox::tab:selected, QToolBox::tab:hover{
<property name="frame">
<bool>false</bool>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
@ -1023,6 +1039,12 @@ QToolBox::tab:selected, QToolBox::tab:hover{
<layout class="QVBoxLayout" name="verticalLayout_9">
<item>
<widget class="QTableWidget" name="tblReplacements">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="alternatingRowColors">
<bool>true</bool>
</property>
@ -1078,7 +1100,9 @@ QToolBox::tab:selected, QToolBox::tab:hover{
<string/>
</property>
<property name="icon">
<iconset theme="list-add"/>
<iconset theme="list-add">
<normaloff/>
</iconset>
</property>
<property name="flat">
<bool>true</bool>
@ -1091,7 +1115,9 @@ QToolBox::tab:selected, QToolBox::tab:hover{
<string/>
</property>
<property name="icon">
<iconset theme="list-remove"/>
<iconset theme="list-remove">
<normaloff/>
</iconset>
</property>
<property name="flat">
<bool>true</bool>
@ -1118,6 +1144,55 @@ QToolBox::tab:selected, QToolBox::tab:hover{
</item>
</layout>
</widget>
<widget class="QWidget" name="preview">
<attribute name="label">
<string>Preview</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_11">
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Font</string>
</property>
<layout class="QFormLayout" name="formLayout_3">
<item row="0" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Font:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QFontComboBox" name="cmbPreviewFont"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
<string>Font size:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="spnPreviewSize"/>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer_4">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</widget>
</item>
</layout>