source: vendor/trolltech/current/examples/regexptester/regexptester.cpp

Last change on this file was 162, checked in by dmik, 19 years ago

Imported the regexptester example from the official release 3.3.1 from Trolltech.

  • Property svn:executable set to *
  • Property svn:keywords set to Id
File size: 6.1 KB
Line 
1#include <qapplication.h>
2#include <qcheckbox.h>
3#include <qclipboard.h>
4#include <qcombobox.h>
5#include <qlabel.h>
6#include <qlayout.h>
7#include <qpushbutton.h>
8#include <qregexp.h>
9#include <qstatusbar.h>
10#include <qtable.h>
11
12#include "regexptester.h"
13
14
15RegexpTester::RegexpTester(QWidget* parent, const char* name, bool modal,
16 WFlags f)
17 : QDialog(parent, name, modal, f)
18{
19 regexLabel = new QLabel(this);
20 regexComboBox = new QComboBox(this);
21 regexComboBox->setEditable(true);
22 regexComboBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
23 regexLabel->setBuddy(regexComboBox);
24 textLabel = new QLabel(this);
25 textComboBox = new QComboBox(this);
26 textComboBox->setEditable(true);
27 textComboBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
28 textLabel->setBuddy(textComboBox);
29 caseSensitiveCheckBox = new QCheckBox(this);
30 caseSensitiveCheckBox->setChecked(true);
31 minimalCheckBox = new QCheckBox(this);
32 wildcardCheckBox = new QCheckBox(this);
33 resultTable = new QTable(3, 3, this);
34 resultTable->verticalHeader()->hide();
35 resultTable->setLeftMargin(0);
36 resultTable->horizontalHeader()->hide();
37 resultTable->setTopMargin(0);
38 resultTable->setReadOnly(true);
39 executePushButton = new QPushButton(this);
40 executePushButton->setDefault(true);
41 copyPushButton = new QPushButton(this);
42 quitPushButton = new QPushButton(this);
43 statusBar = new QStatusBar(this);
44
45 QGridLayout *gridLayout = new QGridLayout(2, 2, 6);
46 gridLayout->addWidget(regexLabel, 0, 0);
47 gridLayout->addWidget(regexComboBox, 0, 1);
48 gridLayout->addWidget(textLabel, 1, 0);
49 gridLayout->addWidget(textComboBox, 1, 1);
50 QHBoxLayout *checkboxLayout = new QHBoxLayout(0, 6, 6);
51 checkboxLayout->addWidget(caseSensitiveCheckBox);
52 checkboxLayout->addWidget(minimalCheckBox);
53 checkboxLayout->addWidget(wildcardCheckBox);
54 checkboxLayout->addStretch(1);
55 QVBoxLayout *buttonLayout = new QVBoxLayout(0, 6, 6);
56 buttonLayout->addWidget(executePushButton);
57 buttonLayout->addWidget(copyPushButton);
58 buttonLayout->addWidget(quitPushButton);
59 buttonLayout->addStretch(1);
60 QHBoxLayout *middleLayout = new QHBoxLayout(0, 6, 6);
61 middleLayout->addWidget(resultTable);
62 middleLayout->addLayout(buttonLayout);
63 QVBoxLayout *mainLayout = new QVBoxLayout(this, 6, 6);
64 mainLayout->addLayout(gridLayout);
65 mainLayout->addLayout(checkboxLayout);
66 mainLayout->addLayout(middleLayout);
67 mainLayout->addWidget(statusBar);
68
69 resize(QSize(500, 350).expandedTo(minimumSizeHint()));
70
71 languageChange();
72
73 connect(copyPushButton, SIGNAL(clicked()), this, SLOT(copy()));
74 connect(executePushButton, SIGNAL(clicked()), this, SLOT(execute()));
75 connect(quitPushButton, SIGNAL(clicked()), this, SLOT(accept()));
76
77 execute();
78}
79
80void RegexpTester::execute()
81{
82 QString regex = regexComboBox->currentText();
83 QString text = textComboBox->currentText();
84 if (!regex.isEmpty() && !text.isEmpty()) {
85 QRegExp re(regex);
86 re.setCaseSensitive(caseSensitiveCheckBox->isChecked());
87 re.setMinimal(minimalCheckBox->isChecked());
88 bool wildcard = wildcardCheckBox->isChecked();
89 re.setWildcard(wildcard);
90 if (!re.isValid()) {
91 statusBar->message(tr("Invalid regular expression: %1")
92 .arg(re.errorString()));
93 return;
94 }
95 int offset = re.search(text);
96 int captures = re.numCaptures();
97 int row = 0;
98 const int OFFSET = 5;
99 resultTable->setNumRows(0);
100 resultTable->setNumRows(captures + OFFSET);
101 resultTable->setText(row, 0, tr("Regex"));
102 QString escaped = regex;
103 escaped = escaped.replace("\\", "\\\\");
104 resultTable->setText(row, 1, escaped);
105 resultTable->item(row, 1)->setSpan(1, 2);
106 if (offset != -1) {
107 ++row;
108 resultTable->setText(row, 0, tr("Offset"));
109 resultTable->setText(row, 1, QString::number(offset));
110 resultTable->item(row, 1)->setSpan(1, 2);
111 if (!wildcard) {
112 ++row;
113 resultTable->setText(row, 0, tr("Captures"));
114 resultTable->setText(row, 1, QString::number(captures));
115 resultTable->item(row, 1)->setSpan(1, 2);
116 ++row;
117 resultTable->setText(row, 1, tr("Text"));
118 resultTable->setText(row, 2, tr("Characters"));
119 }
120 ++row;
121 resultTable->setText(row, 0, tr("Match"));
122 resultTable->setText(row, 1, re.cap(0));
123 resultTable->setText(row, 2, QString::number(re.matchedLength()));
124 if (!wildcard) {
125 for (int i = 1; i <= captures; ++i) {
126 resultTable->setText(row + i, 0, tr("Capture #%1").arg(i));
127 resultTable->setText(row + i, 1, re.cap(i));
128 resultTable->setText(row + i, 2,
129 QString::number(re.cap(i).length()));
130 }
131 }
132 else
133 resultTable->setNumRows(3);
134 }
135 else {
136 resultTable->setNumRows(2);
137 ++row;
138 resultTable->setText(row, 0, tr("No matches"));
139 resultTable->item(row, 0)->setSpan(1, 3);
140 }
141 resultTable->adjustColumn(0);
142 resultTable->adjustColumn(1);
143 resultTable->adjustColumn(2);
144 statusBar->message(tr("Executed \"%1\" on \"%2\"")
145 .arg(escaped).arg(text));
146 }
147 else
148 statusBar->message(tr("A regular expression and a text must be given"));
149}
150
151void RegexpTester::copy()
152{
153 QString escaped = regexComboBox->currentText();
154 if (!escaped.isEmpty()) {
155 escaped = escaped.replace("\\", "\\\\");
156 QClipboard *cb = QApplication::clipboard();
157 cb->setText(escaped, QClipboard::Clipboard);
158 if (cb->supportsSelection())
159 cb->setText(escaped, QClipboard::Selection);
160 statusBar->message(tr("Copied \"%1\" to the clipboard")
161 .arg(escaped));
162 }
163}
164
165void RegexpTester::languageChange()
166{
167 setCaption(tr("Regex Tester"));
168 regexLabel->setText(tr("&Regex:"));
169 regexComboBox->insertItem(tr("[A-Z]+=(\\d+):(\\d*)"));
170 textLabel->setText(tr("&Text:"));
171 textComboBox->insertItem(tr("ABC=12:3456"));
172 caseSensitiveCheckBox->setText(tr("Case &Sensitive"));
173 minimalCheckBox->setText(tr("&Minimal"));
174 wildcardCheckBox->setText(tr("&Wildcard"));
175 copyPushButton->setText(tr("&Copy"));
176 executePushButton->setText(tr("&Execute"));
177 quitPushButton->setText(tr("&Quit"));
178}
179
Note: See TracBrowser for help on using the repository browser.