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

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

eric ide

mercurial