MqttMonitor/Ui_MqttConnectionOptionsDialog.py

branch
eric7
changeset 148
187406bcc8ae
equal deleted inserted replaced
147:8d34da4deb33 148:187406bcc8ae
1 # Form implementation generated from reading ui file 'MqttMonitor/MqttConnectionOptionsDialog.ui'
2 #
3 # Created by: PyQt6 UI code generator 6.7.1
4 #
5 # WARNING: Any manual changes made to this file will be lost when pyuic6 is
6 # run again. Do not edit this file unless you know what you are doing.
7
8
9 from PyQt6 import QtCore, QtGui, QtWidgets
10
11
12 class Ui_MqttConnectionOptionsDialog(object):
13 def setupUi(self, MqttConnectionOptionsDialog):
14 MqttConnectionOptionsDialog.setObjectName("MqttConnectionOptionsDialog")
15 MqttConnectionOptionsDialog.resize(450, 350)
16 MqttConnectionOptionsDialog.setSizeGripEnabled(True)
17 self.verticalLayout = QtWidgets.QVBoxLayout(MqttConnectionOptionsDialog)
18 self.verticalLayout.setObjectName("verticalLayout")
19 self.optionsWidget = QtWidgets.QTabWidget(parent=MqttConnectionOptionsDialog)
20 self.optionsWidget.setObjectName("optionsWidget")
21 self.generalTab = QtWidgets.QWidget()
22 self.generalTab.setObjectName("generalTab")
23 self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.generalTab)
24 self.verticalLayout_2.setObjectName("verticalLayout_2")
25 self.horizontalLayout = QtWidgets.QHBoxLayout()
26 self.horizontalLayout.setObjectName("horizontalLayout")
27 self.label = QtWidgets.QLabel(parent=self.generalTab)
28 self.label.setObjectName("label")
29 self.horizontalLayout.addWidget(self.label)
30 self.clientIdEdit = QtWidgets.QLineEdit(parent=self.generalTab)
31 self.clientIdEdit.setClearButtonEnabled(True)
32 self.clientIdEdit.setObjectName("clientIdEdit")
33 self.horizontalLayout.addWidget(self.clientIdEdit)
34 self.generateIdButton = QtWidgets.QPushButton(parent=self.generalTab)
35 self.generateIdButton.setObjectName("generateIdButton")
36 self.horizontalLayout.addWidget(self.generateIdButton)
37 self.verticalLayout_2.addLayout(self.horizontalLayout)
38 self.groupBox_5 = QtWidgets.QGroupBox(parent=self.generalTab)
39 self.groupBox_5.setObjectName("groupBox_5")
40 self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.groupBox_5)
41 self.horizontalLayout_3.setObjectName("horizontalLayout_3")
42 self.mqttv31Button = QtWidgets.QRadioButton(parent=self.groupBox_5)
43 self.mqttv31Button.setObjectName("mqttv31Button")
44 self.horizontalLayout_3.addWidget(self.mqttv31Button)
45 self.mqttv311Button = QtWidgets.QRadioButton(parent=self.groupBox_5)
46 self.mqttv311Button.setChecked(True)
47 self.mqttv311Button.setObjectName("mqttv311Button")
48 self.horizontalLayout_3.addWidget(self.mqttv311Button)
49 self.mqttv5Button = QtWidgets.QRadioButton(parent=self.groupBox_5)
50 self.mqttv5Button.setObjectName("mqttv5Button")
51 self.horizontalLayout_3.addWidget(self.mqttv5Button)
52 self.verticalLayout_2.addWidget(self.groupBox_5)
53 self.gridLayout = QtWidgets.QGridLayout()
54 self.gridLayout.setObjectName("gridLayout")
55 self.label_6 = QtWidgets.QLabel(parent=self.generalTab)
56 self.label_6.setObjectName("label_6")
57 self.gridLayout.addWidget(self.label_6, 0, 0, 1, 1)
58 self.connectionTimeoutSpinBox = QtWidgets.QSpinBox(parent=self.generalTab)
59 self.connectionTimeoutSpinBox.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignTrailing|QtCore.Qt.AlignmentFlag.AlignVCenter)
60 self.connectionTimeoutSpinBox.setMaximum(300)
61 self.connectionTimeoutSpinBox.setSingleStep(5)
62 self.connectionTimeoutSpinBox.setProperty("value", 15)
63 self.connectionTimeoutSpinBox.setObjectName("connectionTimeoutSpinBox")
64 self.gridLayout.addWidget(self.connectionTimeoutSpinBox, 0, 1, 1, 1)
65 spacerItem = QtWidgets.QSpacerItem(148, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
66 self.gridLayout.addItem(spacerItem, 0, 2, 1, 1)
67 self.label_2 = QtWidgets.QLabel(parent=self.generalTab)
68 self.label_2.setObjectName("label_2")
69 self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1)
70 self.keepaliveSpinBox = QtWidgets.QSpinBox(parent=self.generalTab)
71 self.keepaliveSpinBox.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignTrailing|QtCore.Qt.AlignmentFlag.AlignVCenter)
72 self.keepaliveSpinBox.setMaximum(300)
73 self.keepaliveSpinBox.setSingleStep(5)
74 self.keepaliveSpinBox.setProperty("value", 60)
75 self.keepaliveSpinBox.setObjectName("keepaliveSpinBox")
76 self.gridLayout.addWidget(self.keepaliveSpinBox, 1, 1, 1, 1)
77 spacerItem1 = QtWidgets.QSpacerItem(148, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
78 self.gridLayout.addItem(spacerItem1, 1, 2, 1, 1)
79 self.verticalLayout_2.addLayout(self.gridLayout)
80 self.cleanSessionCheckBox = QtWidgets.QCheckBox(parent=self.generalTab)
81 self.cleanSessionCheckBox.setObjectName("cleanSessionCheckBox")
82 self.verticalLayout_2.addWidget(self.cleanSessionCheckBox)
83 spacerItem2 = QtWidgets.QSpacerItem(20, 92, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
84 self.verticalLayout_2.addItem(spacerItem2)
85 self.optionsWidget.addTab(self.generalTab, "")
86 self.credentialsTab = QtWidgets.QWidget()
87 self.credentialsTab.setObjectName("credentialsTab")
88 self.gridLayout_5 = QtWidgets.QGridLayout(self.credentialsTab)
89 self.gridLayout_5.setObjectName("gridLayout_5")
90 self.label_3 = QtWidgets.QLabel(parent=self.credentialsTab)
91 self.label_3.setObjectName("label_3")
92 self.gridLayout_5.addWidget(self.label_3, 0, 0, 1, 1)
93 self.usernameEdit = QtWidgets.QLineEdit(parent=self.credentialsTab)
94 self.usernameEdit.setClearButtonEnabled(True)
95 self.usernameEdit.setObjectName("usernameEdit")
96 self.gridLayout_5.addWidget(self.usernameEdit, 0, 1, 1, 1)
97 self.label_4 = QtWidgets.QLabel(parent=self.credentialsTab)
98 self.label_4.setObjectName("label_4")
99 self.gridLayout_5.addWidget(self.label_4, 1, 0, 1, 1)
100 self.passwordEdit = QtWidgets.QLineEdit(parent=self.credentialsTab)
101 self.passwordEdit.setEchoMode(QtWidgets.QLineEdit.EchoMode.Password)
102 self.passwordEdit.setClearButtonEnabled(True)
103 self.passwordEdit.setObjectName("passwordEdit")
104 self.gridLayout_5.addWidget(self.passwordEdit, 1, 1, 1, 1)
105 spacerItem3 = QtWidgets.QSpacerItem(20, 204, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
106 self.gridLayout_5.addItem(spacerItem3, 2, 1, 1, 1)
107 self.optionsWidget.addTab(self.credentialsTab, "")
108 self.lastWillTab = QtWidgets.QWidget()
109 self.lastWillTab.setObjectName("lastWillTab")
110 self.gridLayout_2 = QtWidgets.QGridLayout(self.lastWillTab)
111 self.gridLayout_2.setObjectName("gridLayout_2")
112 self.willTopicEdit = QtWidgets.QLineEdit(parent=self.lastWillTab)
113 self.willTopicEdit.setClearButtonEnabled(True)
114 self.willTopicEdit.setObjectName("willTopicEdit")
115 self.gridLayout_2.addWidget(self.willTopicEdit, 0, 0, 1, 1)
116 self.label_5 = QtWidgets.QLabel(parent=self.lastWillTab)
117 self.label_5.setObjectName("label_5")
118 self.gridLayout_2.addWidget(self.label_5, 0, 1, 1, 1)
119 self.willQosSpinBox = QtWidgets.QSpinBox(parent=self.lastWillTab)
120 self.willQosSpinBox.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignTrailing|QtCore.Qt.AlignmentFlag.AlignVCenter)
121 self.willQosSpinBox.setMaximum(2)
122 self.willQosSpinBox.setObjectName("willQosSpinBox")
123 self.gridLayout_2.addWidget(self.willQosSpinBox, 0, 2, 1, 1)
124 self.willRetainCheckBox = QtWidgets.QCheckBox(parent=self.lastWillTab)
125 self.willRetainCheckBox.setObjectName("willRetainCheckBox")
126 self.gridLayout_2.addWidget(self.willRetainCheckBox, 0, 3, 1, 1)
127 self.willPropertiesButton = QtWidgets.QToolButton(parent=self.lastWillTab)
128 self.willPropertiesButton.setText("")
129 self.willPropertiesButton.setObjectName("willPropertiesButton")
130 self.gridLayout_2.addWidget(self.willPropertiesButton, 0, 4, 1, 1)
131 self.willMessageEdit = QtWidgets.QPlainTextEdit(parent=self.lastWillTab)
132 self.willMessageEdit.setMaximumSize(QtCore.QSize(16777215, 300))
133 self.willMessageEdit.setObjectName("willMessageEdit")
134 self.gridLayout_2.addWidget(self.willMessageEdit, 1, 0, 1, 5)
135 self.optionsWidget.addTab(self.lastWillTab, "")
136 self.tlsTab = QtWidgets.QWidget()
137 self.tlsTab.setObjectName("tlsTab")
138 self.gridLayout_3 = QtWidgets.QGridLayout(self.tlsTab)
139 self.gridLayout_3.setObjectName("gridLayout_3")
140 self.tlsEnableCheckBox = QtWidgets.QCheckBox(parent=self.tlsTab)
141 self.tlsEnableCheckBox.setObjectName("tlsEnableCheckBox")
142 self.gridLayout_3.addWidget(self.tlsEnableCheckBox, 0, 0, 1, 2)
143 self.label_8 = QtWidgets.QLabel(parent=self.tlsTab)
144 self.label_8.setObjectName("label_8")
145 self.gridLayout_3.addWidget(self.label_8, 1, 0, 1, 1)
146 self.tlsCertsFilePicker = EricPathPicker(parent=self.tlsTab)
147 self.tlsCertsFilePicker.setEnabled(False)
148 sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Preferred)
149 sizePolicy.setHorizontalStretch(0)
150 sizePolicy.setVerticalStretch(0)
151 sizePolicy.setHeightForWidth(self.tlsCertsFilePicker.sizePolicy().hasHeightForWidth())
152 self.tlsCertsFilePicker.setSizePolicy(sizePolicy)
153 self.tlsCertsFilePicker.setFocusPolicy(QtCore.Qt.FocusPolicy.StrongFocus)
154 self.tlsCertsFilePicker.setObjectName("tlsCertsFilePicker")
155 self.gridLayout_3.addWidget(self.tlsCertsFilePicker, 1, 1, 1, 1)
156 spacerItem4 = QtWidgets.QSpacerItem(20, 214, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
157 self.gridLayout_3.addItem(spacerItem4, 2, 0, 1, 2)
158 self.optionsWidget.addTab(self.tlsTab, "")
159 self.propertiesTab = QtWidgets.QWidget()
160 self.propertiesTab.setObjectName("propertiesTab")
161 self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.propertiesTab)
162 self.verticalLayout_3.setObjectName("verticalLayout_3")
163 self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
164 self.horizontalLayout_2.setObjectName("horizontalLayout_2")
165 self.connectPropertiesButton = QtWidgets.QRadioButton(parent=self.propertiesTab)
166 self.connectPropertiesButton.setChecked(True)
167 self.connectPropertiesButton.setObjectName("connectPropertiesButton")
168 self.horizontalLayout_2.addWidget(self.connectPropertiesButton)
169 self.disconnectPropertiesButton = QtWidgets.QRadioButton(parent=self.propertiesTab)
170 self.disconnectPropertiesButton.setObjectName("disconnectPropertiesButton")
171 self.horizontalLayout_2.addWidget(self.disconnectPropertiesButton)
172 self.verticalLayout_3.addLayout(self.horizontalLayout_2)
173 self.propertiesWidget = MqttUserPropertiesEditor(parent=self.propertiesTab)
174 sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding)
175 sizePolicy.setHorizontalStretch(0)
176 sizePolicy.setVerticalStretch(0)
177 sizePolicy.setHeightForWidth(self.propertiesWidget.sizePolicy().hasHeightForWidth())
178 self.propertiesWidget.setSizePolicy(sizePolicy)
179 self.propertiesWidget.setFocusPolicy(QtCore.Qt.FocusPolicy.StrongFocus)
180 self.propertiesWidget.setObjectName("propertiesWidget")
181 self.verticalLayout_3.addWidget(self.propertiesWidget)
182 self.samePropertiesCheckBox = QtWidgets.QCheckBox(parent=self.propertiesTab)
183 self.samePropertiesCheckBox.setObjectName("samePropertiesCheckBox")
184 self.verticalLayout_3.addWidget(self.samePropertiesCheckBox)
185 self.optionsWidget.addTab(self.propertiesTab, "")
186 self.verticalLayout.addWidget(self.optionsWidget)
187 self.buttonBox = QtWidgets.QDialogButtonBox(parent=MqttConnectionOptionsDialog)
188 self.buttonBox.setOrientation(QtCore.Qt.Orientation.Horizontal)
189 self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.StandardButton.Cancel|QtWidgets.QDialogButtonBox.StandardButton.Ok|QtWidgets.QDialogButtonBox.StandardButton.RestoreDefaults)
190 self.buttonBox.setObjectName("buttonBox")
191 self.verticalLayout.addWidget(self.buttonBox)
192
193 self.retranslateUi(MqttConnectionOptionsDialog)
194 self.optionsWidget.setCurrentIndex(0)
195 self.buttonBox.accepted.connect(MqttConnectionOptionsDialog.accept) # type: ignore
196 self.buttonBox.rejected.connect(MqttConnectionOptionsDialog.reject) # type: ignore
197 self.tlsEnableCheckBox.toggled['bool'].connect(self.tlsCertsFilePicker.setEnabled) # type: ignore
198 QtCore.QMetaObject.connectSlotsByName(MqttConnectionOptionsDialog)
199 MqttConnectionOptionsDialog.setTabOrder(self.optionsWidget, self.clientIdEdit)
200 MqttConnectionOptionsDialog.setTabOrder(self.clientIdEdit, self.generateIdButton)
201 MqttConnectionOptionsDialog.setTabOrder(self.generateIdButton, self.mqttv31Button)
202 MqttConnectionOptionsDialog.setTabOrder(self.mqttv31Button, self.mqttv311Button)
203 MqttConnectionOptionsDialog.setTabOrder(self.mqttv311Button, self.mqttv5Button)
204 MqttConnectionOptionsDialog.setTabOrder(self.mqttv5Button, self.connectionTimeoutSpinBox)
205 MqttConnectionOptionsDialog.setTabOrder(self.connectionTimeoutSpinBox, self.keepaliveSpinBox)
206 MqttConnectionOptionsDialog.setTabOrder(self.keepaliveSpinBox, self.cleanSessionCheckBox)
207 MqttConnectionOptionsDialog.setTabOrder(self.cleanSessionCheckBox, self.usernameEdit)
208 MqttConnectionOptionsDialog.setTabOrder(self.usernameEdit, self.passwordEdit)
209 MqttConnectionOptionsDialog.setTabOrder(self.passwordEdit, self.willTopicEdit)
210 MqttConnectionOptionsDialog.setTabOrder(self.willTopicEdit, self.willMessageEdit)
211 MqttConnectionOptionsDialog.setTabOrder(self.willMessageEdit, self.willQosSpinBox)
212 MqttConnectionOptionsDialog.setTabOrder(self.willQosSpinBox, self.willRetainCheckBox)
213 MqttConnectionOptionsDialog.setTabOrder(self.willRetainCheckBox, self.willPropertiesButton)
214 MqttConnectionOptionsDialog.setTabOrder(self.willPropertiesButton, self.tlsEnableCheckBox)
215 MqttConnectionOptionsDialog.setTabOrder(self.tlsEnableCheckBox, self.tlsCertsFilePicker)
216 MqttConnectionOptionsDialog.setTabOrder(self.tlsCertsFilePicker, self.connectPropertiesButton)
217 MqttConnectionOptionsDialog.setTabOrder(self.connectPropertiesButton, self.disconnectPropertiesButton)
218 MqttConnectionOptionsDialog.setTabOrder(self.disconnectPropertiesButton, self.propertiesWidget)
219 MqttConnectionOptionsDialog.setTabOrder(self.propertiesWidget, self.samePropertiesCheckBox)
220
221 def retranslateUi(self, MqttConnectionOptionsDialog):
222 _translate = QtCore.QCoreApplication.translate
223 MqttConnectionOptionsDialog.setWindowTitle(_translate("MqttConnectionOptionsDialog", "MQTT Connection Options"))
224 self.label.setText(_translate("MqttConnectionOptionsDialog", "Client ID:"))
225 self.clientIdEdit.setToolTip(_translate("MqttConnectionOptionsDialog", "Enter the ID string for this client"))
226 self.generateIdButton.setToolTip(_translate("MqttConnectionOptionsDialog", "Press to generate a client ID"))
227 self.generateIdButton.setText(_translate("MqttConnectionOptionsDialog", "Generate"))
228 self.groupBox_5.setTitle(_translate("MqttConnectionOptionsDialog", "MQTT Protocol"))
229 self.mqttv31Button.setToolTip(_translate("MqttConnectionOptionsDialog", "Select to use the MQTT 3.1 protocol"))
230 self.mqttv31Button.setText(_translate("MqttConnectionOptionsDialog", "v 3.1"))
231 self.mqttv311Button.setToolTip(_translate("MqttConnectionOptionsDialog", "Select to use the MQTT 3.1.1 protocol"))
232 self.mqttv311Button.setText(_translate("MqttConnectionOptionsDialog", "v 3.1.1"))
233 self.mqttv5Button.setToolTip(_translate("MqttConnectionOptionsDialog", "Select to use the MQTT 5.0 protocol"))
234 self.mqttv5Button.setText(_translate("MqttConnectionOptionsDialog", "v 5.0"))
235 self.label_6.setText(_translate("MqttConnectionOptionsDialog", "Connection Timeout:"))
236 self.connectionTimeoutSpinBox.setToolTip(_translate("MqttConnectionOptionsDialog", "Enter the connection timeout in seconds"))
237 self.connectionTimeoutSpinBox.setSuffix(_translate("MqttConnectionOptionsDialog", " s"))
238 self.label_2.setText(_translate("MqttConnectionOptionsDialog", "Keep Alive Interval:"))
239 self.keepaliveSpinBox.setToolTip(_translate("MqttConnectionOptionsDialog", "Enter the keep alive interval in seconds"))
240 self.keepaliveSpinBox.setSuffix(_translate("MqttConnectionOptionsDialog", " s"))
241 self.cleanSessionCheckBox.setToolTip(_translate("MqttConnectionOptionsDialog", "Select to start with a clean session"))
242 self.cleanSessionCheckBox.setText(_translate("MqttConnectionOptionsDialog", "Clean Session"))
243 self.optionsWidget.setTabText(self.optionsWidget.indexOf(self.generalTab), _translate("MqttConnectionOptionsDialog", "General"))
244 self.label_3.setText(_translate("MqttConnectionOptionsDialog", "User Name:"))
245 self.usernameEdit.setToolTip(_translate("MqttConnectionOptionsDialog", "Enter the user name"))
246 self.label_4.setText(_translate("MqttConnectionOptionsDialog", "Password:"))
247 self.passwordEdit.setToolTip(_translate("MqttConnectionOptionsDialog", "Enter the password"))
248 self.optionsWidget.setTabText(self.optionsWidget.indexOf(self.credentialsTab), _translate("MqttConnectionOptionsDialog", "User Credentials"))
249 self.willTopicEdit.setToolTip(_translate("MqttConnectionOptionsDialog", "Enter the topic of the last will"))
250 self.label_5.setText(_translate("MqttConnectionOptionsDialog", "QoS:"))
251 self.willQosSpinBox.setToolTip(_translate("MqttConnectionOptionsDialog", "Enter the desired QoS value"))
252 self.willRetainCheckBox.setToolTip(_translate("MqttConnectionOptionsDialog", "Select to retain the last will message"))
253 self.willRetainCheckBox.setText(_translate("MqttConnectionOptionsDialog", "Retain"))
254 self.willPropertiesButton.setToolTip(_translate("MqttConnectionOptionsDialog", "Press to edit the user properties"))
255 self.willMessageEdit.setToolTip(_translate("MqttConnectionOptionsDialog", "Enter the last will message to be sent"))
256 self.optionsWidget.setTabText(self.optionsWidget.indexOf(self.lastWillTab), _translate("MqttConnectionOptionsDialog", "Last Will"))
257 self.tlsEnableCheckBox.setToolTip(_translate("MqttConnectionOptionsDialog", "Select to enable SSL/TLS connections"))
258 self.tlsEnableCheckBox.setText(_translate("MqttConnectionOptionsDialog", "SSL/TLS Enabled"))
259 self.label_8.setText(_translate("MqttConnectionOptionsDialog", "CA File:"))
260 self.tlsCertsFilePicker.setToolTip(_translate("MqttConnectionOptionsDialog", "Enter the full path to the CA certificate file; leave empty to use platform default"))
261 self.optionsWidget.setTabText(self.optionsWidget.indexOf(self.tlsTab), _translate("MqttConnectionOptionsDialog", "SSL/TLS"))
262 self.connectPropertiesButton.setToolTip(_translate("MqttConnectionOptionsDialog", "Select to edit the CONNECT user properties"))
263 self.connectPropertiesButton.setText(_translate("MqttConnectionOptionsDialog", "CONNECT"))
264 self.disconnectPropertiesButton.setToolTip(_translate("MqttConnectionOptionsDialog", "Select to edit the DISCONNECT user properties"))
265 self.disconnectPropertiesButton.setText(_translate("MqttConnectionOptionsDialog", "DISCONNECT"))
266 self.samePropertiesCheckBox.setToolTip(_translate("MqttConnectionOptionsDialog", "Select to use the CONNECT user properties when disconnecting"))
267 self.samePropertiesCheckBox.setText(_translate("MqttConnectionOptionsDialog", "Use CONNECT properties for DISCONNECT"))
268 self.optionsWidget.setTabText(self.optionsWidget.indexOf(self.propertiesTab), _translate("MqttConnectionOptionsDialog", "User Properties"))
269 from MqttMonitor.MqttUserPropertiesEditor import MqttUserPropertiesEditor
270 from eric7.EricWidgets.EricPathPicker import EricPathPicker

eric ide

mercurial