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
89
90
91
|
#include "searchwidget.h"
#include <QDebug>
#include <QKeyEvent>
#include <QKeySequence>
SearchWidget::SearchWidget(QWidget *parent)
: QWidget(parent)
{
m_ui.setupUi(this);
m_ui.notFoundLabel->hide();
m_origPalette = m_ui.lineEdit->palette();
connect(m_ui.nextButton, SIGNAL(clicked()),
SLOT(slotSearchNext()));
connect(m_ui.prevButton, SIGNAL(clicked()),
SLOT(slotSearchPrev()));
connect(m_ui.closeButton, SIGNAL(clicked()),
SLOT(slotCancel()));
connect(m_ui.lineEdit, SIGNAL(returnPressed()),
SLOT(slotSearchNext()));
m_ui.nextButton->setShortcut(
QKeySequence::FindNext);
m_ui.prevButton->setShortcut(
QKeySequence::FindPrevious);
installEventFilter(this);
}
void SearchWidget::slotSearchNext()
{
QString txt = m_ui.lineEdit->text();
if (!txt.isEmpty())
emit searchNext(txt, caseSensitivity());
}
void SearchWidget::slotSearchPrev()
{
QString txt = m_ui.lineEdit->text();
if (!txt.isEmpty())
emit searchPrev(txt, caseSensitivity());
}
void SearchWidget::slotCancel()
{
hide();
}
void SearchWidget::showEvent(QShowEvent *event)
{
return QWidget::showEvent(event);
}
Qt::CaseSensitivity SearchWidget::caseSensitivity() const
{
if (m_ui.caseSensitiveBox->isChecked())
return Qt::CaseSensitive;
else
return Qt::CaseInsensitive;
}
bool SearchWidget::eventFilter(QObject *object, QEvent* event)
{
if (event->type() == QEvent::KeyPress) {
if ((static_cast<QKeyEvent*>(event))->key() == Qt::Key_Escape) {
hide();
}
}
return QWidget::eventFilter(object, event);
}
void SearchWidget::setFound(bool found)
{
QPalette pal = m_origPalette;
pal.setColor(QPalette::Active, QPalette::Base,
found ? Qt::white : QColor(255, 102, 102));
m_ui.lineEdit->setPalette(pal);
m_ui.notFoundLabel->setVisible(!found);
}
void SearchWidget::show()
{
QWidget::show();
m_ui.lineEdit->selectAll();
m_ui.lineEdit->setFocus(Qt::ShortcutFocusReason);
m_ui.lineEdit->setPalette(m_origPalette);
}
#include "searchwidget.moc"
|