Add code for expand url
[kdepim.git] / akregator / src / frame / webengine / webengineframe.cpp
blob99d7b4a68375137a4c097d25d71ced43c421ecbe
1 /*
2 Copyright (c) 2016 Montel Laurent <montel@kde.org>
4 This program is free software; you can redistribute it and/or modify it
5 under the terms of the GNU General Public License, version 2, as
6 published by the Free Software Foundation.
8 This program is distributed in the hope that it will be useful, but
9 WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 General Public License for more details.
13 You should have received a copy of the GNU General Public License along
14 with this program; if not, write to the Free Software Foundation, Inc.,
15 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 #include "openurlrequest.h"
19 #include "webengineframe.h"
20 #include "webengineviewer.h"
21 #include <QVBoxLayout>
22 #include <QAction>
23 #include <KIO/FavIconRequestJob>
24 #include <articleviewer-ng/webengine/articleviewerwebenginewidgetng.h>
25 using namespace Akregator;
27 WebEngineFrame::WebEngineFrame(KActionCollection *ac, QWidget *parent)
28 : Frame(parent)
30 QVBoxLayout *layout = new QVBoxLayout(this);
31 layout->setMargin(0);
32 setRemovable(true);
33 Akregator::WebEngineViewer *viewer = new Akregator::WebEngineViewer(ac, this);
34 mArticleViewerWidgetNg = new Akregator::ArticleViewerWebEngineWidgetNg(viewer, ac, this);
36 connect(mArticleViewerWidgetNg->articleViewerNg(), &ArticleViewerWebEngine::titleChanged, this, &WebEngineFrame::slotTitleChanged);
37 connect(mArticleViewerWidgetNg->articleViewerNg(), &ArticleViewerWebEngine::loadProgress, this, &WebEngineFrame::slotProgressChanged);
38 connect(mArticleViewerWidgetNg->articleViewerNg(), &ArticleViewerWebEngine::signalOpenUrlRequest, this, &WebEngineFrame::signalOpenUrlRequest);
39 connect(mArticleViewerWidgetNg->articleViewerNg(), &ArticleViewerWebEngine::loadStarted, this, &WebEngineFrame::slotLoadStarted);
40 connect(mArticleViewerWidgetNg->articleViewerNg(), &ArticleViewerWebEngine::loadFinished, this, &WebEngineFrame::slotLoadFinished);
41 connect(mArticleViewerWidgetNg->articleViewerNg(), &ArticleViewerWebEngine::showStatusBarMessage, this, &WebEngineFrame::showStatusBarMessage);
42 layout->addWidget(mArticleViewerWidgetNg);
45 WebEngineFrame::~WebEngineFrame()
49 void WebEngineFrame::slotLoadFinished()
51 Q_EMIT signalCompleted(this);
54 void WebEngineFrame::slotLoadStarted()
56 Q_EMIT signalStarted(this);
59 void WebEngineFrame::slotProgressChanged(int progress)
61 Q_EMIT signalLoadingProgress(this, progress);
64 void WebEngineFrame::slotTitleChanged(const QString &title)
66 Q_EMIT signalTitleChanged(this, title);
69 KParts::ReadOnlyPart *WebEngineFrame::part() const
71 return Q_NULLPTR;
74 QUrl WebEngineFrame::url() const
76 return mArticleViewerWidgetNg->articleViewerNg()->url();
79 bool WebEngineFrame::openUrl(const OpenUrlRequest &request)
81 const QUrl url = request.url();
82 KIO::FavIconRequestJob *job = new KIO::FavIconRequestJob(url);
83 connect(job, &KIO::FavIconRequestJob::result, this, [job, this](KJob *) {
84 if (!job->error()) {
85 Q_EMIT signalIconChanged(this, QIcon(job->iconFile()));
87 });
89 mArticleViewerWidgetNg->articleViewerNg()->load(url);
90 return true;
93 void WebEngineFrame::loadConfig(const KConfigGroup &config, const QString &prefix)
95 const QString url = config.readEntry(QStringLiteral("url").prepend(prefix), QString());
96 const qreal zf = config.readEntry(QStringLiteral("zoom").prepend(prefix), 1.0);
97 const bool onlyZoomFont = config.readEntry(QStringLiteral("onlyZoomFont").prepend(prefix), false);
98 OpenUrlRequest req(url);
99 KParts::OpenUrlArguments args;
100 req.setArgs(args);
101 openUrl(req);
102 mArticleViewerWidgetNg->articleViewerNg()->setZoomFactor(zf);
103 //FIXME mArticleViewerWidgetNg->articleViewerNg()->settings()->setAttribute(QWebEngineSettings::ZoomTextOnly, onlyZoomFont);
106 void WebEngineFrame::saveConfig(KConfigGroup &config, const QString &prefix)
108 config.writeEntry(QStringLiteral("url").prepend(prefix), url().url());
109 config.writeEntry(QStringLiteral("zoom").prepend(prefix), mArticleViewerWidgetNg->articleViewerNg()->zoomFactor());
110 //FIXME config.writeEntry(QStringLiteral("onlyZoomFont").prepend(prefix), mArticleViewerWidgetNg->articleViewerNg()->settings()->testAttribute(QWebSettings::ZoomTextOnly));
113 void WebEngineFrame::slotCopyInFrame(int frameId)
115 if (frameId != id()) {
116 return;
118 mArticleViewerWidgetNg->articleViewerNg()->slotCopy();
121 void WebEngineFrame::slotPrintInFrame(int frameId)
123 if (frameId != id()) {
124 return;
126 mArticleViewerWidgetNg->articleViewerNg()->slotPrint();
129 void WebEngineFrame::slotPrintPreviewInFrame(int frameId)
131 if (frameId != id()) {
132 return;
134 mArticleViewerWidgetNg->articleViewerNg()->slotPrintPreview();
137 void WebEngineFrame::slotFindTextInFrame(int frameId)
139 if (frameId != id()) {
140 return;
142 mArticleViewerWidgetNg->slotFind();
145 void WebEngineFrame::slotTextToSpeechInFrame(int frameId)
147 if (frameId != id()) {
148 return;
150 mArticleViewerWidgetNg->slotSpeakText();
153 void WebEngineFrame::slotZoomChangeInFrame(int frameId, qreal value)
155 if (frameId != id()) {
156 return;
158 mArticleViewerWidgetNg->articleViewerNg()->setZoomFactor(value);
161 void WebEngineFrame::slotZoomTextOnlyInFrame(int frameId, bool textOnlyInFrame)
163 if (frameId != id()) {
164 return;
166 mArticleViewerWidgetNg->articleViewerNg()->slotZoomTextOnlyInFrame(textOnlyInFrame);
169 void WebEngineFrame::slotHistoryForward()
171 mArticleViewerWidgetNg->articleViewerNg()->pageAction(QWebEnginePage::Forward)->trigger();
174 void WebEngineFrame::slotHistoryBack()
176 mArticleViewerWidgetNg->articleViewerNg()->pageAction(QWebEnginePage::Back)->trigger();
179 void WebEngineFrame::slotReload()
181 mArticleViewerWidgetNg->articleViewerNg()->reload();
184 void WebEngineFrame::slotStop()
186 mArticleViewerWidgetNg->articleViewerNg()->stop();
189 qreal WebEngineFrame::zoomFactor() const
191 return mArticleViewerWidgetNg->articleViewerNg()->zoomFactor();
194 bool WebEngineFrame::zoomTextOnlyInFrame() const
196 return mArticleViewerWidgetNg->articleViewerNg()->zoomTextOnlyInFrame();
199 void WebEngineFrame::slotSaveLinkAsInFrame(int frameId)
201 if (frameId != id()) {
202 return;
204 mArticleViewerWidgetNg->articleViewerNg()->slotSaveLinkAs();
207 void WebEngineFrame::slotCopyLinkAsInFrame(int frameId)
209 if (frameId != id()) {
210 return;
212 mArticleViewerWidgetNg->articleViewerNg()->slotCopyLinkAddress();
215 void WebEngineFrame::slotSaveImageOnDiskInFrame(int frameId)
217 if (frameId != id()) {
218 return;
220 mArticleViewerWidgetNg->articleViewerNg()->slotSaveImageOnDiskInFrame();
223 void WebEngineFrame::slotCopyImageLocationInFrame(int frameId)
225 if (frameId != id()) {
226 return;
228 mArticleViewerWidgetNg->articleViewerNg()->slotCopyImageLocationInFrame();
231 void WebEngineFrame::slotBlockImageInFrame(int frameId)
233 if (frameId != id()) {
234 return;
236 mArticleViewerWidgetNg->articleViewerNg()->slotBlockImage();
239 void WebEngineFrame::slotExpandUrlInFrame(int frameId)
241 if (frameId != id()) {
242 return;
244 mArticleViewerWidgetNg->articleViewerNg()->slotE();