File indexing completed on 2025-02-23 05:00:19

0001 /* SPDX-FileCopyrightText: 2016-2024 Laurent Montel <montel@kde.org>
0002  *
0003  * SPDX-License-Identifier: LGPL-2.0-or-later
0004  */
0005 
0006 #include "findbarwebengineview.h"
0007 #include <PimCommon/LineEditWithCompleterNg>
0008 #include <QAction>
0009 #include <QWebEngineFindTextResult>
0010 #include <QWebEngineView>
0011 using namespace WebEngineViewer;
0012 
0013 class WebEngineViewer::FindBarWebEngineViewPrivate
0014 {
0015 public:
0016     FindBarWebEngineViewPrivate(QWebEngineView *view)
0017         : mView(view)
0018     {
0019     }
0020 
0021     QWebEngineView *const mView;
0022 };
0023 
0024 FindBarWebEngineView::FindBarWebEngineView(QWebEngineView *view, QWidget *parent)
0025     : FindBarBase(parent)
0026     , d(new WebEngineViewer::FindBarWebEngineViewPrivate(view))
0027 {
0028 }
0029 
0030 FindBarWebEngineView::~FindBarWebEngineView() = default;
0031 
0032 void FindBarWebEngineView::searchText(bool backward, bool isAutoSearch)
0033 {
0034     QWebEnginePage::FindFlags searchOptions;
0035 
0036     if (backward) {
0037         searchOptions |= QWebEnginePage::FindBackward;
0038     }
0039     if (mCaseSensitiveAct->isChecked()) {
0040         searchOptions |= QWebEnginePage::FindCaseSensitively;
0041     }
0042     const QString searchWord(mSearch->text());
0043     if (!isAutoSearch && !mLastSearchStr.contains(searchWord, Qt::CaseSensitive)) {
0044         clearSelections();
0045     }
0046     d->mView->findText(QString()); // Clear an existing highlight
0047     mLastSearchStr = searchWord;
0048     d->mView->findText(mLastSearchStr, searchOptions, [this](const QWebEngineFindTextResult &result) {
0049         setFoundMatch(result.numberOfMatches() > 0);
0050     });
0051 }
0052 
0053 void FindBarWebEngineView::updateSensitivity(bool sensitivity)
0054 {
0055     QWebEnginePage::FindFlags searchOptions;
0056     if (sensitivity) {
0057         searchOptions |= QWebEnginePage::FindCaseSensitively;
0058         d->mView->findText(QString()); // Clear an existing highlight
0059     }
0060     d->mView->findText(QString(), searchOptions, [this](const QWebEngineFindTextResult &result) {
0061         setFoundMatch(result.numberOfMatches() > 0);
0062     });
0063 }
0064 
0065 void FindBarWebEngineView::clearSelections()
0066 {
0067     d->mView->findText(QString());
0068     mLastSearchStr.clear();
0069     FindBarBase::clearSelections();
0070 }
0071 
0072 #include "moc_findbarwebengineview.cpp"