manuskript/manuskript/ui/exporters/exporter.py

157 lines
5 KiB
Python
Raw Normal View History

2016-04-02 06:01:27 +13:00
#!/usr/bin/env python
# --!-- coding: utf8 --!--
import json
2016-04-02 06:01:27 +13:00
import os
from PyQt5.QtCore import Qt, QPoint
2016-04-08 22:48:19 +12:00
from PyQt5.QtGui import QBrush, QColor, QIcon
from PyQt5.QtWidgets import QWidget, QStyle
2016-04-02 06:01:27 +13:00
from manuskript import exporter
from manuskript.functions import writablePath, openURL
2016-04-02 06:01:27 +13:00
from manuskript.ui.exporters.exporter_ui import Ui_exporter
from manuskript.ui.exporters.exportersManager import exportersManager
2017-11-15 02:48:28 +13:00
from manuskript.ui import style as S
2016-04-02 06:01:27 +13:00
class exporterDialog(QWidget, Ui_exporter):
2016-04-05 06:00:19 +12:00
def __init__(self, parent=None, mw=None):
2016-04-02 06:01:27 +13:00
QWidget.__init__(self, parent)
self.setupUi(self)
# Var
2016-04-05 06:00:19 +12:00
self.mw = mw
2016-04-02 06:01:27 +13:00
self.currentExporter = None
2016-04-08 22:02:50 +12:00
self.settingsWidget = None
self.previewWidget = None
2016-04-02 06:01:27 +13:00
self.populateExportList()
self.btnManageExporters.clicked.connect(self.openManager)
self.cmbExporters.currentIndexChanged.connect(self.updateUi)
self.cmbExporters.setCurrentIndex(1)
self.btnPreview.clicked.connect(self.preview)
self.btnExport.clicked.connect(self.export)
2016-04-16 00:16:15 +12:00
#FIXME: load last export format
2016-04-15 21:58:09 +12:00
def populateExportList(self):
2016-04-08 22:48:19 +12:00
# Populates list
2016-04-02 06:01:27 +13:00
self.cmbExporters.clear()
for E in exporter.exporters:
if not E.isValid() and not E.absentTip:
2016-04-02 06:01:27 +13:00
continue
self.cmbExporters.addItem(QIcon(E.icon), E.name)
2017-11-15 02:48:28 +13:00
self.cmbExporters.setItemData(self.cmbExporters.count() - 1, QBrush(QColor(S.highlightedTextDark)), Qt.ForegroundRole)
self.cmbExporters.setItemData(self.cmbExporters.count() - 1, QBrush(QColor(S.highlightLight)), Qt.BackgroundRole)
2016-04-02 06:01:27 +13:00
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
2016-04-02 06:01:27 +13:00
for f in E.exportTo:
2016-04-08 00:27:51 +12:00
if not f.isValid():
continue
2016-04-02 06:01:27 +13:00
name = f.name if f.implemented else self.tr("{} (not implemented yet)").format(f.name)
2016-04-08 22:48:19 +12:00
self.cmbExporters.addItem(QIcon.fromTheme(f.icon), name, E.name)
2016-04-02 06:01:27 +13:00
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:])
2016-04-06 03:21:07 +12:00
E, F = self.getSelectedExporter()
if not E or not F or not F.implemented:
self.setWidgetsEnabled(False)
return
self.setWidgetsEnabled(True)
self.grpSettings.setVisible(F.requires["Settings"])
self.grpPreview.setVisible(F.requires["Preview"])
self.btnPreview.setVisible(F.requires["Preview"])
if F.requires["Settings"]:
self.settingsWidget = F.settingsWidget()
self.setGroupWidget(self.grpSettings, self.settingsWidget)
if F.requires["Preview"]:
self.previewWidget = F.previewWidget()
self.setGroupWidget(self.grpPreview, self.previewWidget)
2016-04-08 22:02:50 +12:00
self.splitter.setStretchFactor(0, 3)
self.splitter.setStretchFactor(1, 6)
2016-04-06 03:21:07 +12:00
def preview(self):
E, F = self.getSelectedExporter()
if not E or not F or not F.implemented:
return
F.preview(self.settingsWidget, self.previewWidget)
2016-04-08 22:02:50 +12:00
def export(self):
E, F = self.getSelectedExporter()
if not E or not F or not F.implemented:
return
F.export(self.settingsWidget)
2016-04-06 03:21:07 +12:00
###################################################################################################################
# UI
###################################################################################################################
def getSelectedExporter(self):
2016-04-02 06:01:27 +13:00
name = self.cmbExporters.currentText()
exporterName = self.cmbExporters.currentData()
E = exporter.getExporterByName(exporterName)
if not E:
2016-04-06 03:21:07 +12:00
return None, None
2016-04-02 06:01:27 +13:00
F = E.getFormatByName(name)
2016-04-06 03:21:07 +12:00
if not F:
return E, F
2016-04-02 06:01:27 +13:00
2016-04-06 03:21:07 +12:00
return E, F
2016-04-02 06:01:27 +13:00
def setWidgetsEnabled(self, value):
2016-04-06 03:21:07 +12:00
"""One function to control them all. Enables or disables all groups."""
2016-04-02 06:01:27 +13:00
self.grpSettings.setEnabled(value)
2016-04-06 03:21:07 +12:00
self.grpPreview.setEnabled(value)
2016-04-02 06:01:27 +13:00
def openManager(self):
2016-04-06 03:21:07 +12:00
"""Open exporters manager dialog"""
2016-04-02 06:01:27 +13:00
self.dialog = exportersManager()
self.dialog.show()
r = self.dialog.geometry()
r2 = self.geometry()
self.dialog.move(r2.center() - QPoint(int(r.width()/2), int(r.height()/2)))
2016-04-06 03:21:07 +12:00
self.dialog.exportersMightHaveChanged.connect(self.populateExportList)
2016-04-06 03:21:07 +12:00
def setGroupWidget(self, group, widget):
"""Sets the given widget as main widget for QGroupBox group."""
# Removes every items from given layout.
l = group.layout()
while l.count():
2016-04-08 00:27:51 +12:00
item = l.itemAt(0)
l.removeItem(item)
item.widget().deleteLater()
2016-04-06 03:21:07 +12:00
l.addWidget(widget)
widget.setParent(group)