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

marble

  • kde-4.x
  • 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 <[email protected]>
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 <QUrl>
29 
30 using namespace Marble;
31 
32 BBCWeatherService::BBCWeatherService( const MarbleModel *model, QObject *parent )
33  : AbstractWeatherService( model, parent ),
34  m_parsingStarted( false ),
35  m_parser( nullptr ),
36  m_itemGetter( new BBCItemGetter( this ) )
37 {
38  qRegisterMetaType<BBCStation>("BBCStation");
39 }
40 
41 BBCWeatherService::~BBCWeatherService()
42 {
43 }
44 
45 void BBCWeatherService::setFavoriteItems( const QStringList& favorite )
46 {
47  if ( favoriteItems() != favorite ) {
48  m_parsingStarted = false;
49 
50  delete m_itemGetter;
51  m_itemGetter = new BBCItemGetter( this );
52 
53  AbstractWeatherService::setFavoriteItems( favorite );
54  }
55 }
56 
57 void BBCWeatherService::getAdditionalItems( const GeoDataLatLonAltBox& box,
58  qint32 number )
59 {
60  if ( !m_parsingStarted ) {
61  m_parsingStarted = true;
62 
63  m_parser = new StationListParser( this );
64  m_parser->setPath(MarbleDirs::path(QStringLiteral("weather/bbc-stations.xml")));
65  connect( m_parser, SIGNAL(finished()),
66  this, SLOT(fetchStationList()) );
67  if ( m_parser->wait( 100 ) ) {
68  m_parser->start( QThread::IdlePriority );
69  }
70  }
71 
72  m_itemGetter->setSchedule( box, number );
73 }
74 
75 void BBCWeatherService::getItem( const QString &id )
76 {
77  if ( id.startsWith( QLatin1String( "bbc" ) ) ) {
78  BBCStation const station = m_itemGetter->station( id );
79  if ( station.bbcId() > 0 ) {
80  createItem( station );
81  }
82  }
83 }
84 
85 void BBCWeatherService::fetchStationList()
86 {
87  if ( !m_parser ) {
88  return;
89  }
90 
91  connect( m_itemGetter,
92  SIGNAL(foundStation(BBCStation)),
93  this,
94  SLOT(createItem(BBCStation)) );
95 
96  m_stationList = m_parser->stationList();
97  m_itemGetter->setStationList( m_stationList );
98 
99  delete m_parser;
100  m_parser = nullptr;
101 }
102 
103 void BBCWeatherService::createItem( const BBCStation& station )
104 {
105  BBCWeatherItem *item = new BBCWeatherItem( this );
106  item->setMarbleWidget( marbleWidget() );
107  item->setBbcId( station.bbcId() );
108  item->setCoordinate( station.coordinate() );
109  item->setPriority( station.priority() );
110  item->setStationName( station.name() );
111 
112  emit requestedDownload( item->observationUrl(), "bbcobservation", item );
113  emit requestedDownload( item->forecastUrl(), "bbcforecast", item );
114 }
115 
116 #include "moc_BBCWeatherService.cpp"
GeoDataCoordinates.h
Marble::BBCStation::name
QString name() const
Definition: BBCStation.cpp:94
Marble::BBCItemGetter::setSchedule
void setSchedule(const GeoDataLatLonBox &box, qint32 number)
Definition: BBCItemGetter.cpp:33
Marble::MarbleDirs::path
static QString path(const QString &relativePath)
Definition: MarbleDirs.cpp:55
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:82
Marble::BBCWeatherService::BBCWeatherService
BBCWeatherService(const MarbleModel *model, QObject *parent)
Definition: BBCWeatherService.cpp:32
Marble::AbstractWeatherService
Definition: AbstractWeatherService.h:27
Marble::BBCWeatherItem::setBbcId
void setBbcId(quint32 id)
Definition: BBCWeatherItem.cpp:70
Marble::BBCWeatherItem::observationUrl
QUrl observationUrl() const
Definition: BBCWeatherItem.cpp:76
MarbleDebug.h
Marble::StationListParser
Definition: StationListParser.h:26
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:380
QObject
Marble::BBCStation::coordinate
GeoDataCoordinates coordinate() const
Definition: BBCStation.cpp:105
Marble::BBCStation::bbcId
quint32 bbcId() const
Definition: BBCStation.cpp:116
MarbleDirs.h
Marble::AbstractWeatherService::setFavoriteItems
virtual void setFavoriteItems(const QStringList &favorite)
Definition: AbstractWeatherService.cpp:44
Marble::WeatherItem::setPriority
void setPriority(quint8 priority)
Definition: WeatherItem.cpp:456
QString
MarbleGlobal.h
BBCWeatherService.h
QStringList
Marble::BBCItemGetter::setStationList
void setStationList(const QList< BBCStation > &items)
Definition: BBCItemGetter.cpp:43
Marble::BBCWeatherService::setFavoriteItems
void setFavoriteItems(const QStringList &favorite) override
Definition: BBCWeatherService.cpp:45
Marble::BBCWeatherService::getItem
void getItem(const QString &id) override
Definition: BBCWeatherService.cpp:75
Marble::MarbleModel
The data model (not based on QAbstractModel) for a MarbleWidget.
Definition: MarbleModel.h:91
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:28
Marble::BBCWeatherService::getAdditionalItems
void getAdditionalItems(const GeoDataLatLonAltBox &box, qint32 number=10) override
Definition: BBCWeatherService.cpp:57
Marble::StationListParser::setPath
void setPath(const QString &path)
Definition: StationListParser.cpp:58
GeoDataLatLonAltBox.h
Marble::BBCWeatherService::~BBCWeatherService
~BBCWeatherService() override
Definition: BBCWeatherService.cpp:41
Marble::StationListParser::stationList
QList< BBCStation > stationList() const
Definition: StationListParser.cpp:53
Marble::WeatherItem::setMarbleWidget
void setMarbleWidget(MarbleWidget *widget)
Definition: WeatherItem.cpp:474
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:102
WeatherData.h
Marble::GeoDataLatLonAltBox
A class that defines a 3D bounding box for geographic data.
Definition: GeoDataLatLonAltBox.h:47
Marble::AbstractWeatherService::favoriteItems
QStringList favoriteItems() const
Definition: AbstractWeatherService.cpp:51
Marble::BBCItemGetter::station
BBCStation station(const QString &id)
Definition: BBCItemGetter.cpp:49
This file is part of the KDE documentation.
Documentation copyright © 1996-2019 The KDE developers.
Generated on Tue Dec 10 2019 02:41: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
  •   KmPlot
  • libkeduvocdocument
  •   keduvocdocument
  • marble
  • parley
  • rocs
  •   src
  •   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