1 // SPDX-FileCopyrightText: 2006-2007 Torsten Rahn <tackat@kde.org>
2 // SPDX-FileCopyrightText: 2007 Inge Wallin <ingwa@kde.org>
3 // SPDX-FileCopyrightText: 2008 Simon Hausmann <hausmann@kde.org>
4 //
5 // SPDX-License-Identifier: LGPL-2.1-or-later
6 
7 // Self
8 #include "TinyWebBrowser.h"
9 
10 // Qt
11 #include <QPointer>
12 #include <QAction>
13 #include <QDesktopServices>
14 #include <QPainter>
15 #include <QPrintDialog>
16 #include <QPrinter>
17 
18 // Marble
19 #include "MarbleGlobal.h"
20 #include "MarbleDebug.h"
21 #include "MarbleDirs.h"
22 #include "MarbleLocale.h"
23 #include "MarbleWebView.h"
24 
25 namespace Marble
26 {
27 
28 class TinyWebBrowserPrivate
29 {
30 };
31 
guessWikipediaDomain()32 static QString guessWikipediaDomain()
33 {
34     const QString code = MarbleLocale::languageCode();
35 
36     return QLatin1String("https://") + code + QLatin1String(".m.wikipedia.org/");
37 }
38 
TinyWebBrowser(QWidget * parent)39 TinyWebBrowser::TinyWebBrowser( QWidget* parent )
40     : QWebEngineView( parent ),
41       d( nullptr )
42 {
43     MarbleWebPage * page = new MarbleWebPage();
44     setPage(page);
45 
46     connect( this, SIGNAL(statusBarMessage(QString)),
47              this, SIGNAL(statusMessage(QString)) );
48 
49     connect( page, SIGNAL(linkClicked(QUrl)),
50              this, SLOT(openExternalLink(QUrl)) );
51     connect( this, SIGNAL(titleChanged(QString)),
52              this, SLOT(setWindowTitle(QString)) );
53 
54     pageAction( QWebEnginePage::OpenLinkInNewWindow )->setEnabled( false );
55     pageAction( QWebEnginePage::OpenLinkInNewWindow )->setVisible( false );
56 }
57 
~TinyWebBrowser()58 TinyWebBrowser::~TinyWebBrowser()
59 {
60     // not yet needed
61     //delete d;
62 }
63 
setWikipediaPath(const QString & relativeUrl)64 void TinyWebBrowser::setWikipediaPath( const QString& relativeUrl )
65 {
66     QUrl url(relativeUrl);
67     if ( url.isRelative() )
68         url = QUrl( guessWikipediaDomain() ).resolved( url );
69     load( url );
70 }
71 
print()72 void TinyWebBrowser::print()
73 {
74 #ifndef QT_NO_PRINTER
75     QPrinter printer;
76 
77     QPointer<QPrintDialog> dlg = new QPrintDialog( &printer, this );
78     if ( dlg->exec() )
79         page()->print( &printer,  [=](bool){} );
80     delete dlg;
81 #endif
82 }
83 
createWindow(QWebEnginePage::WebWindowType type)84 QWebEngineView *TinyWebBrowser::createWindow( QWebEnginePage::WebWindowType type )
85 {
86     Q_UNUSED(type)
87     TinyWebBrowser *view = new TinyWebBrowser( this );
88     return view;
89 }
90 
openExternalLink(const QUrl & url)91 void TinyWebBrowser::openExternalLink( const QUrl& url )
92 {
93     QDesktopServices::openUrl( url );
94 }
95 
96 
97 } // namespace Marble
98 
99 #include "moc_TinyWebBrowser.cpp"
100