mirror of
https://github.com/olivierkes/manuskript.git
synced 2024-05-17 11:22:28 +12:00
212 lines
7.6 KiB
Python
212 lines
7.6 KiB
Python
#!/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))
|
||
|
||
|
||
|