src/eric7/Plugins/WizardPlugins/FontDialogWizard/FontDialogWizardDialog.py

branch
eric7
changeset 9209
b99e7fd55fd3
parent 8881
54e42bc2437a
child 9221
bf71ee032bb4
diff -r 3fc8dfeb6ebe -r b99e7fd55fd3 src/eric7/Plugins/WizardPlugins/FontDialogWizard/FontDialogWizardDialog.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Plugins/WizardPlugins/FontDialogWizard/FontDialogWizardDialog.py	Thu Jul 07 11:23:56 2022 +0200
@@ -0,0 +1,209 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2003 - 2022 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the font dialog wizard dialog.
+"""
+
+import os
+
+from PyQt6.QtCore import pyqtSlot
+from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QFontDialog
+
+from .Ui_FontDialogWizardDialog import Ui_FontDialogWizardDialog
+
+
+class FontDialogWizardDialog(QDialog, Ui_FontDialogWizardDialog):
+    """
+    Class implementing the font dialog wizard dialog.
+    
+    It displays a dialog for entering the parameters
+    for the QFontDialog code generator.
+    """
+    FontWeight2Code = {
+        100: "Thin",
+        200: "ExtraLight",
+        300: "Light",
+        400: "Normal",
+        500: "Medium",
+        600: "DemiBold",
+        700: "Bold",
+        800: "ExtraBold",
+        900: "Black",
+    }
+    
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent parent widget (QWidget)
+        """
+        super().__init__(parent)
+        self.setupUi(self)
+        
+        self.bTest = self.buttonBox.addButton(
+            self.tr("Test"), QDialogButtonBox.ButtonRole.ActionRole)
+        
+        self.font = None
+        self.fontOptions = {
+            "noNativeDialog": False,
+            "scalableFonts": False,
+            "nonScalableFonts": False,
+            "monospacedFonts": False,
+            "proportionalFonts": False,
+        }
+        
+        msh = self.minimumSizeHint()
+        self.resize(max(self.width(), msh.width()), msh.height())
+        
+    def on_buttonBox_clicked(self, button):
+        """
+        Private slot called by a button of the button box clicked.
+        
+        @param button button that was clicked (QAbstractButton)
+        """
+        if button == self.bTest:
+            self.on_bTest_clicked()
+    
+    @pyqtSlot()
+    def on_bTest_clicked(self):
+        """
+        Private method to test the selected options.
+        """
+        if self.font is None:
+            QFontDialog.getFont()
+        else:
+            options = QFontDialog.FontDialogOption(0)
+            if any(self.fontOptions.values()):
+                if self.fontOptions["noNativeDialog"]:
+                    options |= QFontDialog.FontDialogOption.DontUseNativeDialog
+                if self.fontOptions["scalableFonts"]:
+                    options |= QFontDialog.FontDialogOption.ScalableFonts
+                if self.fontOptions["nonScalableFonts"]:
+                    options |= QFontDialog.FontDialogOption.NonScalableFonts
+                if self.fontOptions["monospacedFonts"]:
+                    options |= QFontDialog.FontDialogOption.MonospacedFonts
+                if self.fontOptions["proportionalFonts"]:
+                    options |= QFontDialog.FontDialogOption.ProportionalFonts
+            QFontDialog.getFont(
+                self.font,
+                self,
+                self.eCaption.text(),
+                options
+            )
+    
+    def on_eVariable_textChanged(self, text):
+        """
+        Private slot to handle the textChanged signal of eVariable.
+        
+        @param text the new text (string)
+        """
+        if not text:
+            self.bTest.setEnabled(True)
+        else:
+            self.bTest.setEnabled(False)
+        
+    @pyqtSlot()
+    def on_fontButton_clicked(self):
+        """
+        Private slot to handle the button press to select a font via a
+        font selection dialog.
+        """
+        if self.font is None:
+            font, ok = QFontDialog.getFont()
+        else:
+            font, ok = QFontDialog.getFont(self.font)
+        if ok:
+            self.font = font
+        else:
+            self.font = None
+    
+    @pyqtSlot()
+    def on_optionsButton_clicked(self):
+        """
+        Private slot to handle the selection of font dialog options.
+        """
+        from .FontDialogOptionsDialog import FontDialogOptionsDialog
+        dlg = FontDialogOptionsDialog(self.fontOptions, self)
+        if dlg.exec() == QDialog.DialogCode.Accepted:
+            self.fontOptions = dlg.getOptions()
+    
+    def getCode(self, indLevel, indString):
+        """
+        Public method to get the source code.
+        
+        @param indLevel indentation level (int)
+        @param indString string used for indentation (space or tab) (string)
+        @return generated code (string)
+        """
+        # calculate our indentation level and the indentation string
+        il = indLevel + 1
+        istring = il * indString
+        estring = os.linesep + indLevel * indString
+        
+        # generate the code
+        resvar = self.eResultVar.text()
+        if not resvar:
+            resvar = "font"
+        title = self.eCaption.text()
+        if self.parentSelf.isChecked():
+            parent = "self"
+        elif self.parentNone.isChecked():
+            parent = "None"
+        elif self.parentOther.isChecked():
+            parent = self.parentEdit.text()
+            if parent == "":
+                parent = "None"
+        
+        code = '{0}, ok = QFontDialog.getFont('.format(resvar)
+        if self.eVariable.text() or self.font is not None:
+            if title or parent != "None":
+                code += '{0}{1}'.format(os.linesep, istring)
+            if not self.eVariable.text():
+                if self.font is not None:
+                    code += (
+                        'QFont(["{0}"], {1:d}, QFont.Weight.{2}, {3})'
+                        .format(
+                            self.font.family(),
+                            self.font.pointSize(),
+                            FontDialogWizardDialog.FontWeight2Code[
+                                self.font.weight()],
+                            "True" if self.font.italic() else "False")
+                    )
+            else:
+                code += self.eVariable.text()
+            if title:
+                code += ',{0}{1}{2}'.format(
+                    os.linesep, istring, parent)
+                code += ',{0}{1}self.tr("{2}")'.format(
+                    os.linesep, istring, title)
+            elif parent != "None":
+                code += ',{0}{1}{2}'.format(
+                    os.linesep, istring, parent)
+            if any(self.fontOptions.values()):
+                options = []
+                if self.fontOptions["noNativeDialog"]:
+                    options.append(
+                        "QFontDialog.FontDialogOption.DontUseNativeDialog")
+                if self.fontOptions["scalableFonts"]:
+                    options.append(
+                        "QFontDialog.FontDialogOption.ScalableFonts")
+                if self.fontOptions["nonScalableFonts"]:
+                    options.append(
+                        "QFontDialog.FontDialogOption.NonScalableFonts")
+                if self.fontOptions["monospacedFonts"]:
+                    options.append(
+                        "QFontDialog.FontDialogOption.MonospacedFonts")
+                if self.fontOptions["proportionalFonts"]:
+                    options.append(
+                        "QFontDialog.FontDialogOption.ProportionalFonts")
+                fontOptionsString = (
+                    ' |{0}{1}'.format(os.linesep, istring).join(options)
+                )
+                code += ',{0}{1}{2}'.format(
+                    os.linesep, istring, fontOptionsString)
+        code += '{0}){0}'.format(estring)
+        
+        return code

eric ide

mercurial