File indexing completed on 2024-04-14 03:48:09

0001 // SPDX-FileCopyrightText: 2006-2007 Torsten Rahn <tackat@kde.org>
0002 // SPDX-FileCopyrightText: 2007 Inge Wallin <ingwa@kde.org>
0003 // SPDX-FileCopyrightText: 2008 Simon Hausmann <hausmann@kde.org>
0004 //
0005 // SPDX-License-Identifier: LGPL-2.1-or-later
0006 
0007 // Self
0008 #include "TinyWebBrowser.h"
0009 
0010 // Qt
0011 #include <QPointer>
0012 #include <QAction>
0013 #include <QDesktopServices>
0014 #include <QPainter>
0015 #include <QPrintDialog>
0016 #include <QPrinter>
0017 
0018 // Marble
0019 #include "MarbleGlobal.h"
0020 #include "MarbleDebug.h"
0021 #include "MarbleDirs.h"
0022 #include "MarbleLocale.h"
0023 #include "MarbleWebView.h"
0024 
0025 namespace Marble
0026 {
0027 
0028 class TinyWebBrowserPrivate
0029 {
0030 };
0031 
0032 static QString guessWikipediaDomain()
0033 {
0034     const QString code = MarbleLocale::languageCode();
0035 
0036     return QLatin1String("https://") + code + QLatin1String(".m.wikipedia.org/");
0037 }
0038 
0039 TinyWebBrowser::TinyWebBrowser( QWidget* parent )
0040     : QWebEngineView( parent ),
0041       d( nullptr )
0042 {
0043     MarbleWebPage * page = new MarbleWebPage();
0044     setPage(page);
0045 
0046     connect( this, SIGNAL(statusBarMessage(QString)),
0047              this, SIGNAL(statusMessage(QString)) );
0048 
0049     connect( page, SIGNAL(linkClicked(QUrl)),
0050              this, SLOT(openExternalLink(QUrl)) );
0051     connect( this, SIGNAL(titleChanged(QString)),
0052              this, SLOT(setWindowTitle(QString)) );
0053 
0054     pageAction( QWebEnginePage::OpenLinkInNewWindow )->setEnabled( false );
0055     pageAction( QWebEnginePage::OpenLinkInNewWindow )->setVisible( false );
0056 }
0057 
0058 TinyWebBrowser::~TinyWebBrowser()
0059 {
0060     // not yet needed
0061     //delete d;
0062 }
0063 
0064 void TinyWebBrowser::setWikipediaPath( const QString& relativeUrl )
0065 {
0066     QUrl url(relativeUrl);
0067     if ( url.isRelative() )
0068         url = QUrl( guessWikipediaDomain() ).resolved( url );
0069     load( url );
0070 }
0071 
0072 void TinyWebBrowser::print()
0073 {
0074 #ifndef QT_NO_PRINTER   
0075     QPrinter printer;
0076 
0077     QPointer<QPrintDialog> dlg = new QPrintDialog( &printer, this );
0078     if ( dlg->exec() )
0079         page()->print( &printer,  [=](bool){} );
0080     delete dlg;
0081 #endif
0082 }
0083 
0084 QWebEngineView *TinyWebBrowser::createWindow( QWebEnginePage::WebWindowType type )
0085 {
0086     Q_UNUSED(type)
0087     TinyWebBrowser *view = new TinyWebBrowser( this );
0088     return view;
0089 }
0090 
0091 void TinyWebBrowser::openExternalLink( const QUrl& url )
0092 {
0093     QDesktopServices::openUrl( url );
0094 }
0095 
0096 
0097 } // namespace Marble
0098 
0099 #include "moc_TinyWebBrowser.cpp"