summaryrefslogtreecommitdiffstats
path: root/examples/widgets/tools
diff options
context:
space:
mode:
authorOswald Buddenhagen <oswald.buddenhagen@qt.io>2017-08-02 22:49:38 +0200
committerOswald Buddenhagen <oswald.buddenhagen@qt.io>2017-08-02 22:52:32 +0200
commitee07b912a1768ea0b103544f9eeac41f3cf50cf6 (patch)
tree15bfa7e4a9c098511c1fc89e2b2c240520b85e2d /examples/widgets/tools
parent4bfff6a98b59b32605d881a463ad3edc221a7dc8 (diff)
parenta96656a8fb6a3c1fc7765659efff28f807fd0deb (diff)
Merge remote-tracking branch 'origin/5.9' into dev
Conflicts: src/plugins/platforms/xcb/qxcbconnection.h src/plugins/platforms/xcb/qxcbconnection_xi2.cpp src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp src/plugins/styles/mac/qmacstyle_mac.mm src/widgets/widgets/qdockarealayout.cpp src/widgets/widgets/qmainwindow.cpp src/widgets/widgets/qmainwindowlayout.cpp src/widgets/widgets/qmainwindowlayout_p.h tests/auto/corelib/tools/qlocale/tst_qlocale.cpp tests/auto/other/macnativeevents/BLACKLIST tests/auto/widgets/widgets/qmenu/BLACKLIST Change-Id: Ic8e724b80a65e7b1af25511b0e674d209265e567
Diffstat (limited to 'examples/widgets/tools')
-rw-r--r--examples/widgets/tools/regularexpression/regularexpressiondialog.cpp101
1 files changed, 94 insertions, 7 deletions
diff --git a/examples/widgets/tools/regularexpression/regularexpressiondialog.cpp b/examples/widgets/tools/regularexpression/regularexpressiondialog.cpp
index 371e2bda4b..7fdce3b674 100644
--- a/examples/widgets/tools/regularexpression/regularexpressiondialog.cpp
+++ b/examples/widgets/tools/regularexpression/regularexpressiondialog.cpp
@@ -58,12 +58,14 @@
#include <QComboBox>
#include <QLabel>
#include <QLineEdit>
+#include <QMenu>
#include <QSpinBox>
#include <QPlainTextEdit>
#include <QTreeWidget>
#include <QAction>
#include <QClipboard>
+#include <QContextMenuEvent>
#include <QHBoxLayout>
#include <QGridLayout>
@@ -75,6 +77,94 @@
Q_DECLARE_METATYPE(QRegularExpression::MatchType)
+static QString patternToCode(QString pattern)
+{
+ pattern.replace(QLatin1String("\\"), QLatin1String("\\\\"));
+ pattern.replace(QLatin1String("\""), QLatin1String("\\\""));
+ pattern.prepend(QLatin1Char('"'));
+ pattern.append(QLatin1Char('"'));
+ return pattern;
+}
+
+static QString codeToPattern(QString code)
+{
+ for (int i = 0; i < code.size(); ++i) {
+ if (code.at(i) == QLatin1Char('\\'))
+ code.remove(i, 1);
+ }
+ if (code.startsWith(QLatin1Char('"')) && code.endsWith(QLatin1Char('"'))) {
+ code.chop(1);
+ code.remove(0, 1);
+ }
+ return code;
+}
+
+class PatternLineEdit : public QLineEdit
+{
+ Q_OBJECT
+public:
+ explicit PatternLineEdit(QWidget *parent = nullptr);
+
+private slots:
+ void copyToCode();
+ void pasteFromCode();
+ void escapeSelection();
+
+protected:
+ void contextMenuEvent(QContextMenuEvent *event) override;
+
+private:
+ QAction *escapeSelectionAction;
+ QAction *copyToCodeAction;
+ QAction *pasteFromCodeAction;
+};
+
+PatternLineEdit::PatternLineEdit(QWidget *parent) :
+ QLineEdit(parent),
+ escapeSelectionAction(new QAction(tr("Escape Selection"), this)),
+ copyToCodeAction(new QAction(tr("Copy to Code"), this)),
+ pasteFromCodeAction(new QAction(tr("Paste from Code"), this))
+{
+ setClearButtonEnabled(true);
+ connect(escapeSelectionAction, &QAction::triggered, this, &PatternLineEdit::escapeSelection);
+ connect(copyToCodeAction, &QAction::triggered, this, &PatternLineEdit::copyToCode);
+ connect(pasteFromCodeAction, &QAction::triggered, this, &PatternLineEdit::pasteFromCode);
+}
+
+void PatternLineEdit::escapeSelection()
+{
+ const QString selection = selectedText();
+ const QString escapedSelection = QRegularExpression::escape(selection);
+ if (escapedSelection != selection) {
+ QString t = text();
+ t.replace(selectionStart(), selection.size(), escapedSelection);
+ setText(t);
+ }
+}
+
+void PatternLineEdit::copyToCode()
+{
+ QGuiApplication::clipboard()->setText(patternToCode(text()));
+}
+
+void PatternLineEdit::pasteFromCode()
+{
+ setText(codeToPattern(QGuiApplication::clipboard()->text()));
+}
+
+void PatternLineEdit::contextMenuEvent(QContextMenuEvent *event)
+{
+ QMenu *menu = createStandardContextMenu();
+ menu->setAttribute(Qt::WA_DeleteOnClose);
+ menu->addSeparator();
+ escapeSelectionAction->setEnabled(hasSelectedText());
+ menu->addAction(escapeSelectionAction);
+ menu->addSeparator();
+ menu->addAction(copyToCodeAction);
+ menu->addAction(pasteFromCodeAction);
+ menu->popup(event->globalPos());
+}
+
RegularExpressionDialog::RegularExpressionDialog(QWidget *parent)
: QDialog(parent)
{
@@ -131,12 +221,7 @@ void RegularExpressionDialog::refresh()
offsetSpinBox->setMaximum(qMax(0, text.length() - 1));
- QString escaped = pattern;
- escaped.replace(QLatin1String("\\"), QLatin1String("\\\\"));
- escaped.replace(QLatin1String("\""), QLatin1String("\\\""));
- escaped.prepend(QLatin1Char('"'));
- escaped.append(QLatin1Char('"'));
- escapedPatternLineEdit->setText(escaped);
+ escapedPatternLineEdit->setText(patternToCode(pattern));
setTextColor(patternLineEdit, subjectTextEdit->palette().color(QPalette::Text));
matchDetailsTreeWidget->clear();
@@ -266,7 +351,7 @@ QWidget *RegularExpressionDialog::setupLeftUi()
QLabel *regexpAndSubjectLabel = new QLabel(tr("<h3>Regular expression and text input</h3>"));
layout->addRow(regexpAndSubjectLabel);
- patternLineEdit = new QLineEdit;
+ patternLineEdit = new PatternLineEdit;
patternLineEdit->setClearButtonEnabled(true);
layout->addRow(tr("&Pattern:"), patternLineEdit);
@@ -373,3 +458,5 @@ QWidget *RegularExpressionDialog::setupRightUi()
return container;
}
+
+#include "regularexpressiondialog.moc"