File indexing completed on 2024-04-28 07:29:03
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"