diff --git a/manuskript/exporter/__init__.py b/manuskript/exporter/__init__.py index b8e7df47..c9edb188 100644 --- a/manuskript/exporter/__init__.py +++ b/manuskript/exporter/__init__.py @@ -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 \ No newline at end of file + return None diff --git a/manuskript/exporter/basic.py b/manuskript/exporter/basic.py index bc1c1fc0..0cf6100a 100644 --- a/manuskript/exporter/basic.py +++ b/manuskript/exporter/basic.py @@ -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() diff --git a/manuskript/exporter/mmd.py b/manuskript/exporter/mmd.py deleted file mode 100644 index fbe5baec..00000000 --- a/manuskript/exporter/mmd.py +++ /dev/null @@ -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", """

A superset of markdown.

-

Website: http://fletcherpenney.net/multimarkdown/

- """) - 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 "" - diff --git a/manuskript/exporter/pandoc/__init__.py b/manuskript/exporter/pandoc/__init__.py index d36e78d8..55df7178 100644 --- a/manuskript/exporter/pandoc/__init__.py +++ b/manuskript/exporter/pandoc/__init__.py @@ -22,6 +22,8 @@ class pandocExporter(basicExporter):

Website: http://pandoc.org/

""") 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 "" diff --git a/manuskript/functions.py b/manuskript/functions.py index 868ff7fd..0a94e82c 100644 --- a/manuskript/functions.py +++ b/manuskript/functions.py @@ -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)) diff --git a/manuskript/mainWindow.py b/manuskript/mainWindow.py index e1fce64d..a2f68b5f 100644 --- a/manuskript/mainWindow.py +++ b/manuskript/mainWindow.py @@ -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 diff --git a/manuskript/ui/exporters/exporter.py b/manuskript/ui/exporters/exporter.py index 3340ae42..7a954bc4 100644 --- a/manuskript/ui/exporters/exporter.py +++ b/manuskript/ui/exporters/exporter.py @@ -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) \ No newline at end of file diff --git a/manuskript/ui/importers/importer.py b/manuskript/ui/importers/importer.py index 5d68f9d0..2068451e 100644 --- a/manuskript/ui/importers/importer.py +++ b/manuskript/ui/importers/importer.py @@ -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()