|
1 # -*- coding: utf-8 -*- |
|
2 |
|
3 # Copyright (c) 2003 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> |
|
4 # |
|
5 |
|
6 """ |
|
7 Module implementing the font dialog wizard dialog. |
|
8 """ |
|
9 |
|
10 import os |
|
11 |
|
12 from PyQt5.QtCore import pyqtSlot |
|
13 from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QFontDialog |
|
14 |
|
15 from .Ui_FontDialogWizardDialog import Ui_FontDialogWizardDialog |
|
16 |
|
17 |
|
18 class FontDialogWizardDialog(QDialog, Ui_FontDialogWizardDialog): |
|
19 """ |
|
20 Class implementing the font dialog wizard dialog. |
|
21 |
|
22 It displays a dialog for entering the parameters |
|
23 for the QFontDialog code generator. |
|
24 """ |
|
25 def __init__(self, parent=None): |
|
26 """ |
|
27 Constructor |
|
28 |
|
29 @param parent parent widget (QWidget) |
|
30 """ |
|
31 super().__init__(parent) |
|
32 self.setupUi(self) |
|
33 |
|
34 self.bTest = self.buttonBox.addButton( |
|
35 self.tr("Test"), QDialogButtonBox.ButtonRole.ActionRole) |
|
36 |
|
37 self.font = None |
|
38 |
|
39 msh = self.minimumSizeHint() |
|
40 self.resize(max(self.width(), msh.width()), msh.height()) |
|
41 |
|
42 def on_buttonBox_clicked(self, button): |
|
43 """ |
|
44 Private slot called by a button of the button box clicked. |
|
45 |
|
46 @param button button that was clicked (QAbstractButton) |
|
47 """ |
|
48 if button == self.bTest: |
|
49 self.on_bTest_clicked() |
|
50 |
|
51 @pyqtSlot() |
|
52 def on_bTest_clicked(self): |
|
53 """ |
|
54 Private method to test the selected options. |
|
55 """ |
|
56 if self.font is None: |
|
57 QFontDialog.getFont() |
|
58 else: |
|
59 QFontDialog.getFont(self.font) |
|
60 |
|
61 def on_eVariable_textChanged(self, text): |
|
62 """ |
|
63 Private slot to handle the textChanged signal of eVariable. |
|
64 |
|
65 @param text the new text (string) |
|
66 """ |
|
67 if not text: |
|
68 self.bTest.setEnabled(True) |
|
69 else: |
|
70 self.bTest.setEnabled(False) |
|
71 |
|
72 @pyqtSlot() |
|
73 def on_fontButton_clicked(self): |
|
74 """ |
|
75 Private slot to handle the button press to select a font via a |
|
76 font selection dialog. |
|
77 """ |
|
78 if self.font is None: |
|
79 font, ok = QFontDialog.getFont() |
|
80 else: |
|
81 font, ok = QFontDialog.getFont(self.font) |
|
82 if ok: |
|
83 self.font = font |
|
84 else: |
|
85 self.font = None |
|
86 |
|
87 def getCode(self, indLevel, indString): |
|
88 """ |
|
89 Public method to get the source code. |
|
90 |
|
91 @param indLevel indentation level (int) |
|
92 @param indString string used for indentation (space or tab) (string) |
|
93 @return generated code (string) |
|
94 """ |
|
95 # calculate our indentation level and the indentation string |
|
96 il = indLevel + 1 |
|
97 istring = il * indString |
|
98 estring = os.linesep + indLevel * indString |
|
99 |
|
100 # generate the code |
|
101 resvar = self.eResultVar.text() |
|
102 if not resvar: |
|
103 resvar = "font" |
|
104 title = self.eCaption.text() |
|
105 if self.parentSelf.isChecked(): |
|
106 parent = "self" |
|
107 elif self.parentNone.isChecked(): |
|
108 parent = "None" |
|
109 elif self.parentOther.isChecked(): |
|
110 parent = self.parentEdit.text() |
|
111 if parent == "": |
|
112 parent = "None" |
|
113 |
|
114 code = '{0}, ok = QFontDialog.getFont('.format(resvar) |
|
115 if self.eVariable.text() or self.font is not None: |
|
116 if title or parent != "None": |
|
117 code += '{0}{1}'.format(os.linesep, istring) |
|
118 if not self.eVariable.text(): |
|
119 if self.font is not None: |
|
120 code += 'QFont("{0}", {1:d}, {2:d}, {3:d})'.format( |
|
121 self.font.family(), self.font.pointSize(), |
|
122 self.font.weight(), self.font.italic()) |
|
123 else: |
|
124 code += self.eVariable.text() |
|
125 if title: |
|
126 code += ',{0}{1}{2}'.format( |
|
127 os.linesep, istring, parent) |
|
128 code += ',{0}{1}self.tr("{2}")'.format( |
|
129 os.linesep, istring, title) |
|
130 elif parent != "None": |
|
131 code += ',{0}{1}{2}'.format( |
|
132 os.linesep, istring, parent) |
|
133 code += '){0}'.format(estring) |
|
134 |
|
135 return code |