summaryrefslogtreecommitdiff
path: root/gui/searchwidget.cpp
blob: 2ec746e5b08a52ce112b3ded396b2414275be4e9 (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
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"