/usr/local/CPAN/Qt/RegExpDialog.pm
package RegExpDialog;
use strict;
use warnings;
use QtCore4;
use QtGui4;
use QtCore4::isa qw( Qt::Dialog );
use QtCore4::slots
refresh => [];
use constant { MaxCaptures => 6 };
sub patternLabel() {
return this->{patternLabel};
}
sub escapedPatternLabel() {
return this->{escapedPatternLabel};
}
sub syntaxLabel() {
return this->{syntaxLabel};
}
sub textLabel() {
return this->{textLabel};
}
sub patternComboBox() {
return this->{patternComboBox};
}
sub escapedPatternLineEdit() {
return this->{escapedPatternLineEdit};
}
sub textComboBox() {
return this->{textComboBox};
}
sub caseSensitiveCheckBox() {
return this->{caseSensitiveCheckBox};
}
sub minimalCheckBox() {
return this->{minimalCheckBox};
}
sub syntaxComboBox() {
return this->{syntaxComboBox};
}
sub indexLabel() {
return this->{indexLabel};
}
sub matchedLengthLabel() {
return this->{matchedLengthLabel};
}
sub indexEdit() {
return this->{indexEdit};
}
sub matchedLengthEdit() {
return this->{matchedLengthEdit};
}
sub captureLabels() {
return this->{captureLabels};
}
sub captureEdits() {
return this->{captureEdits};
}
sub NEW
{
my ($class, $parent) = @_;
$class->SUPER::NEW($parent);
this->{patternComboBox} = Qt::ComboBox();
patternComboBox->setEditable(1);
patternComboBox->setSizePolicy(Qt::SizePolicy::Expanding(),
Qt::SizePolicy::Preferred());
this->{patternLabel} = Qt::Label(this->tr('&Pattern:'));
patternLabel->setBuddy(patternComboBox);
this->{escapedPatternLineEdit} = Qt::LineEdit();
escapedPatternLineEdit->setReadOnly(1);
my $palette = escapedPatternLineEdit->palette();
$palette->setBrush(Qt::Palette::Base(),
$palette->brush(Qt::Palette::Disabled(), Qt::Palette::Base()));
escapedPatternLineEdit->setPalette($palette);
this->{escapedPatternLabel} = Qt::Label(this->tr('&Escaped Pattern:'));
escapedPatternLabel->setBuddy(escapedPatternLineEdit);
this->{syntaxComboBox} = Qt::ComboBox();
syntaxComboBox->addItem(this->tr('Regular expression v1'), Qt::Variant(Qt::Int(${Qt::RegExp::RegExp()})));
syntaxComboBox->addItem(this->tr('Regular expression v2'), Qt::Variant(Qt::Int(${Qt::RegExp::RegExp2()})));
syntaxComboBox->addItem(this->tr('Wildcard'), Qt::Variant(Qt::Int(${Qt::RegExp::Wildcard()})));
syntaxComboBox->addItem(this->tr('Fixed string'), Qt::Variant(Qt::Int(${Qt::RegExp::FixedString()})));
syntaxComboBox->addItem(this->tr('W3C Xml Schema 1.1'), Qt::Variant(Qt::Int(${Qt::RegExp::W3CXmlSchema11()})));
this->{syntaxLabel} = Qt::Label(this->tr('&Pattern Syntax:'));
syntaxLabel->setBuddy(syntaxComboBox);
this->{textComboBox} = Qt::ComboBox();
textComboBox->setEditable(1);
textComboBox->setSizePolicy(Qt::SizePolicy::Expanding(), Qt::SizePolicy::Preferred());
this->{textLabel} = Qt::Label(this->tr('&Text:'));
textLabel->setBuddy(textComboBox);
this->{caseSensitiveCheckBox} = Qt::CheckBox(this->tr('Case &Sensitive'));
caseSensitiveCheckBox->setChecked(1);
this->{minimalCheckBox} = Qt::CheckBox(this->tr('&Minimal'));
this->{indexLabel} = Qt::Label(this->tr('Index of Match:'));
this->{indexEdit} = Qt::LineEdit();
indexEdit->setReadOnly(1);
this->{matchedLengthLabel} = Qt::Label(this->tr('Matched Length:'));
this->{matchedLengthEdit} = Qt::LineEdit();
matchedLengthEdit->setReadOnly(1);
this->{captureLabels} = [];
this->{captureEdits} = [];
for (my $i = 0; $i < MaxCaptures; ++$i) {
push @{captureLabels()}, Qt::Label(sprintf this->tr('Capture %d:'), $i);
push @{captureEdits()}, Qt::LineEdit();
captureEdits()->[$i]->setReadOnly(1);
}
captureLabels->[0]->setText(this->tr('Match:'));
my $checkBoxLayout = Qt::HBoxLayout();
$checkBoxLayout->addWidget(caseSensitiveCheckBox);
$checkBoxLayout->addWidget(minimalCheckBox);
$checkBoxLayout->addStretch(1);
my $mainLayout = Qt::GridLayout();
$mainLayout->addWidget(patternLabel, 0, 0);
$mainLayout->addWidget(patternComboBox, 0, 1);
$mainLayout->addWidget(escapedPatternLabel, 1, 0);
$mainLayout->addWidget(escapedPatternLineEdit, 1, 1);
$mainLayout->addWidget(syntaxLabel, 2, 0);
$mainLayout->addWidget(syntaxComboBox, 2, 1);
$mainLayout->addLayout($checkBoxLayout, 3, 0, 1, 2);
$mainLayout->addWidget(textLabel, 4, 0);
$mainLayout->addWidget(textComboBox, 4, 1);
$mainLayout->addWidget(indexLabel, 5, 0);
$mainLayout->addWidget(indexEdit, 5, 1);
$mainLayout->addWidget(matchedLengthLabel, 6, 0);
$mainLayout->addWidget(matchedLengthEdit, 6, 1);
for (my $j = 0; $j < MaxCaptures; ++$j) {
$mainLayout->addWidget(captureLabels()->[$j], 7 + $j, 0);
$mainLayout->addWidget(captureEdits()->[$j], 7 + $j, 1);
}
this->setLayout($mainLayout);
this->connect(patternComboBox, SIGNAL 'editTextChanged(QString)',
this, SLOT 'refresh()');
this->connect(textComboBox, SIGNAL 'editTextChanged(QString)',
this, SLOT 'refresh()');
this->connect(caseSensitiveCheckBox, SIGNAL 'toggled(bool)',
this, SLOT 'refresh()');
this->connect(minimalCheckBox, SIGNAL 'toggled(bool)', this, SLOT 'refresh()');
this->connect(syntaxComboBox, SIGNAL 'currentIndexChanged(int)',
this, SLOT 'refresh()');
patternComboBox->addItem(this->tr('[A-Za-z_]+([A-Za-z_0-9]*)'));
textComboBox->addItem(this->tr('(10 + delta4) * 32'));
setWindowTitle(this->tr('RegExp'));
setFixedHeight(sizeHint()->height());
refresh();
}
sub refresh
{
setUpdatesEnabled(0);
my $pattern = patternComboBox->currentText();
my $text = textComboBox->currentText();
my $escaped = $pattern;
$escaped =~ s/\\/\\\\/g;
$escaped =~ s/'/\\'/g;
$escaped = "'$escaped'";
escapedPatternLineEdit->setText($escaped);
my $rx = Qt::RegExp($pattern);
my $cs = Qt::CaseInsensitive();
if (caseSensitiveCheckBox->isChecked()) {
$cs = Qt::CaseSensitive();
}
$rx->setCaseSensitivity($cs);
$rx->setMinimal(minimalCheckBox->isChecked());
my $syntax = syntaxComboBox->itemData(syntaxComboBox->currentIndex())->toInt();
$rx->setPatternSyntax($syntax);
my $palette = patternComboBox->palette();
if ($rx->isValid()) {
$palette->setColor(Qt::Palette::Text(),
textComboBox->palette()->color(Qt::Palette::Text()));
} else {
$palette->setColor(Qt::Palette::Text(), Qt::Color(Qt::red()));
}
patternComboBox->setPalette($palette);
indexEdit->setText($rx->indexIn($text));
matchedLengthEdit->setText($rx->matchedLength());
for (my $i = 0; $i < MaxCaptures; ++$i) {
captureLabels->[$i]->setEnabled($i <= $rx->captureCount());
captureEdits->[$i]->setEnabled($i <= $rx->captureCount());
captureEdits->[$i]->setText($rx->cap($i));
}
setUpdatesEnabled(1);
}
1;