]> git.cworth.org Git - apitrace/blob - gui/searchwidget.cpp
Highly optimize searching and fix a crash.
[apitrace] / gui / searchwidget.cpp
1 #include "searchwidget.h"
2
3 #include <QDebug>
4 #include <QKeyEvent>
5
6 SearchWidget::SearchWidget(QWidget *parent)
7     : QWidget(parent)
8 {
9     m_ui.setupUi(this);
10
11     m_ui.notFoundLabel->hide();
12     m_origPalette = m_ui.lineEdit->palette();
13
14     connect(m_ui.nextButton, SIGNAL(clicked()),
15             SLOT(slotSearchNext()));
16     connect(m_ui.prevButton, SIGNAL(clicked()),
17             SLOT(slotSearchPrev()));
18     connect(m_ui.closeButton, SIGNAL(clicked()),
19             SLOT(slotCancel()));
20     connect(m_ui.lineEdit, SIGNAL(returnPressed()),
21             SLOT(slotSearchNext()));
22
23     installEventFilter(this);
24 }
25
26 void SearchWidget::slotSearchNext()
27 {
28     QString txt = m_ui.lineEdit->text();
29     if (!txt.isEmpty())
30         emit searchNext(txt, caseSensitivity());
31 }
32
33 void SearchWidget::slotSearchPrev()
34 {
35     QString txt = m_ui.lineEdit->text();
36     if (!txt.isEmpty())
37         emit searchPrev(txt, caseSensitivity());
38 }
39
40 void SearchWidget::slotCancel()
41 {
42     hide();
43 }
44
45 void SearchWidget::showEvent(QShowEvent *event)
46 {
47     return QWidget::showEvent(event);
48 }
49
50 Qt::CaseSensitivity SearchWidget::caseSensitivity() const
51 {
52     if (m_ui.caseSensitiveBox->isChecked())
53         return Qt::CaseSensitive;
54     else
55         return Qt::CaseInsensitive;
56 }
57
58 bool SearchWidget::eventFilter(QObject *object, QEvent* event)
59 {
60     if (event->type() == QEvent::KeyPress) {
61         if ((static_cast<QKeyEvent*>(event))->key() == Qt::Key_Escape) {
62             hide();
63         }
64     }
65     return QWidget::eventFilter(object, event);
66 }
67
68 void SearchWidget::setFound(bool found)
69 {
70     QPalette pal = m_origPalette;
71     pal.setColor(QPalette::Active, QPalette::Base,
72                  found ? Qt::white : QColor(255, 102, 102));
73     m_ui.lineEdit->setPalette(pal);
74     m_ui.notFoundLabel->setVisible(!found);
75 }
76
77 void SearchWidget::show()
78 {
79     QWidget::show();
80     m_ui.lineEdit->selectAll();
81     m_ui.lineEdit->setFocus(Qt::ShortcutFocusReason);
82     m_ui.lineEdit->setPalette(m_origPalette);
83 }
84
85 #include "searchwidget.moc"