• 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
  • weather
BBCWeatherService.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 "BBCWeatherService.h"
13 
14 // Marble
15 #include "BBCItemGetter.h"
16 #include "BBCStation.h"
17 #include "BBCWeatherItem.h"
18 #include "GeoDataCoordinates.h"
19 #include "GeoDataLatLonAltBox.h"
20 #include "MarbleDirs.h"
21 #include "StationListParser.h"
22 #include "WeatherData.h"
23 #include "WeatherModel.h"
24 #include "MarbleDebug.h"
25 #include "MarbleGlobal.h"
26 
27 // Qt
28 #include <QFile>
29 #include <QList>
30 #include <QTime>
31 #include <QUrl>
32 
33 using namespace Marble;
34 
35 const quint32 maxDisplayedFavoritesNumber = 100;
36 
37 BBCWeatherService::BBCWeatherService( const MarbleModel *model, QObject *parent )
38  : AbstractWeatherService( model, parent ),
39  m_parsingStarted( false ),
40  m_parser( 0 ),
41  m_itemGetter( new BBCItemGetter( this ) )
42 {
43  qRegisterMetaType<BBCStation>("BBCStation");
44 }
45 
46 BBCWeatherService::~BBCWeatherService()
47 {
48 }
49 
50 void BBCWeatherService::setFavoriteItems( const QStringList& favorite )
51 {
52  if ( favoriteItems() != favorite ) {
53  m_parsingStarted = false;
54 
55  delete m_itemGetter;
56  m_itemGetter = new BBCItemGetter( this );
57 
58  AbstractWeatherService::setFavoriteItems( favorite );
59  }
60 }
61 
62 void BBCWeatherService::getAdditionalItems( const GeoDataLatLonAltBox& box,
63  qint32 number )
64 {
65  if ( !m_parsingStarted ) {
66  setupList();
67  }
68 
69  m_itemGetter->setSchedule( box, number );
70 }
71 
72 void BBCWeatherService::getItem( const QString &id )
73 {
74  if ( id.startsWith( QLatin1String( "bbc" ) ) ) {
75  BBCStation const station = m_itemGetter->station( id );
76  if ( station.bbcId() > 0 ) {
77  createItem( station );
78  }
79  }
80 }
81 
82 void BBCWeatherService::fetchStationList()
83 {
84  if ( !m_parser ) {
85  return;
86  }
87 
88  connect( m_itemGetter,
89  SIGNAL(foundStation(BBCStation)),
90  this,
91  SLOT(createItem(BBCStation)) );
92 
93  m_stationList = m_parser->stationList();
94  m_itemGetter->setStationList( m_stationList );
95 
96  delete m_parser;
97  m_parser = 0;
98 }
99 
100 void BBCWeatherService::createItem( BBCStation station )
101 {
102  BBCWeatherItem *item = new BBCWeatherItem( this );
103  item->setMarbleWidget( marbleWidget() );
104  item->setBbcId( station.bbcId() );
105  item->setCoordinate( station.coordinate() );
106  item->setPriority( station.priority() );
107  item->setStationName( station.name() );
108  item->setTarget( "earth" );
109 
110  emit requestedDownload( item->observationUrl(), "bbcobservation", item );
111  emit requestedDownload( item->forecastUrl(), "bbcforecast", item );
112 }
113 
114 void BBCWeatherService::setupList()
115 {
116  m_parsingStarted = true;
117 
118  m_parser = new StationListParser( this );
119  m_parser->setPath( MarbleDirs::path( "weather/bbc-stations.xml" ) );
120  connect( m_parser, SIGNAL(finished()),
121  this, SLOT(fetchStationList()) );
122  if ( m_parser->wait( 100 ) ) {
123  m_parser->start( QThread::IdlePriority );
124  }
125 }
126 
127 #include "BBCWeatherService.moc"
GeoDataCoordinates.h
Marble::AbstractDataPluginItem::setTarget
void setTarget(const QString &target)
Definition: AbstractDataPluginItem.cpp:66
Marble::BBCStation::name
QString name() const
Definition: BBCStation.cpp:94
Marble::BBCItemGetter::setSchedule
void setSchedule(const GeoDataLatLonAltBox &box, qint32 number)
Definition: BBCItemGetter.cpp:34
Marble::MarbleDirs::path
static QString path(const QString &relativePath)
Definition: MarbleDirs.cpp:53
Marble::AbstractWeatherService::requestedDownload
void requestedDownload(const QUrl &url, const QString &type, AbstractDataPluginItem *item)
BBCWeatherItem.h
WeatherModel.h
Marble::BBCWeatherItem::forecastUrl
QUrl forecastUrl() const
Definition: BBCWeatherItem.cpp:84
Marble::BBCWeatherService::BBCWeatherService
BBCWeatherService(const MarbleModel *model, QObject *parent)
Definition: BBCWeatherService.cpp:37
Marble::AbstractWeatherService
Definition: AbstractWeatherService.h:27
Marble::BBCWeatherItem::setBbcId
void setBbcId(quint32 id)
Definition: BBCWeatherItem.cpp:72
Marble::BBCWeatherItem::observationUrl
QUrl observationUrl() const
Definition: BBCWeatherItem.cpp:78
Marble::BBCWeatherService::~BBCWeatherService
~BBCWeatherService()
Definition: BBCWeatherService.cpp:46
Marble::StationListParser::setPath
void setPath(QString path)
Definition: StationListParser.cpp:58
QObject
MarbleDebug.h
Marble::StationListParser
Definition: StationListParser.h:28
Marble::BBCWeatherService::setFavoriteItems
void setFavoriteItems(const QStringList &favorite)
Definition: BBCWeatherService.cpp:50
BBCStation.h
StationListParser.h
Marble::BBCWeatherItem
Definition: BBCWeatherItem.h:22
Marble::WeatherItem::setStationName
void setStationName(const QString &name)
Definition: WeatherItem.cpp:391
Marble::BBCWeatherService::getAdditionalItems
void getAdditionalItems(const GeoDataLatLonAltBox &box, qint32 number=10)
Definition: BBCWeatherService.cpp:62
Marble::BBCStation::coordinate
GeoDataCoordinates coordinate() const
Definition: BBCStation.cpp:105
Marble::BBCStation::bbcId
quint32 bbcId() const
Definition: BBCStation.cpp:116
MarbleDirs.h
Marble::BBCWeatherService::getItem
virtual void getItem(const QString &id)
Definition: BBCWeatherService.cpp:72
Marble::AbstractWeatherService::setFavoriteItems
virtual void setFavoriteItems(const QStringList &favorite)
Definition: AbstractWeatherService.cpp:44
maxDisplayedFavoritesNumber
const quint32 maxDisplayedFavoritesNumber
Definition: BBCWeatherService.cpp:35
Marble::WeatherItem::setPriority
void setPriority(quint8 priority)
Definition: WeatherItem.cpp:467
MarbleGlobal.h
BBCWeatherService.h
Marble::BBCItemGetter::setStationList
void setStationList(const QList< BBCStation > &items)
Definition: BBCItemGetter.cpp:44
Marble::MarbleModel
The data model (not based on QAbstractModel) for a MarbleWidget.
Definition: MarbleModel.h:96
Marble::BBCStation
Definition: BBCStation.h:24
Marble::AbstractWeatherService::marbleWidget
MarbleWidget * marbleWidget()
Definition: AbstractWeatherService.cpp:39
Marble::BBCStation::priority
quint8 priority() const
Definition: BBCStation.cpp:127
BBCItemGetter.h
Marble::BBCItemGetter
Definition: BBCItemGetter.h:29
GeoDataLatLonAltBox.h
Marble::StationListParser::stationList
QList< BBCStation > stationList() const
Definition: StationListParser.cpp:53
Marble::WeatherItem::setMarbleWidget
void setMarbleWidget(MarbleWidget *widget)
Definition: WeatherItem.cpp:485
Marble::BillboardGraphicsItem::setCoordinate
void setCoordinate(const GeoDataCoordinates &coordinates)
Definition: BillboardGraphicsItem.cpp:98
WeatherData.h
Marble::GeoDataLatLonAltBox
A class that defines a 3D bounding box for geographic data.
Definition: GeoDataLatLonAltBox.h:49
Marble::AbstractWeatherService::favoriteItems
QStringList favoriteItems() const
Definition: AbstractWeatherService.cpp:51
Marble::BBCItemGetter::station
BBCStation station(const QString &id)
Definition: BBCItemGetter.cpp:50
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:38:49 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