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"