• 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
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  typedef QHash<QString, QVariant>::ConstIterator Iterator;
149  Iterator end = m_settings.constEnd();
150  for ( Iterator iter = m_settings.constBegin(); iter != end; ++iter ) {
151  result.insert( iter.key(), iter.value() );
152  }
153 
154  return result;
155 }
156 
157 void WeatherPlugin::setSettings( const QHash<QString,QVariant> &settings )
158 {
159  AbstractDataPlugin::setSettings( settings );
160 
161  m_settings.insert( "showCondition", settings.value( "showCondigion", showConditionDefault ) );
162  m_settings.insert( "showTemperature", settings.value( "showTemperature", showTemperatureDefault ) );
163  m_settings.insert( "showWindDirection", settings.value( "showWindDirection", showWindDirectionDefault ) );
164  m_settings.insert( "showWindSpeed", settings.value( "showWindSpeed", showWindSpeedDefault ) );
165 
166  // Units
167  // The default units depend on the global measure system.
168  const MarbleLocale *locale = MarbleGlobal::getInstance()->locale();
169 
170  int temperatureUnit;
171  if ( locale->measurementSystem() == MarbleLocale::MetricSystem ) {
172  temperatureUnit = WeatherData::Celsius;
173  }
174  else {
175  temperatureUnit = WeatherData::Fahrenheit;
176  }
177  m_settings.insert( "temperatureUnit", settings.value( "temperatureUnit", temperatureUnit ) );
178 
179  int windSpeedUnit;
180  if ( locale->measurementSystem() == MarbleLocale::MetricSystem ) {
181  windSpeedUnit = WeatherData::kph;
182  }
183  else {
184  windSpeedUnit = WeatherData::mph;
185  }
186  m_settings.insert( "windSpeedUnit", settings.value( "windSpeedUnit", windSpeedUnit ) );
187 
188  int pressureUnit;
189  if ( locale->measurementSystem() == MarbleLocale::MetricSystem ) {
190  pressureUnit = WeatherData::HectoPascal;
191  }
192  else {
193  pressureUnit = WeatherData::inchHg;
194  }
195  m_settings.insert( "pressureUnit", settings.value( "pressureUnit", pressureUnit ) );
196 
197  readSettings();
198 
199  emit settingsChanged( nameId() );
200  updateSettings();
201 }
202 
203 bool WeatherPlugin::eventFilter(QObject *object, QEvent *event)
204 {
205  if ( isInitialized() ) {
206  WeatherModel *weatherModel = qobject_cast<WeatherModel*>( model() );
207  Q_ASSERT(weatherModel);
208  MarbleWidget* widget = qobject_cast<MarbleWidget*>( object );
209  if ( widget ) {
210  weatherModel->setMarbleWidget(widget);
211  }
212  }
213 
214  return AbstractDataPlugin::eventFilter( object, event );
215 }
216 
217 void WeatherPlugin::readSettings()
218 {
219  if ( !m_configDialog ) {
220  return;
221  }
222 
223  // Information
224  if ( m_settings.value( "showCondition" ).toBool() )
225  ui_configWidget->m_weatherConditionBox->setCheckState( Qt::Checked );
226  else
227  ui_configWidget->m_weatherConditionBox->setCheckState( Qt::Unchecked );
228 
229  if ( m_settings.value( "showTemperature" ).toBool() )
230  ui_configWidget->m_temperatureBox->setCheckState( Qt::Checked );
231  else
232  ui_configWidget->m_temperatureBox->setCheckState( Qt::Unchecked );
233 
234  if ( m_settings.value( "showWindDirection" ).toBool() )
235  ui_configWidget->m_windDirectionBox->setCheckState( Qt::Checked );
236  else
237  ui_configWidget->m_windDirectionBox->setCheckState( Qt::Unchecked );
238 
239  if ( m_settings.value( "showWindSpeed" ).toBool() )
240  ui_configWidget->m_windSpeedBox->setCheckState( Qt::Checked );
241  else
242  ui_configWidget->m_windSpeedBox->setCheckState( Qt::Unchecked );
243 
244  if ( m_settings.value( "onlyFavorites" ).toBool() )
245  ui_configWidget->m_onlyFavoritesBox->setCheckState( Qt::Checked );
246  else
247  ui_configWidget->m_onlyFavoritesBox->setCheckState( Qt::Unchecked );
248 
249  // Units
250  ui_configWidget->m_temperatureComboBox
251  ->setCurrentIndex( m_settings.value( "temperatureUnit" ).toInt() );
252 
253  ui_configWidget->m_windSpeedComboBox
254  ->setCurrentIndex( m_settings.value( "windSpeedUnit" ).toInt() );
255 
256  ui_configWidget->m_pressureComboBox
257  ->setCurrentIndex( m_settings.value( "pressureUnit" ).toInt() );
258 
259  // Misc
260  ui_configWidget->m_updateIntervalBox
261  ->setValue( m_settings.value( "updateInterval", 3 ).toInt() );
262 }
263 
264 void WeatherPlugin::writeSettings()
265 {
266  // Information
267  m_settings.insert( "showCondition",
268  ui_configWidget->m_weatherConditionBox->checkState() == Qt::Checked );
269  m_settings.insert( "showTemperature",
270  ui_configWidget->m_temperatureBox->checkState() == Qt::Checked );
271  m_settings.insert( "showWindDirection",
272  ui_configWidget->m_windDirectionBox->checkState() == Qt::Checked );
273  m_settings.insert( "showWindSpeed",
274  ui_configWidget->m_windSpeedBox->checkState() == Qt::Checked );
275 
276  // Units
277  m_settings.insert( "temperatureUnit", ui_configWidget->m_temperatureComboBox->currentIndex() );
278  m_settings.insert( "windSpeedUnit", ui_configWidget->m_windSpeedComboBox->currentIndex() );
279  m_settings.insert( "pressureUnit", ui_configWidget->m_pressureComboBox->currentIndex() );
280 
281  // Misc
282  bool onlyFavorites = ( ui_configWidget->m_onlyFavoritesBox->checkState() == Qt::Checked );
283  m_settings.insert( "onlyFavorites", onlyFavorites );
284 
285  m_updateInterval = ui_configWidget->m_updateIntervalBox->value();
286  m_settings.insert( "updateInterval", m_updateInterval );
287 
288  emit settingsChanged( nameId() );
289  updateSettings();
290 }
291 
292 void WeatherPlugin::updateSettings()
293 {
294  if ( model() ) {
295  bool favoritesOnly = m_settings.value( "onlyFavorites", false ).toBool();
296  QList<QString> favoriteItems = m_settings.value( "favoriteItems" ).toString()
297  .split(QLatin1Char(','), QString::SkipEmptyParts);
298 
299  model()->setFavoriteItems( favoriteItems );
300  setNumberOfItems( favoritesOnly ? favoriteItems.size() : numberOfStationsPerFetch );
301  model()->setFavoriteItemsOnly( favoritesOnly );
302  }
303 }
304 
305 void WeatherPlugin::updateItemSettings()
306 {
307  AbstractDataPluginModel *abstractModel = model();
308  if( abstractModel != 0 ) {
309  abstractModel->setItemSettings( m_settings );
310  }
311 }
312 
313 void WeatherPlugin::favoriteItemsChanged( const QStringList& favoriteItems )
314 {
315  m_settings["favoriteItems"] = favoriteItems.join( "," );
316  emit settingsChanged( nameId() );
317  updateSettings();
318 }
319 
320 Q_EXPORT_PLUGIN2(WeatherPlugin, Marble::WeatherPlugin)
321 
322 #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:156
Marble::WeatherData::inchHg
Definition: WeatherData.h:120
QEvent
QHash::insert
iterator insert(const Key &key, const T &value)
Marble::MarbleLocale::measurementSystem
MarbleLocale::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
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:216
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
QStringList::join
QString join(const QString &separator) const
Marble::WeatherPlugin::copyrightYears
QString copyrightYears() const
Definition: WeatherPlugin.cpp:103
MarbleDebug.h
QObject::tr
QString tr(const char *sourceText, const char *disambiguation, int n)
QList::size
int size() const
showWindSpeedDefault
const bool showWindSpeedDefault
Definition: weatherGlobal.h:19
Marble::MarbleWidget
A widget class that displays a view of the earth.
Definition: MarbleWidget.h:104
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
QHash::constEnd
const_iterator constEnd() const
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
QHash< QString, QVariant >
QObject
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:151
QString
QList
Marble::AbstractDataPlugin::setModel
void setModel(AbstractDataPluginModel *model)
Set the model of the plugin.
Definition: AbstractDataPlugin.cpp:134
MarbleLocale.h
WeatherPlugin.h
MarbleGlobal.h
QStringList
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:157
Q_EXPORT_PLUGIN2
#define Q_EXPORT_PLUGIN2(a, b)
Definition: marble_export.h:34
QHash::value
const T value(const Key &key) const
weatherGlobal.h
QLatin1Char
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::MarbleLocale::MetricSystem
Definition: MarbleLocale.h:38
Marble::WeatherPlugin::eventFilter
bool eventFilter(QObject *object, QEvent *event)
Definition: WeatherPlugin.cpp:203
Marble::MarbleModel
The data model (not based on QAbstractModel) for a MarbleWidget.
Definition: MarbleModel.h:97
QHash::constBegin
const_iterator constBegin() const
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:139
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
QDialog
QPushButton
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:83
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
Marble::RenderPlugin::settings
virtual QHash< QString, QVariant > settings() const
Settings of the plugin.
Definition: RenderPlugin.cpp:185
Marble::AbstractDataPlugin::model
AbstractDataPluginModel * model()
Definition: AbstractDataPlugin.cpp:124
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:195
QIcon
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:13:42 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