manuskript/manuskript/ui/exporters/exporterSettings.py
2016-04-05 17:22:39 +02:00

212 lines
7.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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))