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 --!-- # --!-- coding: utf8 --!--
from manuskript.exporter.manuskript import manuskriptExporter from manuskript.exporter.manuskript import manuskriptExporter
from manuskript.exporter.mmd import mmdExporter
from manuskript.exporter.pandoc import pandocExporter from manuskript.exporter.pandoc import pandocExporter
exporters = [ exporters = [
manuskriptExporter(), manuskriptExporter(),
pandocExporter(), pandocExporter()
mmdExporter()
] ]
def getExporterByName(name): def getExporterByName(name):
@ -16,4 +14,4 @@ def getExporterByName(name):
if e.name == name: if e.name == name:
return e return e
return None return None

View file

@ -19,6 +19,8 @@ class basicExporter:
cmd = "" cmd = ""
customPath = "" customPath = ""
icon = "" icon = ""
absentTip = "" # A tip displayed when exporter is absent.
absentURL = "" # URL to open if exporter is absent.
def __init__(self): def __init__(self):
settings = QSettings() 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> <p>Website: <a href="http://www.pandoc.org">http://pandoc.org/</a></p>
""") """)
cmd = "pandoc" 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): def __init__(self):
basicExporter.__init__(self) basicExporter.__init__(self)
@ -40,7 +42,7 @@ class pandocExporter(basicExporter):
def version(self): def version(self):
if self.isValid(): if self.isValid():
r = self.run(["-v"]) r = self.run(["--version"])
return r.split("\n")[0] return r.split("\n")[0]
else: else:
return "" return ""

View file

@ -6,7 +6,9 @@ import re
from random import * from random import *
from PyQt5.QtCore import Qt, QRect, QStandardPaths, QObject, QRegExp, QDir 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 QBrush, QIcon, QPainter, QColor, QImage, QPixmap
from PyQt5.QtGui import QDesktopServices
from PyQt5.QtWidgets import qApp, QTextEdit from PyQt5.QtWidgets import qApp, QTextEdit
from manuskript.enums import Outline from manuskript.enums import Outline
@ -351,5 +353,10 @@ def customIcons():
return sorted(r) return sorted(r)
def statusMessage(message, duration=5000): def statusMessage(message, duration=5000):
mainWindow().statusBar().showMessage(message, duration) 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) w.setDict(settings.dict)
def openPyEnchantWebPage(self): def openPyEnchantWebPage(self):
from PyQt5.QtGui import QDesktopServices F.openURL("http://pythonhosted.org/pyenchant/")
QDesktopServices.openUrl(QUrl("http://pythonhosted.org/pyenchant/"))
def toggleSpellcheck(self, val): def toggleSpellcheck(self, val):
settings.spellcheck = val settings.spellcheck = val

View file

@ -5,10 +5,10 @@ import os
from PyQt5.QtCore import Qt from PyQt5.QtCore import Qt
from PyQt5.QtGui import QBrush, QColor, QIcon from PyQt5.QtGui import QBrush, QColor, QIcon
from PyQt5.QtWidgets import QWidget from PyQt5.QtWidgets import QWidget, QStyle
from manuskript import exporter 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.exporter_ui import Ui_exporter
from manuskript.ui.exporters.exportersManager import exportersManager from manuskript.ui.exporters.exportersManager import exportersManager
from manuskript.ui import style as S from manuskript.ui import style as S
@ -43,7 +43,7 @@ class exporterDialog(QWidget, Ui_exporter):
self.cmbExporters.clear() self.cmbExporters.clear()
for E in exporter.exporters: for E in exporter.exporters:
if not E.isValid(): if not E.isValid() and not E.absentTip:
continue continue
self.cmbExporters.addItem(QIcon(E.icon), E.name) 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 = self.cmbExporters.model().item(self.cmbExporters.count() - 1)
item.setFlags(Qt.ItemIsEnabled) 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: for f in E.exportTo:
if not f.isValid(): if not f.isValid():
@ -61,6 +65,12 @@ class exporterDialog(QWidget, Ui_exporter):
self.cmbExporters.addItem(QIcon.fromTheme(f.icon), name, E.name) self.cmbExporters.addItem(QIcon.fromTheme(f.icon), name, E.name)
def updateUi(self, index): 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() E, F = self.getSelectedExporter()
if not E or not F or not F.implemented: if not E or not F or not F.implemented:
@ -143,4 +153,4 @@ class exporterDialog(QWidget, Ui_exporter):
item.widget().deleteLater() item.widget().deleteLater()
l.addWidget(widget) l.addWidget(widget)
widget.setParent(group) widget.setParent(group)

View file

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