mirror of
https://github.com/olivierkes/manuskript.git
synced 2024-05-14 01:42:28 +12:00
New exporter: initial commit
This commit is contained in:
parent
74e9ad3906
commit
a53937833d
|
@ -1,32 +1,19 @@
|
|||
#!/usr/bin/env python
|
||||
# --!-- coding: utf8 --!--
|
||||
import collections
|
||||
|
||||
from PyQt5.QtWidgets import qApp
|
||||
from manuskript.exporter.manuskript import manuskriptExporter
|
||||
from manuskript.exporter.mmd import mmdExporter
|
||||
from manuskript.exporter.pandoc import pandocExporter
|
||||
|
||||
from manuskript.exporter.arbo import arboExporter
|
||||
from manuskript.exporter.html import htmlExporter
|
||||
from manuskript.exporter.odt import odtExporter
|
||||
exporters = [
|
||||
manuskriptExporter,
|
||||
pandocExporter,
|
||||
mmdExporter
|
||||
]
|
||||
|
||||
formats = collections.OrderedDict([
|
||||
# Format
|
||||
# Readable name
|
||||
# Class
|
||||
# QFileDialog filter
|
||||
('html', (
|
||||
qApp.translate("exporter", "HTML"),
|
||||
htmlExporter,
|
||||
qApp.translate("exporter", "HTML Document (*.html)"))),
|
||||
('arbo', (
|
||||
qApp.translate("exporter", "Arborescence"),
|
||||
arboExporter,
|
||||
None)),
|
||||
('odt', (
|
||||
qApp.translate("exporter", "OpenDocument (LibreOffice)"),
|
||||
odtExporter,
|
||||
qApp.translate("exporter", "OpenDocument (*.odt)"))),
|
||||
('epub', (
|
||||
"ePub (not yet)",
|
||||
None,
|
||||
None)),
|
||||
])
|
||||
def getExporterByName(name):
|
||||
for e in exporters:
|
||||
if e.name == name:
|
||||
return e
|
||||
|
||||
return None
|
|
@ -1,46 +0,0 @@
|
|||
#!/usr/bin/env python
|
||||
# --!-- coding: utf8 --!--
|
||||
import os
|
||||
|
||||
from manuskript.functions import mainWindow
|
||||
|
||||
|
||||
class arboExporter():
|
||||
requires = ["path"]
|
||||
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
def doCompile(self, path):
|
||||
# FIXME: overwrites when items have identical names
|
||||
mw = mainWindow()
|
||||
root = mw.mdlOutline.rootItem
|
||||
|
||||
def writeItem(item, path):
|
||||
if item.isFolder():
|
||||
path2 = os.path.join(path, item.title())
|
||||
|
||||
try:
|
||||
os.mkdir(path2)
|
||||
except FileExistsError:
|
||||
pass
|
||||
|
||||
for c in item.children():
|
||||
writeItem(c, path2)
|
||||
|
||||
else:
|
||||
ext = ".md"
|
||||
path2 = os.path.join(path, item.title() + ext)
|
||||
f = open(path2, "w")
|
||||
text = self.formatText(item.text(), item.type())
|
||||
f.write(text)
|
||||
|
||||
for c in root.children():
|
||||
writeItem(c, path)
|
||||
|
||||
def formatText(self, text, _type):
|
||||
if _type == "t2t":
|
||||
# Empty lines for headers
|
||||
text = "\n\n\n" + text
|
||||
|
||||
return text
|
|
@ -1,29 +1,83 @@
|
|||
#!/usr/bin/env python
|
||||
# --!-- coding: utf8 --!--
|
||||
|
||||
import re
|
||||
import shutil
|
||||
import subprocess
|
||||
|
||||
from PyQt5.QtWidgets import QWidget
|
||||
|
||||
|
||||
class basicExporter:
|
||||
|
||||
name = ""
|
||||
description = ""
|
||||
exportTo = []
|
||||
cmd = ""
|
||||
|
||||
class basicExporter():
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
def runT2T(self, text, target="html"):
|
||||
@classmethod
|
||||
def getFormatByName(cls, name):
|
||||
for f in cls.exportTo:
|
||||
if f.name == name:
|
||||
return f
|
||||
|
||||
cmdl = ['txt2tags', '-t', target, '--enc=utf-8', '--no-headers', '-o', '-', '-']
|
||||
return None
|
||||
|
||||
cmd = subprocess.Popen(('echo', text), stdout=subprocess.PIPE)
|
||||
try:
|
||||
output = subprocess.check_output(cmdl, stdin=cmd.stdout, stderr=subprocess.STDOUT) # , cwd="/tmp"
|
||||
except subprocess.CalledProcessError as e:
|
||||
print("Error!")
|
||||
return text
|
||||
cmd.wait()
|
||||
@classmethod
|
||||
def isValid(cls):
|
||||
return cls.path() != None
|
||||
|
||||
return output.decode("utf-8")
|
||||
@classmethod
|
||||
def version(cls):
|
||||
return ""
|
||||
|
||||
def htmlBody(self, text):
|
||||
text = text.replace("\n", "")
|
||||
text = re.sub(r".*<body[^>]*?>(.*)</body>.*", "\\1", text)
|
||||
return text
|
||||
@classmethod
|
||||
def path(cls):
|
||||
return shutil.which(cls.cmd)
|
||||
|
||||
@classmethod
|
||||
def run(cls, args):
|
||||
r = subprocess.check_output([cls.cmd] + args) # timeout=.2
|
||||
return r.decode("utf-8")
|
||||
|
||||
# Example of how to run a command
|
||||
#
|
||||
# cmdl = ['txt2tags', '-t', target, '--enc=utf-8', '--no-headers', '-o', '-', '-']
|
||||
#
|
||||
# cmd = subprocess.Popen(('echo', text), stdout=subprocess.PIPE)
|
||||
# try:
|
||||
# output = subprocess.check_output(cmdl, stdin=cmd.stdout, stderr=subprocess.STDOUT) # , cwd="/tmp"
|
||||
# except subprocess.CalledProcessError as e:
|
||||
# print("Error!")
|
||||
# return text
|
||||
# cmd.wait()
|
||||
#
|
||||
# return output.decode("utf-8")
|
||||
|
||||
|
||||
class basicFormat:
|
||||
|
||||
implemented = False
|
||||
requires = {
|
||||
"Settings": False,
|
||||
"PreviewBefore": False,
|
||||
"PreviewAfter": False,
|
||||
}
|
||||
|
||||
def __init__(self, name, description=""):
|
||||
self.name = name
|
||||
self.description = description
|
||||
|
||||
@classmethod
|
||||
def settingsWidget(self):
|
||||
return QWidget()
|
||||
|
||||
@classmethod
|
||||
def previewWidgetBefore(self):
|
||||
return QWidget()
|
||||
|
||||
@classmethod
|
||||
def previewWidgetAfter(self):
|
||||
return QWidget()
|
|
@ -1,71 +0,0 @@
|
|||
#!/usr/bin/env python
|
||||
# --!-- coding: utf8 --!--
|
||||
from manuskript.exporter.basic import basicExporter
|
||||
from manuskript.functions import mainWindow
|
||||
|
||||
|
||||
class htmlExporter(basicExporter):
|
||||
requires = ["filename"]
|
||||
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
def doCompile(self, filename):
|
||||
mw = mainWindow()
|
||||
root = mw.mdlOutline.rootItem
|
||||
|
||||
html = ""
|
||||
|
||||
def appendItem(item):
|
||||
if item.isFolder():
|
||||
html = ""
|
||||
title = "<h{l}>{t}</h{l}>\n".format(
|
||||
l=str(item.level() + 1),
|
||||
t=item.title())
|
||||
html += title
|
||||
|
||||
for c in item.children():
|
||||
html += appendItem(c)
|
||||
|
||||
return html
|
||||
|
||||
else:
|
||||
text = self.formatText(item.text(), item.type())
|
||||
return text
|
||||
|
||||
for c in root.children():
|
||||
html += appendItem(c)
|
||||
|
||||
template = """<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||
"http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<title>{TITLE}</title>
|
||||
</head>
|
||||
<body>
|
||||
{BODY}
|
||||
</body>
|
||||
</html>"""
|
||||
|
||||
f = open(filename, "w")
|
||||
f.write(template.format(
|
||||
TITLE="FIXME",
|
||||
BODY=html))
|
||||
|
||||
def formatText(self, text, _type):
|
||||
|
||||
if not text:
|
||||
return text
|
||||
|
||||
if _type == "t2t":
|
||||
text = self.runT2T(text)
|
||||
|
||||
elif _type == "txt":
|
||||
text = text.replace("\n", "<br>")
|
||||
|
||||
elif _type == "html":
|
||||
# keep only body
|
||||
text = self.htmlBody(text)
|
||||
|
||||
return text + "<br>"
|
32
manuskript/exporter/manuskript.py
Normal file
32
manuskript/exporter/manuskript.py
Normal file
|
@ -0,0 +1,32 @@
|
|||
#!/usr/bin/env python
|
||||
# --!-- coding: utf8 --!--
|
||||
from PyQt5.QtWidgets import QTextEdit
|
||||
|
||||
from manuskript.exporter.basic import basicExporter, basicFormat
|
||||
|
||||
class markdownFormat(basicFormat):
|
||||
name = "Markdown"
|
||||
description = "A lightweigh markup language used by many tools."
|
||||
implemented = False
|
||||
requires = {
|
||||
"Settings": True,
|
||||
"PreviewBefore": True,
|
||||
"PreviewAfter": False,
|
||||
}
|
||||
|
||||
@classmethod
|
||||
def settingsWidget(cls):
|
||||
sW = QTextEdit()
|
||||
return sW
|
||||
|
||||
class manuskriptExporter(basicExporter):
|
||||
|
||||
name = "Manuskript"
|
||||
description = "Default exporter, provides basic formats used by other exporters."
|
||||
exportTo = [
|
||||
markdownFormat
|
||||
]
|
||||
|
||||
@classmethod
|
||||
def isValid(cls):
|
||||
return True
|
28
manuskript/exporter/mmd.py
Normal file
28
manuskript/exporter/mmd.py
Normal file
|
@ -0,0 +1,28 @@
|
|||
#!/usr/bin/env python
|
||||
# --!-- coding: utf8 --!--
|
||||
|
||||
from manuskript.exporter.basic import basicExporter, basicFormat
|
||||
|
||||
|
||||
class mmdExporter(basicExporter):
|
||||
|
||||
name = "MultiMarkdown"
|
||||
description = """<p>A superset of markdown.</p>
|
||||
<p>Website: <a href="http://fletcherpenney.net/multimarkdown/">http://fletcherpenney.net/multimarkdown/</a></p>
|
||||
"""
|
||||
exportTo = [
|
||||
basicFormat("HTML", "A little known format modestly used. You know, web sites for example."),
|
||||
basicFormat("latex", ""),
|
||||
basicFormat("OpenDocument", "OpenDocument format. Used by LibreOffice for example."),
|
||||
basicFormat("ePub", "Books that don't kill trees."),
|
||||
]
|
||||
cmd = "mmd"
|
||||
|
||||
@classmethod
|
||||
def version(cls):
|
||||
if cls.isValid():
|
||||
r = cls.run(["-v"])
|
||||
return r.split("\n")[1]
|
||||
else:
|
||||
return ""
|
||||
|
|
@ -1,74 +0,0 @@
|
|||
#!/usr/bin/env python
|
||||
# --!-- coding: utf8 --!--
|
||||
import os
|
||||
import sys
|
||||
|
||||
from PyQt5.QtGui import QTextDocument
|
||||
|
||||
from libs.odf.opendocument import OpenDocumentText
|
||||
from libs.odf.text import H, P
|
||||
from manuskript.exporter.basic import basicExporter
|
||||
from manuskript.functions import appPath
|
||||
from manuskript.functions import mainWindow
|
||||
|
||||
sys.path.append(os.path.join(appPath(), "libs"))
|
||||
|
||||
|
||||
class odtExporter(basicExporter):
|
||||
requires = ["filename"]
|
||||
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
def doCompile(self, filename):
|
||||
mw = mainWindow()
|
||||
root = mw.mdlOutline.rootItem
|
||||
|
||||
doc = OpenDocumentText()
|
||||
|
||||
def appendItem(item):
|
||||
if item.isFolder():
|
||||
|
||||
self.addHeading(item.title(), item.level() + 1, doc)
|
||||
|
||||
for c in item.children():
|
||||
appendItem(c)
|
||||
|
||||
else:
|
||||
text = self.formatText(item.text(), item.type())
|
||||
if text:
|
||||
for l in text.split("\n"):
|
||||
self.addParagraph(l, doc)
|
||||
|
||||
for c in root.children():
|
||||
appendItem(c)
|
||||
|
||||
doc.save(filename)
|
||||
|
||||
def formatText(self, text, _type):
|
||||
|
||||
if not text:
|
||||
return text
|
||||
|
||||
# if _type == "t2t":
|
||||
# text = self.runT2T(text)
|
||||
|
||||
# elif _type == "txt":
|
||||
# text = text.replace("\n", "<br>")
|
||||
|
||||
elif _type == "html":
|
||||
doc = QTextDocument()
|
||||
doc.setHtml(text)
|
||||
text = doc.toPlainText()
|
||||
# text = self.htmlBody(text)
|
||||
|
||||
return text
|
||||
|
||||
def addHeading(self, text, level, doc):
|
||||
doc.text.addElement(H(outlinelevel=int(level), text=text))
|
||||
return doc
|
||||
|
||||
def addParagraph(self, text, doc):
|
||||
p = P(stylename="Text Body", text=text)
|
||||
doc.text.addElement(p)
|
||||
return doc
|
|
@ -1,59 +0,0 @@
|
|||
#!/usr/bin/env python
|
||||
# --!-- coding: utf8 --!--
|
||||
from PyQt5.QtGui import QTextDocument, QTextCursor, QTextDocumentWriter
|
||||
|
||||
from manuskript.exporter.basic import basicExporter
|
||||
from manuskript.functions import mainWindow
|
||||
|
||||
|
||||
class odtExporter(basicExporter):
|
||||
requires = ["filename"]
|
||||
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
def doCompile(self, filename):
|
||||
mw = mainWindow()
|
||||
root = mw.mdlOutline.rootItem
|
||||
|
||||
doc = QTextDocument()
|
||||
cursor = QTextCursor(doc)
|
||||
|
||||
def appendItem(item):
|
||||
if item.isFolder():
|
||||
|
||||
cursor.setPosition(doc.characterCount() - 1)
|
||||
title = "<h{l}>{t}</h{l}><br>\n".format(
|
||||
l=str(item.level() + 1),
|
||||
t=item.title())
|
||||
cursor.insertHtml(title)
|
||||
|
||||
for c in item.children():
|
||||
appendItem(c)
|
||||
|
||||
else:
|
||||
text = self.formatText(item.text(), item.type())
|
||||
cursor.setPosition(doc.characterCount() - 1)
|
||||
cursor.insertHtml(text)
|
||||
|
||||
for c in root.children():
|
||||
appendItem(c)
|
||||
|
||||
dw = QTextDocumentWriter(filename, "odt")
|
||||
dw.write(doc)
|
||||
|
||||
def formatText(self, text, _type):
|
||||
|
||||
if not text:
|
||||
return text
|
||||
|
||||
if _type == "t2t":
|
||||
text = self.runT2T(text)
|
||||
|
||||
elif _type == "txt":
|
||||
text = text.replace("\n", "<br>")
|
||||
|
||||
elif _type == "html":
|
||||
text = self.htmlBody(text)
|
||||
|
||||
return text + "<br>"
|
42
manuskript/exporter/pandoc.py
Normal file
42
manuskript/exporter/pandoc.py
Normal file
|
@ -0,0 +1,42 @@
|
|||
#!/usr/bin/env python
|
||||
# --!-- coding: utf8 --!--
|
||||
|
||||
from manuskript.exporter.basic import basicExporter, basicFormat
|
||||
|
||||
class HTMLFormat(basicFormat):
|
||||
name = "HTML"
|
||||
description = "A little known format modestly used. You know, web sites for example."
|
||||
implemented = False
|
||||
requires = {
|
||||
"Settings": True,
|
||||
"PreviewBefore": True,
|
||||
"PreviewAfter": True,
|
||||
}
|
||||
|
||||
|
||||
class pandocExporter(basicExporter):
|
||||
|
||||
name = "Pandoc"
|
||||
description = """<p>A universal document convertor. Can be used to convert markdown to a wide range of other
|
||||
formats.</p>
|
||||
<p>Website: <a href="http://www.pandoc.org">http://pandoc.org/</a></p>
|
||||
"""
|
||||
exportTo = [
|
||||
HTMLFormat,
|
||||
basicFormat("ePub", "Books that don't kill trees."),
|
||||
basicFormat("OpenDocument", ""),
|
||||
basicFormat("PDF", "Needs latex to be installed."),
|
||||
basicFormat("DocX", "Microsoft Office (.docx) document."),
|
||||
]
|
||||
cmd = "pandoc"
|
||||
|
||||
@classmethod
|
||||
def version(cls):
|
||||
if cls.isValid():
|
||||
r = cls.run(["-v"])
|
||||
return r.split("\n")[0]
|
||||
else:
|
||||
return ""
|
||||
|
||||
|
||||
|
|
@ -18,7 +18,7 @@ from manuskript.models.plotModel import plotModel
|
|||
from manuskript.models.worldModel import worldModel
|
||||
from manuskript.settingsWindow import settingsWindow
|
||||
from manuskript.ui.collapsibleDockWidgets import collapsibleDockWidgets
|
||||
from manuskript.ui.compileDialog import compileDialog
|
||||
from manuskript.ui.exporters.exporter import exporterDialog
|
||||
from manuskript.ui.helpLabel import helpLabel
|
||||
from manuskript.ui.mainWindow import Ui_MainWindow
|
||||
from manuskript.ui.tools.frequencyAnalyzer import frequencyAnalyzer
|
||||
|
@ -1077,5 +1077,10 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
|||
###############################################################################
|
||||
|
||||
def doCompile(self):
|
||||
self.compileDialog = compileDialog()
|
||||
self.compileDialog.show()
|
||||
self.dialog = exporterDialog()
|
||||
self.dialog.show()
|
||||
|
||||
r = self.dialog.geometry()
|
||||
r2 = self.geometry()
|
||||
self.dialog.move(r2.center() - r.center())
|
||||
|
||||
|
|
|
@ -1,102 +0,0 @@
|
|||
#!/usr/bin/env python
|
||||
# --!-- coding: utf8 --!--
|
||||
from PyQt5.QtCore import Qt
|
||||
from PyQt5.QtWidgets import QDialog, qApp, QFileDialog
|
||||
|
||||
from manuskript import exporter
|
||||
from manuskript.ui.compileDialog_ui import Ui_compileDialog
|
||||
|
||||
|
||||
class compileDialog(QDialog, Ui_compileDialog):
|
||||
def __init__(self, parent=None):
|
||||
QDialog.__init__(self, parent)
|
||||
self.setupUi(self)
|
||||
|
||||
self.btnPath.clicked.connect(self.getPath)
|
||||
self.btnFilename.clicked.connect(self.getFilename)
|
||||
|
||||
self.btnCompile.clicked.connect(self.doCompile)
|
||||
self.cmbTargets.activated.connect(self.updateUI)
|
||||
|
||||
self.txtPath.setText("/home/olivier/Documents/Travail/Geekeries/Python/manuskript/ExportTest")
|
||||
self.txtFilename.setText("/home/olivier/Documents/Travail/Geekeries/Python/manuskript/ExportTest/test.html")
|
||||
|
||||
self.populatesTarget()
|
||||
self.updateUI()
|
||||
|
||||
###############################################################################
|
||||
# UI
|
||||
###############################################################################
|
||||
|
||||
def populatesTarget(self):
|
||||
for code in exporter.formats:
|
||||
self.cmbTargets.addItem(exporter.formats[code][0], code)
|
||||
|
||||
def updateUI(self):
|
||||
target = self.cmbTargets.currentData()
|
||||
|
||||
if not exporter.formats[target][1]:
|
||||
self.btnCompile.setEnabled(False)
|
||||
requires = []
|
||||
else:
|
||||
self.btnCompile.setEnabled(True)
|
||||
requires = exporter.formats[target][1].requires
|
||||
|
||||
self.wPath.setVisible("path" in requires)
|
||||
self.wFilename.setVisible("filename" in requires)
|
||||
|
||||
def startWorking(self):
|
||||
# Setting override cursor
|
||||
qApp.setOverrideCursor(Qt.WaitCursor)
|
||||
|
||||
# Button
|
||||
self.btnCompile.setEnabled(False)
|
||||
self.txtBtn = self.btnCompile.text()
|
||||
self.btnCompile.setText(self.tr("Working..."))
|
||||
|
||||
def stopWorking(self):
|
||||
# Removing override cursor
|
||||
qApp.restoreOverrideCursor()
|
||||
|
||||
# Button
|
||||
self.btnCompile.setEnabled(True)
|
||||
self.btnCompile.setText(self.txtBtn)
|
||||
|
||||
###############################################################################
|
||||
# USER INPUTS
|
||||
###############################################################################
|
||||
|
||||
def getPath(self):
|
||||
path = self.txtPath.text()
|
||||
path = QFileDialog.getExistingDirectory(self, self.tr("Chose export folder"), path)
|
||||
if path:
|
||||
self.txtPath.setText(path)
|
||||
|
||||
def getFilename(self):
|
||||
fn = self.txtFilename.text()
|
||||
target = self.cmbTargets.currentData()
|
||||
fltr = exporter.formats[target][2]
|
||||
fn = QFileDialog.getSaveFileName(self, self.tr("Chose export target"), fn, fltr)
|
||||
|
||||
if fn[0]:
|
||||
self.txtFilename.setText(fn[0])
|
||||
|
||||
|
||||
###############################################################################
|
||||
# COMPILE
|
||||
###############################################################################
|
||||
|
||||
def doCompile(self):
|
||||
target = self.cmbTargets.currentData()
|
||||
|
||||
self.startWorking()
|
||||
|
||||
if target == "arbo":
|
||||
compiler = exporter.formats[target][1]()
|
||||
compiler.doCompile(self.txtPath.text())
|
||||
|
||||
elif target in ["html", "odt"]:
|
||||
compiler = exporter.formats[target][1]()
|
||||
compiler.doCompile(self.txtFilename.text())
|
||||
|
||||
self.stopWorking()
|
|
@ -1,89 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file 'manuskript/ui/compileDialog_ui.ui'
|
||||
#
|
||||
# Created: Wed Mar 2 00:30:17 2016
|
||||
# by: PyQt5 UI code generator 5.2.1
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
|
||||
class Ui_compileDialog(object):
|
||||
def setupUi(self, compileDialog):
|
||||
compileDialog.setObjectName("compileDialog")
|
||||
compileDialog.resize(627, 343)
|
||||
compileDialog.setModal(True)
|
||||
self.verticalLayout = QtWidgets.QVBoxLayout(compileDialog)
|
||||
self.verticalLayout.setObjectName("verticalLayout")
|
||||
self.horizontalLayout = QtWidgets.QHBoxLayout()
|
||||
self.horizontalLayout.setObjectName("horizontalLayout")
|
||||
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
||||
self.horizontalLayout.addItem(spacerItem)
|
||||
self.label = QtWidgets.QLabel(compileDialog)
|
||||
self.label.setObjectName("label")
|
||||
self.horizontalLayout.addWidget(self.label)
|
||||
self.cmbTargets = QtWidgets.QComboBox(compileDialog)
|
||||
self.cmbTargets.setObjectName("cmbTargets")
|
||||
self.horizontalLayout.addWidget(self.cmbTargets)
|
||||
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
||||
self.horizontalLayout.addItem(spacerItem1)
|
||||
self.verticalLayout.addLayout(self.horizontalLayout)
|
||||
self.wPath = QtWidgets.QWidget(compileDialog)
|
||||
self.wPath.setObjectName("wPath")
|
||||
self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.wPath)
|
||||
self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0)
|
||||
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
|
||||
self.label_2 = QtWidgets.QLabel(self.wPath)
|
||||
self.label_2.setObjectName("label_2")
|
||||
self.horizontalLayout_3.addWidget(self.label_2)
|
||||
self.txtPath = QtWidgets.QLineEdit(self.wPath)
|
||||
self.txtPath.setObjectName("txtPath")
|
||||
self.horizontalLayout_3.addWidget(self.txtPath)
|
||||
self.btnPath = QtWidgets.QPushButton(self.wPath)
|
||||
self.btnPath.setObjectName("btnPath")
|
||||
self.horizontalLayout_3.addWidget(self.btnPath)
|
||||
self.verticalLayout.addWidget(self.wPath)
|
||||
self.wFilename = QtWidgets.QWidget(compileDialog)
|
||||
self.wFilename.setObjectName("wFilename")
|
||||
self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.wFilename)
|
||||
self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
|
||||
self.horizontalLayout_4.setObjectName("horizontalLayout_4")
|
||||
self.label_3 = QtWidgets.QLabel(self.wFilename)
|
||||
self.label_3.setObjectName("label_3")
|
||||
self.horizontalLayout_4.addWidget(self.label_3)
|
||||
self.txtFilename = QtWidgets.QLineEdit(self.wFilename)
|
||||
self.txtFilename.setObjectName("txtFilename")
|
||||
self.horizontalLayout_4.addWidget(self.txtFilename)
|
||||
self.btnFilename = QtWidgets.QPushButton(self.wFilename)
|
||||
self.btnFilename.setObjectName("btnFilename")
|
||||
self.horizontalLayout_4.addWidget(self.btnFilename)
|
||||
self.verticalLayout.addWidget(self.wFilename)
|
||||
spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
|
||||
self.verticalLayout.addItem(spacerItem2)
|
||||
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
|
||||
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
|
||||
spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
||||
self.horizontalLayout_2.addItem(spacerItem3)
|
||||
self.btnCompile = QtWidgets.QPushButton(compileDialog)
|
||||
self.btnCompile.setObjectName("btnCompile")
|
||||
self.horizontalLayout_2.addWidget(self.btnCompile)
|
||||
self.btnCancel = QtWidgets.QPushButton(compileDialog)
|
||||
self.btnCancel.setObjectName("btnCancel")
|
||||
self.horizontalLayout_2.addWidget(self.btnCancel)
|
||||
self.verticalLayout.addLayout(self.horizontalLayout_2)
|
||||
|
||||
self.retranslateUi(compileDialog)
|
||||
QtCore.QMetaObject.connectSlotsByName(compileDialog)
|
||||
|
||||
def retranslateUi(self, compileDialog):
|
||||
_translate = QtCore.QCoreApplication.translate
|
||||
compileDialog.setWindowTitle(_translate("compileDialog", "Dialog"))
|
||||
self.label.setText(_translate("compileDialog", "Compile as:"))
|
||||
self.label_2.setText(_translate("compileDialog", "Folder:"))
|
||||
self.btnPath.setText(_translate("compileDialog", "..."))
|
||||
self.label_3.setText(_translate("compileDialog", "File name:"))
|
||||
self.btnFilename.setText(_translate("compileDialog", "..."))
|
||||
self.btnCompile.setText(_translate("compileDialog", "Compile"))
|
||||
self.btnCancel.setText(_translate("compileDialog", "Cancel"))
|
||||
|
|
@ -1,154 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>compileDialog</class>
|
||||
<widget class="QDialog" name="compileDialog">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>627</width>
|
||||
<height>343</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Dialog</string>
|
||||
</property>
|
||||
<property name="modal">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Compile as:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="cmbTargets"/>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QWidget" name="wPath" native="true">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>Folder:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="txtPath"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="btnPath">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QWidget" name="wFilename" native="true">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>File name:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="txtFilename"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="btnFilename">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="btnCompile">
|
||||
<property name="text">
|
||||
<string>Compile</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="btnCancel">
|
||||
<property name="text">
|
||||
<string>Cancel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
88
manuskript/ui/exporters/exporter.py
Normal file
88
manuskript/ui/exporters/exporter.py
Normal file
|
@ -0,0 +1,88 @@
|
|||
#!/usr/bin/env python
|
||||
# --!-- coding: utf8 --!--
|
||||
import os
|
||||
from collections import OrderedDict
|
||||
|
||||
from PyQt5.QtCore import Qt
|
||||
from PyQt5.QtGui import QBrush, QColor
|
||||
from PyQt5.QtWidgets import QWidget, QVBoxLayout
|
||||
|
||||
from manuskript import exporter
|
||||
from manuskript.functions import lightBlue
|
||||
from manuskript.ui.exporters.exporter_ui import Ui_exporter
|
||||
from manuskript.ui.exporters.exportersManager import exportersManager
|
||||
|
||||
|
||||
class exporterDialog(QWidget, Ui_exporter):
|
||||
def __init__(self, parent=None):
|
||||
QWidget.__init__(self, parent)
|
||||
self.setupUi(self)
|
||||
|
||||
# Var
|
||||
self.currentExporter = None
|
||||
|
||||
# Populates lite
|
||||
self.cmbExporters.clear()
|
||||
for E in exporter.exporters:
|
||||
|
||||
if not E.isValid():
|
||||
continue
|
||||
|
||||
self.cmbExporters.addItem(E.name)
|
||||
self.cmbExporters.setItemData(self.cmbExporters.count() - 1, QBrush(QColor(Qt.darkBlue)), Qt.ForegroundRole)
|
||||
self.cmbExporters.setItemData(self.cmbExporters.count() - 1, QBrush(lightBlue()), Qt.BackgroundRole)
|
||||
item = self.cmbExporters.model().item(self.cmbExporters.count() - 1)
|
||||
item.setFlags(Qt.ItemIsEnabled)
|
||||
|
||||
for f in E.exportTo:
|
||||
name = f.name if f.implemented else self.tr("{} (not implemented yet)").format(f.name)
|
||||
self.cmbExporters.addItem(name, E.name)
|
||||
|
||||
self.btnManageExporters.clicked.connect(self.openManager)
|
||||
|
||||
self.cmbExporters.currentIndexChanged.connect(self.updateUi)
|
||||
self.cmbExporters.setCurrentIndex(1)
|
||||
|
||||
def updateUi(self, index):
|
||||
name = self.cmbExporters.currentText()
|
||||
exporterName = self.cmbExporters.currentData()
|
||||
|
||||
E = exporter.getExporterByName(exporterName)
|
||||
|
||||
if not E:
|
||||
self.setWidgetsEnabled(False)
|
||||
return
|
||||
|
||||
F = E.getFormatByName(name)
|
||||
|
||||
if not F or not F.implemented:
|
||||
self.setWidgetsEnabled(False)
|
||||
return
|
||||
|
||||
self.setWidgetsEnabled(True)
|
||||
|
||||
self.grpSettings.setVisible(F.requires["Settings"])
|
||||
self.grpPreviewBefore.setVisible(F.requires["PreviewBefore"])
|
||||
self.grpPreviewAfter.setVisible(F.requires["PreviewAfter"])
|
||||
|
||||
# if F.requires["Settings"]:
|
||||
# self.settingsWidget = F.settingsWidget()
|
||||
#
|
||||
# if F.requires["PreviewBefore"]:
|
||||
# self.previewBefore = F.previewWidgetBefore()
|
||||
#
|
||||
# if F.requires["PreviewAfter"]:
|
||||
# self.previewAfter = F.previewWidgetAfter()
|
||||
|
||||
def setWidgetsEnabled(self, value):
|
||||
self.grpSettings.setEnabled(value)
|
||||
self.grpPreviewBefore.setEnabled(value)
|
||||
self.grpPreviewAfter.setEnabled(value)
|
||||
|
||||
def openManager(self):
|
||||
self.dialog = exportersManager()
|
||||
self.dialog.show()
|
||||
|
||||
r = self.dialog.geometry()
|
||||
r2 = self.geometry()
|
||||
self.dialog.move(r2.center() - r.center())
|
77
manuskript/ui/exporters/exporter_ui.py
Normal file
77
manuskript/ui/exporters/exporter_ui.py
Normal file
|
@ -0,0 +1,77 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file 'manuskript/ui/exporters/exporter_ui.ui'
|
||||
#
|
||||
# Created by: PyQt5 UI code generator 5.4.2
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
|
||||
class Ui_exporter(object):
|
||||
def setupUi(self, exporter):
|
||||
exporter.setObjectName("exporter")
|
||||
exporter.resize(792, 502)
|
||||
self.verticalLayout = QtWidgets.QVBoxLayout(exporter)
|
||||
self.verticalLayout.setObjectName("verticalLayout")
|
||||
self.horizontalLayout = QtWidgets.QHBoxLayout()
|
||||
self.horizontalLayout.setObjectName("horizontalLayout")
|
||||
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
||||
self.horizontalLayout.addItem(spacerItem)
|
||||
self.label = QtWidgets.QLabel(exporter)
|
||||
self.label.setObjectName("label")
|
||||
self.horizontalLayout.addWidget(self.label)
|
||||
self.cmbExporters = QtWidgets.QComboBox(exporter)
|
||||
self.cmbExporters.setObjectName("cmbExporters")
|
||||
self.horizontalLayout.addWidget(self.cmbExporters)
|
||||
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
||||
self.horizontalLayout.addItem(spacerItem1)
|
||||
self.btnManageExporters = QtWidgets.QPushButton(exporter)
|
||||
self.btnManageExporters.setObjectName("btnManageExporters")
|
||||
self.horizontalLayout.addWidget(self.btnManageExporters)
|
||||
self.verticalLayout.addLayout(self.horizontalLayout)
|
||||
self.splitter = QtWidgets.QSplitter(exporter)
|
||||
self.splitter.setOrientation(QtCore.Qt.Horizontal)
|
||||
self.splitter.setObjectName("splitter")
|
||||
self.grpSettings = QtWidgets.QGroupBox(self.splitter)
|
||||
self.grpSettings.setObjectName("grpSettings")
|
||||
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.grpSettings)
|
||||
self.verticalLayout_3.setObjectName("verticalLayout_3")
|
||||
self.settings = QtWidgets.QWidget(self.grpSettings)
|
||||
self.settings.setObjectName("settings")
|
||||
self.verticalLayout_3.addWidget(self.settings)
|
||||
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
|
||||
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
|
||||
self.pushButton = QtWidgets.QPushButton(self.grpSettings)
|
||||
self.pushButton.setObjectName("pushButton")
|
||||
self.horizontalLayout_2.addWidget(self.pushButton)
|
||||
self.verticalLayout_3.addLayout(self.horizontalLayout_2)
|
||||
self.grpPreviewBefore = QtWidgets.QGroupBox(self.splitter)
|
||||
self.grpPreviewBefore.setObjectName("grpPreviewBefore")
|
||||
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.grpPreviewBefore)
|
||||
self.verticalLayout_2.setObjectName("verticalLayout_2")
|
||||
self.previewBefore = QtWidgets.QWidget(self.grpPreviewBefore)
|
||||
self.previewBefore.setObjectName("previewBefore")
|
||||
self.verticalLayout_2.addWidget(self.previewBefore)
|
||||
self.grpPreviewAfter = QtWidgets.QGroupBox(self.splitter)
|
||||
self.grpPreviewAfter.setObjectName("grpPreviewAfter")
|
||||
self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.grpPreviewAfter)
|
||||
self.verticalLayout_4.setObjectName("verticalLayout_4")
|
||||
self.previewAfter = QtWidgets.QWidget(self.grpPreviewAfter)
|
||||
self.previewAfter.setObjectName("previewAfter")
|
||||
self.verticalLayout_4.addWidget(self.previewAfter)
|
||||
self.verticalLayout.addWidget(self.splitter)
|
||||
|
||||
self.retranslateUi(exporter)
|
||||
QtCore.QMetaObject.connectSlotsByName(exporter)
|
||||
|
||||
def retranslateUi(self, exporter):
|
||||
_translate = QtCore.QCoreApplication.translate
|
||||
exporter.setWindowTitle(_translate("exporter", "Export"))
|
||||
self.label.setText(_translate("exporter", "Export to:"))
|
||||
self.btnManageExporters.setText(_translate("exporter", "Manage exporters"))
|
||||
self.grpSettings.setTitle(_translate("exporter", "Settings"))
|
||||
self.pushButton.setText(_translate("exporter", "Show Intermediate Preview"))
|
||||
self.grpPreviewBefore.setTitle(_translate("exporter", "Preview"))
|
||||
self.grpPreviewAfter.setTitle(_translate("exporter", "Preview"))
|
||||
|
116
manuskript/ui/exporters/exporter_ui.ui
Normal file
116
manuskript/ui/exporters/exporter_ui.ui
Normal file
|
@ -0,0 +1,116 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>exporter</class>
|
||||
<widget class="QWidget" name="exporter">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>792</width>
|
||||
<height>502</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Export</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Export to:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="cmbExporters"/>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="btnManageExporters">
|
||||
<property name="text">
|
||||
<string>Manage exporters</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSplitter" name="splitter">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<widget class="QGroupBox" name="grpSettings">
|
||||
<property name="title">
|
||||
<string>Settings</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item>
|
||||
<widget class="QWidget" name="settings" native="true"/>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton">
|
||||
<property name="text">
|
||||
<string>Show Intermediate Preview</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QGroupBox" name="grpPreviewBefore">
|
||||
<property name="title">
|
||||
<string>Preview</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<widget class="QWidget" name="previewBefore" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QGroupBox" name="grpPreviewAfter">
|
||||
<property name="title">
|
||||
<string>Preview</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||
<item>
|
||||
<widget class="QWidget" name="previewAfter" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
99
manuskript/ui/exporters/exportersManager.py
Normal file
99
manuskript/ui/exporters/exportersManager.py
Normal file
|
@ -0,0 +1,99 @@
|
|||
#!/usr/bin/env python
|
||||
# --!-- coding: utf8 --!--
|
||||
import os
|
||||
from collections import OrderedDict
|
||||
|
||||
from PyQt5.QtCore import QSize
|
||||
from PyQt5.QtCore import Qt
|
||||
from PyQt5.QtWidgets import QWidget
|
||||
|
||||
from manuskript import exporter
|
||||
from manuskript.ui.exporters.exportersManager_ui import Ui_ExportersManager
|
||||
|
||||
class exportersManager(QWidget, Ui_ExportersManager):
|
||||
def __init__(self, parent=None):
|
||||
QWidget.__init__(self, parent)
|
||||
self.setupUi(self)
|
||||
|
||||
# Var
|
||||
self.currentExporter = None
|
||||
|
||||
# Populates lite
|
||||
self.lstExporters.clear()
|
||||
for E in exporter.exporters:
|
||||
self.lstExporters.addItem(E.name)
|
||||
|
||||
# UI
|
||||
for i in range(self.lstExporters.count()):
|
||||
item = self.lstExporters.item(i)
|
||||
item.setSizeHint(QSize(item.sizeHint().width(), 42))
|
||||
item.setTextAlignment(Qt.AlignCenter)
|
||||
self.lstExporters.setMaximumWidth(150)
|
||||
self.lstExporters.setMinimumWidth(150)
|
||||
|
||||
self.lstExporters.currentTextChanged.connect(self.updateUi)
|
||||
self.lstExportTo.currentTextChanged.connect(self.updateFormatDescription)
|
||||
|
||||
self.lstExporters.setCurrentRow(0)
|
||||
|
||||
def updateUi(self, name):
|
||||
E = exporter.getExporterByName(name)
|
||||
self.currentExporter = E
|
||||
|
||||
if not E:
|
||||
self.stack.setEnabled(False)
|
||||
return
|
||||
|
||||
self.stack.setEnabled(True)
|
||||
|
||||
# Updates name and description
|
||||
self.lblExporterName.setText(E.name)
|
||||
self.lblExporterDescription.setText(E.description)
|
||||
|
||||
# Updates formats
|
||||
self.lstExportTo.clear()
|
||||
|
||||
for f in E.exportTo:
|
||||
self.lstExportTo.addItem(f.name)
|
||||
|
||||
self.lstExportTo.setMaximumWidth(120)
|
||||
self.lstExportTo.setMinimumWidth(120)
|
||||
self.lstExportTo.setCurrentRow(0)
|
||||
|
||||
# Updates path & version
|
||||
self.grpPath.setVisible(E.name != "Manuskript") # We hide if exporter is manuskript
|
||||
|
||||
# Installed
|
||||
if E.isValid():
|
||||
self.lblStatus.setText(self.tr("Installed"))
|
||||
self.lblStatus.setStyleSheet("color: darkGreen;")
|
||||
self.lblHelpText.setVisible(False)
|
||||
self.lblVersion.setVisible(True)
|
||||
self.lblVersionName.setVisible(True)
|
||||
else:
|
||||
self.lblStatus.setText(self.tr("Not found"))
|
||||
self.lblStatus.setStyleSheet("color: red;")
|
||||
self.lblHelpText.setVisible(True)
|
||||
self.lblHelpText.setText(self.tr("{} not found. Install it, or set path manually.").format(name))
|
||||
self.lblVersion.setVisible(False)
|
||||
self.lblVersionName.setVisible(False)
|
||||
|
||||
# Version
|
||||
self.lblVersion.setText(E.version())
|
||||
|
||||
# Path
|
||||
self.txtPath.setText(E.path())
|
||||
|
||||
def updateFormatDescription(self, name):
|
||||
if self.currentExporter:
|
||||
f = self.currentExporter.getFormatByName(name)
|
||||
|
||||
if not f:
|
||||
self.lblExportToDescription.setText("")
|
||||
|
||||
else:
|
||||
self.lblExportToDescription.setText("<b>{}:</b> {}".format(
|
||||
name,
|
||||
f.description))
|
||||
|
||||
|
177
manuskript/ui/exporters/exportersManager_ui.py
Normal file
177
manuskript/ui/exporters/exportersManager_ui.py
Normal file
|
@ -0,0 +1,177 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file 'manuskript/ui/exporters/exportersManager_ui.ui'
|
||||
#
|
||||
# Created by: PyQt5 UI code generator 5.4.2
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
|
||||
class Ui_ExportersManager(object):
|
||||
def setupUi(self, ExportersManager):
|
||||
ExportersManager.setObjectName("ExportersManager")
|
||||
ExportersManager.resize(658, 439)
|
||||
self.horizontalLayout_8 = QtWidgets.QHBoxLayout(ExportersManager)
|
||||
self.horizontalLayout_8.setObjectName("horizontalLayout_8")
|
||||
self.lstExporters = QtWidgets.QListWidget(ExportersManager)
|
||||
self.lstExporters.setObjectName("lstExporters")
|
||||
item = QtWidgets.QListWidgetItem()
|
||||
self.lstExporters.addItem(item)
|
||||
self.horizontalLayout_8.addWidget(self.lstExporters)
|
||||
self.stack = QtWidgets.QWidget(ExportersManager)
|
||||
self.stack.setObjectName("stack")
|
||||
self.verticalLayout_7 = QtWidgets.QVBoxLayout(self.stack)
|
||||
self.verticalLayout_7.setContentsMargins(0, 0, 0, 0)
|
||||
self.verticalLayout_7.setObjectName("verticalLayout_7")
|
||||
self.lblExporterName = QtWidgets.QLabel(self.stack)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.lblExporterName.sizePolicy().hasHeightForWidth())
|
||||
self.lblExporterName.setSizePolicy(sizePolicy)
|
||||
self.lblExporterName.setStyleSheet("background-color:lightBlue;\n"
|
||||
"border:none;\n"
|
||||
"padding:10px;\n"
|
||||
"color:darkBlue;\n"
|
||||
"font-size:16px;\n"
|
||||
"font-weight:bold;\n"
|
||||
"text-align:center;")
|
||||
self.lblExporterName.setText("{Exporter Name}")
|
||||
self.lblExporterName.setAlignment(QtCore.Qt.AlignCenter)
|
||||
self.lblExporterName.setObjectName("lblExporterName")
|
||||
self.verticalLayout_7.addWidget(self.lblExporterName)
|
||||
self.grpDescription = QtWidgets.QGroupBox(self.stack)
|
||||
font = QtGui.QFont()
|
||||
font.setBold(True)
|
||||
font.setWeight(75)
|
||||
self.grpDescription.setFont(font)
|
||||
self.grpDescription.setObjectName("grpDescription")
|
||||
self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.grpDescription)
|
||||
self.verticalLayout_5.setObjectName("verticalLayout_5")
|
||||
self.lblExporterDescription = QtWidgets.QLabel(self.grpDescription)
|
||||
font = QtGui.QFont()
|
||||
font.setBold(False)
|
||||
font.setWeight(50)
|
||||
self.lblExporterDescription.setFont(font)
|
||||
self.lblExporterDescription.setText("{ExporterDescription}")
|
||||
self.lblExporterDescription.setWordWrap(True)
|
||||
self.lblExporterDescription.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse)
|
||||
self.lblExporterDescription.setObjectName("lblExporterDescription")
|
||||
self.verticalLayout_5.addWidget(self.lblExporterDescription)
|
||||
self.verticalLayout_7.addWidget(self.grpDescription)
|
||||
self.grpExportTo = QtWidgets.QGroupBox(self.stack)
|
||||
font = QtGui.QFont()
|
||||
font.setBold(True)
|
||||
font.setWeight(75)
|
||||
self.grpExportTo.setFont(font)
|
||||
self.grpExportTo.setObjectName("grpExportTo")
|
||||
self.horizontalLayout = QtWidgets.QHBoxLayout(self.grpExportTo)
|
||||
self.horizontalLayout.setObjectName("horizontalLayout")
|
||||
self.lstExportTo = QtWidgets.QListWidget(self.grpExportTo)
|
||||
self.lstExportTo.setObjectName("lstExportTo")
|
||||
self.horizontalLayout.addWidget(self.lstExportTo)
|
||||
self.frame = QtWidgets.QFrame(self.grpExportTo)
|
||||
self.frame.setFrameShape(QtWidgets.QFrame.NoFrame)
|
||||
self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
|
||||
self.frame.setObjectName("frame")
|
||||
self.verticalLayout = QtWidgets.QVBoxLayout(self.frame)
|
||||
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
|
||||
self.verticalLayout.setSpacing(0)
|
||||
self.verticalLayout.setObjectName("verticalLayout")
|
||||
self.lblExportToDescription = QtWidgets.QLabel(self.frame)
|
||||
font = QtGui.QFont()
|
||||
font.setBold(False)
|
||||
font.setWeight(50)
|
||||
self.lblExportToDescription.setFont(font)
|
||||
self.lblExportToDescription.setText("{FormatDescription}")
|
||||
self.lblExportToDescription.setWordWrap(True)
|
||||
self.lblExportToDescription.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse)
|
||||
self.lblExportToDescription.setObjectName("lblExportToDescription")
|
||||
self.verticalLayout.addWidget(self.lblExportToDescription)
|
||||
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
|
||||
self.verticalLayout.addItem(spacerItem)
|
||||
self.horizontalLayout.addWidget(self.frame)
|
||||
self.verticalLayout_7.addWidget(self.grpExportTo)
|
||||
self.grpPath = QtWidgets.QGroupBox(self.stack)
|
||||
font = QtGui.QFont()
|
||||
font.setBold(True)
|
||||
font.setWeight(75)
|
||||
self.grpPath.setFont(font)
|
||||
self.grpPath.setObjectName("grpPath")
|
||||
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.grpPath)
|
||||
self.verticalLayout_2.setObjectName("verticalLayout_2")
|
||||
self.formLayout = QtWidgets.QFormLayout()
|
||||
self.formLayout.setObjectName("formLayout")
|
||||
self.label_2 = QtWidgets.QLabel(self.grpPath)
|
||||
self.label_2.setObjectName("label_2")
|
||||
self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_2)
|
||||
self.lblStatus = QtWidgets.QLabel(self.grpPath)
|
||||
font = QtGui.QFont()
|
||||
font.setBold(False)
|
||||
font.setWeight(50)
|
||||
self.lblStatus.setFont(font)
|
||||
self.lblStatus.setText("{ExporterStatus}")
|
||||
self.lblStatus.setObjectName("lblStatus")
|
||||
self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.lblStatus)
|
||||
self.lblVersionName = QtWidgets.QLabel(self.grpPath)
|
||||
self.lblVersionName.setObjectName("lblVersionName")
|
||||
self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.lblVersionName)
|
||||
self.lblVersion = QtWidgets.QLabel(self.grpPath)
|
||||
font = QtGui.QFont()
|
||||
font.setBold(False)
|
||||
font.setWeight(50)
|
||||
self.lblVersion.setFont(font)
|
||||
self.lblVersion.setText("{ExporterVersion}")
|
||||
self.lblVersion.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse)
|
||||
self.lblVersion.setObjectName("lblVersion")
|
||||
self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.lblVersion)
|
||||
self.verticalLayout_2.addLayout(self.formLayout)
|
||||
self.lblHelpText = QtWidgets.QLabel(self.grpPath)
|
||||
font = QtGui.QFont()
|
||||
font.setBold(False)
|
||||
font.setWeight(50)
|
||||
self.lblHelpText.setFont(font)
|
||||
self.lblHelpText.setWordWrap(True)
|
||||
self.lblHelpText.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse)
|
||||
self.lblHelpText.setObjectName("lblHelpText")
|
||||
self.verticalLayout_2.addWidget(self.lblHelpText)
|
||||
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
|
||||
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
|
||||
self.txtPath = QtWidgets.QLineEdit(self.grpPath)
|
||||
font = QtGui.QFont()
|
||||
font.setBold(False)
|
||||
font.setWeight(50)
|
||||
self.txtPath.setFont(font)
|
||||
self.txtPath.setObjectName("txtPath")
|
||||
self.horizontalLayout_2.addWidget(self.txtPath)
|
||||
self.btnSetPath = QtWidgets.QPushButton(self.grpPath)
|
||||
font = QtGui.QFont()
|
||||
font.setBold(False)
|
||||
font.setWeight(50)
|
||||
self.btnSetPath.setFont(font)
|
||||
self.btnSetPath.setObjectName("btnSetPath")
|
||||
self.horizontalLayout_2.addWidget(self.btnSetPath)
|
||||
self.verticalLayout_2.addLayout(self.horizontalLayout_2)
|
||||
self.verticalLayout_7.addWidget(self.grpPath)
|
||||
self.horizontalLayout_8.addWidget(self.stack)
|
||||
|
||||
self.retranslateUi(ExportersManager)
|
||||
QtCore.QMetaObject.connectSlotsByName(ExportersManager)
|
||||
|
||||
def retranslateUi(self, ExportersManager):
|
||||
_translate = QtCore.QCoreApplication.translate
|
||||
ExportersManager.setWindowTitle(_translate("ExportersManager", "Manage Exporters"))
|
||||
__sortingEnabled = self.lstExporters.isSortingEnabled()
|
||||
self.lstExporters.setSortingEnabled(False)
|
||||
item = self.lstExporters.item(0)
|
||||
item.setText(_translate("ExportersManager", "Manuskript"))
|
||||
self.lstExporters.setSortingEnabled(__sortingEnabled)
|
||||
self.grpDescription.setTitle(_translate("ExportersManager", "Description"))
|
||||
self.grpExportTo.setTitle(_translate("ExportersManager", "Offers export to"))
|
||||
self.grpPath.setTitle(_translate("ExportersManager", "Path"))
|
||||
self.label_2.setText(_translate("ExportersManager", "Status:"))
|
||||
self.lblVersionName.setText(_translate("ExportersManager", "Version:"))
|
||||
self.lblHelpText.setText(_translate("ExportersManager", "{HelpText}"))
|
||||
self.btnSetPath.setText(_translate("ExportersManager", "..."))
|
||||
|
292
manuskript/ui/exporters/exportersManager_ui.ui
Normal file
292
manuskript/ui/exporters/exportersManager_ui.ui
Normal file
|
@ -0,0 +1,292 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>ExportersManager</class>
|
||||
<widget class="QWidget" name="ExportersManager">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>658</width>
|
||||
<height>439</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Manage Exporters</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_8">
|
||||
<item>
|
||||
<widget class="QListWidget" name="lstExporters">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Manuskript</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QWidget" name="stack" native="true">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="lblExporterName">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">background-color:lightBlue;
|
||||
border:none;
|
||||
padding:10px;
|
||||
color:darkBlue;
|
||||
font-size:16px;
|
||||
font-weight:bold;
|
||||
text-align:center;</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string notr="true">{Exporter Name}</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="grpDescription">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Description</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||
<item>
|
||||
<widget class="QLabel" name="lblExporterDescription">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string notr="true">{ExporterDescription}</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="grpExportTo">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Offers export to</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QListWidget" name="lstExportTo"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QFrame" name="frame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="lblExportToDescription">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string notr="true">{FormatDescription}</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<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>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="grpPath">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Path</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<layout class="QFormLayout" name="formLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>Status:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLabel" name="lblStatus">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string notr="true">{ExporterStatus}</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="lblVersionName">
|
||||
<property name="text">
|
||||
<string>Version:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLabel" name="lblVersion">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string notr="true">{ExporterVersion}</string>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="lblHelpText">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>{HelpText}</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QLineEdit" name="txtPath">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="btnSetPath">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
Loading…
Reference in a new issue