Merge branch 'feature/Exporters' into develop

This commit is contained in:
Olivier Keshavjee 2017-11-18 18:00:54 +01:00
commit a42c7a41ab
8 changed files with 33 additions and 43 deletions

View file

@ -2,13 +2,11 @@
# --!-- coding: utf8 --!--
from manuskript.exporter.manuskript import manuskriptExporter
from manuskript.exporter.mmd import mmdExporter
from manuskript.exporter.pandoc import pandocExporter
exporters = [
manuskriptExporter(),
pandocExporter(),
mmdExporter()
pandocExporter()
]
def getExporterByName(name):
@ -16,4 +14,4 @@ def getExporterByName(name):
if e.name == name:
return e
return None
return None

View file

@ -19,6 +19,8 @@ class basicExporter:
cmd = ""
customPath = ""
icon = ""
absentTip = "" # A tip displayed when exporter is absent.
absentURL = "" # URL to open if exporter is absent.
def __init__(self):
settings = QSettings()

View file

@ -1,28 +0,0 @@
#!/usr/bin/env python
# --!-- coding: utf8 --!--
from PyQt5.QtWidgets import qApp
from manuskript.exporter.basic import basicExporter, basicFormat
class mmdExporter(basicExporter):
name = "MultiMarkdown"
description = qApp.translate("Export", """<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.", "text-html"),
basicFormat("latex", "", "text-x-tex"),
basicFormat("Flat XML", "", "text-xml"),
basicFormat("ePub", "Books that don't kill trees.", icon="application-epub+zip"),
]
cmd = "multimarkdown"
def version(self):
if self.isValid():
r = self.run(["-v"])
return r.split("\n")[1]
else:
return ""

View file

@ -22,6 +22,8 @@ class pandocExporter(basicExporter):
<p>Website: <a href="http://www.pandoc.org">http://pandoc.org/</a></p>
""")
cmd = "pandoc"
absentTip = "Install pandoc to benefit from a wide range of export formats (DocX, ePub, PDF, etc.)"
absentURL = "http://pandoc.org/installing.html"
def __init__(self):
basicExporter.__init__(self)
@ -40,7 +42,7 @@ class pandocExporter(basicExporter):
def version(self):
if self.isValid():
r = self.run(["-v"])
r = self.run(["--version"])
return r.split("\n")[0]
else:
return ""

View file

@ -6,7 +6,9 @@ import re
from random import *
from PyQt5.QtCore import Qt, QRect, QStandardPaths, QObject, QRegExp, QDir
from PyQt5.QtCore import QUrl
from PyQt5.QtGui import QBrush, QIcon, QPainter, QColor, QImage, QPixmap
from PyQt5.QtGui import QDesktopServices
from PyQt5.QtWidgets import qApp, QTextEdit
from manuskript.enums import Outline
@ -351,5 +353,10 @@ def customIcons():
return sorted(r)
def statusMessage(message, duration=5000):
mainWindow().statusBar().showMessage(message, duration)
def openURL(url):
QDesktopServices.openUrl(QUrl(url))

View file

@ -1234,8 +1234,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
w.setDict(settings.dict)
def openPyEnchantWebPage(self):
from PyQt5.QtGui import QDesktopServices
QDesktopServices.openUrl(QUrl("http://pythonhosted.org/pyenchant/"))
F.openURL("http://pythonhosted.org/pyenchant/")
def toggleSpellcheck(self, val):
settings.spellcheck = val

View file

@ -5,10 +5,10 @@ import os
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QBrush, QColor, QIcon
from PyQt5.QtWidgets import QWidget
from PyQt5.QtWidgets import QWidget, QStyle
from manuskript import exporter
from manuskript.functions import writablePath
from manuskript.functions import writablePath, openURL
from manuskript.ui.exporters.exporter_ui import Ui_exporter
from manuskript.ui.exporters.exportersManager import exportersManager
from manuskript.ui import style as S
@ -43,7 +43,7 @@ class exporterDialog(QWidget, Ui_exporter):
self.cmbExporters.clear()
for E in exporter.exporters:
if not E.isValid():
if not E.isValid() and not E.absentTip:
continue
self.cmbExporters.addItem(QIcon(E.icon), E.name)
@ -52,6 +52,10 @@ class exporterDialog(QWidget, Ui_exporter):
item = self.cmbExporters.model().item(self.cmbExporters.count() - 1)
item.setFlags(Qt.ItemIsEnabled)
if not E.isValid() and E.absentTip:
self.cmbExporters.addItem(self.style().standardIcon(QStyle.SP_MessageBoxWarning), E.absentTip, "::URL::" + E.absentURL)
continue
for f in E.exportTo:
if not f.isValid():
@ -61,6 +65,12 @@ class exporterDialog(QWidget, Ui_exporter):
self.cmbExporters.addItem(QIcon.fromTheme(f.icon), name, E.name)
def updateUi(self, index):
# We check if we have an URL to open
data = self.cmbExporters.currentData()
if data and data[:7] == "::URL::" and data[7:]:
openURL(data[7:])
E, F = self.getSelectedExporter()
if not E or not F or not F.implemented:
@ -143,4 +153,4 @@ class exporterDialog(QWidget, Ui_exporter):
item.widget().deleteLater()
l.addWidget(widget)
widget.setParent(group)
widget.setParent(group)

View file

@ -3,11 +3,11 @@
import json
import os
from PyQt5.QtCore import Qt, QTimer, QUrl
from PyQt5.QtGui import QBrush, QColor, QIcon, QDesktopServices
from PyQt5.QtCore import Qt, QTimer
from PyQt5.QtGui import QBrush, QColor, QIcon
from PyQt5.QtWidgets import QWidget, QFileDialog, QMessageBox, QStyle
from manuskript.functions import writablePath, appPath
from manuskript.functions import writablePath, appPath, openURL
from manuskript.ui.importers.importer_ui import Ui_importer
from manuskript.ui.importers.generalSettings import generalSettings
from manuskript.ui import style
@ -180,7 +180,7 @@ class importerDialog(QWidget, Ui_importer):
data = self.cmbImporters.currentData()
if data and data[:7] == "::URL::" and data[7:]:
# FIXME: use functions.openURL after merge with feature/Exporters
QDesktopServices.openUrl(QUrl(data[7:]))
openURL(data[7:])
return
F = self.currentFormat()