49 |
49 |
50 self.project = project |
50 self.project = project |
51 |
51 |
52 self.formFile = formName |
52 self.formFile = formName |
53 filename, ext = os.path.splitext(self.formFile) |
53 filename, ext = os.path.splitext(self.formFile) |
54 self.srcFile = '%s%s' % (filename, self.project.getDefaultSourceExtension()) |
54 self.srcFile = '{0}{1}'.format(filename, self.project.getDefaultSourceExtension()) |
55 |
55 |
56 self.slotsModel = QStandardItemModel() |
56 self.slotsModel = QStandardItemModel() |
57 self.proxyModel = QSortFilterProxyModel() |
57 self.proxyModel = QSortFilterProxyModel() |
58 self.proxyModel.setDynamicSortFilter(True) |
58 self.proxyModel.setDynamicSortFilter(True) |
59 self.proxyModel.setSourceModel(self.slotsModel) |
59 self.proxyModel.setSourceModel(self.slotsModel) |
156 for meth in list(cls.methods.values()): |
156 for meth in list(cls.methods.values()): |
157 if meth.name.startswith("on_"): |
157 if meth.name.startswith("on_"): |
158 if meth.pyqtSignature is not None: |
158 if meth.pyqtSignature is not None: |
159 sig = ", ".join([bytes(QMetaObject.normalizedType(t)).decode() \ |
159 sig = ", ".join([bytes(QMetaObject.normalizedType(t)).decode() \ |
160 for t in meth.pyqtSignature.split(",")]) |
160 for t in meth.pyqtSignature.split(",")]) |
161 signatures.append("%s(%s)" % (meth.name, sig)) |
161 signatures.append("{0}({1})".format(meth.name, sig)) |
162 else: |
162 else: |
163 signatures.append(meth.name) |
163 signatures.append(meth.name) |
164 return signatures |
164 return signatures |
165 |
165 |
166 def __mapType(self, type_): |
166 def __mapType(self, type_): |
206 if not name: |
206 if not name: |
207 continue |
207 continue |
208 |
208 |
209 metaObject = obj.metaObject() |
209 metaObject = obj.metaObject() |
210 className = metaObject.className() |
210 className = metaObject.className() |
211 itm = QStandardItem("%s (%s)" % (name, className)) |
211 itm = QStandardItem("{0} ({1})".format(name, className)) |
212 self.slotsModel.appendRow(itm) |
212 self.slotsModel.appendRow(itm) |
213 for index in range(metaObject.methodCount()): |
213 for index in range(metaObject.methodCount()): |
214 metaMethod = metaObject.method(index) |
214 metaMethod = metaObject.method(index) |
215 if metaMethod.methodType() == QMetaMethod.Signal: |
215 if metaMethod.methodType() == QMetaMethod.Signal: |
216 itm2 = QStandardItem("on_%s_%s" % (name, metaMethod.signature())) |
216 itm2 = QStandardItem("on_{0}_{1}".format( |
|
217 name, metaMethod.signature())) |
217 itm.appendRow(itm2) |
218 itm.appendRow(itm2) |
218 if self.__module is not None: |
219 if self.__module is not None: |
219 method = "on_%s_%s" % \ |
220 method = "on_{0}_{1}".format( |
220 (name, metaMethod.signature().split("(")[0]) |
221 name, metaMethod.signature().split("(")[0]) |
221 method2 = "%s(%s)" % (method, |
222 method2 = "{0}({1})".format(method, |
222 ", ".join([self.__mapType(t) |
223 ", ".join([self.__mapType(t) |
223 for t in metaMethod.parameterTypes()])) |
224 for t in metaMethod.parameterTypes()])) |
224 |
225 |
225 if method2 in signatureList or method in signatureList: |
226 if method2 in signatureList or method in signatureList: |
226 itm2.setFlags(Qt.ItemFlags(Qt.ItemIsEnabled)) |
227 itm2.setFlags(Qt.ItemFlags(Qt.ItemIsEnabled)) |
234 |
235 |
235 parameterNames = metaMethod.parameterNames() |
236 parameterNames = metaMethod.parameterNames() |
236 if parameterNames: |
237 if parameterNames: |
237 for index in range(len(parameterNames)): |
238 for index in range(len(parameterNames)): |
238 if not parameterNames[index]: |
239 if not parameterNames[index]: |
239 parameterNames[index] = QByteArray("p%d" % index) |
240 parameterNames[index] = \ |
|
241 QByteArray("p{0:d}".format(index)) |
240 methNamesSig = \ |
242 methNamesSig = \ |
241 ", ".join([bytes(n).decode() for n in parameterNames]) |
243 ", ".join([bytes(n).decode() for n in parameterNames]) |
242 |
244 |
243 if methNamesSig: |
245 if methNamesSig: |
244 pythonSignature = "on_%s_%s(self, %s)" % \ |
246 pythonSignature = "on_{0}_{1}(self, {2})".format( |
245 (name, |
247 name, |
246 metaMethod.signature().split("(")[0], |
248 metaMethod.signature().split("(")[0], |
247 methNamesSig |
249 methNamesSig) |
248 ) |
|
249 else: |
250 else: |
250 pythonSignature = "on_%s_%s(self)" % \ |
251 pythonSignature = "on_{0}_{1}(self)".format( |
251 (name, |
252 name, |
252 metaMethod.signature().split("(")[0] |
253 metaMethod.signature().split("(")[0]) |
253 ) |
|
254 itm2.setData(pyqtSignature, pyqtSignatureRole) |
254 itm2.setData(pyqtSignature, pyqtSignatureRole) |
255 itm2.setData(pythonSignature, pythonSignatureRole) |
255 itm2.setData(pythonSignature, pythonSignatureRole) |
256 |
256 |
257 itm2.setFlags(Qt.ItemFlags(\ |
257 itm2.setFlags(Qt.ItemFlags(\ |
258 Qt.ItemIsUserCheckable | \ |
258 Qt.ItemIsUserCheckable | \ |
338 try: |
338 try: |
339 srcFile = open(self.srcFile, 'r', encoding = "utf-8") |
339 srcFile = open(self.srcFile, 'r', encoding = "utf-8") |
340 sourceImpl = srcFile.readlines() |
340 sourceImpl = srcFile.readlines() |
341 srcFile.close() |
341 srcFile.close() |
342 if not sourceImpl[-1].endswith("\n"): |
342 if not sourceImpl[-1].endswith("\n"): |
343 sourceImpl[-1] = "%s%s" % (sourceImpl[-1], "\n") |
343 sourceImpl[-1] = "{0}{1}".format(sourceImpl[-1], "\n") |
344 except IOError as why: |
344 except IOError as why: |
345 QMessageBox.critical(self, |
345 QMessageBox.critical(self, |
346 self.trUtf8("Code Generation"), |
346 self.trUtf8("Code Generation"), |
347 self.trUtf8("""<p>Could not open the source file "{0}".</p>""" |
347 self.trUtf8("""<p>Could not open the source file "{0}".</p>""" |
348 """<p>Reason: {1}</p>""")\ |
348 """<p>Reason: {1}</p>""")\ |
371 topItem = self.slotsModel.item(row) |
371 topItem = self.slotsModel.item(row) |
372 for childRow in range(topItem.rowCount()): |
372 for childRow in range(topItem.rowCount()): |
373 child = topItem.child(childRow) |
373 child = topItem.child(childRow) |
374 if child.checkState() and \ |
374 if child.checkState() and \ |
375 child.flags() & Qt.ItemFlags(Qt.ItemIsUserCheckable): |
375 child.flags() & Qt.ItemFlags(Qt.ItemIsUserCheckable): |
376 slotsCode.append('%s\n' % indentStr) |
376 slotsCode.append('{0}\n'.format(indentStr)) |
377 slotsCode.append('%s@pyqtSlot(%s)\n' % \ |
377 slotsCode.append('{0}@pyqtSlot({1})\n'.format( |
378 (indentStr, child.data(pyqtSignatureRole))) |
378 indentStr, child.data(pyqtSignatureRole))) |
379 slotsCode.append('%sdef %s:\n' % \ |
379 slotsCode.append('{0}def {1}:\n'.format( |
380 (indentStr, child.data(pythonSignatureRole))) |
380 indentStr, child.data(pythonSignatureRole))) |
381 slotsCode.append('%s"""\n' % (indentStr * 2,)) |
381 slotsCode.append('{0}"""\n'.format(indentStr * 2)) |
382 slotsCode.append('%sSlot documentation goes here.\n' % \ |
382 slotsCode.append('{0}Slot documentation goes here.\n'.format( |
383 (indentStr * 2,)) |
383 indentStr * 2)) |
384 slotsCode.append('%s"""\n' % (indentStr * 2,)) |
384 slotsCode.append('{0}"""\n'.format(indentStr * 2)) |
385 slotsCode.append('%s# %s: not implemented yet\n' % \ |
385 slotsCode.append('{0}# {1}: not implemented yet\n'.format( |
386 (indentStr * 2, "TODO")) |
386 indentStr * 2, "TODO")) |
387 slotsCode.append('%sraise NotImplementedError\n' % (indentStr * 2,)) |
387 slotsCode.append('{0}raise NotImplementedError\n'.format( |
|
388 indentStr * 2)) |
388 |
389 |
389 if appendAtIndex == -1: |
390 if appendAtIndex == -1: |
390 sourceImpl.extend(slotsCode) |
391 sourceImpl.extend(slotsCode) |
391 else: |
392 else: |
392 sourceImpl[appendAtIndex:appendAtIndex] = slotsCode |
393 sourceImpl[appendAtIndex:appendAtIndex] = slotsCode |