1
/****************************************************************************
3
** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
4
** Contact: http://www.qt-project.org/legal
6
** This file is part of the examples of the Qt Toolkit.
8
** $QT_BEGIN_LICENSE:BSD$
9
** You may use this file under the terms of the BSD license as follows:
11
** "Redistribution and use in source and binary forms, with or without
12
** modification, are permitted provided that the following conditions are
14
** * Redistributions of source code must retain the above copyright
15
** notice, this list of conditions and the following disclaimer.
16
** * Redistributions in binary form must reproduce the above copyright
17
** notice, this list of conditions and the following disclaimer in
18
** the documentation and/or other materials provided with the
20
** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
21
** of its contributors may be used to endorse or promote products derived
22
** from this software without specific prior written permission.
25
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
39
****************************************************************************/
43
#include "regexpdialog.h"
45
RegExpDialog::RegExpDialog(QWidget *parent)
48
patternComboBox = new QComboBox;
49
patternComboBox->setEditable(true);
50
patternComboBox->setSizePolicy(QSizePolicy::Expanding,
51
QSizePolicy::Preferred);
53
patternLabel = new QLabel(tr("&Pattern:"));
54
patternLabel->setBuddy(patternComboBox);
56
escapedPatternLineEdit = new QLineEdit;
57
escapedPatternLineEdit->setReadOnly(true);
58
QPalette palette = escapedPatternLineEdit->palette();
59
palette.setBrush(QPalette::Base,
60
palette.brush(QPalette::Disabled, QPalette::Base));
61
escapedPatternLineEdit->setPalette(palette);
63
escapedPatternLabel = new QLabel(tr("&Escaped Pattern:"));
64
escapedPatternLabel->setBuddy(escapedPatternLineEdit);
66
syntaxComboBox = new QComboBox;
67
syntaxComboBox->addItem(tr("Regular expression v1"), QRegExp::RegExp);
68
syntaxComboBox->addItem(tr("Regular expression v2"), QRegExp::RegExp2);
69
syntaxComboBox->addItem(tr("Wildcard"), QRegExp::Wildcard);
70
syntaxComboBox->addItem(tr("Fixed string"), QRegExp::FixedString);
71
syntaxComboBox->addItem(tr("W3C Xml Schema 1.1"), QRegExp::W3CXmlSchema11);
73
syntaxLabel = new QLabel(tr("&Pattern Syntax:"));
74
syntaxLabel->setBuddy(syntaxComboBox);
76
textComboBox = new QComboBox;
77
textComboBox->setEditable(true);
78
textComboBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
80
textLabel = new QLabel(tr("&Text:"));
81
textLabel->setBuddy(textComboBox);
83
caseSensitiveCheckBox = new QCheckBox(tr("Case &Sensitive"));
84
caseSensitiveCheckBox->setChecked(true);
85
minimalCheckBox = new QCheckBox(tr("&Minimal"));
87
indexLabel = new QLabel(tr("Index of Match:"));
88
indexEdit = new QLineEdit;
89
indexEdit->setReadOnly(true);
91
matchedLengthLabel = new QLabel(tr("Matched Length:"));
92
matchedLengthEdit = new QLineEdit;
93
matchedLengthEdit->setReadOnly(true);
95
for (int i = 0; i < MaxCaptures; ++i) {
96
captureLabels[i] = new QLabel(tr("Capture %1:").arg(i));
97
captureEdits[i] = new QLineEdit;
98
captureEdits[i]->setReadOnly(true);
100
captureLabels[0]->setText(tr("Match:"));
102
QHBoxLayout *checkBoxLayout = new QHBoxLayout;
103
checkBoxLayout->addWidget(caseSensitiveCheckBox);
104
checkBoxLayout->addWidget(minimalCheckBox);
105
checkBoxLayout->addStretch(1);
107
QGridLayout *mainLayout = new QGridLayout;
108
mainLayout->addWidget(patternLabel, 0, 0);
109
mainLayout->addWidget(patternComboBox, 0, 1);
110
mainLayout->addWidget(escapedPatternLabel, 1, 0);
111
mainLayout->addWidget(escapedPatternLineEdit, 1, 1);
112
mainLayout->addWidget(syntaxLabel, 2, 0);
113
mainLayout->addWidget(syntaxComboBox, 2, 1);
114
mainLayout->addLayout(checkBoxLayout, 3, 0, 1, 2);
115
mainLayout->addWidget(textLabel, 4, 0);
116
mainLayout->addWidget(textComboBox, 4, 1);
117
mainLayout->addWidget(indexLabel, 5, 0);
118
mainLayout->addWidget(indexEdit, 5, 1);
119
mainLayout->addWidget(matchedLengthLabel, 6, 0);
120
mainLayout->addWidget(matchedLengthEdit, 6, 1);
122
for (int j = 0; j < MaxCaptures; ++j) {
123
mainLayout->addWidget(captureLabels[j], 7 + j, 0);
124
mainLayout->addWidget(captureEdits[j], 7 + j, 1);
126
setLayout(mainLayout);
128
connect(patternComboBox, SIGNAL(editTextChanged(QString)),
129
this, SLOT(refresh()));
130
connect(textComboBox, SIGNAL(editTextChanged(QString)),
131
this, SLOT(refresh()));
132
connect(caseSensitiveCheckBox, SIGNAL(toggled(bool)),
133
this, SLOT(refresh()));
134
connect(minimalCheckBox, SIGNAL(toggled(bool)), this, SLOT(refresh()));
135
connect(syntaxComboBox, SIGNAL(currentIndexChanged(int)),
136
this, SLOT(refresh()));
138
patternComboBox->addItem(tr("[A-Za-z_]+([A-Za-z_0-9]*)"));
139
textComboBox->addItem(tr("(10 + delta4) * 32"));
141
setWindowTitle(tr("RegExp"));
142
setFixedHeight(sizeHint().height());
146
void RegExpDialog::refresh()
148
setUpdatesEnabled(false);
150
QString pattern = patternComboBox->currentText();
151
QString text = textComboBox->currentText();
153
QString escaped = pattern;
154
escaped.replace("\\", "\\\\");
155
escaped.replace("\"", "\\\"");
156
escaped.prepend("\"");
157
escaped.append("\"");
158
escapedPatternLineEdit->setText(escaped);
161
Qt::CaseSensitivity cs = Qt::CaseInsensitive;
162
if (caseSensitiveCheckBox->isChecked())
163
cs = Qt::CaseSensitive;
164
rx.setCaseSensitivity(cs);
165
rx.setMinimal(minimalCheckBox->isChecked());
166
QRegExp::PatternSyntax syntax = QRegExp::PatternSyntax(
167
syntaxComboBox->itemData(syntaxComboBox->currentIndex()).toInt());
168
rx.setPatternSyntax(syntax);
170
QPalette palette = patternComboBox->palette();
172
palette.setColor(QPalette::Text,
173
textComboBox->palette().color(QPalette::Text));
175
palette.setColor(QPalette::Text, Qt::red);
177
patternComboBox->setPalette(palette);
179
indexEdit->setText(QString::number(rx.indexIn(text)));
180
matchedLengthEdit->setText(QString::number(rx.matchedLength()));
181
for (int i = 0; i < MaxCaptures; ++i) {
182
captureLabels[i]->setEnabled(i <= rx.captureCount());
183
captureEdits[i]->setEnabled(i <= rx.captureCount());
184
captureEdits[i]->setText(rx.cap(i));
187
setUpdatesEnabled(true);