File indexing completed on 2024-04-28 15:51:57

0001 /*
0002     SPDX-FileCopyrightText: 2004 Enrico Ros <eros.kde@email.it>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "searchwidget.h"
0008 
0009 // qt/kde includes
0010 #include <KLocalizedString>
0011 #include <QAction>
0012 #include <QActionGroup>
0013 #include <QIcon>
0014 #include <QLayout>
0015 #include <QMenu>
0016 #include <QSizePolicy>
0017 #include <QToolButton>
0018 
0019 // local includes
0020 #include "searchlineedit.h"
0021 
0022 SearchWidget::SearchWidget(QWidget *parent, Okular::Document *document)
0023     : QWidget(parent)
0024 {
0025     setObjectName(QStringLiteral("iSearchBar"));
0026 
0027     QSizePolicy sp = sizePolicy();
0028     sp.setVerticalPolicy(QSizePolicy::Minimum);
0029     setSizePolicy(sp);
0030 
0031     QHBoxLayout *mainlay = new QHBoxLayout(this);
0032     mainlay->setContentsMargins(0, 0, 0, 0);
0033     mainlay->setSpacing(3);
0034 
0035     // 2. text line
0036     m_lineEdit = new SearchLineEdit(this, document);
0037     m_lineEdit->setClearButtonEnabled(true);
0038     m_lineEdit->setPlaceholderText(i18n("Search..."));
0039     m_lineEdit->setToolTip(i18n("Enter at least 3 letters to filter pages"));
0040     m_lineEdit->setSearchCaseSensitivity(Qt::CaseInsensitive);
0041     m_lineEdit->setSearchMinimumLength(3);
0042     m_lineEdit->setSearchType(Okular::Document::GoogleAll);
0043     m_lineEdit->setSearchId(SW_SEARCH_ID);
0044     m_lineEdit->setSearchColor(qRgb(0, 183, 255));
0045     mainlay->addWidget(m_lineEdit);
0046 
0047     // 3.1. create the popup menu for changing filtering features
0048     m_menu = new QMenu(this);
0049     m_caseSensitiveAction = m_menu->addAction(i18n("Case Sensitive"));
0050     m_menu->addSeparator();
0051     m_matchPhraseAction = m_menu->addAction(i18n("Match Phrase"));
0052     m_marchAllWordsAction = m_menu->addAction(i18n("Match All Words"));
0053     m_marchAnyWordsAction = m_menu->addAction(i18n("Match Any Word"));
0054 
0055     m_caseSensitiveAction->setCheckable(true);
0056     QActionGroup *actgrp = new QActionGroup(this);
0057     m_matchPhraseAction->setCheckable(true);
0058     m_matchPhraseAction->setActionGroup(actgrp);
0059     m_marchAllWordsAction->setCheckable(true);
0060     m_marchAllWordsAction->setActionGroup(actgrp);
0061     m_marchAnyWordsAction->setCheckable(true);
0062     m_marchAnyWordsAction->setActionGroup(actgrp);
0063 
0064     m_marchAllWordsAction->setChecked(true);
0065     connect(m_menu, &QMenu::triggered, this, &SearchWidget::slotMenuChaged);
0066 
0067     // 3.2. create the toolbar button that spawns the popup menu
0068     QToolButton *optionsMenuAction = new QToolButton(this);
0069     mainlay->addWidget(optionsMenuAction);
0070     optionsMenuAction->setAutoRaise(true);
0071     optionsMenuAction->setIcon(QIcon::fromTheme(QStringLiteral("view-filter")));
0072     optionsMenuAction->setToolTip(i18n("Filter Options"));
0073     optionsMenuAction->setPopupMode(QToolButton::InstantPopup);
0074     optionsMenuAction->setMenu(m_menu);
0075 }
0076 
0077 void SearchWidget::clearText()
0078 {
0079     m_lineEdit->clear();
0080 }
0081 
0082 void SearchWidget::slotMenuChaged(QAction *act)
0083 {
0084     // update internal variables and checked state
0085     if (act == m_caseSensitiveAction) {
0086         m_lineEdit->setSearchCaseSensitivity(m_caseSensitiveAction->isChecked() ? Qt::CaseSensitive : Qt::CaseInsensitive);
0087     } else if (act == m_matchPhraseAction) {
0088         m_lineEdit->setSearchType(Okular::Document::AllDocument);
0089     } else if (act == m_marchAllWordsAction) {
0090         m_lineEdit->setSearchType(Okular::Document::GoogleAll);
0091     } else if (act == m_marchAnyWordsAction) {
0092         m_lineEdit->setSearchType(Okular::Document::GoogleAny);
0093     } else {
0094         return;
0095     }
0096 
0097     // update search
0098     m_lineEdit->restartSearch();
0099 }
0100 
0101 #include "moc_searchwidget.cpp"