File indexing completed on 2024-05-05 03:50:56
0001 // SPDX-License-Identifier: LGPL-2.1-or-later 0002 // 0003 // SPDX-FileCopyrightText: 2009 Bastian Holst <bastianholst@gmx.de> 0004 // 0005 0006 // Self 0007 #include "WikipediaItem.h" 0008 0009 // Qt 0010 #include <QAction> 0011 #include <QPainter> 0012 0013 // Marble 0014 #include "MarbleDebug.h" 0015 #include "ViewportParams.h" 0016 #include "TinyWebBrowser.h" 0017 #include "MarbleWidget.h" 0018 #include "MarbleModel.h" 0019 #include "RenderPlugin.h" 0020 #include "PluginManager.h" 0021 #include "layers/PopupLayer.h" 0022 0023 using namespace Marble; 0024 /* TRANSLATOR Marble::WikipediaItem */ 0025 0026 // The Wikipedia icon is not a square 0027 const QRect wikiIconRect( 0, 0, 22, 19 ); 0028 const QSize miniWikiIconSize( 22, 19 ); 0029 const int miniWikiIconBorder = 3; 0030 0031 WikipediaItem::WikipediaItem( MarbleWidget* widget, QObject *parent ) 0032 : AbstractDataPluginItem( parent ), 0033 m_marbleWidget( widget ), 0034 m_rank( 0.0 ), 0035 m_browser( nullptr ), 0036 m_wikiIcon(), 0037 m_showThumbnail( false ) 0038 { 0039 m_action = new QAction( this ); 0040 connect( m_action, SIGNAL(triggered()), this, SLOT(openBrowser()) ); 0041 setCacheMode( ItemCoordinateCache ); 0042 } 0043 0044 WikipediaItem::~WikipediaItem() 0045 { 0046 delete m_browser; 0047 } 0048 0049 QString WikipediaItem::name() const 0050 { 0051 return id(); 0052 } 0053 0054 void WikipediaItem::setName( const QString& name ) 0055 { 0056 setId( name ); 0057 updateToolTip(); 0058 } 0059 0060 bool WikipediaItem::initialized() const 0061 { 0062 return true; 0063 } 0064 0065 void WikipediaItem::addDownloadedFile( const QString& url, const QString& type ) 0066 { 0067 if (type == QLatin1String("thumbnail")) { 0068 m_thumbnail.load( url ); 0069 updateSize(); 0070 emit updated(); 0071 } 0072 } 0073 0074 bool WikipediaItem::operator<( const AbstractDataPluginItem *other ) const 0075 { 0076 WikipediaItem const * otherItem = dynamic_cast<WikipediaItem const *>( other ); 0077 return otherItem ? m_rank > otherItem->m_rank : id() < other->id(); 0078 } 0079 0080 void WikipediaItem::paint( QPainter *painter ) 0081 { 0082 if ( !showThumbnail() ) { 0083 m_wikiIcon.paint( painter, wikiIconRect ); 0084 } 0085 else { 0086 painter->drawPixmap( 0, 0, m_thumbnail ); 0087 QSize minSize = miniWikiIconSize; 0088 minSize *= 2; 0089 QSize thumbnailSize = m_thumbnail.size(); 0090 0091 if ( thumbnailSize.width() >= minSize.width() 0092 && thumbnailSize.height() >= minSize.height() ) 0093 { 0094 QRect wikiRect( QPoint( 0, 0 ), miniWikiIconSize ); 0095 wikiRect.moveBottomRight( QPoint( m_thumbnail.width() - miniWikiIconBorder, 0096 m_thumbnail.height() - miniWikiIconBorder ) ); 0097 m_wikiIcon.paint( painter, wikiRect ); 0098 } 0099 } 0100 } 0101 0102 qreal WikipediaItem::longitude() const 0103 { 0104 return coordinate().longitude(); 0105 } 0106 0107 void WikipediaItem::setLongitude( qreal longitude ) 0108 { 0109 GeoDataCoordinates updatedCoordinates = coordinate(); 0110 updatedCoordinates.setLongitude( longitude ); 0111 setCoordinate( updatedCoordinates ); 0112 } 0113 0114 qreal WikipediaItem::latitude() const 0115 { 0116 return coordinate().latitude(); 0117 } 0118 0119 void WikipediaItem::setLatitude( qreal latitude ) 0120 { 0121 GeoDataCoordinates updatedCoordinates = coordinate(); 0122 updatedCoordinates.setLatitude( latitude ); 0123 setCoordinate( updatedCoordinates ); 0124 } 0125 0126 QUrl WikipediaItem::url() const 0127 { 0128 return m_url; 0129 } 0130 0131 void WikipediaItem::setUrl( const QUrl& url ) 0132 { 0133 m_url = url; 0134 } 0135 0136 QUrl WikipediaItem::thumbnailImageUrl() const 0137 { 0138 return m_thumbnailImageUrl; 0139 } 0140 0141 void WikipediaItem::setThumbnailImageUrl( const QUrl& thumbnailImageUrl ) 0142 { 0143 m_thumbnailImageUrl = thumbnailImageUrl; 0144 } 0145 0146 QString WikipediaItem::summary() const 0147 { 0148 return m_summary; 0149 } 0150 0151 void WikipediaItem::setSummary( const QString& summary ) 0152 { 0153 m_summary = summary; 0154 updateToolTip(); 0155 } 0156 0157 QAction *WikipediaItem::action() 0158 { 0159 m_action->setText( id() ); 0160 return m_action; 0161 } 0162 0163 void WikipediaItem::openBrowser( ) 0164 { 0165 if ( m_marbleWidget ) { 0166 PopupLayer* popup = m_marbleWidget->popupLayer(); 0167 popup->setCoordinates( coordinate(), Qt::AlignRight | Qt::AlignVCenter ); 0168 popup->setSize(QSizeF(520, 570)); 0169 popup->setUrl( url() ); 0170 popup->popup(); 0171 } else { 0172 if ( !m_browser ) { 0173 m_browser = new TinyWebBrowser(); 0174 } 0175 m_browser->load( url() ); 0176 m_browser->show(); 0177 } 0178 } 0179 0180 void WikipediaItem::setIcon( const QIcon& icon ) 0181 { 0182 m_action->setIcon( icon ); 0183 m_wikiIcon = icon; 0184 0185 updateSize(); 0186 } 0187 0188 void WikipediaItem::setSettings( const QHash<QString, QVariant>& settings ) 0189 { 0190 const bool showThumbnail = settings.value(QStringLiteral("showThumbnails"), false).toBool(); 0191 0192 if ( showThumbnail != m_showThumbnail ) { 0193 m_showThumbnail = showThumbnail; 0194 updateSize(); 0195 updateToolTip(); 0196 update(); 0197 } 0198 } 0199 0200 void WikipediaItem::setRank( double rank ) 0201 { 0202 m_rank = rank; 0203 } 0204 0205 double WikipediaItem::rank() const 0206 { 0207 return m_rank; 0208 } 0209 0210 void WikipediaItem::updateSize() 0211 { 0212 if ( showThumbnail() ) { 0213 setSize( m_thumbnail.size() ); 0214 } 0215 else { 0216 setSize( wikiIconRect.size() ); 0217 } 0218 } 0219 0220 void WikipediaItem::updateToolTip() 0221 { 0222 QString toolTip = QLatin1String( 0223 "<html><head><meta name=\"qrichtext\" content=\"1\" />" 0224 "<style type=\"text/css\">\\np, li { white-space: pre-wrap; }\\n</style></head>" 0225 "<body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; " 0226 "font-style:normal;\"><p style=\" margin-top:0px; margin-bottom:0px; " 0227 "margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"); 0228 if ( summary().isEmpty() ) { 0229 toolTip += name() + QLatin1String("</p></body></html>\n"); 0230 setToolTip(toolTip); 0231 } 0232 else { 0233 toolTip += tr("<b>%1</b><br>%2", "Title:\nSummary") + QLatin1String("</p></body></html>\n"); 0234 setToolTip( toolTip.arg( name() ).arg( summary() ) ); 0235 } 0236 } 0237 0238 bool WikipediaItem::showThumbnail() const 0239 { 0240 return m_showThumbnail && !m_thumbnail.isNull(); 0241 } 0242 0243 #include "moc_WikipediaItem.cpp"