WizardDataUriEncoder/DataUriEncoderWizardDialog.py

branch
eric7
changeset 44
1ab3e76972e6
parent 41
f7634f688a52
child 47
2d49cd593939
--- a/WizardDataUriEncoder/DataUriEncoderWizardDialog.py	Wed Jun 02 17:20:11 2021 +0200
+++ b/WizardDataUriEncoder/DataUriEncoderWizardDialog.py	Wed Jun 02 17:30:01 2021 +0200
@@ -7,42 +7,57 @@
 Module implementing the base64 data URI encoder wizard dialog.
 """
 
-import os
-import mimetypes
 import base64
+import codecs
+import datetime
 import getpass
-import datetime
+import mimetypes
+import os
 
-from PyQt5.QtCore import pyqtSlot
-from PyQt5.QtWidgets import (
+from PyQt6.QtCore import pyqtSlot
+from PyQt6.QtWidgets import (
     QDialog, QDialogButtonBox, QApplication, QInputDialog
 )
 
-from E5Gui.E5Completers import E5FileCompleter
-from E5Gui import E5FileDialog, E5MessageBox
+from EricWidgets import EricMessageBox
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_DataUriEncoderWizardDialog import Ui_DataUriEncoderWizardDialog
 
 import Preferences
 import Utilities
-import UI.PixmapCache
 
 
-Python3Template = """#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-
-from base64 import b64decode
-from io import BytesIO
-
-#metadata
-__author__ = '{0}'
-__date__ = '{1}'
-
-
-embedded_file = BytesIO(b64decode({2}))
-print(embedded_file.read())
-"""
-
+DataUriTemplates = {
+    "Python3": "\n".join([
+        "#!/usr/bin/env python3",
+        "# -*- coding: utf-8 -*-",
+        "",
+        "from base64 import b64decode",
+        "from io import BytesIO",
+        "",
+        "#metadata",
+        "__author__ = '{0}'",
+        "__date__ = '{1}'",
+        "",
+        "",
+        "embedded_file = BytesIO(b64decode(",
+        "    {2}",
+        "))",
+        "print(embedded_file.read())",
+    ]),
+    
+    "CSS":
+        "html, body {{ margin:0; padding:0; background: url({0})"
+        " no-repeat center center fixed; background-size:cover"
+        " }}",
+    
+    "HTML": '<img src={0} alt="{1}" title="{1}"/>',
+    
+    "JavaScript": "var embedded_file = window.atob({0}); ",
+    
+    "QML": "Image {{ source: {0} }} "
+}
 
 class DataUriEncoderWizardDialog(QDialog, Ui_DataUriEncoderWizardDialog):
     """
@@ -52,65 +67,45 @@
         """
         Constructor
         
-        @param parent reference to the parent widget (QWidget)
+        @param parent reference to the parent widget
+        @type QWidget
         """
         super().__init__(parent)
         self.setupUi(self)
         
-        self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(False)
+        self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Ok).setEnabled(False)
         
-        self.__fileCompleter = E5FileCompleter(self.fileEdit)
-        
-        self.fileButton.setIcon(UI.PixmapCache.getIcon("open.png"))
+        self.filePicker.setWindowTitle(self.tr("Data URI Encoder"))
+        self.filePicker.setMode(EricPathPickerModes.OPEN_FILE_MODE)
+        self.filePicker.setFilters(self.tr(
+            "Audio Files (*.flac *.mp3 *.ogg *.wav *.weba *.wma);;"
+            "Image Files (*.gif *.ico *.jpg *.png *.svg *.tif *.webp"
+            " *.xpm);;"
+            "Video Files (*.3gp *.avi *.flv *.mp4 *.ogv *.webm *.wmv);;"
+            "All Files (*)"
+        ))
+        self.filePicker.setDefaultDirectory(
+            Preferences.getMultiProject("Workspace") or
+            Utilities.getHomeDir()
+        )
         
         self.embeddingComboBox.addItems([
-            self.tr('Do not generate code'),            # 0
-            self.tr('Generate Python3 embed code'),     # 1
-            self.tr('Generate CSS embed code'),         # 2
-            self.tr('Generate HTML embed code'),        # 3
-            self.tr('Generate JS embed code'),          # 4
-            self.tr('Generate QML embed code'),         # 5
+            self.tr('Do not generate code'),                    # 0
+            self.tr('Generate Python3 embedding code'),         # 1
+            self.tr('Generate CSS embedding code'),             # 2
+            self.tr('Generate HTML embedding code'),            # 3
+            self.tr('Generate JavaScript embedding code'),      # 4
+            self.tr('Generate QML embedding code'),             # 5
         ])
     
-    def __getStartDir(self):
-        """
-        Private method to get the start directory for selection dialogs.
-        
-        @return start directory (string)
-        """
-        return (Preferences.getMultiProject("Workspace") or
-                Utilities.getHomeDir())
-    
-    @pyqtSlot()
-    def on_fileButton_clicked(self):
-        """
-        Private slot to select the file to be encoded via a selection dialog.
-        """
-        start = (
-            Utilities.fromNativeSeparators(self.fileEdit.text()) or
-            self.__getStartDir()
-        )
-        inputFile = E5FileDialog.getOpenFileName(
-            self,
-            self.tr("Data URI Encoder"),
-            start,
-            self.tr(
-                "Audio Files (*.flac *.mp3 *.ogg *.wav *.weba *.wma);;"
-                "Image Files (*.gif *.ico *.jpg *.png *.svg *.tif *.webp"
-                " *.xpm);;"
-                "Video Files (*.3gp *.avi *.flv *.mp4 *.ogv *.webm *.wmv);;"
-                "All Files (*)"
-            )
-        )
-        if inputFile:
-            self.fileEdit.setText(Utilities.toNativeSeparators(inputFile))
-    
     @pyqtSlot(int)
     def on_embeddingComboBox_currentIndexChanged(self, index):
         """
         Private slot to handle the selection of an embedding method.
         
-        @param index index of the selected entry (integer)
+        @param index index of the selected entry
+        @type int
         """
         if index in [2, 3]:
             self.encryptCheckBox.setChecked(False)
@@ -124,23 +119,22 @@
         """
         Private slot to encode the contents of the given file.
         """
-        filepath = Utilities.toNativeSeparators(self.fileEdit.text().strip())
+        filepath = self.filePicker.text().strip()
         mime = mimetypes.guess_type(filepath, strict=False)
         mimetype = mime if mime is not None else self.__askMime()
         
         if os.path.getsize(filepath) // 1024 // 1024 >= 1:
-            res = E5MessageBox.warning(
+            res = EricMessageBox.warning(
                 self,
                 self.tr("Data URI Encoder"),
                 self.tr(
                     """The file size is > 1 Megabyte. Encoding this will"""
                     """ take some time depending on your CPU processing"""
                     """ power!"""),
-                E5MessageBox.StandardButtons(
-                    E5MessageBox.Cancel |
-                    E5MessageBox.Ok),
-                E5MessageBox.Cancel)
-            if res == E5MessageBox.Cancel:
+                EricMessageBox.Cancel |
+                EricMessageBox.Ok,
+                EricMessageBox.Cancel)
+            if res == EricMessageBox.Cancel:
                 return
         
         try:
@@ -153,7 +147,7 @@
                     base64.b64encode(f.read()).decode()
                 )
         except OSError as err:
-            E5MessageBox.critical(
+            EricMessageBox.critical(
                 self,
                 self.tr("Data URI Encoder"),
                 self.tr(
@@ -161,23 +155,21 @@
                     """<p>Reason: {1}</p>""").format(filepath, str(err)))
             return
         if self.embeddingComboBox.currentIndex() == 1:          # Python 3
-            output = Python3Template.format(
+            output = DataUriTemplates["Python3"].format(
                 getpass.getuser(),
                 datetime.datetime.now().isoformat().split('.')[0], output)
         elif self.embeddingComboBox.currentIndex() == 2:        # CSS
-            output = ('html, body {{ margin:0; padding:0; background: url({0})'
-                      ' no-repeat center center fixed; background-size:cover'
-                      ' }}'.format(output))
+            output = DataUriTemplates["CSS"].format(output)
         elif self.embeddingComboBox.currentIndex() == 3:        # HTML
-            output = '<img src={0} alt="{1}" title="{1}"/>'.format(
+            output = DataUriTemplates["HTML"].format(
                 output, os.path.basename(filepath))
         elif self.embeddingComboBox.currentIndex() == 4:        # JS
-            output = 'var embedded_file = window.atob({0}); '.format(output)
+            output = DataUriTemplates["JavaScript"].format(output)
         elif self.embeddingComboBox.currentIndex() == 5:        # QML
-            output = 'Image {{ source: {0} }} '.format(output)
+            output = DataUriTemplates["QML"].format(output)
         
         if self.encryptCheckBox.isChecked():
-            output = output.encode('rot_13')
+            output = codecs.encode(output, 'rot_13')
         
         self.outputTextEdit.setPlainText(output)
     
@@ -195,14 +187,16 @@
         """
         enable = bool(self.outputTextEdit.toPlainText())
         self.copyButton.setEnabled(enable)
-        self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(enable)
+        self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Ok).setEnabled(enable)
     
     @pyqtSlot(str)
-    def on_fileEdit_textChanged(self, txt):
+    def on_filePicker_textChanged(self, txt):
         """
         Private slot to handle the editing of the file name.
         
-        @param txt current file name (string)
+        @param txt current file name
+        @type str
         """
         self.encodeButton.setEnabled(bool(txt) and os.path.isfile(txt))
     
@@ -210,7 +204,8 @@
         """
         Private method to get the mime type from the user.
         
-        @return entered mime type (string)
+        @return entered mime type
+        @rtype str
         """
         mimetypesList = [""] + list(sorted(
             set(mimetypes.types_map.values()).union(
@@ -234,6 +229,7 @@
         """
         Public method to get the code.
         
-        @return generated code (string)
+        @return generated code
+        @rtype str
         """
         return self.outputTextEdit.toPlainText()

eric ide

mercurial