• 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
  • photo
PhotoPluginItem.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 // Copyright 2012 Mohammed Nafees <nafees.technocool@gmail.com>
10 //
11 
12 
13 // Self
14 #include "PhotoPluginItem.h"
15 
16 // Plugin
17 #include "CoordinatesParser.h"
18 #include "PhotoPluginModel.h"
19 
20 // Marble
21 #include "AbstractDataPluginItem.h"
22 #include "GeoDataCoordinates.h"
23 #include "GeoPainter.h"
24 #include "LabelGraphicsItem.h"
25 #include "MarbleGraphicsGridLayout.h"
26 #include "TinyWebBrowser.h"
27 #include "ViewportParams.h"
28 #include "MarbleDebug.h"
29 #include "MarbleWidget.h"
30 #include "MarbleModel.h"
31 #include "RenderPlugin.h"
32 #include "PluginManager.h"
33 #include "layers/PopupLayer.h"
34 
35 // Qt
36 #include <QAction>
37 #include <QIcon>
38 #include <QFile>
39 #include <QHash>
40 #include <QUrl>
41 #include <QMouseEvent>
42 #include <QPixmap>
43 
44 using namespace Marble;
45 
46 PhotoPluginItem::PhotoPluginItem( MarbleWidget *widget, QObject *parent )
47  : AbstractDataPluginItem( parent ),
48  m_marbleWidget( widget ),
49  m_image( this ),
50  m_browser( 0 )
51 {
52  m_action = new QAction( this );
53  connect( m_action, SIGNAL(triggered()), this, SLOT(openBrowser()) );
54  setCacheMode( ItemCoordinateCache );
55 
56  m_image.setFrame( FrameGraphicsItem::ShadowFrame );
57  m_image.setBorderBrush( QBrush( QColor( Qt::white ) ) );
58  m_image.setBorderWidth( 2.0 );
59  m_image.setMargin( 5 );
60  MarbleGraphicsGridLayout *layout = new MarbleGraphicsGridLayout( 1, 1 );
61  layout->addItem( &m_image, 0, 0 );
62  setLayout( layout );
63 }
64 
65 PhotoPluginItem::~PhotoPluginItem()
66 {
67  delete m_browser;
68 }
69 
70 QString PhotoPluginItem::name() const
71 {
72  return title();
73 }
74 
75 QString PhotoPluginItem::itemType() const
76 {
77  return QString( "photoItem" );
78 }
79 
80 bool PhotoPluginItem::initialized() const
81 {
82  return !m_smallImage.isNull() && coordinate().isValid();
83 }
84 
85 void PhotoPluginItem::addDownloadedFile( const QString& url, const QString& type )
86 {
87  if( type == "thumbnail" ) {
88  m_smallImage.load( url );
89  m_image.setImage( m_smallImage.scaled( QSize( 50, 50 ) ) );
90  }
91  else if ( type == "info" ) {
92  QFile file( url );
93  if( !file.open( QIODevice::ReadOnly | QIODevice::Text ) ) {
94  return;
95  }
96 
97  GeoDataCoordinates coordinates;
98  CoordinatesParser parser( &coordinates );
99 
100  if( parser.read( &file ) ) {
101  setCoordinate( coordinates );
102  }
103  }
104 
105  if ( initialized() ) {
106  emit updated();
107  }
108 }
109 
110 bool PhotoPluginItem::operator<( const AbstractDataPluginItem *other ) const
111 {
112  return this->id() < other->id();
113 }
114 
115 QUrl PhotoPluginItem::photoUrl() const
116 {
117  QString url = "http://farm%1.static.flickr.com/%2/%3_%4_s.jpg";
118 
119  return QUrl( url.arg( farm() ).arg( server() ).arg( id() ).arg( secret() ) );
120 }
121 
122 QUrl PhotoPluginItem::infoUrl() const
123 {
124  QHash<QString,QString> options;
125 
126  options.insert( "photo_id", id() );
127 
128  return PhotoPluginModel::generateUrl( "flickr", "flickr.photos.geo.getLocation", options );
129 }
130 
131 QString PhotoPluginItem::server() const
132 {
133  return m_server;
134 }
135 
136 void PhotoPluginItem::setServer( const QString& server )
137 {
138  m_server = server;
139 }
140 
141 QString PhotoPluginItem::farm() const
142 {
143  return m_farm;
144 }
145 
146 void PhotoPluginItem::setFarm( const QString& farm )
147 {
148  m_farm = farm;
149 }
150 
151 QString PhotoPluginItem::secret() const
152 {
153  return m_secret;
154 }
155 
156 void PhotoPluginItem::setSecret( const QString& secret )
157 {
158  m_secret = secret;
159 }
160 
161 QString PhotoPluginItem::owner() const
162 {
163  return m_owner;
164 }
165 
166 void PhotoPluginItem::setOwner( const QString& owner )
167 {
168  m_owner = owner;
169 }
170 
171 QString PhotoPluginItem::title() const
172 {
173  return m_title;
174 }
175 
176 void PhotoPluginItem::setTitle( const QString& title )
177 {
178  m_title = title;
179  m_action->setText( title );
180 }
181 
182 QAction *PhotoPluginItem::action()
183 {
184  if( m_action->icon().isNull() ) {
185  m_action->setIcon( QIcon( QPixmap::fromImage( m_smallImage ) ) );
186  }
187  return m_action;
188 }
189 
190 void PhotoPluginItem::openBrowser()
191 {
192  if ( m_marbleWidget ) {
193  PopupLayer* popup = m_marbleWidget->popupLayer();
194  popup->setCoordinates( coordinate(), Qt::AlignRight | Qt::AlignVCenter );
195  popup->setSize( QSizeF( 700, 450 ) );
196  popup->setUrl( QUrl( QString( "http://m.flickr.com/photos/%1/%2/" )
197  .arg( owner() ).arg( id() ) ) );
198  popup->setVisible( true );
199  } else {
200  if( !m_browser ) {
201  m_browser = new TinyWebBrowser();
202  }
203 
204  QString url = "http://www.flickr.com/photos/%1/%2/";
205  m_browser->load( QUrl( url.arg( owner() ).arg( id() ) ) );
206  m_browser->show();
207  }
208 }
209 
210 #include "PhotoPluginItem.moc"
GeoDataCoordinates.h
Marble::GeoDataCoordinates
A 3d point representation.
Definition: GeoDataCoordinates.h:52
TinyWebBrowser.h
Marble::PhotoPluginItem::secret
QString secret() const
Definition: PhotoPluginItem.cpp:151
Marble::PhotoPluginItem::openBrowser
void openBrowser()
Definition: PhotoPluginItem.cpp:190
LabelGraphicsItem.h
Marble::CoordinatesParser
Definition: CoordinatesParser.h:23
Marble::TinyWebBrowser
This class provides a tiny web browser based on QWebView (WebKit).
Definition: TinyWebBrowser.h:35
Marble::AbstractDataPluginItem
Definition: AbstractDataPluginItem.h:28
MarbleModel.h
This file contains the headers for MarbleModel.
Marble::PhotoPluginItem::photoUrl
QUrl photoUrl() const
Definition: PhotoPluginItem.cpp:115
Marble::PopupLayer
The PopupLayer class.
Definition: PopupLayer.h:39
CoordinatesParser.h
Marble::LabelGraphicsItem::setImage
void setImage(const QImage &image, const QSize &size=QSize())
Definition: LabelGraphicsItem.cpp:85
Marble::PhotoPluginItem::setFarm
void setFarm(const QString &farm)
Definition: PhotoPluginItem.cpp:146
Marble::MarbleGraphicsItem::setLayout
void setLayout(AbstractMarbleGraphicsLayout *layout)
Set the layout of the graphics item.
Definition: MarbleGraphicsItem.cpp:146
Marble::MarbleGraphicsGridLayout::addItem
void addItem(ScreenGraphicsItem *item, int row, int column)
Definition: MarbleGraphicsGridLayout.cpp:74
QObject
Marble::FrameGraphicsItem::setMargin
void setMargin(qreal margin)
Sets the margin of the item.
Definition: FrameGraphicsItem.cpp:58
MarbleDebug.h
Marble::AbstractDataPluginItem::id
QString id() const
Definition: AbstractDataPluginItem.cpp:81
Marble::PhotoPluginItem::initialized
bool initialized() const
Definition: PhotoPluginItem.cpp:80
Marble::MarbleWidget::popupLayer
PopupLayer * popupLayer()
Definition: MarbleWidget.cpp:1408
Marble::PhotoPluginItem::~PhotoPluginItem
~PhotoPluginItem()
Definition: PhotoPluginItem.cpp:65
Marble::MarbleWidget
A widget class that displays a view of the earth.
Definition: MarbleWidget.h:102
Marble::FrameGraphicsItem::setBorderBrush
void setBorderBrush(const QBrush &brush)
Change the brush of the border.
Definition: FrameGraphicsItem.cpp:143
Marble::CoordinatesParser::read
bool read(QIODevice *device)
Definition: CoordinatesParser.cpp:24
Marble::PhotoPluginItem::infoUrl
QUrl infoUrl() const
Definition: PhotoPluginItem.cpp:122
Marble::PhotoPluginItem::server
QString server() const
Definition: PhotoPluginItem.cpp:131
PhotoPluginModel.h
Marble::PhotoPluginItem::itemType
QString itemType() const
Returns the type of this specific item.
Definition: PhotoPluginItem.cpp:75
Marble::MarbleGraphicsItem::ItemCoordinateCache
Definition: MarbleGraphicsItem.h:41
Marble::MarbleGraphicsGridLayout
Definition: MarbleGraphicsGridLayout.h:27
Marble::PhotoPluginItem::addDownloadedFile
void addDownloadedFile(const QString &url, const QString &type)
Definition: PhotoPluginItem.cpp:85
Marble::PhotoPluginItem::action
QAction * action()
Returns the action of this specific item.
Definition: PhotoPluginItem.cpp:182
GeoPainter.h
Marble::PhotoPluginModel::generateUrl
static QUrl generateUrl(const QString &service, const QString &method, const QHash< QString, QString > &options)
Definition: PhotoPluginModel.cpp:42
Marble::PhotoPluginItem::operator<
bool operator<(const AbstractDataPluginItem *other) const
Definition: PhotoPluginItem.cpp:110
Marble::PhotoPluginItem::setServer
void setServer(const QString &server)
Definition: PhotoPluginItem.cpp:136
Marble::FrameGraphicsItem::ShadowFrame
Definition: FrameGraphicsItem.h:32
MarbleGraphicsGridLayout.h
ViewportParams.h
This file contains the headers for ViewportParams.
Marble::PhotoPluginItem::owner
QString owner() const
Definition: PhotoPluginItem.cpp:161
Marble::PopupLayer::setVisible
void setVisible(bool visible)
Set visibility of the item.
Definition: PopupLayer.cpp:78
PopupLayer.h
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
RenderPlugin.h
PluginManager.h
Marble::BillboardGraphicsItem::coordinate
GeoDataCoordinates coordinate() const
Definition: BillboardGraphicsItem.cpp:93
Marble::FrameGraphicsItem::setFrame
void setFrame(FrameType type)
Sets the type of the Frame.
Definition: FrameGraphicsItem.cpp:47
Marble::PhotoPluginItem::setSecret
void setSecret(const QString &secret)
Definition: PhotoPluginItem.cpp:156
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
Marble::PhotoPluginItem::title
QString title() const
Definition: PhotoPluginItem.cpp:171
Marble::PhotoPluginItem::name
QString name() const
Definition: PhotoPluginItem.cpp:70
Marble::MarbleGraphicsItem::layout
AbstractMarbleGraphicsLayout * layout() const
Returns the layout of the MarbleGraphicsItem.
Definition: MarbleGraphicsItem.cpp:141
Marble::FrameGraphicsItem::setBorderWidth
void setBorderWidth(qreal width)
Set the border width of the item.
Definition: FrameGraphicsItem.cpp:118
Marble::GeoDataCoordinates::isValid
bool isValid() const
Returns.
Definition: GeoDataCoordinates.cpp:624
Marble::PhotoPluginItem::PhotoPluginItem
PhotoPluginItem(MarbleWidget *widget, QObject *parent)
Definition: PhotoPluginItem.cpp:46
Marble::BillboardGraphicsItem::setCoordinate
void setCoordinate(const GeoDataCoordinates &coordinates)
Definition: BillboardGraphicsItem.cpp:98
PhotoPluginItem.h
Marble::PopupLayer::setSize
void setSize(const QSizeF &size)
Sets size of popup item.
Definition: PopupLayer.cpp:128
Marble::PhotoPluginItem::setOwner
void setOwner(const QString &owner)
Definition: PhotoPluginItem.cpp:166
AbstractDataPluginItem.h
Marble::PhotoPluginItem::farm
QString farm() const
Definition: PhotoPluginItem.cpp:141
Marble::PhotoPluginItem::setTitle
void setTitle(const QString &title)
Definition: PhotoPluginItem.cpp:176
Marble::AbstractDataPluginItem::updated
void updated()
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:38:52 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