File indexing completed on 2024-05-19 08:24:53
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"