• 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
  • 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 BBCWeatherService::BBCWeatherService( const MarbleModel *model, QObject *parent )
36  : AbstractWeatherService( model, parent ),
37  m_parsingStarted( false ),
38  m_parser( 0 ),
39  m_itemGetter( new BBCItemGetter( this ) )
40 {
41  qRegisterMetaType<BBCStation>("BBCStation");
42 }
43 
44 BBCWeatherService::~BBCWeatherService()
45 {
46 }
47 
48 void BBCWeatherService::setFavoriteItems( const QStringList& favorite )
49 {
50  if ( favoriteItems() != favorite ) {
51  m_parsingStarted = false;
52 
53  delete m_itemGetter;
54  m_itemGetter = new BBCItemGetter( this );
55 
56  AbstractWeatherService::setFavoriteItems( favorite );
57  }
58 }
59 
60 void BBCWeatherService::getAdditionalItems( const GeoDataLatLonAltBox& box,
61  qint32 number )
62 {
63  if ( !m_parsingStarted ) {
64  setupList();
65  }
66 
67  m_itemGetter->setSchedule( box, number );
68 }
69 
70 void BBCWeatherService::getItem( const QString &id )
71 {
72  if ( id.startsWith( QLatin1String( "bbc" ) ) ) {
73  BBCStation const station = m_itemGetter->station( id );
74  if ( station.bbcId() > 0 ) {
75  createItem( station );
76  }
77  }
78 }
79 
80 void BBCWeatherService::fetchStationList()
81 {
82  if ( !m_parser ) {
83  return;
84  }
85 
86  connect( m_itemGetter,
87  SIGNAL(foundStation(BBCStation)),
88  this,
89  SLOT(createItem(BBCStation)) );
90 
91  m_stationList = m_parser->stationList();
92  m_itemGetter->setStationList( m_stationList );
93 
94  delete m_parser;
95  m_parser = 0;
96 }
97 
98 void BBCWeatherService::createItem( BBCStation station )
99 {
100  BBCWeatherItem *item = new BBCWeatherItem( this );
101  item->setMarbleWidget( marbleWidget() );
102  item->setBbcId( station.bbcId() );
103  item->setCoordinate( station.coordinate() );
104  item->setPriority( station.priority() );
105  item->setStationName( station.name() );
106  item->setTarget( "earth" );
107 
108  emit requestedDownload( item->observationUrl(), "bbcobservation", item );
109  emit requestedDownload( item->forecastUrl(), "bbcforecast", item );
110 }
111 
112 void BBCWeatherService::setupList()
113 {
114  m_parsingStarted = true;
115 
116  m_parser = new StationListParser( this );
117  m_parser->setPath( MarbleDirs::path( "weather/bbc-stations.xml" ) );
118  connect( m_parser, SIGNAL(finished()),
119  this, SLOT(fetchStationList()) );
120  if ( m_parser->wait( 100 ) ) {
121  m_parser->start( QThread::IdlePriority );
122  }
123 }
124 
125 #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:59
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:35
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:44
Marble::StationListParser::setPath
void setPath(QString path)
Definition: StationListParser.cpp:58
MarbleDebug.h
Marble::StationListParser
Definition: StationListParser.h:28
Marble::BBCWeatherService::setFavoriteItems
void setFavoriteItems(const QStringList &favorite)
Definition: BBCWeatherService.cpp:48
QThread::start
void start(Priority priority)
BBCStation.h
StationListParser.h
Marble::BBCWeatherItem
Definition: BBCWeatherItem.h:22
Marble::WeatherItem::setStationName
void setStationName(const QString &name)
Definition: WeatherItem.cpp:384
QObject
Marble::BBCWeatherService::getAdditionalItems
void getAdditionalItems(const GeoDataLatLonAltBox &box, qint32 number=10)
Definition: BBCWeatherService.cpp:60
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:70
Marble::AbstractWeatherService::setFavoriteItems
virtual void setFavoriteItems(const QStringList &favorite)
Definition: AbstractWeatherService.cpp:44
Marble::WeatherItem::setPriority
void setPriority(quint8 priority)
Definition: WeatherItem.cpp:460
QString
MarbleGlobal.h
BBCWeatherService.h
QStringList
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:97
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
QThread::wait
bool wait(unsigned long time)
QLatin1String
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:478
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
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-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:13:38 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