• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeedu API Reference
  • KDE Home
  • Contact Us
 

marble

  • sources
  • kde-4.12
  • kdeedu
  • marble
  • src
  • plugins
  • render
  • wikipedia
WikipediaItem.cpp
Go to the documentation of this file.
1 //
2 // This file is part of the Marble Virtual Globe.
3 //
4 // This program is free software licensed under the GNU LGPL. You can
5 // find a copy of this license in LICENSE.txt in the top directory of
6 // the source code.
7 //
8 // Copyright 2009 Bastian Holst <bastianholst@gmx.de>
9 //
10 
11 // Self
12 #include "WikipediaItem.h"
13 
14 // Qt
15 #include <QAction>
16 #include <QIcon>
17 #include <QPainter>
18 #include <QPixmap>
19 #include <QMouseEvent>
20 #include <QWebView>
21 
22 // Marble
23 #include "MarbleDebug.h"
24 #include "ViewportParams.h"
25 #include "TinyWebBrowser.h"
26 #include "MarbleWidget.h"
27 #include "MarbleModel.h"
28 #include "RenderPlugin.h"
29 #include "PluginManager.h"
30 #include "layers/PopupLayer.h"
31 
32 using namespace Marble;
33 /* TRANSLATOR Marble::WikipediaItem */
34 
35 // The Wikipedia icon is not a square
36 const QRect wikiIconRect( 0, 0, 22, 19 );
37 const QSize miniWikiIconSize( 22, 19 );
38 const int miniWikiIconBorder = 3;
39 
40 WikipediaItem::WikipediaItem( MarbleWidget* widget, QObject *parent )
41  : AbstractDataPluginItem( parent ),
42  m_marbleWidget( widget ),
43  m_rank( 0.0 ),
44  m_browser( 0 ),
45  m_wikiIcon(),
46  m_showThumbnail( false )
47 {
48  m_action = new QAction( this );
49  connect( m_action, SIGNAL(triggered()), this, SLOT(openBrowser()) );
50  setCacheMode( ItemCoordinateCache );
51 }
52 
53 WikipediaItem::~WikipediaItem()
54 {
55  delete m_browser;
56 }
57 
58 QString WikipediaItem::name() const
59 {
60  return id();
61 }
62 
63 void WikipediaItem::setName( const QString& name )
64 {
65  setId( name );
66  updateToolTip();
67 }
68 
69 QString WikipediaItem::itemType() const
70 {
71  return "wikipediaItem";
72 }
73 
74 bool WikipediaItem::initialized() const
75 {
76  return true;
77 }
78 
79 void WikipediaItem::addDownloadedFile( const QString& url, const QString& type )
80 {
81  if ( type == "thumbnail" ) {
82  m_thumbnail.load( url );
83  updateSize();
84  emit updated();
85  }
86 }
87 
88 bool WikipediaItem::operator<( const AbstractDataPluginItem *other ) const
89 {
90  WikipediaItem const * otherItem = dynamic_cast<WikipediaItem const *>( other );
91  return otherItem ? m_rank > otherItem->m_rank : id() < other->id();
92 }
93 
94 void WikipediaItem::paint( QPainter *painter )
95 {
96  if ( !showThumbnail() ) {
97  m_wikiIcon.paint( painter, wikiIconRect );
98  }
99  else {
100  painter->drawPixmap( 0, 0, m_thumbnail );
101  QSize minSize = miniWikiIconSize;
102  minSize *= 2;
103  QSize thumbnailSize = m_thumbnail.size();
104 
105  if ( thumbnailSize.width() >= minSize.width()
106  && thumbnailSize.height() >= minSize.height() )
107  {
108  QRect wikiRect( QPoint( 0, 0 ), miniWikiIconSize );
109  wikiRect.moveBottomRight( QPoint( m_thumbnail.width() - miniWikiIconBorder,
110  m_thumbnail.height() - miniWikiIconBorder ) );
111  m_wikiIcon.paint( painter, wikiRect );
112  }
113  }
114 }
115 
116 qreal WikipediaItem::longitude()
117 {
118  return coordinate().longitude();
119 }
120 
121 void WikipediaItem::setLongitude( qreal longitude )
122 {
123  GeoDataCoordinates updatedCoordinates = coordinate();
124  updatedCoordinates.setLongitude( longitude );
125  setCoordinate( updatedCoordinates );
126 }
127 
128 qreal WikipediaItem::latitude()
129 {
130  return coordinate().latitude();
131 }
132 
133 void WikipediaItem::setLatitude( qreal latitude )
134 {
135  GeoDataCoordinates updatedCoordinates = coordinate();
136  updatedCoordinates.setLatitude( latitude );
137  setCoordinate( updatedCoordinates );
138 }
139 
140 QUrl WikipediaItem::url()
141 {
142  return m_url;
143 }
144 
145 void WikipediaItem::setUrl( const QUrl& url )
146 {
147  m_url = url;
148 }
149 
150 QUrl WikipediaItem::thumbnailImageUrl()
151 {
152  return m_thumbnailImageUrl;
153 }
154 
155 void WikipediaItem::setThumbnailImageUrl( const QUrl& thumbnailImageUrl )
156 {
157  m_thumbnailImageUrl = thumbnailImageUrl;
158 }
159 
160 QString WikipediaItem::summary()
161 {
162  return m_summary;
163 }
164 
165 void WikipediaItem::setSummary( const QString& summary )
166 {
167  m_summary = summary;
168  updateToolTip();
169 }
170 
171 QAction *WikipediaItem::action()
172 {
173  m_action->setText( id() );
174  return m_action;
175 }
176 
177 void WikipediaItem::openBrowser( )
178 {
179  if ( m_marbleWidget ) {
180  PopupLayer* popup = m_marbleWidget->popupLayer();
181  popup->setCoordinates( coordinate(), Qt::AlignRight | Qt::AlignVCenter );
182  popup->setSize( QSizeF( 500, 550 ) );
183  popup->setUrl( url() );
184  popup->setVisible( true );
185  } else {
186  if ( !m_browser ) {
187  m_browser = new TinyWebBrowser();
188  }
189  m_browser->load( url() );
190  m_browser->show();
191  }
192 }
193 
194 void WikipediaItem::setIcon( const QIcon& icon )
195 {
196  m_action->setIcon( icon );
197  m_wikiIcon = icon;
198 
199  updateSize();
200 }
201 
202 void WikipediaItem::setSettings( const QHash<QString, QVariant>& settings )
203 {
204  const bool showThumbnail = settings.value( "showThumbnails", false ).toBool();
205 
206  if ( showThumbnail != m_showThumbnail ) {
207  m_showThumbnail = showThumbnail;
208  updateSize();
209  updateToolTip();
210  update();
211  }
212 }
213 
214 void WikipediaItem::setRank( double rank )
215 {
216  m_rank = rank;
217 }
218 
219 double WikipediaItem::rank() const
220 {
221  return m_rank;
222 }
223 
224 void WikipediaItem::updateSize()
225 {
226  if ( showThumbnail() ) {
227  setSize( m_thumbnail.size() );
228  }
229  else {
230  setSize( wikiIconRect.size() );
231  }
232 }
233 
234 void WikipediaItem::updateToolTip()
235 {
236  QString toolTip;
237  toolTip += "<html><head><meta name=\"qrichtext\" content=\"1\" />";
238  toolTip += "<style type=\"text/css\">\\np, li { white-space: pre-wrap; }\\n</style></head>";
239  toolTip += "<body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; ";
240  toolTip += "font-style:normal;\"><p style=\" margin-top:0px; margin-bottom:0px; ";
241  toolTip += "margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">";
242  if ( summary().isEmpty() ) {
243  toolTip += "%1";
244  toolTip += "</p></body></html>\n";
245  setToolTip( toolTip.arg( name() ) );
246  }
247  else {
248  toolTip += tr( "<b>%1</b><br>%2", "Title:\nSummary" );
249  toolTip += "</p></body></html>\n";
250  setToolTip( toolTip.arg( name() ).arg( summary() ) );
251  }
252 }
253 
254 bool WikipediaItem::showThumbnail() const
255 {
256  return m_showThumbnail && !m_thumbnail.isNull();
257 }
258 
259 #include "WikipediaItem.moc"
QPainter
Marble::GeoDataCoordinates
A 3d point representation.
Definition: GeoDataCoordinates.h:52
TinyWebBrowser.h
Marble::WikipediaItem::longitude
qreal longitude()
Definition: WikipediaItem.cpp:116
Marble::TinyWebBrowser
This class provides a tiny web browser based on QWebView (WebKit).
Definition: TinyWebBrowser.h:35
Marble::MarbleGraphicsItem::setSize
void setSize(const QSizeF &size)
Set the size of the item.
Definition: MarbleGraphicsItem.cpp:197
Marble::WikipediaItem::setLongitude
void setLongitude(qreal longitude)
Definition: WikipediaItem.cpp:121
Marble::WikipediaItem::operator<
bool operator<(const AbstractDataPluginItem *other) const
Definition: WikipediaItem.cpp:88
Marble::AbstractDataPluginItem
Definition: AbstractDataPluginItem.h:28
MarbleModel.h
This file contains the headers for MarbleModel.
Marble::AbstractDataPluginItem::setId
void setId(const QString &id)
Definition: AbstractDataPluginItem.cpp:86
Marble::WikipediaItem::url
QUrl url()
Definition: WikipediaItem.cpp:140
Marble::PopupLayer
The PopupLayer class.
Definition: PopupLayer.h:39
Marble::AbstractDataPluginItem::toolTip
QString toolTip() const
Returns the item's tool tip.
Definition: AbstractDataPluginItem.cpp:71
Marble::WikipediaItem::setName
void setName(const QString &name)
Definition: WikipediaItem.cpp:63
Marble::WikipediaItem::action
QAction * action()
Returns the action of this specific item.
Definition: WikipediaItem.cpp:171
Marble::GeoDataCoordinates::latitude
qreal latitude(GeoDataCoordinates::Unit unit=GeoDataCoordinates::Radian) const
retrieves the latitude of the GeoDataCoordinates object use the unit parameter to switch between Radi...
Definition: GeoDataCoordinates.cpp:751
WikipediaItem.h
QObject
MarbleDebug.h
Marble::AbstractDataPluginItem::id
QString id() const
Definition: AbstractDataPluginItem.cpp:81
Marble::MarbleWidget::popupLayer
PopupLayer * popupLayer()
Definition: MarbleWidget.cpp:1408
Marble::MarbleWidget
A widget class that displays a view of the earth.
Definition: MarbleWidget.h:102
Marble::WikipediaItem::WikipediaItem
WikipediaItem(MarbleWidget *widget, QObject *parent)
Definition: WikipediaItem.cpp:40
Marble::WikipediaItem::name
QString name() const
Definition: WikipediaItem.cpp:58
Marble::WikipediaItem::addDownloadedFile
void addDownloadedFile(const QString &url, const QString &type)
Definition: WikipediaItem.cpp:79
Marble::WikipediaItem::latitude
qreal latitude()
Definition: WikipediaItem.cpp:128
Marble::WikipediaItem::setSettings
void setSettings(const QHash< QString, QVariant > &settings)
Set the settings of the item.
Definition: WikipediaItem.cpp:202
Marble::MarbleGraphicsItem::ItemCoordinateCache
Definition: MarbleGraphicsItem.h:41
Marble::WikipediaItem::setThumbnailImageUrl
void setThumbnailImageUrl(const QUrl &thumbnailImageUrl)
Definition: WikipediaItem.cpp:155
wikiIconRect
const QRect wikiIconRect(0, 0, 22, 19)
Marble::WikipediaItem::summary
QString summary()
Definition: WikipediaItem.cpp:160
Marble::WikipediaItem::setUrl
void setUrl(const QUrl &url)
Definition: WikipediaItem.cpp:145
Marble::WikipediaItem
Definition: WikipediaItem.h:29
Marble::WikipediaItem::~WikipediaItem
~WikipediaItem()
Definition: WikipediaItem.cpp:53
Marble::GeoDataCoordinates::longitude
qreal longitude(GeoDataCoordinates::Unit unit=GeoDataCoordinates::Radian) const
retrieves the longitude of the GeoDataCoordinates object use the unit parameter to switch between Rad...
Definition: GeoDataCoordinates.cpp:739
Marble::GeoDataCoordinates::setLatitude
void setLatitude(qreal lat, GeoDataCoordinates::Unit unit=GeoDataCoordinates::Radian)
set the longitude in a GeoDataCoordinates object
Definition: GeoDataCoordinates.cpp:699
ViewportParams.h
This file contains the headers for ViewportParams.
Marble::WikipediaItem::itemType
QString itemType() const
Returns the type of this specific item.
Definition: WikipediaItem.cpp:69
Marble::WikipediaItem::setSummary
void setSummary(const QString &summary)
Definition: WikipediaItem.cpp:165
Marble::GeoDataCoordinates::setLongitude
void setLongitude(qreal lon, GeoDataCoordinates::Unit unit=GeoDataCoordinates::Radian)
set the longitude in a GeoDataCoordinates object
Definition: GeoDataCoordinates.cpp:679
Marble::WikipediaItem::setRank
void setRank(double rank)
Set a popularity rank.
Definition: WikipediaItem.cpp:214
Marble::WikipediaItem::paint
void paint(QPainter *painter)
Paints the item in item coordinates.
Definition: WikipediaItem.cpp:94
Marble::PopupLayer::setVisible
void setVisible(bool visible)
Set visibility of the item.
Definition: PopupLayer.cpp:78
PopupLayer.h
Marble::WikipediaItem::rank
double rank() const
Definition: WikipediaItem.cpp:219
Marble::MarbleGraphicsItem::setCacheMode
void setCacheMode(CacheMode mode)
Set the cache mode of the item.
Definition: MarbleGraphicsItem.cpp:159
Marble::PopupLayer::setUrl
void setUrl(const QUrl &url)
Sets URL of the browser.
Definition: PopupLayer.cpp:103
Marble::WikipediaItem::thumbnailImageUrl
QUrl thumbnailImageUrl()
Definition: WikipediaItem.cpp:150
RenderPlugin.h
PluginManager.h
Marble::BillboardGraphicsItem::coordinate
GeoDataCoordinates coordinate() const
Definition: BillboardGraphicsItem.cpp:93
Marble::WikipediaItem::setLatitude
void setLatitude(qreal latitude)
Definition: WikipediaItem.cpp:133
Marble::MarbleGraphicsItem::update
void update()
Marks the item and all parent items as invalid.
Definition: MarbleGraphicsItem.cpp:167
MarbleWidget.h
This file contains the headers for MarbleWidget.
Marble::PopupLayer::setCoordinates
void setCoordinates(const GeoDataCoordinates &coordinates, Qt::Alignment alignment)
Sets coordinates.
Definition: PopupLayer.cpp:97
miniWikiIconBorder
const int miniWikiIconBorder
Definition: WikipediaItem.cpp:38
Marble::WikipediaItem::openBrowser
void openBrowser()
Definition: WikipediaItem.cpp:177
Marble::BillboardGraphicsItem::setCoordinate
void setCoordinate(const GeoDataCoordinates &coordinates)
Definition: BillboardGraphicsItem.cpp:98
Marble::WikipediaItem::setIcon
void setIcon(const QIcon &icon)
Definition: WikipediaItem.cpp:194
Marble::AbstractDataPluginItem::setToolTip
void setToolTip(const QString &toolTip)
Set the tool tip for the item.
Definition: AbstractDataPluginItem.cpp:76
Marble::PopupLayer::setSize
void setSize(const QSizeF &size)
Sets size of popup item.
Definition: PopupLayer.cpp:128
miniWikiIconSize
const QSize miniWikiIconSize(22, 19)
Marble::AbstractDataPluginItem::updated
void updated()
Marble::WikipediaItem::initialized
bool initialized() const
Definition: WikipediaItem.cpp:74
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:38:53 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

marble

Skip menu "marble"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdeedu API Reference

Skip menu "kdeedu API Reference"
  • Analitza
  •     lib
  • kalgebra
  • kalzium
  •   libscience
  • kanagram
  • kig
  •   lib
  • klettres
  • kstars
  • libkdeedu
  •   keduvocdocument
  • marble
  • parley
  • rocs
  •   App
  •   RocsCore
  •   VisualEditor
  •   stepcore

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal