File indexing completed on 2024-05-19 05:08:31

0001 /*
0002  *    SPDX-FileCopyrightText: 2023 Thomas Baumgart <tbaumgart@kde.org>
0003  *    SPDX-License-Identifier: GPL-2.0-or-later
0004  */
0005 
0006 #include "kmmsearchwidget.h"
0007 
0008 // ----------------------------------------------------------------------------
0009 // QT Includes
0010 
0011 #include <QEvent>
0012 #include <QKeyEvent>
0013 
0014 // ----------------------------------------------------------------------------
0015 // KDE Includes
0016 
0017 // ----------------------------------------------------------------------------
0018 // Project Includes
0019 
0020 #include "icons.h"
0021 
0022 #include "ui_kmmsearchwidget.h"
0023 
0024 using namespace Icons;
0025 
0026 class KMMSearchWidgetPrivate
0027 {
0028     Q_DISABLE_COPY_MOVE(KMMSearchWidgetPrivate)
0029 
0030 public:
0031     explicit KMMSearchWidgetPrivate(KMMSearchWidget* qq)
0032         : q_ptr(qq)
0033         , ui(new Ui_KMMSearchWidget)
0034     {
0035         ui->setupUi(qq);
0036         ui->m_closeButton->setIcon(Icons::get(Icon::DialogClose));
0037     }
0038     virtual ~KMMSearchWidgetPrivate() = default;
0039 
0040     KMMSearchWidget* q_ptr;
0041     Ui_KMMSearchWidget* ui;
0042 };
0043 
0044 KMMSearchWidget::KMMSearchWidget(QWidget* parent)
0045     : QWidget(parent)
0046     , d_ptr(new KMMSearchWidgetPrivate(this))
0047 {
0048     hide();
0049     lineEdit()->installEventFilter(this);
0050     connect(closeButton(), &QToolButton::clicked, this, [&] {
0051         close();
0052     });
0053 }
0054 
0055 QToolButton* KMMSearchWidget::closeButton() const
0056 {
0057     Q_D(const KMMSearchWidget);
0058     return d->ui->m_closeButton;
0059 }
0060 
0061 QLineEdit* KMMSearchWidget::lineEdit() const
0062 {
0063     Q_D(const KMMSearchWidget);
0064     return d->ui->m_searchWidget;
0065 }
0066 
0067 QComboBox* KMMSearchWidget::comboBox() const
0068 {
0069     Q_D(const KMMSearchWidget);
0070     return d->ui->m_filterBox;
0071 }
0072 
0073 void KMMSearchWidget::showEvent(QShowEvent* event)
0074 {
0075     QWidget::showEvent(event);
0076     lineEdit()->setFocus();
0077 }
0078 
0079 void KMMSearchWidget::close()
0080 {
0081     lineEdit()->clear();
0082     hide();
0083     Q_EMIT closed();
0084 }
0085 
0086 bool KMMSearchWidget::eventFilter(QObject* watched, QEvent* event)
0087 {
0088     if (watched == lineEdit()) {
0089         if (event->type() == QEvent::KeyPress) {
0090             const auto kev = static_cast<QKeyEvent*>(event);
0091             if (kev->modifiers() == Qt::NoModifier && kev->key() == Qt::Key_Escape) {
0092                 close();
0093                 return true;
0094             }
0095         }
0096     }
0097     return QWidget::eventFilter(watched, event);
0098 }