diff --git a/manuskript/ui/importers/importer.py b/manuskript/ui/importers/importer.py index 24c62b1..3254a92 100644 --- a/manuskript/ui/importers/importer.py +++ b/manuskript/ui/importers/importer.py @@ -5,19 +5,132 @@ import os from PyQt5.QtCore import Qt from PyQt5.QtGui import QBrush, QColor, QIcon -from PyQt5.QtWidgets import QWidget +from PyQt5.QtWidgets import QWidget, QFileDialog from manuskript import exporter -from manuskript.functions import lightBlue, writablePath +from manuskript.functions import lightBlue, writablePath, appPath from manuskript.ui.importers.importer_ui import Ui_importer +class importFormat: + def __init__(self, name, icon, fileFormat): + self.name = name + self.icon = icon + self.fileFormat = fileFormat class importerDialog(QWidget, Ui_importer): + + formatsIcon = { + ".epub": "application-epub+zip", + ".odt": "application-vnd.oasis.opendocument.text", + ".docx": "application-vnd.openxmlformats-officedocument.wordprocessingml.document", + ".md": "text-x-markdown", + ".rst": "text-plain", + ".tex": "text-x-tex", + ".opml": "text-x-opml+xml", + ".html": "text-html", + } + def __init__(self, parent=None, mw=None): QWidget.__init__(self, parent) self.setupUi(self) # Var self.mw = mw + self.fileName = "" - #TODO + # Register importFormats: + self.formats = [] + self.formats.append(importFormat("OPML", "text-x-opml+xml", + "OPML Files (*.opml)")) + self.formats.append(importFormat("Markdown", "text-x-markdown", + "Markdown files (*.md; *.txt; *)")) + self.formats.append(importFormat("Folder", "folder", + "<>")) + + # Populate combo box with formats + self.populateImportList() + + # Connections + self.btnChoseFile.clicked.connect(self.selectFile) + self.btnClearFileName.clicked.connect(self.setFileName) + self.btnPreview.clicked.connect(self.preview) + self.setFileName("") + + ############################################################################ + # Combobox / Formats + ############################################################################ + + def populateImportList(self): + + def addFormat(name, icon): + self.cmbImporters.addItem(QIcon.fromTheme(icon), name) + + for f in self.formats: + addFormat(f.name, f.icon) + + ############################################################################ + # Import file + ############################################################################ + + def selectFile(self): + + # We find the current selected format + formatName = self.cmbImporters.currentText() + F = [F for F in self.formats if F.name == formatName][0] + + options = QFileDialog.Options() + options |= QFileDialog.DontUseNativeDialog + if F.fileFormat == "<>": + options = QFileDialog.DontUseNativeDialog | QFileDialog.ShowDirsOnly + fileName = QFileDialog.getExistingDirectory(self, "Select import folder", + "", options=options) + else: + fileName, _ = QFileDialog.getOpenFileName(self, "Import from file", "", + F.fileFormat, options=options) + self.setFileName(fileName) + + def setFileName(self, fileName): + if fileName: + self.fileName = fileName + self.btnPreview.setEnabled(True) + self.lblFileName.setText(os.path.basename(fileName)) + self.lblFileName.setToolTip(fileName) + self.btnClearFileName.setVisible(True) + ext = os.path.splitext(fileName)[1] + if ext and ext in self.formatsIcon: + self.lblIcon.setVisible(True) + h = self.lblFileName.height() + self.lblIcon.setPixmap( + QIcon.fromTheme(self.formatsIcon[ext]).pixmap(h, h) + ) + elif os.path.isdir(fileName): + self.lblIcon.setVisible(True) + h = self.lblFileName.height() + self.lblIcon.setPixmap(QIcon.fromTheme("folder").pixmap(h, h)) + + else: + self.fileName = None + self.btnPreview.setEnabled(False) + self.lblFileName.setText("") + self.btnClearFileName.setVisible(False) + self.lblIcon.setVisible(False) + + ############################################################################ + # Preview + ############################################################################ + + def preview(self): + # TODO + pass + + ############################################################################ + # + ############################################################################ + + def getParentIndex(self): + if len(self.mw.treeRedacOutline.selectionModel(). + selection().indexes()) == 0: + idx = QModelIndex() + else: + idx = self.mw.treeRedacOutline.currentIndex() + return idx diff --git a/manuskript/ui/importers/importer_ui.py b/manuskript/ui/importers/importer_ui.py index c5ccc28..b6730a5 100644 --- a/manuskript/ui/importers/importer_ui.py +++ b/manuskript/ui/importers/importer_ui.py @@ -23,6 +23,7 @@ class Ui_importer(object): self.cmbImporters.setObjectName("cmbImporters") self.horizontalLayout.addWidget(self.cmbImporters) self.btnManageImporters = QtWidgets.QPushButton(importer) + self.btnManageImporters.setText("") icon = QtGui.QIcon.fromTheme("preferences-system") self.btnManageImporters.setIcon(icon) self.btnManageImporters.setObjectName("btnManageImporters") @@ -34,6 +35,27 @@ class Ui_importer(object): self.btnChoseFile.setIcon(icon) self.btnChoseFile.setObjectName("btnChoseFile") self.horizontalLayout.addWidget(self.btnChoseFile) + self.lblIcon = QtWidgets.QLabel(importer) + self.lblIcon.setText("") + self.lblIcon.setObjectName("lblIcon") + self.horizontalLayout.addWidget(self.lblIcon) + self.lblFileName = QtWidgets.QLabel(importer) + font = QtGui.QFont() + font.setBold(True) + font.setWeight(75) + self.lblFileName.setFont(font) + self.lblFileName.setText("") + self.lblFileName.setObjectName("lblFileName") + self.horizontalLayout.addWidget(self.lblFileName) + self.btnClearFileName = QtWidgets.QPushButton(importer) + self.btnClearFileName.setText("") + icon = QtGui.QIcon.fromTheme("edit-clear") + self.btnClearFileName.setIcon(icon) + self.btnClearFileName.setFlat(True) + self.btnClearFileName.setObjectName("btnClearFileName") + self.horizontalLayout.addWidget(self.btnClearFileName) + spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout.addItem(spacerItem1) self.btnPreview = QtWidgets.QPushButton(importer) icon = QtGui.QIcon.fromTheme("document-print-preview") self.btnPreview.setIcon(icon) @@ -63,8 +85,8 @@ class Ui_importer(object): def retranslateUi(self, importer): _translate = QtCore.QCoreApplication.translate importer.setWindowTitle(_translate("importer", "Import")) - self.label.setText(_translate("importer", "Import from:")) - self.btnManageImporters.setText(_translate("importer", "Manage importers")) + self.label.setText(_translate("importer", "Format:")) + self.btnManageImporters.setToolTip(_translate("importer", "Manage importers")) self.btnChoseFile.setText(_translate("importer", "Chose file")) self.btnPreview.setText(_translate("importer", "Preview")) self.grpSettings.setTitle(_translate("importer", "Settings")) diff --git a/manuskript/ui/importers/importer_ui.ui b/manuskript/ui/importers/importer_ui.ui index 2d3ce52..c7877ab 100644 --- a/manuskript/ui/importers/importer_ui.ui +++ b/manuskript/ui/importers/importer_ui.ui @@ -19,7 +19,7 @@ - Import from: + Format: @@ -28,9 +28,12 @@ - + Manage importers + + + @@ -39,7 +42,7 @@ - + Qt::Horizontal @@ -61,6 +64,52 @@ + + + + + + + + + + + + 75 + true + + + + + + + + + + + + + + + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + diff --git a/manuskript/ui/mainWindow.py b/manuskript/ui/mainWindow.py index 91bc55d..26b92db 100644 --- a/manuskript/ui/mainWindow.py +++ b/manuskript/ui/mainWindow.py @@ -1366,6 +1366,7 @@ class Ui_MainWindow(object): self.actAbout.setText(_translate("MainWindow", "&About")) self.actAbout.setToolTip(_translate("MainWindow", "About Manuskript")) self.actImport.setText(_translate("MainWindow", "Import…")) + self.actImport.setShortcut(_translate("MainWindow", "F7")) from manuskript.ui.cheatSheet import cheatSheet from manuskript.ui.editors.mainEditor import mainEditor diff --git a/manuskript/ui/mainWindow.ui b/manuskript/ui/mainWindow.ui index f341bd6..d13d875 100644 --- a/manuskript/ui/mainWindow.ui +++ b/manuskript/ui/mainWindow.ui @@ -2490,6 +2490,9 @@ QListView::item:hover { Import… + + F7 +