Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardDialog.py

changeset 3190
a9a94491c4fd
parent 3189
9a21c547de5f
child 3345
071afe8be2a1
equal deleted inserted replaced
3189:9a21c547de5f 3190:a9a94491c4fd
80 self.syntaxCombo.addItem("W3C XML Schema 1.1", QRegExp.W3CXmlSchema11) 80 self.syntaxCombo.addItem("W3C XML Schema 1.1", QRegExp.W3CXmlSchema11)
81 if qVersion() >= "5.0.0": 81 if qVersion() >= "5.0.0":
82 self.syntaxCombo.setCurrentIndex(1) 82 self.syntaxCombo.setCurrentIndex(1)
83 83
84 self.saveButton = self.buttonBox.addButton( 84 self.saveButton = self.buttonBox.addButton(
85 self.trUtf8("Save"), QDialogButtonBox.ActionRole) 85 self.tr("Save"), QDialogButtonBox.ActionRole)
86 self.saveButton.setToolTip( 86 self.saveButton.setToolTip(
87 self.trUtf8("Save the regular expression to a file")) 87 self.tr("Save the regular expression to a file"))
88 self.loadButton = self.buttonBox.addButton( 88 self.loadButton = self.buttonBox.addButton(
89 self.trUtf8("Load"), QDialogButtonBox.ActionRole) 89 self.tr("Load"), QDialogButtonBox.ActionRole)
90 self.loadButton.setToolTip( 90 self.loadButton.setToolTip(
91 self.trUtf8("Load a regular expression from a file")) 91 self.tr("Load a regular expression from a file"))
92 self.validateButton = self.buttonBox.addButton( 92 self.validateButton = self.buttonBox.addButton(
93 self.trUtf8("Validate"), QDialogButtonBox.ActionRole) 93 self.tr("Validate"), QDialogButtonBox.ActionRole)
94 self.validateButton.setToolTip( 94 self.validateButton.setToolTip(
95 self.trUtf8("Validate the regular expression")) 95 self.tr("Validate the regular expression"))
96 self.executeButton = self.buttonBox.addButton( 96 self.executeButton = self.buttonBox.addButton(
97 self.trUtf8("Execute"), QDialogButtonBox.ActionRole) 97 self.tr("Execute"), QDialogButtonBox.ActionRole)
98 self.executeButton.setToolTip( 98 self.executeButton.setToolTip(
99 self.trUtf8("Execute the regular expression")) 99 self.tr("Execute the regular expression"))
100 self.nextButton = self.buttonBox.addButton( 100 self.nextButton = self.buttonBox.addButton(
101 self.trUtf8("Next match"), QDialogButtonBox.ActionRole) 101 self.tr("Next match"), QDialogButtonBox.ActionRole)
102 self.nextButton.setToolTip( 102 self.nextButton.setToolTip(
103 self.trUtf8("Show the next match of the regular expression")) 103 self.tr("Show the next match of the regular expression"))
104 self.nextButton.setEnabled(False) 104 self.nextButton.setEnabled(False)
105 105
106 if fromEric: 106 if fromEric:
107 self.buttonBox.setStandardButtons( 107 self.buttonBox.setStandardButtons(
108 QDialogButtonBox.Cancel | QDialogButtonBox.Ok) 108 QDialogButtonBox.Cancel | QDialogButtonBox.Ok)
109 self.copyButton = None 109 self.copyButton = None
110 else: 110 else:
111 self.copyButton = self.buttonBox.addButton( 111 self.copyButton = self.buttonBox.addButton(
112 self.trUtf8("Copy"), QDialogButtonBox.ActionRole) 112 self.tr("Copy"), QDialogButtonBox.ActionRole)
113 self.copyButton.setToolTip( 113 self.copyButton.setToolTip(
114 self.trUtf8("Copy the regular expression to the clipboard")) 114 self.tr("Copy the regular expression to the clipboard"))
115 self.buttonBox.setStandardButtons(QDialogButtonBox.Close) 115 self.buttonBox.setStandardButtons(QDialogButtonBox.Close)
116 self.variableLabel.hide() 116 self.variableLabel.hide()
117 self.variableLineEdit.hide() 117 self.variableLineEdit.hide()
118 self.variableLine.hide() 118 self.variableLine.hide()
119 self.regexpLineEdit.setFocus() 119 self.regexpLineEdit.setFocus()
334 """ 334 """
335 Private slot to save the regexp to a file. 335 Private slot to save the regexp to a file.
336 """ 336 """
337 fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter( 337 fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
338 self, 338 self,
339 self.trUtf8("Save regular expression"), 339 self.tr("Save regular expression"),
340 "", 340 "",
341 self.trUtf8("RegExp Files (*.rx);;All Files (*)"), 341 self.tr("RegExp Files (*.rx);;All Files (*)"),
342 None, 342 None,
343 E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite)) 343 E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
344 if fname: 344 if fname:
345 ext = QFileInfo(fname).suffix() 345 ext = QFileInfo(fname).suffix()
346 if not ext: 346 if not ext:
348 if ex: 348 if ex:
349 fname += ex 349 fname += ex
350 if QFileInfo(fname).exists(): 350 if QFileInfo(fname).exists():
351 res = E5MessageBox.yesNo( 351 res = E5MessageBox.yesNo(
352 self, 352 self,
353 self.trUtf8("Save regular expression"), 353 self.tr("Save regular expression"),
354 self.trUtf8("<p>The file <b>{0}</b> already exists." 354 self.tr("<p>The file <b>{0}</b> already exists."
355 " Overwrite it?</p>").format(fname), 355 " Overwrite it?</p>").format(fname),
356 icon=E5MessageBox.Warning) 356 icon=E5MessageBox.Warning)
357 if not res: 357 if not res:
358 return 358 return
359 359
360 syntax = self.syntaxCombo.itemData(self.syntaxCombo.currentIndex()) 360 syntax = self.syntaxCombo.itemData(self.syntaxCombo.currentIndex())
365 f.write(self.regexpLineEdit.text()) 365 f.write(self.regexpLineEdit.text())
366 f.close() 366 f.close()
367 except IOError as err: 367 except IOError as err:
368 E5MessageBox.information( 368 E5MessageBox.information(
369 self, 369 self,
370 self.trUtf8("Save regular expression"), 370 self.tr("Save regular expression"),
371 self.trUtf8("""<p>The regular expression could not""" 371 self.tr("""<p>The regular expression could not"""
372 """ be saved.</p><p>Reason: {0}</p>""") 372 """ be saved.</p><p>Reason: {0}</p>""")
373 .format(str(err))) 373 .format(str(err)))
374 374
375 @pyqtSlot() 375 @pyqtSlot()
376 def on_loadButton_clicked(self): 376 def on_loadButton_clicked(self):
377 """ 377 """
378 Private slot to load a regexp from a file. 378 Private slot to load a regexp from a file.
379 """ 379 """
380 fname = E5FileDialog.getOpenFileName( 380 fname = E5FileDialog.getOpenFileName(
381 self, 381 self,
382 self.trUtf8("Load regular expression"), 382 self.tr("Load regular expression"),
383 "", 383 "",
384 self.trUtf8("RegExp Files (*.rx);;All Files (*)")) 384 self.tr("RegExp Files (*.rx);;All Files (*)"))
385 if fname: 385 if fname:
386 try: 386 try:
387 f = open( 387 f = open(
388 Utilities.toNativeSeparators(fname), "r", encoding="utf-8") 388 Utilities.toNativeSeparators(fname), "r", encoding="utf-8")
389 regexp = f.read() 389 regexp = f.read()
396 regexp = lines[1] 396 regexp = lines[1]
397 self.regexpLineEdit.setText(regexp) 397 self.regexpLineEdit.setText(regexp)
398 except IOError as err: 398 except IOError as err:
399 E5MessageBox.information( 399 E5MessageBox.information(
400 self, 400 self,
401 self.trUtf8("Save regular expression"), 401 self.tr("Save regular expression"),
402 self.trUtf8("""<p>The regular expression could not""" 402 self.tr("""<p>The regular expression could not"""
403 """ be saved.</p><p>Reason: {0}</p>""") 403 """ be saved.</p><p>Reason: {0}</p>""")
404 .format(str(err))) 404 .format(str(err)))
405 405
406 @pyqtSlot() 406 @pyqtSlot()
407 def on_copyButton_clicked(self): 407 def on_copyButton_clicked(self):
408 """ 408 """
434 re.setPatternSyntax( 434 re.setPatternSyntax(
435 self.syntaxCombo.itemData(self.syntaxCombo.currentIndex())) 435 self.syntaxCombo.itemData(self.syntaxCombo.currentIndex()))
436 if re.isValid(): 436 if re.isValid():
437 E5MessageBox.information( 437 E5MessageBox.information(
438 self, 438 self,
439 self.trUtf8("Validation"), 439 self.tr("Validation"),
440 self.trUtf8("""The regular expression is valid.""")) 440 self.tr("""The regular expression is valid."""))
441 else: 441 else:
442 E5MessageBox.critical( 442 E5MessageBox.critical(
443 self, 443 self,
444 self.trUtf8("Error"), 444 self.tr("Error"),
445 self.trUtf8("""Invalid regular expression: {0}""") 445 self.tr("""Invalid regular expression: {0}""")
446 .format(re.errorString())) 446 .format(re.errorString()))
447 return 447 return
448 else: 448 else:
449 E5MessageBox.critical( 449 E5MessageBox.critical(
450 self, 450 self,
451 self.trUtf8("Error"), 451 self.tr("Error"),
452 self.trUtf8("""A regular expression must be given.""")) 452 self.tr("""A regular expression must be given."""))
453 453
454 @pyqtSlot() 454 @pyqtSlot()
455 def on_executeButton_clicked(self, startpos=0): 455 def on_executeButton_clicked(self, startpos=0):
456 """ 456 """
457 Private slot to execute the entered regexp on the test text. 457 Private slot to execute the entered regexp on the test text.
474 wildcard = syntax in [QRegExp.Wildcard, QRegExp.WildcardUnix] 474 wildcard = syntax in [QRegExp.Wildcard, QRegExp.WildcardUnix]
475 re.setPatternSyntax(syntax) 475 re.setPatternSyntax(syntax)
476 if not re.isValid(): 476 if not re.isValid():
477 E5MessageBox.critical( 477 E5MessageBox.critical(
478 self, 478 self,
479 self.trUtf8("Error"), 479 self.tr("Error"),
480 self.trUtf8("""Invalid regular expression: {0}""") 480 self.tr("""Invalid regular expression: {0}""")
481 .format(re.errorString())) 481 .format(re.errorString()))
482 return 482 return
483 offset = re.indexIn(text, startpos) 483 offset = re.indexIn(text, startpos)
484 captures = re.captureCount() 484 captures = re.captureCount()
485 row = 0 485 row = 0
488 self.resultTable.setColumnCount(0) 488 self.resultTable.setColumnCount(0)
489 self.resultTable.setColumnCount(3) 489 self.resultTable.setColumnCount(3)
490 self.resultTable.setRowCount(0) 490 self.resultTable.setRowCount(0)
491 self.resultTable.setRowCount(OFFSET) 491 self.resultTable.setRowCount(OFFSET)
492 self.resultTable.setItem( 492 self.resultTable.setItem(
493 row, 0, QTableWidgetItem(self.trUtf8("Regexp"))) 493 row, 0, QTableWidgetItem(self.tr("Regexp")))
494 self.resultTable.setItem(row, 1, QTableWidgetItem(regex)) 494 self.resultTable.setItem(row, 1, QTableWidgetItem(regex))
495 495
496 if offset != -1: 496 if offset != -1:
497 self.lastMatchEnd = offset + re.matchedLength() 497 self.lastMatchEnd = offset + re.matchedLength()
498 self.nextButton.setEnabled(True) 498 self.nextButton.setEnabled(True)
499 row += 1 499 row += 1
500 self.resultTable.setItem( 500 self.resultTable.setItem(
501 row, 0, QTableWidgetItem(self.trUtf8("Offset"))) 501 row, 0, QTableWidgetItem(self.tr("Offset")))
502 self.resultTable.setItem( 502 self.resultTable.setItem(
503 row, 1, QTableWidgetItem("{0:d}".format(offset))) 503 row, 1, QTableWidgetItem("{0:d}".format(offset)))
504 504
505 if not wildcard: 505 if not wildcard:
506 row += 1 506 row += 1
507 self.resultTable.setItem( 507 self.resultTable.setItem(
508 row, 0, QTableWidgetItem(self.trUtf8("Captures"))) 508 row, 0, QTableWidgetItem(self.tr("Captures")))
509 self.resultTable.setItem( 509 self.resultTable.setItem(
510 row, 1, QTableWidgetItem("{0:d}".format(captures))) 510 row, 1, QTableWidgetItem("{0:d}".format(captures)))
511 row += 1 511 row += 1
512 self.resultTable.setItem( 512 self.resultTable.setItem(
513 row, 1, QTableWidgetItem(self.trUtf8("Text"))) 513 row, 1, QTableWidgetItem(self.tr("Text")))
514 self.resultTable.setItem( 514 self.resultTable.setItem(
515 row, 2, QTableWidgetItem(self.trUtf8("Characters"))) 515 row, 2, QTableWidgetItem(self.tr("Characters")))
516 516
517 row += 1 517 row += 1
518 self.resultTable.setItem( 518 self.resultTable.setItem(
519 row, 0, QTableWidgetItem(self.trUtf8("Match"))) 519 row, 0, QTableWidgetItem(self.tr("Match")))
520 self.resultTable.setItem( 520 self.resultTable.setItem(
521 row, 1, QTableWidgetItem(re.cap(0))) 521 row, 1, QTableWidgetItem(re.cap(0)))
522 self.resultTable.setItem( 522 self.resultTable.setItem(
523 row, 2, 523 row, 2,
524 QTableWidgetItem("{0:d}".format(re.matchedLength()))) 524 QTableWidgetItem("{0:d}".format(re.matchedLength())))
529 row += 1 529 row += 1
530 self.resultTable.insertRow(row) 530 self.resultTable.insertRow(row)
531 self.resultTable.setItem( 531 self.resultTable.setItem(
532 row, 0, 532 row, 0,
533 QTableWidgetItem( 533 QTableWidgetItem(
534 self.trUtf8("Capture #{0}").format(i))) 534 self.tr("Capture #{0}").format(i)))
535 self.resultTable.setItem( 535 self.resultTable.setItem(
536 row, 1, 536 row, 1,
537 QTableWidgetItem(re.cap(i))) 537 QTableWidgetItem(re.cap(i)))
538 self.resultTable.setItem( 538 self.resultTable.setItem(
539 row, 2, 539 row, 2,
552 self.resultTable.setRowCount(2) 552 self.resultTable.setRowCount(2)
553 row += 1 553 row += 1
554 if startpos > 0: 554 if startpos > 0:
555 self.resultTable.setItem( 555 self.resultTable.setItem(
556 row, 0, 556 row, 0,
557 QTableWidgetItem(self.trUtf8("No more matches"))) 557 QTableWidgetItem(self.tr("No more matches")))
558 else: 558 else:
559 self.resultTable.setItem( 559 self.resultTable.setItem(
560 row, 0, 560 row, 0,
561 QTableWidgetItem(self.trUtf8("No matches"))) 561 QTableWidgetItem(self.tr("No matches")))
562 562
563 # remove the highlight 563 # remove the highlight
564 tc = self.textTextEdit.textCursor() 564 tc = self.textTextEdit.textCursor()
565 tc.setPosition(0) 565 tc.setPosition(0)
566 self.textTextEdit.setTextCursor(tc) 566 self.textTextEdit.setTextCursor(tc)
570 self.resultTable.verticalHeader().hide() 570 self.resultTable.verticalHeader().hide()
571 self.resultTable.horizontalHeader().hide() 571 self.resultTable.horizontalHeader().hide()
572 else: 572 else:
573 E5MessageBox.critical( 573 E5MessageBox.critical(
574 self, 574 self,
575 self.trUtf8("Error"), 575 self.tr("Error"),
576 self.trUtf8("""A regular expression and a text must""" 576 self.tr("""A regular expression and a text must"""
577 """ be given.""")) 577 """ be given."""))
578 578
579 @pyqtSlot() 579 @pyqtSlot()
580 def on_nextButton_clicked(self): 580 def on_nextButton_clicked(self):
581 """ 581 """
582 Private slot to find the next match. 582 Private slot to find the next match.

eric ide

mercurial