File indexing completed on 2025-02-16 04:56:04

0001 /*
0002    SPDX-FileCopyrightText: 2013-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 #include "sieveeditorhelphtmlwidget.h"
0007 #include "sieveeditorloadprogressindicator.h"
0008 
0009 #include "sieveeditorwebengineview.h"
0010 
0011 #include <QVBoxLayout>
0012 
0013 #include <TextAddonsWidgets/SlideContainer>
0014 
0015 #include "findbar/findbarwebengineview.h"
0016 
0017 using namespace KSieveUi;
0018 namespace
0019 {
0020 qreal zoomBy()
0021 {
0022     return 20;
0023 }
0024 }
0025 SieveEditorHelpHtmlWidget::SieveEditorHelpHtmlWidget(QWidget *parent)
0026     : QWidget(parent)
0027 {
0028     auto lay = new QVBoxLayout(this);
0029     lay->setContentsMargins({});
0030     mProgressIndicator = new SieveEditorLoadProgressIndicator(this);
0031     mProgressIndicator->setObjectName(QLatin1StringView("progressindicator"));
0032     connect(mProgressIndicator, &SieveEditorLoadProgressIndicator::pixmapChanged, this, &SieveEditorHelpHtmlWidget::slotPixmapChanged);
0033     connect(mProgressIndicator, &SieveEditorLoadProgressIndicator::loadFinished, this, &SieveEditorHelpHtmlWidget::slotLoadFinished);
0034 
0035     mWebView = new SieveEditorWebEngineView(this);
0036     mWebView->setObjectName(QLatin1StringView("webview"));
0037     connect(mWebView, &SieveEditorWebEngineView::titleChanged, this, &SieveEditorHelpHtmlWidget::slotTitleChanged);
0038     connect(mWebView, &SieveEditorWebEngineView::loadStarted, this, &SieveEditorHelpHtmlWidget::slotLoadStarted);
0039     connect(mWebView, &SieveEditorWebEngineView::loadFinished, this, &SieveEditorHelpHtmlWidget::slotFinished);
0040     connect(mWebView, &SieveEditorWebEngineView::selectionChanged, this, &SieveEditorHelpHtmlWidget::slotSelectionChanged);
0041     lay->addWidget(mWebView);
0042 
0043     mSliderContainer = new TextAddonsWidgets::SlideContainer(this);
0044     mSliderContainer->setObjectName(QLatin1StringView("slidercontainer"));
0045     lay->addWidget(mSliderContainer);
0046     mFindBar = new KSieveUi::FindBarWebEngineView(mWebView, this);
0047     mFindBar->setObjectName(QLatin1StringView("findbar"));
0048     connect(mFindBar, &KSieveUi::FindBarWebEngineView::hideFindBar, mSliderContainer, &TextAddonsWidgets::SlideContainer::slideOut);
0049     mSliderContainer->setContent(mFindBar);
0050 }
0051 
0052 SieveEditorHelpHtmlWidget::~SieveEditorHelpHtmlWidget() = default;
0053 
0054 QString SieveEditorHelpHtmlWidget::title() const
0055 {
0056     return mTitle;
0057 }
0058 
0059 void SieveEditorHelpHtmlWidget::slotLoadFinished(bool success)
0060 {
0061     Q_EMIT loadFinished(this, success);
0062 }
0063 
0064 QUrl SieveEditorHelpHtmlWidget::currentUrl() const
0065 {
0066     return mWebView->url();
0067 }
0068 
0069 void SieveEditorHelpHtmlWidget::slotPixmapChanged(const QPixmap &pixmap)
0070 {
0071     Q_EMIT progressIndicatorPixmapChanged(this, pixmap);
0072 }
0073 
0074 void SieveEditorHelpHtmlWidget::slotFinished(bool b)
0075 {
0076     mProgressIndicator->stopAnimation(b);
0077 }
0078 
0079 void SieveEditorHelpHtmlWidget::slotLoadStarted()
0080 {
0081     mProgressIndicator->startAnimation();
0082 }
0083 
0084 void SieveEditorHelpHtmlWidget::slotTitleChanged(const QString &title)
0085 {
0086     if (mTitle != title) {
0087         mTitle = title;
0088         Q_EMIT titleChanged(this, title);
0089     }
0090 }
0091 
0092 void SieveEditorHelpHtmlWidget::openUrl(const QUrl &url)
0093 {
0094     mWebView->setUrl(url);
0095 }
0096 
0097 void SieveEditorHelpHtmlWidget::zoomIn()
0098 {
0099     if (mZoomFactor >= 300) {
0100         return;
0101     }
0102     mZoomFactor += zoomBy();
0103     if (mZoomFactor > 300) {
0104         mZoomFactor = 300;
0105     }
0106     mWebView->setZoomFactor(mZoomFactor / 100.0);
0107 }
0108 
0109 void SieveEditorHelpHtmlWidget::copy()
0110 {
0111     mWebView->triggerPageAction(QWebEnginePage::Copy);
0112 }
0113 
0114 bool SieveEditorHelpHtmlWidget::hasSelection() const
0115 {
0116     return mWebView->hasSelection();
0117 }
0118 
0119 void SieveEditorHelpHtmlWidget::selectAll()
0120 {
0121     mWebView->triggerPageAction(QWebEnginePage::SelectAll);
0122 }
0123 
0124 void SieveEditorHelpHtmlWidget::zoomOut()
0125 {
0126     if (mZoomFactor <= 10) {
0127         return;
0128     }
0129     mZoomFactor -= zoomBy();
0130     if (mZoomFactor < 10) {
0131         mZoomFactor = 10;
0132     }
0133     mWebView->setZoomFactor(mZoomFactor / 100.0);
0134 }
0135 
0136 void SieveEditorHelpHtmlWidget::resetZoom()
0137 {
0138     mZoomFactor = 100;
0139     mWebView->setZoomFactor(1.0);
0140 }
0141 
0142 void SieveEditorHelpHtmlWidget::slotSelectionChanged()
0143 {
0144     Q_EMIT copyAvailable(mWebView->hasSelection());
0145 }
0146 
0147 void SieveEditorHelpHtmlWidget::find()
0148 {
0149     if (mWebView->hasSelection()) {
0150         mFindBar->setText(mWebView->selectedText());
0151     }
0152     mSliderContainer->slideIn();
0153     mFindBar->focusAndSetCursor();
0154 }
0155 
0156 #include "moc_sieveeditorhelphtmlwidget.cpp"