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 }