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

marble

  • sources
  • kde-4.14
  • 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 bool PhotoPluginItem::initialized() const
76 {
77  return !m_smallImage.isNull() && coordinate().isValid();
78 }
79 
80 void PhotoPluginItem::addDownloadedFile( const QString& url, const QString& type )
81 {
82  if( type == "thumbnail" ) {
83  m_smallImage.load( url );
84  m_image.setImage( m_smallImage.scaled( QSize( 50, 50 ) ) );
85  }
86  else if ( type == "info" ) {
87  QFile file( url );
88  if( !file.open( QIODevice::ReadOnly | QIODevice::Text ) ) {
89  return;
90  }
91 
92  GeoDataCoordinates coordinates;
93  CoordinatesParser parser( &coordinates );
94 
95  if( parser.read( &file ) ) {
96  setCoordinate( coordinates );
97  }
98  }
99 
100  if ( initialized() ) {
101  emit updated();
102  }
103 }
104 
105 bool PhotoPluginItem::operator<( const AbstractDataPluginItem *other ) const
106 {
107  return this->id() < other->id();
108 }
109 
110 QUrl PhotoPluginItem::photoUrl() const
111 {
112  QString url = "https://farm%1.static.flickr.com/%2/%3_%4_s.jpg";
113 
114  return QUrl( url.arg( farm() ).arg( server() ).arg( id() ).arg( secret() ) );
115 }
116 
117 QUrl PhotoPluginItem::infoUrl() const
118 {
119  QHash<QString,QString> options;
120 
121  options.insert( "photo_id", id() );
122 
123  return PhotoPluginModel::generateUrl( "flickr", "flickr.photos.geo.getLocation", options );
124 }
125 
126 QString PhotoPluginItem::server() const
127 {
128  return m_server;
129 }
130 
131 void PhotoPluginItem::setServer( const QString& server )
132 {
133  m_server = server;
134 }
135 
136 QString PhotoPluginItem::farm() const
137 {
138  return m_farm;
139 }
140 
141 void PhotoPluginItem::setFarm( const QString& farm )
142 {
143  m_farm = farm;
144 }
145 
146 QString PhotoPluginItem::secret() const
147 {
148  return m_secret;
149 }
150 
151 void PhotoPluginItem::setSecret( const QString& secret )
152 {
153  m_secret = secret;
154 }
155 
156 QString PhotoPluginItem::owner() const
157 {
158  return m_owner;
159 }
160 
161 void PhotoPluginItem::setOwner( const QString& owner )
162 {
163  m_owner = owner;
164 }
165 
166 QString PhotoPluginItem::title() const
167 {
168  return m_title;
169 }
170 
171 void PhotoPluginItem::setTitle( const QString& title )
172 {
173  m_title = title;
174  m_action->setText( title );
175 }
176 
177 QAction *PhotoPluginItem::action()
178 {
179  if( m_action->icon().isNull() ) {
180  m_action->setIcon( QIcon( QPixmap::fromImage( m_smallImage ) ) );
181  }
182  return m_action;
183 }
184 
185 void PhotoPluginItem::openBrowser()
186 {
187  if ( m_marbleWidget ) {
188  PopupLayer* popup = m_marbleWidget->popupLayer();
189  popup->setCoordinates( coordinate(), Qt::AlignRight | Qt::AlignVCenter );
190  popup->setSize( QSizeF( 700, 450 ) );
191  popup->setUrl( QUrl( QString( "http://m.flickr.com/photos/%1/%2/" )
192  .arg( owner() ).arg( id() ) ) );
193  popup->popup();
194  } else {
195  if( !m_browser ) {
196  m_browser = new TinyWebBrowser();
197  }
198 
199  QString url = "http://www.flickr.com/photos/%1/%2/";
200  m_browser->load( QUrl( url.arg( owner() ).arg( id() ) ) );
201  m_browser->show();
202  }
203 }
204 
205 #include "PhotoPluginItem.moc"
QAction::setText
void setText(const QString &text)
GeoDataCoordinates.h
Marble::GeoDataCoordinates
A 3d point representation.
Definition: GeoDataCoordinates.h:52
QHash::insert
iterator insert(const Key &key, const T &value)
QImage::load
bool load(QIODevice *device, const char *format)
TinyWebBrowser.h
Marble::PhotoPluginItem::secret
QString secret() const
Definition: PhotoPluginItem.cpp:146
Marble::PhotoPluginItem::openBrowser
void openBrowser()
Definition: PhotoPluginItem.cpp:185
QWebView::load
void load(const QUrl &url)
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:110
QAction::icon
icon
Marble::PopupLayer
The PopupLayer class.
Definition: PopupLayer.h:34
CoordinatesParser.h
QPixmap::fromImage
QPixmap fromImage(const QImage &image, QFlags< Qt::ImageConversionFlag > flags)
Marble::LabelGraphicsItem::setImage
void setImage(const QImage &image, const QSize &size=QSize())
Definition: LabelGraphicsItem.cpp:85
QBrush
Marble::PopupLayer::popup
void popup()
Make the dialog pop up.
Definition: PopupLayer.cpp:117
Marble::PhotoPluginItem::setFarm
void setFarm(const QString &farm)
Definition: PhotoPluginItem.cpp:141
QImage::isNull
bool isNull() const
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
Marble::FrameGraphicsItem::setMargin
void setMargin(qreal margin)
Sets the margin of the item.
Definition: FrameGraphicsItem.cpp:54
MarbleDebug.h
Marble::AbstractDataPluginItem::id
QString id() const
Definition: AbstractDataPluginItem.cpp:81
QFile
Marble::PhotoPluginItem::initialized
bool initialized() const
Definition: PhotoPluginItem.cpp:75
Marble::MarbleWidget::popupLayer
PopupLayer * popupLayer()
Definition: MarbleWidget.cpp:1226
Marble::PhotoPluginItem::~PhotoPluginItem
~PhotoPluginItem()
Definition: PhotoPluginItem.cpp:65
Marble::MarbleWidget
A widget class that displays a view of the earth.
Definition: MarbleWidget.h:104
Marble::FrameGraphicsItem::setBorderBrush
void setBorderBrush(const QBrush &brush)
Change the brush of the border.
Definition: FrameGraphicsItem.cpp:139
QHash< QString, QString >
Marble::CoordinatesParser::read
bool read(QIODevice *device)
Definition: CoordinatesParser.cpp:24
Marble::PhotoPluginItem::infoUrl
QUrl infoUrl() const
Definition: PhotoPluginItem.cpp:117
QObject
Marble::PhotoPluginItem::server
QString server() const
Definition: PhotoPluginItem.cpp:126
PhotoPluginModel.h
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:80
QString
Marble::PhotoPluginItem::action
QAction * action()
Returns the action of this specific item.
Definition: PhotoPluginItem.cpp:177
QColor
GeoPainter.h
QFile::open
virtual bool open(QFlags< QIODevice::OpenModeFlag > mode)
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:105
Marble::PhotoPluginItem::setServer
void setServer(const QString &server)
Definition: PhotoPluginItem.cpp:131
Marble::FrameGraphicsItem::ShadowFrame
Definition: FrameGraphicsItem.h:32
QSize
QUrl
MarbleGraphicsGridLayout.h
ViewportParams.h
This file contains the headers for ViewportParams.
Marble::PhotoPluginItem::owner
QString owner() const
Definition: PhotoPluginItem.cpp:156
PopupLayer.h
QSizeF
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:139
RenderPlugin.h
PluginManager.h
QAction
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:43
Marble::PhotoPluginItem::setSecret
void setSecret(const QString &secret)
Definition: PhotoPluginItem.cpp:151
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:133
Marble::PhotoPluginItem::title
QString title() const
Definition: PhotoPluginItem.cpp:166
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:114
QWidget::show
void show()
Marble::GeoDataCoordinates::isValid
bool isValid() const
Returns.
Definition: GeoDataCoordinates.cpp:624
Marble::PhotoPluginItem::PhotoPluginItem
PhotoPluginItem(MarbleWidget *widget, QObject *parent)
Definition: PhotoPluginItem.cpp:46
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
Marble::BillboardGraphicsItem::setCoordinate
void setCoordinate(const GeoDataCoordinates &coordinates)
Definition: BillboardGraphicsItem.cpp:98
PhotoPluginItem.h
QString::arg
QString arg(qlonglong a, int fieldWidth, int base, const QChar &fillChar) const
Marble::PopupLayer::setSize
void setSize(const QSizeF &size)
Sets size of popup item.
Definition: PopupLayer.cpp:163
Marble::PhotoPluginItem::setOwner
void setOwner(const QString &owner)
Definition: PhotoPluginItem.cpp:161
AbstractDataPluginItem.h
QImage::scaled
QImage scaled(int width, int height, Qt::AspectRatioMode aspectRatioMode, Qt::TransformationMode transformMode) const
Marble::PhotoPluginItem::farm
QString farm() const
Definition: PhotoPluginItem.cpp:136
QIcon
Marble::PhotoPluginItem::setTitle
void setTitle(const QString &title)
Definition: PhotoPluginItem.cpp:171
Marble::AbstractDataPluginItem::updated
void updated()
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:13:41 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
  • 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