blob: 7ccbeb08c3895562f14aeb53797bde1dcda7eb5b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "filterwidget.h"
#include <QIcon>
#include <QPixmap>
#include <QMenu>
#include <QAction>
#include <QActionGroup>
#include <QToolButton>
#include <QWidgetAction>
FilterWidget::FilterWidget(QWidget *parent)
: QLineEdit(parent)
, m_patternGroup(new QActionGroup(this))
{
setClearButtonEnabled(true);
connect(this, &QLineEdit::textChanged, this, &FilterWidget::filterChanged);
QMenu *menu = new QMenu(this);
m_caseSensitivityAction = menu->addAction(tr("Case Sensitive"));
m_caseSensitivityAction->setCheckable(true);
connect(m_caseSensitivityAction, &QAction::toggled, this, &FilterWidget::filterChanged);
menu->addSeparator();
m_patternGroup->setExclusive(true);
QAction *patternAction = menu->addAction("Regular Expression");
patternAction->setCheckable(true);
patternAction->setChecked(true);
patternAction->setData(QVariant(int(RegularExpression)));
m_patternGroup->addAction(patternAction);
patternAction = menu->addAction("Wildcard");
patternAction->setCheckable(true);
patternAction->setData(QVariant(int(Wildcard)));
m_patternGroup->addAction(patternAction);
patternAction = menu->addAction("Fixed String");
patternAction->setData(QVariant(int(FixedString)));
patternAction->setCheckable(true);
m_patternGroup->addAction(patternAction);
connect(m_patternGroup, &QActionGroup::triggered, this, &FilterWidget::filterChanged);
const QIcon icon = QIcon(QPixmap(":/images/find.png"));
QToolButton *optionsButton = new QToolButton;
#ifndef QT_NO_CURSOR
optionsButton->setCursor(Qt::ArrowCursor);
#endif
optionsButton->setFocusPolicy(Qt::NoFocus);
optionsButton->setStyleSheet("* { border: none; }");
optionsButton->setIcon(icon);
optionsButton->setMenu(menu);
optionsButton->setPopupMode(QToolButton::InstantPopup);
QWidgetAction *optionsAction = new QWidgetAction(this);
optionsAction->setDefaultWidget(optionsButton);
addAction(optionsAction, QLineEdit::LeadingPosition);
}
Qt::CaseSensitivity FilterWidget::caseSensitivity() const
{
return m_caseSensitivityAction->isChecked() ? Qt::CaseSensitive : Qt::CaseInsensitive;
}
void FilterWidget::setCaseSensitivity(Qt::CaseSensitivity cs)
{
m_caseSensitivityAction->setChecked(cs == Qt::CaseSensitive);
}
static inline FilterWidget::PatternSyntax patternSyntaxFromAction(const QAction *a)
{
return static_cast<FilterWidget::PatternSyntax>(a->data().toInt());
}
FilterWidget::PatternSyntax FilterWidget::patternSyntax() const
{
return patternSyntaxFromAction(m_patternGroup->checkedAction());
}
void FilterWidget::setPatternSyntax(PatternSyntax s)
{
const QList<QAction*> actions = m_patternGroup->actions();
for (QAction *a : actions) {
if (patternSyntaxFromAction(a) == s) {
a->setChecked(true);
break;
}
}
}
|