• 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
WeatherPlugin.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 "WeatherPlugin.h"
13 
14 // Marble
15 #include "ui_WeatherConfigWidget.h"
16 #include "WeatherData.h"
17 #include "WeatherModel.h"
18 #include "MarbleDirs.h"
19 #include "MarbleLocale.h"
20 #include "MarbleGlobal.h"
21 #include "weatherGlobal.h"
22 #include "MarbleDebug.h"
23 
24 // Qt
25 #include <QComboBox>
26 #include <QDialog>
27 #include <QIcon>
28 #include <QPushButton>
29 
30 using namespace Marble;
31 /* TRANSLATOR Marble::WeatherPlugin */
32 
33 const quint32 numberOfStationsPerFetch = 20;
34 
35 WeatherPlugin::WeatherPlugin()
36  : AbstractDataPlugin( 0 ),
37  m_configDialog( 0 ),
38  ui_configWidget( 0 )
39 {
40 }
41 
42 WeatherPlugin::WeatherPlugin( const MarbleModel *marbleModel )
43  : AbstractDataPlugin( marbleModel ),
44  m_updateInterval( 0 ),
45  m_icon( MarbleDirs::path( "weather/weather-clear.png" ) ),
46  m_configDialog( 0 ),
47  ui_configWidget( 0 ),
48  m_settings()
49 {
50  // Plugin is enabled by default
51  setEnabled( true );
52  // Plugin is not visible by default
53  setVisible( false );
54 
55  connect( this, SIGNAL(settingsChanged(QString)),
56  this, SLOT(updateItemSettings()) );
57 
58  setSettings( QHash<QString,QVariant>() );
59 }
60 
61 WeatherPlugin::~WeatherPlugin()
62 {
63  delete m_configDialog;
64  delete ui_configWidget;
65 }
66 
67 void WeatherPlugin::initialize()
68 {
69  readSettings();
70 
71  WeatherModel *model = new WeatherModel( marbleModel(), this );
72 
73  setModel( model );
74  updateSettings();
75  updateItemSettings();
76 }
77 
78 QString WeatherPlugin::name() const
79 {
80  return tr( "Weather" );
81 }
82 
83 QString WeatherPlugin::guiString() const
84 {
85  return tr( "&Weather" );
86 }
87 
88 QString WeatherPlugin::nameId() const
89 {
90  return "weather";
91 }
92 
93 QString WeatherPlugin::version() const
94 {
95  return "1.1";
96 }
97 
98 QString WeatherPlugin::description() const
99 {
100  return tr( "Download weather information from many weather stations all around the world" );
101 }
102 
103 QString WeatherPlugin::copyrightYears() const
104 {
105  return "2009, 2011";
106 }
107 
108 QList<PluginAuthor> WeatherPlugin::pluginAuthors() const
109 {
110  return QList<PluginAuthor>()
111  << PluginAuthor( "Bastian Holst", "bastianholst@gmx.de" )
112  << PluginAuthor( "Valery Kharitonov", "kharvd@gmail.com" );
113 }
114 
115 QString WeatherPlugin::aboutDataText() const
116 {
117  return tr( "Supported by backstage.bbc.co.uk.\nWeather data from UK MET Office" );
118 }
119 
120 QIcon WeatherPlugin::icon() const
121 {
122  return m_icon;
123 }
124 
125 QDialog *WeatherPlugin::configDialog()
126 {
127  if ( !m_configDialog ) {
128  // Initializing configuration dialog
129  m_configDialog = new QDialog();
130  ui_configWidget = new Ui::WeatherConfigWidget;
131  ui_configWidget->setupUi( m_configDialog );
132  readSettings();
133  connect( ui_configWidget->m_buttonBox, SIGNAL(accepted()),
134  SLOT(writeSettings()) );
135  connect( ui_configWidget->m_buttonBox, SIGNAL(rejected()),
136  SLOT(readSettings()) );
137  QPushButton *applyButton = ui_configWidget->m_buttonBox->button( QDialogButtonBox::Apply );
138  connect( applyButton, SIGNAL(clicked()),
139  this, SLOT(writeSettings()) );
140  }
141  return m_configDialog;
142 }
143 
144 QHash<QString,QVariant> WeatherPlugin::settings() const
145 {
146  QHash<QString, QVariant> result = AbstractDataPlugin::settings();
147 
148  foreach ( const QString &key, m_settings.keys() ) {
149  result.insert( key, m_settings[key] );
150  }
151 
152  return result;
153 }
154 
155 void WeatherPlugin::setSettings( const QHash<QString,QVariant> &settings )
156 {
157  AbstractDataPlugin::setSettings( settings );
158 
159  m_settings.insert( "showCondition", settings.value( "showCondigion", showConditionDefault ) );
160  m_settings.insert( "showTemperature", settings.value( "showTemperature", showTemperatureDefault ) );
161  m_settings.insert( "showWindDirection", settings.value( "showWindDirection", showWindDirectionDefault ) );
162  m_settings.insert( "showWindSpeed", settings.value( "showWindSpeed", showWindSpeedDefault ) );
163 
164  // Units
165  // The default units depend on the global measure system.
166  const MarbleLocale *locale = MarbleGlobal::getInstance()->locale();
167 
168  int temperatureUnit;
169  if ( locale->measurementSystem() == QLocale::MetricSystem ) {
170  temperatureUnit = WeatherData::Celsius;
171  }
172  else {
173  temperatureUnit = WeatherData::Fahrenheit;
174  }
175  m_settings.insert( "temperatureUnit", settings.value( "temperatureUnit", temperatureUnit ) );
176 
177  int windSpeedUnit;
178  if ( locale->measurementSystem() == QLocale::MetricSystem ) {
179  windSpeedUnit = WeatherData::kph;
180  }
181  else {
182  windSpeedUnit = WeatherData::mph;
183  }
184  m_settings.insert( "windSpeedUnit", settings.value( "windSpeedUnit", windSpeedUnit ) );
185 
186  int pressureUnit;
187  if ( locale->measurementSystem() == QLocale::MetricSystem ) {
188  pressureUnit = WeatherData::HectoPascal;
189  }
190  else {
191  pressureUnit = WeatherData::inchHg;
192  }
193  m_settings.insert( "pressureUnit", settings.value( "pressureUnit", pressureUnit ) );
194 
195  readSettings();
196 
197  emit settingsChanged( nameId() );
198  updateSettings();
199 }
200 
201 bool WeatherPlugin::eventFilter(QObject *object, QEvent *event)
202 {
203  if ( isInitialized() ) {
204  WeatherModel *weatherModel = qobject_cast<WeatherModel*>( model() );
205  Q_ASSERT(weatherModel);
206  MarbleWidget* widget = qobject_cast<MarbleWidget*>( object );
207  if ( widget ) {
208  weatherModel->setMarbleWidget(widget);
209  }
210  }
211 
212  return AbstractDataPlugin::eventFilter( object, event );
213 }
214 
215 void WeatherPlugin::readSettings()
216 {
217  if ( !m_configDialog ) {
218  return;
219  }
220 
221  // Information
222  if ( m_settings.value( "showCondition" ).toBool() )
223  ui_configWidget->m_weatherConditionBox->setCheckState( Qt::Checked );
224  else
225  ui_configWidget->m_weatherConditionBox->setCheckState( Qt::Unchecked );
226 
227  if ( m_settings.value( "showTemperature" ).toBool() )
228  ui_configWidget->m_temperatureBox->setCheckState( Qt::Checked );
229  else
230  ui_configWidget->m_temperatureBox->setCheckState( Qt::Unchecked );
231 
232  if ( m_settings.value( "showWindDirection" ).toBool() )
233  ui_configWidget->m_windDirectionBox->setCheckState( Qt::Checked );
234  else
235  ui_configWidget->m_windDirectionBox->setCheckState( Qt::Unchecked );
236 
237  if ( m_settings.value( "showWindSpeed" ).toBool() )
238  ui_configWidget->m_windSpeedBox->setCheckState( Qt::Checked );
239  else
240  ui_configWidget->m_windSpeedBox->setCheckState( Qt::Unchecked );
241 
242  if ( m_settings.value( "onlyFavorites" ).toBool() )
243  ui_configWidget->m_onlyFavoritesBox->setCheckState( Qt::Checked );
244  else
245  ui_configWidget->m_onlyFavoritesBox->setCheckState( Qt::Unchecked );
246 
247  // Units
248  ui_configWidget->m_temperatureComboBox
249  ->setCurrentIndex( m_settings.value( "temperatureUnit" ).toInt() );
250 
251  ui_configWidget->m_windSpeedComboBox
252  ->setCurrentIndex( m_settings.value( "windSpeedUnit" ).toInt() );
253 
254  ui_configWidget->m_pressureComboBox
255  ->setCurrentIndex( m_settings.value( "pressureUnit" ).toInt() );
256 
257  // Misc
258  ui_configWidget->m_updateIntervalBox
259  ->setValue( m_settings.value( "updateInterval", 3 ).toInt() );
260 }
261 
262 void WeatherPlugin::writeSettings()
263 {
264  // Information
265  m_settings.insert( "showCondition",
266  ui_configWidget->m_weatherConditionBox->checkState() == Qt::Checked );
267  m_settings.insert( "showTemperature",
268  ui_configWidget->m_temperatureBox->checkState() == Qt::Checked );
269  m_settings.insert( "showWindDirection",
270  ui_configWidget->m_windDirectionBox->checkState() == Qt::Checked );
271  m_settings.insert( "showWindSpeed",
272  ui_configWidget->m_windSpeedBox->checkState() == Qt::Checked );
273 
274  // Units
275  m_settings.insert( "temperatureUnit", ui_configWidget->m_temperatureComboBox->currentIndex() );
276  m_settings.insert( "windSpeedUnit", ui_configWidget->m_windSpeedComboBox->currentIndex() );
277  m_settings.insert( "pressureUnit", ui_configWidget->m_pressureComboBox->currentIndex() );
278 
279  // Misc
280  bool onlyFavorites = ( ui_configWidget->m_onlyFavoritesBox->checkState() == Qt::Checked );
281  m_settings.insert( "onlyFavorites", onlyFavorites );
282 
283  m_updateInterval = ui_configWidget->m_updateIntervalBox->value();
284  m_settings.insert( "updateInterval", m_updateInterval );
285 
286  emit settingsChanged( nameId() );
287  updateSettings();
288 }
289 
290 void WeatherPlugin::updateSettings()
291 {
292  if ( model() ) {
293  bool favoritesOnly = m_settings.value( "onlyFavorites", false ).toBool();
294  QList<QString> favoriteItems = m_settings.value( "favoriteItems" ).toString()
295  .split(QLatin1Char(','), QString::SkipEmptyParts);
296 
297  model()->setFavoriteItems( favoriteItems );
298  setNumberOfItems( favoritesOnly ? favoriteItems.size() : numberOfStationsPerFetch );
299  model()->setFavoriteItemsOnly( favoritesOnly );
300  }
301 }
302 
303 void WeatherPlugin::updateItemSettings()
304 {
305  AbstractDataPluginModel *abstractModel = model();
306  if( abstractModel != 0 ) {
307  abstractModel->setItemSettings( m_settings );
308  }
309 }
310 
311 void WeatherPlugin::favoriteItemsChanged( const QStringList& favoriteItems )
312 {
313  m_settings["favoriteItems"] = favoriteItems.join( "," );
314  emit settingsChanged( nameId() );
315  updateSettings();
316 }
317 
318 Q_EXPORT_PLUGIN2(WeatherPlugin, Marble::WeatherPlugin)
319 
320 #include "WeatherPlugin.moc"
Marble::AbstractDataPlugin::setNumberOfItems
void setNumberOfItems(quint32 number)
Set the number of items to be shown at the same time.
Definition: AbstractDataPlugin.cpp:151
Marble::WeatherData::inchHg
Definition: WeatherData.h:120
Marble::MarbleLocale::measurementSystem
QLocale::MeasurementSystem measurementSystem() const
Definition: MarbleLocale.cpp:45
Marble::WeatherModel
Definition: WeatherModel.h:32
showWindDirectionDefault
const bool showWindDirectionDefault
Definition: weatherGlobal.h:18
Marble::WeatherPlugin::initialize
void initialize()
Definition: WeatherPlugin.cpp:67
QDialog
showTemperatureDefault
const bool showTemperatureDefault
Definition: weatherGlobal.h:17
Marble::WeatherPlugin::pluginAuthors
QList< PluginAuthor > pluginAuthors() const
Definition: WeatherPlugin.cpp:108
Marble::AbstractDataPluginModel::setFavoriteItems
virtual void setFavoriteItems(const QStringList &list)
Definition: AbstractDataPluginModel.cpp:466
Marble::WeatherModel::setMarbleWidget
void setMarbleWidget(MarbleWidget *widget)
Definition: WeatherModel.cpp:116
Marble::WeatherPlugin::configDialog
QDialog * configDialog()
Returns a pointer to the configuration dialog of the plugin.
Definition: WeatherPlugin.cpp:125
Marble::RenderPlugin::eventFilter
bool eventFilter(QObject *, QEvent *)
Definition: RenderPlugin.cpp:209
Marble::WeatherPlugin::name
QString name() const
Returns the user-visible name of the plugin.
Definition: WeatherPlugin.cpp:78
WeatherModel.h
Marble::WeatherPlugin::icon
QIcon icon() const
Returns an icon for the plugin.
Definition: WeatherPlugin.cpp:120
Marble::PluginAuthor
Definition: PluginInterface.h:28
Marble::AbstractDataPluginModel
An abstract data model (not based on QAbstractModel) for a AbstractDataPlugin.
Definition: AbstractDataPluginModel.h:45
numberOfStationsPerFetch
const quint32 numberOfStationsPerFetch
Definition: WeatherPlugin.cpp:33
Marble::AbstractDataPlugin
An abstract class for plugins that show data that has a geo coordinate.
Definition: AbstractDataPlugin.h:45
Marble::WeatherPlugin::copyrightYears
QString copyrightYears() const
Definition: WeatherPlugin.cpp:103
QObject
MarbleDebug.h
showWindSpeedDefault
const bool showWindSpeedDefault
Definition: weatherGlobal.h:19
Marble::MarbleWidget
A widget class that displays a view of the earth.
Definition: MarbleWidget.h:102
Marble::AbstractDataPlugin::model
AbstractDataPluginModel * model() const
Definition: AbstractDataPlugin.cpp:124
Marble::AbstractDataPlugin::isInitialized
bool isInitialized() const
Definition: AbstractDataPlugin.cpp:81
Marble::WeatherPlugin::aboutDataText
QString aboutDataText() const
Returns about text (credits) for external data the plugin uses.
Definition: WeatherPlugin.cpp:115
Marble::WeatherPlugin
Definition: WeatherPlugin.h:30
Marble::AbstractDataPluginModel::setItemSettings
void setItemSettings(QHash< QString, QVariant > itemSettings)
Sets the settings for all items.
Definition: AbstractDataPluginModel.cpp:568
showConditionDefault
const bool showConditionDefault
Definition: weatherGlobal.h:16
Marble::RenderPlugin::settingsChanged
void settingsChanged(QString nameId)
This signal is emitted if the settings of the RenderPlugin changed.
MarbleDirs.h
Marble::MarbleDirs
A class that manages data look-up for Marble.
Definition: MarbleDirs.h:79
Marble::WeatherData::Celsius
Definition: WeatherData.h:110
Marble::MarbleGlobal::locale
MarbleLocale * locale() const
Definition: MarbleGlobal.cpp:43
Marble::RenderPlugin::setVisible
void setVisible(bool visible)
settting visible
Definition: RenderPlugin.cpp:149
Marble::AbstractDataPlugin::setModel
void setModel(AbstractDataPluginModel *model)
Set the model of the plugin.
Definition: AbstractDataPlugin.cpp:129
MarbleLocale.h
WeatherPlugin.h
MarbleGlobal.h
Marble::WeatherData::kph
Definition: WeatherData.h:102
Marble::WeatherPlugin::setSettings
void setSettings(const QHash< QString, QVariant > &settings)
Set the settings of the plugin.
Definition: WeatherPlugin.cpp:155
Q_EXPORT_PLUGIN2
#define Q_EXPORT_PLUGIN2(a, b)
Definition: marble_export.h:34
weatherGlobal.h
Marble::WeatherPlugin::guiString
QString guiString() const
String that should be displayed in GUI.
Definition: WeatherPlugin.cpp:83
Marble::MarbleGlobal::getInstance
static MarbleGlobal * getInstance()
Definition: MarbleGlobal.cpp:37
Marble::WeatherData::HectoPascal
Definition: WeatherData.h:116
Marble::MarbleLocale
A class that contains all localization stuff for Marble.
Definition: MarbleLocale.h:31
Marble::WeatherPlugin::eventFilter
bool eventFilter(QObject *object, QEvent *event)
Definition: WeatherPlugin.cpp:201
Marble::MarbleModel
The data model (not based on QAbstractModel) for a MarbleWidget.
Definition: MarbleModel.h:96
Marble::WeatherPlugin::settings
QHash< QString, QVariant > settings() const
Settings of the plugin.
Definition: WeatherPlugin.cpp:144
Marble::RenderPlugin::setEnabled
void setEnabled(bool enabled)
settting enabled
Definition: RenderPlugin.cpp:137
Marble::WeatherData::mph
Definition: WeatherData.h:103
Marble::WeatherPlugin::WeatherPlugin
WeatherPlugin()
Definition: WeatherPlugin.cpp:35
Marble::WeatherPlugin::nameId
QString nameId() const
Returns the unique name of the plugin.
Definition: WeatherPlugin.cpp:88
Marble::WeatherPlugin::version
QString version() const
Definition: WeatherPlugin.cpp:93
Marble::AbstractDataPluginModel::setFavoriteItemsOnly
void setFavoriteItemsOnly(bool favoriteOnly)
Definition: AbstractDataPluginModel.cpp:483
Marble::WeatherPlugin::description
QString description() const
Returns a user description of the plugin.
Definition: WeatherPlugin.cpp:98
Marble::WeatherPlugin::~WeatherPlugin
~WeatherPlugin()
Definition: WeatherPlugin.cpp:61
Marble::RenderPlugin::marbleModel
const MarbleModel * marbleModel() const
Access to the MarbleModel.
Definition: RenderPlugin.cpp:81
Marble::RenderPlugin::settings
virtual QHash< QString, QVariant > settings() const
Settings of the plugin.
Definition: RenderPlugin.cpp:183
WeatherData.h
Marble::WeatherData::Fahrenheit
Definition: WeatherData.h:111
Marble::RenderPlugin::setSettings
virtual void setSettings(const QHash< QString, QVariant > &settings)
Set the settings of the plugin.
Definition: RenderPlugin.cpp:193
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:38: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
  • 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