File: quicksearchbarwidget.cpp

package info (click to toggle)
ktextaddons 1.9.1-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 17,856 kB
  • sloc: cpp: 62,045; ansic: 6,520; xml: 2,630; sh: 11; makefile: 7
file content (99 lines) | stat: -rw-r--r-- 3,214 bytes parent folder | download
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
92
93
94
95
96
97
98
99
/*
  SPDX-FileCopyrightText: 2025-2026 Laurent Montel <montel@kde.org>

  SPDX-License-Identifier: GPL-2.0-or-later
*/

#include "quicksearchbarwidget.h"
#include "quicksearchbar.h"
#include <QKeyEvent>
#include <QVBoxLayout>
#include <TextAddonsWidgets/SlideContainer>
using namespace Qt::Literals::StringLiterals;
using namespace TextAddonsWidgets;
QuickSearchBarWidget::QuickSearchBarWidget(QWidget *parent)
    : QWidget{parent}
    , mSliderContainer(new TextAddonsWidgets::SlideContainer(this))
    , mQuickSearchBar(new QuickSearchBar(this))
{
    auto mainLayout = new QVBoxLayout(this);
    mainLayout->setObjectName(u"mainLayout"_s);
    mainLayout->setContentsMargins(QMargins{});

    mSliderContainer->setObjectName(u"mSliderContainer"_s);
    mainLayout->addWidget(mSliderContainer);

    mQuickSearchBar->setObjectName(u"mQuickSearchBar"_s);
    mainLayout->addWidget(mQuickSearchBar);

    mSliderContainer->setContent(mQuickSearchBar);

    connect(mQuickSearchBar, &QuickSearchBar::searchTextRequested, this, &QuickSearchBarWidget::searchTextRequested);
    connect(mQuickSearchBar, &QuickSearchBar::findNext, this, &QuickSearchBarWidget::findNext);
    connect(mQuickSearchBar, &QuickSearchBar::findPrev, this, &QuickSearchBarWidget::findPrev);
}

QuickSearchBarWidget::~QuickSearchBarWidget() = default;

void QuickSearchBarWidget::slideIn()
{
    mSliderContainer->slideIn();
    mQuickSearchBar->forceFocus();
}

void QuickSearchBarWidget::slideOut()
{
    mQuickSearchBar->setTearchText({});
    mSliderContainer->slideOut();
}

void QuickSearchBarWidget::updateButtons(bool next, bool previous)
{
    mQuickSearchBar->updateButtons(next, previous);
}

void QuickSearchBarWidget::closeBar()
{
    // Make sure that all old searches are cleared
    mQuickSearchBar->setTearchText({});
    slideOut();
    Q_EMIT closeSearchBarRequested();
}

bool QuickSearchBarWidget::event(QEvent *e)
{
    // Close the bar when pressing Escape.
    // Not using a QShortcut for this because it could conflict with
    // window-global actions (e.g. Emil Sedgh binds Esc to "close tab").
    // With a shortcut override we can catch this before it gets to kactions.
    const bool shortCutOverride = (e->type() == QEvent::ShortcutOverride);
    if (shortCutOverride || e->type() == QEvent::KeyPress) {
        auto kev = static_cast<QKeyEvent *>(e);
        if (kev->key() == Qt::Key_Escape) {
            if (shortCutOverride) {
                e->accept();
                return true;
            }
            e->accept();
            closeBar();
            return true;
        } else if (kev->key() == Qt::Key_Enter || kev->key() == Qt::Key_Return) {
            e->accept();
            if (shortCutOverride) {
                return true;
            }
            if (mQuickSearchBar->searchText().isEmpty()) {
                return true;
            }
            if (kev->modifiers() & Qt::ShiftModifier) {
                mQuickSearchBar->slotFindPrev();
            } else if (kev->modifiers() == Qt::NoModifier) {
                mQuickSearchBar->slotFindNext();
            }
            return true;
        }
    }
    return QWidget::event(e);
}

#include "moc_quicksearchbarwidget.cpp"