src/eric7/Plugins/WizardPlugins/InputDialogWizard/InputDialogWizardDialog.py

branch
eric7-maintenance
changeset 9264
18a7312cfdb3
parent 9192
a763d57e23bc
parent 9221
bf71ee032bb4
child 9442
906485dcd210
equal deleted inserted replaced
9241:d23e9854aea4 9264:18a7312cfdb3
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2003 - 2022 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing the input dialog wizard dialog.
8 """
9
10 import os
11
12 from PyQt6.QtCore import pyqtSlot
13 from PyQt6.QtGui import QDoubleValidator
14 from PyQt6.QtWidgets import QLineEdit, QDialog, QInputDialog, QDialogButtonBox
15
16 from .Ui_InputDialogWizardDialog import Ui_InputDialogWizardDialog
17
18
19 class InputDialogWizardDialog(QDialog, Ui_InputDialogWizardDialog):
20 """
21 Class implementing the input dialog wizard dialog.
22
23 It displays a dialog for entering the parameters
24 for the QInputDialog code generator.
25 """
26
27 def __init__(self, parent=None):
28 """
29 Constructor
30
31 @param parent parent widget (QWidget)
32 """
33 super().__init__(parent)
34 self.setupUi(self)
35
36 # set the validators for the double line edits
37 self.eDoubleDefault.setValidator(
38 QDoubleValidator(-2147483647, 2147483647, 99, self.eDoubleDefault)
39 )
40 self.eDoubleFrom.setValidator(
41 QDoubleValidator(-2147483647, 2147483647, 99, self.eDoubleFrom)
42 )
43 self.eDoubleTo.setValidator(
44 QDoubleValidator(-2147483647, 2147483647, 99, self.eDoubleTo)
45 )
46
47 self.rText.toggled.connect(self.__typeSelectButtonToggled)
48 self.rMultiLineText.toggled.connect(self.__typeSelectButtonToggled)
49 self.rInteger.toggled.connect(self.__typeSelectButtonToggled)
50 self.rDouble.toggled.connect(self.__typeSelectButtonToggled)
51 self.rItem.toggled.connect(self.__typeSelectButtonToggled)
52
53 self.bTest = self.buttonBox.addButton(
54 self.tr("Test"), QDialogButtonBox.ButtonRole.ActionRole
55 )
56
57 # simulate a dialog type selection
58 self.__typeSelectButtonToggled(True)
59
60 msh = self.minimumSizeHint()
61 self.resize(max(self.width(), msh.width()), msh.height())
62
63 @pyqtSlot(bool)
64 def __typeSelectButtonToggled(self, checked):
65 """
66 Private slot to modify the dialog according to the selected type.
67
68 Note: This is a multiplexed slot. Therefore it just reacts upon a
69 positive check state (i.e. checked == True).
70
71 @param checked flag indicating the checked state
72 @type bool
73 """
74 self.bTest.setEnabled(True)
75 if checked:
76 if self.rText.isChecked():
77 self.specificsStack.setCurrentWidget(self.textPage)
78 elif self.rMultiLineText.isChecked():
79 self.specificsStack.setCurrentWidget(self.multiLineTextPage)
80 elif self.rInteger.isChecked():
81 self.specificsStack.setCurrentWidget(self.integerPage)
82 elif self.rDouble.isChecked():
83 self.specificsStack.setCurrentWidget(self.doublePage)
84 elif self.rItem.isChecked():
85 self.specificsStack.setCurrentWidget(self.itemPage)
86 self.bTest.setEnabled(False)
87
88 def on_buttonBox_clicked(self, button):
89 """
90 Private slot called by a button of the button box clicked.
91
92 @param button button that was clicked (QAbstractButton)
93 """
94 if button == self.bTest:
95 self.on_bTest_clicked()
96
97 @pyqtSlot()
98 def on_bTest_clicked(self):
99 """
100 Private method to test the selected options.
101 """
102 if self.rText.isChecked():
103 if self.rEchoNormal.isChecked():
104 echomode = QLineEdit.EchoMode.Normal
105 elif self.rEchoNoEcho.isChecked():
106 echomode = QLineEdit.EchoMode.NoEcho
107 else:
108 echomode = QLineEdit.EchoMode.Password
109 QInputDialog.getText(
110 None,
111 self.eCaption.text(),
112 self.eLabel.text(),
113 echomode,
114 self.eTextDefault.text(),
115 )
116 elif self.rMultiLineText.isChecked():
117 QInputDialog.getMultiLineText(
118 None,
119 self.eCaption.text(),
120 self.eLabel.text(),
121 self.eMultiTextDefault.toPlainText(),
122 )
123 elif self.rInteger.isChecked():
124 QInputDialog.getInt(
125 None,
126 self.eCaption.text(),
127 self.eLabel.text(),
128 self.sIntDefault.value(),
129 self.sIntFrom.value(),
130 self.sIntTo.value(),
131 self.sIntStep.value(),
132 )
133 elif self.rDouble.isChecked():
134 try:
135 doubleDefault = float(self.eDoubleDefault.text())
136 except ValueError:
137 doubleDefault = 0
138 try:
139 doubleFrom = float(self.eDoubleFrom.text())
140 except ValueError:
141 doubleFrom = -2147483647
142 try:
143 doubleTo = float(self.eDoubleTo.text())
144 except ValueError:
145 doubleTo = 2147483647
146 QInputDialog.getDouble(
147 None,
148 self.eCaption.text(),
149 self.eLabel.text(),
150 doubleDefault,
151 doubleFrom,
152 doubleTo,
153 self.sDoubleDecimals.value(),
154 )
155
156 def getCode(self, indLevel, indString):
157 """
158 Public method to get the source code for Qt6.
159
160 @param indLevel indentation level (int)
161 @param indString string used for indentation (space or tab) (string)
162 @return generated code (string)
163 """
164 # calculate our indentation level and the indentation string
165 il = indLevel + 1
166 istring = il * indString
167 estring = os.linesep + indLevel * indString
168
169 # now generate the code
170 if self.parentSelf.isChecked():
171 parent = "self"
172 elif self.parentNone.isChecked():
173 parent = "None"
174 elif self.parentOther.isChecked():
175 parent = self.parentEdit.text()
176 if parent == "":
177 parent = "None"
178
179 resvar = self.eResultVar.text()
180 if not resvar:
181 resvar = "result"
182 code = "{0}, ok = QInputDialog.".format(resvar)
183 if self.rText.isChecked():
184 code += "getText({0}{1}".format(os.linesep, istring)
185 code += "{0},{1}{2}".format(parent, os.linesep, istring)
186 code += 'self.tr("{0}"),{1}{2}'.format(
187 self.eCaption.text(), os.linesep, istring
188 )
189 code += 'self.tr("{0}"),{1}{2}'.format(
190 self.eLabel.text(), os.linesep, istring
191 )
192 if self.rEchoNormal.isChecked():
193 code += "QLineEdit.EchoMode.Normal"
194 elif self.rEchoNoEcho.isChecked():
195 code += "QLineEdit.EchoMode.NoEcho"
196 else:
197 code += "QLineEdit.EchoMode.Password"
198 if self.eTextDefault.text():
199 if self.cTranslateTextDefault.isChecked():
200 code += ',{0}{1}self.tr("{2}")'.format(
201 os.linesep, istring, self.eTextDefault.text()
202 )
203 else:
204 code += ',{0}{1}"{2}"'.format(
205 os.linesep, istring, self.eTextDefault.text()
206 )
207 code += "{0}){0}".format(estring)
208 elif self.rMultiLineText.isChecked():
209 code += "getMultiLineText({0}{1}".format(os.linesep, istring)
210 code += "{0},{1}{2}".format(parent, os.linesep, istring)
211 code += 'self.tr("{0}"),{1}{2}'.format(
212 self.eCaption.text(), os.linesep, istring
213 )
214 code += 'self.tr("{0}")'.format(self.eLabel.text())
215 if self.eMultiTextDefault.toPlainText():
216 defTxt = "\\n".join(self.eMultiTextDefault.toPlainText().splitlines())
217 if self.cTranslateMultiTextDefault.isChecked():
218 code += ',{0}{1}self.tr("{2}")'.format(os.linesep, istring, defTxt)
219 else:
220 code += ',{0}{1}"{2}"'.format(os.linesep, istring, defTxt)
221 code += "{0}){0}".format(estring)
222 elif self.rInteger.isChecked():
223 code += "getInt({0}{1}".format(os.linesep, istring)
224 code += "{0},{1}{2}".format(parent, os.linesep, istring)
225 code += 'self.tr("{0}"),{1}{2}'.format(
226 self.eCaption.text(), os.linesep, istring
227 )
228 code += 'self.tr("{0}"),{1}{2}'.format(
229 self.eLabel.text(), os.linesep, istring
230 )
231 code += "{0:d}, {1:d}, {2:d}, {3:d}".format(
232 self.sIntDefault.value(),
233 self.sIntFrom.value(),
234 self.sIntTo.value(),
235 self.sIntStep.value(),
236 )
237 code += "{0}){0}".format(estring)
238 elif self.rDouble.isChecked():
239 try:
240 doubleDefault = float(self.eDoubleDefault.text())
241 except ValueError:
242 doubleDefault = 0
243 try:
244 doubleFrom = float(self.eDoubleFrom.text())
245 except ValueError:
246 doubleFrom = -2147483647
247 try:
248 doubleTo = float(self.eDoubleTo.text())
249 except ValueError:
250 doubleTo = 2147483647
251 code += "getDouble({0}{1}".format(os.linesep, istring)
252 code += "{0},{1}{2}".format(parent, os.linesep, istring)
253 code += 'self.tr("{0}"),{1}{2}'.format(
254 self.eCaption.text(), os.linesep, istring
255 )
256 code += 'self.tr("{0}"),{1}{2}'.format(
257 self.eLabel.text(), os.linesep, istring
258 )
259 code += "{0}, {1}, {2}, {3:d}".format(
260 doubleDefault, doubleFrom, doubleTo, self.sDoubleDecimals.value()
261 )
262 code += "{0}){0}".format(estring)
263 elif self.rItem.isChecked():
264 code += "getItem({0}{1}".format(os.linesep, istring)
265 code += "{0},{1}{2}".format(parent, os.linesep, istring)
266 code += 'self.tr("{0}"),{1}{2}'.format(
267 self.eCaption.text(), os.linesep, istring
268 )
269 code += 'self.tr("{0}"),{1}{2}'.format(
270 self.eLabel.text(), os.linesep, istring
271 )
272 code += "{0},{1}{2}".format(self.eVariable.text(), os.linesep, istring)
273 code += "{0:d}, {1}".format(
274 self.sCurrentItem.value(), self.cEditable.isChecked()
275 )
276 code += "{0}){0}".format(estring)
277
278 return code

eric ide

mercurial