manuskript/manuskript/ui/exporters/exportersManager.py

151 lines
4.9 KiB
Python
Raw Normal View History

2016-04-02 06:01:27 +13:00
#!/usr/bin/env python
# --!-- coding: utf8 --!--
import os
from collections import OrderedDict
from PyQt5.QtCore import QSize
from PyQt5.QtCore import Qt, pyqtSignal
2016-04-08 22:48:19 +12:00
from PyQt5.QtGui import QIcon
2016-04-12 19:15:01 +12:00
from PyQt5.QtWidgets import QWidget, QListWidgetItem, QFileDialog
2016-04-02 06:01:27 +13:00
from manuskript import exporter
from manuskript.ui.exporters.exportersManager_ui import Ui_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 exportersManager(QWidget, Ui_ExportersManager):
exportersMightHaveChanged = pyqtSignal()
2016-04-02 06:01:27 +13:00
def __init__(self, parent=None):
QWidget.__init__(self, parent)
self.setupUi(self)
2017-11-15 02:48:28 +13:00
self.lblExporterName.setStyleSheet(S.titleLabelSS())
2016-04-02 06:01:27 +13:00
# Var
self.currentExporter = None
# Populates lite
self.lstExporters.clear()
for E in exporter.exporters:
item = QListWidgetItem(QIcon(E.icon), E.name)
self.lstExporters.addItem(item)
2016-04-02 06:01:27 +13:00
# 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)
2016-04-12 19:15:01 +12:00
self.btnSetPath.clicked.connect(self.setAppPath)
self.txtPath.editingFinished.connect(self.updateAppPath)
2016-04-02 06:01:27 +13:00
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:
2016-04-08 22:48:19 +12:00
item = QListWidgetItem(QIcon.fromTheme(f.icon), f.name)
self.lstExportTo.addItem(item)
self.grpExportTo.layout().setStretch(0, 4)
self.grpExportTo.layout().setStretch(1, 6)
2016-04-02 06:01:27 +13:00
self.lstExportTo.setCurrentRow(0)
# Updates path & version
self.grpPath.setVisible(E.name != "Manuskript") # We hide if exporter is manuskript
# Installed
2016-04-12 19:15:01 +12:00
if E.isValid() == 2:
2016-04-02 06:01:27 +13:00
self.lblStatus.setText(self.tr("Installed"))
self.lblStatus.setStyleSheet("color: darkGreen;")
self.lblHelpText.setVisible(False)
self.lblVersion.setVisible(True)
self.lblVersionName.setVisible(True)
2016-04-12 19:15:01 +12:00
elif E.isValid() == 1:
self.lblStatus.setText(self.tr("Custom"))
self.lblStatus.setStyleSheet("color: darkOrange;")
self.lblHelpText.setVisible(False)
self.lblVersion.setVisible(True)
self.lblVersionName.setVisible(True)
2016-04-02 06:01:27 +13:00
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
2016-04-12 19:15:01 +12:00
if E.path():
self.txtPath.setText(E.path())
else:
self.txtPath.setText(E.customPath)
2016-04-02 06:01:27 +13:00
def updateFormatDescription(self, name):
if self.currentExporter:
f = self.currentExporter.getFormatByName(name)
if not f:
self.lblExportToDescription.setText("")
else:
2016-04-08 00:27:51 +12:00
desc = "<b>{}:</b> {}".format(
2016-04-02 06:01:27 +13:00
name,
2016-04-08 00:27:51 +12:00
f.description)
2016-04-02 06:01:27 +13:00
2016-04-08 00:27:51 +12:00
if not f.isValid():
desc += "<br><br>" + \
self.tr("<b>Status:</b> uninstalled.") + \
"<br><br>" + \
self.tr("<b>Requires:</b> ") + f.InvalidBecause
2016-04-02 06:01:27 +13:00
2016-04-08 00:27:51 +12:00
self.lblExportToDescription.setText(desc)
2016-04-12 19:15:01 +12:00
def setAppPath(self):
if self.currentExporter:
E = self.currentExporter
fn = QFileDialog.getOpenFileName(self,
caption=self.tr("Set {} executable path.").format(E.cmd),
directory=E.customPath)
if fn[0]:
self.updateAppPath(fn[0])
def updateAppPath(self, path=""):
if not path:
path = self.txtPath.text()
if self.currentExporter:
E = self.currentExporter
E.setCustomPath(path)
self.txtPath.setText(E.customPath)
self.updateUi(E.name)
self.exportersMightHaveChanged.emit()
2016-04-12 19:15:01 +12:00