File indexing completed on 2024-04-21 03:41:45

0001 /*
0002     SPDX-FileCopyrightText: 2006 Pino Toscano <toscano.pino@tiscali.it>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "searchwidget.h"
0008 
0009 #include <QHBoxLayout>
0010 #include <QTimer>
0011 #include <QStyle>
0012 
0013 #include <KLineEdit>
0014 #include <KLocalizedString>
0015 
0016 #include "kalziumdataobject.h"
0017 #include "search.h"
0018 
0019 SearchWidget::SearchWidget(QWidget *parent)
0020     : QWidget(parent)
0021     , m_searchLine(new KLineEdit(this))
0022 {
0023     auto mainlay = new QVBoxLayout(this);
0024     mainlay->setContentsMargins({});
0025     mainlay->setSpacing(0);
0026 
0027     auto wrapper = new QVBoxLayout;
0028     wrapper->setContentsMargins(
0029         style()->pixelMetric(QStyle::PM_LayoutLeftMargin),
0030         style()->pixelMetric(QStyle::PM_LayoutTopMargin),
0031         style()->pixelMetric(QStyle::PM_LayoutRightMargin),
0032         style()->pixelMetric(QStyle::PM_LayoutBottomMargin)
0033     );
0034     wrapper->addWidget(m_searchLine);
0035 
0036     m_searchLine->setClearButtonEnabled(true);
0037     m_searchLine->setPlaceholderText(i18n("Search..."));
0038     m_searchLine->setTrapReturnKey(true);
0039     connect(m_searchLine, &QLineEdit::textChanged, this, &SearchWidget::searchTextChanged);
0040     connect(m_searchLine, SIGNAL(returnPressed()), this, SLOT(slotReturnPressed()));
0041 
0042     auto separator = new QFrame(this);
0043     separator->setFrameShape(QFrame::HLine);
0044     separator->setMaximumHeight(1);
0045 
0046     mainlay->addLayout(wrapper);
0047     mainlay->addWidget(separator);
0048 }
0049 
0050 SearchWidget::~SearchWidget()
0051 {
0052     delete m_searchLine;
0053     delete m_timer;
0054 }
0055 
0056 void SearchWidget::giveFocus()
0057 {
0058     m_searchLine->setFocus(Qt::MouseFocusReason);
0059     m_searchLine->setCursorPosition(m_searchLine->text().length());
0060 }
0061 
0062 void SearchWidget::searchTextChanged(const QString &)
0063 {
0064     if (m_timer) {
0065         m_timer->stop();
0066     } else {
0067         m_timer = new QTimer(this);
0068         m_timer->setSingleShot(true);
0069         connect(m_timer, &QTimer::timeout, this, &SearchWidget::doSearch);
0070     }
0071     // 1/3 of second should be ok
0072     m_timer->start(333);
0073 }
0074 
0075 void SearchWidget::slotReturnPressed()
0076 {
0077     if (m_timer) {
0078         m_timer->stop();
0079     }
0080     doSearch();
0081 }
0082 
0083 void SearchWidget::doSearch()
0084 {
0085     Search *s = KalziumDataObject::instance()->search();
0086     if (!s) {
0087         return;
0088     }
0089 
0090     const QString txt = m_searchLine->text();
0091     if (!txt.isEmpty()) {
0092         s->doSearch(txt, Search::SearchAll);
0093     } else {
0094         s->resetSearch();
0095     }
0096 }
0097 
0098 #include "moc_searchwidget.cpp"