summaryrefslogtreecommitdiff
authordrw <drw>2002-12-29 23:36:15 (UTC)
committer drw <drw>2002-12-29 23:36:15 (UTC)
commit46df3c62a8d630fe7e0b578566c05b6b10218296 (patch) (unidiff)
tree45f715da6dbf846aee33aa05f04afbdb58bbcd0c
parentd1fcfdb7fee76146f89a6ad763349ca5aa79d247 (diff)
downloadopie-46df3c62a8d630fe7e0b578566c05b6b10218296.zip
opie-46df3c62a8d630fe7e0b578566c05b6b10218296.tar.gz
opie-46df3c62a8d630fe7e0b578566c05b6b10218296.tar.bz2
Correctly display message when unable to get weather info & add qwhatsthis to configuration widget.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/todayplugins/weather/weatherconfig.cpp7
-rw-r--r--noncore/todayplugins/weather/weatherpluginwidget.cpp7
2 files changed, 10 insertions, 4 deletions
diff --git a/noncore/todayplugins/weather/weatherconfig.cpp b/noncore/todayplugins/weather/weatherconfig.cpp
index fe10883..99ee2a0 100644
--- a/noncore/todayplugins/weather/weatherconfig.cpp
+++ b/noncore/todayplugins/weather/weatherconfig.cpp
@@ -1,127 +1,132 @@
1/* 1/*
2                This file is part of the OPIE Project 2                This file is part of the OPIE Project
3 =. 3 =.
4             .=l. Copyright (c) 2002 Dan Williams <williamsdr@acm.org> 4             .=l. Copyright (c) 2002 Dan Williams <williamsdr@acm.org>
5           .>+-= 5           .>+-=
6 _;:,     .>    :=|. This file is free software; you can 6 _;:,     .>    :=|. This file is free software; you can
7.> <`_,   >  .   <= redistribute it and/or modify it under 7.> <`_,   >  .   <= redistribute it and/or modify it under
8:`=1 )Y*s>-.--   : the terms of the GNU General Public 8:`=1 )Y*s>-.--   : the terms of the GNU General Public
9.="- .-=="i,     .._ License as published by the Free Software 9.="- .-=="i,     .._ License as published by the Free Software
10 - .   .-<_>     .<> Foundation; either version 2 of the License, 10 - .   .-<_>     .<> Foundation; either version 2 of the License,
11     ._= =}       : or (at your option) any later version. 11     ._= =}       : or (at your option) any later version.
12    .%`+i>       _;_. 12    .%`+i>       _;_.
13    .i_,=:_.      -<s. This file is distributed in the hope that 13    .i_,=:_.      -<s. This file is distributed in the hope that
14     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 14     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
15    : ..    .:,     . . . without even the implied warranty of 15    : ..    .:,     . . . without even the implied warranty of
16    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 16    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
17  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU General 17  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU General
18..}^=.=       =       ; Public License for more details. 18..}^=.=       =       ; Public License for more details.
19++=   -.     .`     .: 19++=   -.     .`     .:
20 :     =  ...= . :.=- You should have received a copy of the GNU 20 :     =  ...= . :.=- You should have received a copy of the GNU
21 -.   .:....=;==+<; General Public License along with this file; 21 -.   .:....=;==+<; General Public License along with this file;
22  -_. . .   )=.  = see the file COPYING. If not, write to the 22  -_. . .   )=.  = see the file COPYING. If not, write to the
23    --        :-=` Free Software Foundation, Inc., 23    --        :-=` Free Software Foundation, Inc.,
24 59 Temple Place - Suite 330, 24 59 Temple Place - Suite 330,
25 Boston, MA 02111-1307, USA. 25 Boston, MA 02111-1307, USA.
26 26
27*/ 27*/
28 28
29#include <stdlib.h> 29#include <stdlib.h>
30 30
31#include <qcheckbox.h> 31#include <qcheckbox.h>
32#include <qclipboard.h> 32#include <qclipboard.h>
33#include <qfontmetrics.h> 33#include <qfontmetrics.h>
34#include <qlabel.h> 34#include <qlabel.h>
35#include <qlayout.h> 35#include <qlayout.h>
36#include <qlineedit.h> 36#include <qlineedit.h>
37#include <qlayout.h> 37#include <qlayout.h>
38#include <qpushbutton.h> 38#include <qpushbutton.h>
39#include <qspinbox.h> 39#include <qspinbox.h>
40#include <qwhatsthis.h> 40#include <qwhatsthis.h>
41 41
42#include <qpe/config.h> 42#include <qpe/config.h>
43#include <qpe/qpeapplication.h> 43#include <qpe/qpeapplication.h>
44#include <qpe/resource.h> 44#include <qpe/resource.h>
45#include <opie/todayconfigwidget.h> 45#include <opie/todayconfigwidget.h>
46 46
47#include "weatherconfig.h" 47#include "weatherconfig.h"
48 48
49WeatherPluginConfig::WeatherPluginConfig( QWidget *parent, const char* name) 49WeatherPluginConfig::WeatherPluginConfig( QWidget *parent, const char* name)
50 : TodayConfigWidget(parent, name ) 50 : TodayConfigWidget(parent, name )
51{ 51{
52 Config config( "todayweatherplugin"); 52 Config config( "todayweatherplugin");
53 config.setGroup( "Config" ); 53 config.setGroup( "Config" );
54 54
55 QFontMetrics fm = fontMetrics(); 55 QFontMetrics fm = fontMetrics();
56 int fh = fm.height(); 56 int fh = fm.height();
57 57
58 QGridLayout *layout = new QGridLayout( this ); 58 QGridLayout *layout = new QGridLayout( this );
59 layout->setSpacing( 4 ); 59 layout->setSpacing( 4 );
60 layout->setMargin( 4 ); 60 layout->setMargin( 4 );
61 61
62 QLabel *label = new QLabel( tr( "Enter ICAO location identifier:" ), this ); 62 QLabel *label = new QLabel( tr( "Enter ICAO location identifier:" ), this );
63 label->setMaximumHeight( fh + 3 ); 63 label->setMaximumHeight( fh + 3 );
64 layout->addMultiCellWidget( label, 0, 0, 0, 1 ); 64 layout->addMultiCellWidget( label, 0, 0, 0, 1 );
65 QWhatsThis::add( label, tr( "Enter the 4 letter code for the desired location here. See http://www.nws.noaa.gov/tg/siteloc.shtml to find a location near you." ) );
65 66
66 locationEdit = new QLineEdit( config.readEntry( "Location", "" ), this ); 67 locationEdit = new QLineEdit( config.readEntry( "Location", "" ), this );
67 locationEdit->setMaximumHeight( fh + 5 ); 68 locationEdit->setMaximumHeight( fh + 5 );
68 locationEdit->setFocus(); 69 locationEdit->setFocus();
69 layout->addMultiCellWidget( locationEdit, 1, 1, 0, 1 ); 70 layout->addMultiCellWidget( locationEdit, 1, 1, 0, 1 );
71 QWhatsThis::add( locationEdit, tr( "Enter the 4 letter code for the desired location here. See http://www.nws.noaa.gov/tg/siteloc.shtml to find a location near you." ) );
70 72
71 label = new QLabel( tr( "Visit http://www.nws.noaa.gov/tg/siteloc.shtml to find the nearest location." ), this ); 73 label = new QLabel( tr( "Visit http://www.nws.noaa.gov/tg/siteloc.shtml to find the nearest location." ), this );
72 label->setAlignment( AlignHCenter | WordBreak ); 74 label->setAlignment( AlignHCenter | WordBreak );
73 label->setMaximumHeight( label->height() ); 75 label->setMaximumHeight( label->height() );
74 layout->addMultiCellWidget( label, 2, 2, 0, 1 ); 76 layout->addMultiCellWidget( label, 2, 2, 0, 1 );
75 //layout->addWidget( label, 2, 0 ); 77 //layout->addWidget( label, 2, 0 );
76 78
77 //QPushButton *pb = new QPushButton( Resource::loadPixmap( "copy" ), 79 //QPushButton *pb = new QPushButton( Resource::loadPixmap( "copy" ),
78 //tr( "Copy link" ), this ); 80 //tr( "Copy link" ), this );
79 //connect( pb, SIGNAL( clicked() ), this, SLOT( slotCopyLink() ) ); 81 //connect( pb, SIGNAL( clicked() ), this, SLOT( slotCopyLink() ) );
80 //layout->addWidget( pb, 2, 1 ); 82 //layout->addWidget( pb, 2, 1 );
81 83
82 metricCB = new QCheckBox( tr( "Use metric units" ), this ); 84 metricCB = new QCheckBox( tr( "Use metric units" ), this );
83 metricCB->setMaximumHeight( fh + 5 ); 85 metricCB->setMaximumHeight( fh + 5 );
84 metricCB->setChecked( config.readBoolEntry( "Metric", TRUE ) ); 86 metricCB->setChecked( config.readBoolEntry( "Metric", TRUE ) );
85 layout->addMultiCellWidget( metricCB, 3, 3, 0, 1 ); 87 layout->addMultiCellWidget( metricCB, 3, 3, 0, 1 );
88 QWhatsThis::add( metricCB, tr( "Click here to select type of units displayed." ) );
86 89
87 label = new QLabel( tr( "Update frequency (in minutes):" ), this ); 90 label = new QLabel( tr( "Update frequency (in minutes):" ), this );
88 label->setMaximumHeight( fh + 3 ); 91 label->setMaximumHeight( fh + 3 );
89 layout->addWidget( label, 4, 0 ); 92 layout->addWidget( label, 4, 0 );
93 QWhatsThis::add( label, tr( "Select how often (in minutes) you want the weather to be updated." ) );
90 94
91 timerDelaySB = new QSpinBox( 1, 60, 1, this ); 95 timerDelaySB = new QSpinBox( 1, 60, 1, this );
92 timerDelaySB->setMaximumHeight( fh + 5 ); 96 timerDelaySB->setMaximumHeight( fh + 5 );
93 timerDelaySB->setValue( config.readNumEntry( "Frequency", 5 ) ); 97 timerDelaySB->setValue( config.readNumEntry( "Frequency", 5 ) );
94 layout->addWidget( timerDelaySB, 4, 1 ); 98 layout->addWidget( timerDelaySB, 4, 1 );
99 QWhatsThis::add( timerDelaySB, tr( "Select how often (in minutes) you want the weather to be updated." ) );
95} 100}
96 101
97 102
98void WeatherPluginConfig::writeConfig() 103void WeatherPluginConfig::writeConfig()
99{ 104{
100 Config config( "todayweatherplugin"); 105 Config config( "todayweatherplugin");
101 config.setGroup( "Config" ); 106 config.setGroup( "Config" );
102 107
103 config.writeEntry( "Location", locationEdit->text().upper().stripWhiteSpace() ); 108 config.writeEntry( "Location", locationEdit->text().upper().stripWhiteSpace() );
104 config.writeEntry( "Metric", metricCB->isChecked() ); 109 config.writeEntry( "Metric", metricCB->isChecked() );
105 config.writeEntry( "Frequency", timerDelaySB->value() ); 110 config.writeEntry( "Frequency", timerDelaySB->value() );
106 111
107 config.write(); 112 config.write();
108} 113}
109 114
110WeatherPluginConfig::~WeatherPluginConfig() 115WeatherPluginConfig::~WeatherPluginConfig()
111{ 116{
112} 117}
113 118
114void WeatherPluginConfig::doLookup() 119void WeatherPluginConfig::doLookup()
115{ 120{
116 system( "weather" ); 121 system( "weather" );
117} 122}
118 123
119/* 124/*
120 125
121Doesn't seem to like QPEApplication::clipboard()... 126Doesn't seem to like QPEApplication::clipboard()...
122 127
123void WeatherPluginConfig::slotCopyLink() 128void WeatherPluginConfig::slotCopyLink()
124{ 129{
125 QPEApplication::clipboard()->setText( "http://www.nws.noaa.gov/tg/siteloc.shtml" ); 130 QPEApplication::clipboard()->setText( "http://www.nws.noaa.gov/tg/siteloc.shtml" );
126} 131}
127*/ \ No newline at end of file 132*/
diff --git a/noncore/todayplugins/weather/weatherpluginwidget.cpp b/noncore/todayplugins/weather/weatherpluginwidget.cpp
index f4ea0f2..800fdcb 100644
--- a/noncore/todayplugins/weather/weatherpluginwidget.cpp
+++ b/noncore/todayplugins/weather/weatherpluginwidget.cpp
@@ -1,324 +1,325 @@
1/* 1/*
2                This file is part of the OPIE Project 2                This file is part of the OPIE Project
3 =. 3 =.
4             .=l. Copyright (c) 2002 Dan Williams <williamsdr@acm.org> 4             .=l. Copyright (c) 2002 Dan Williams <williamsdr@acm.org>
5           .>+-= 5           .>+-=
6 _;:,     .>    :=|. This file is free software; you can 6 _;:,     .>    :=|. This file is free software; you can
7.> <`_,   >  .   <= redistribute it and/or modify it under 7.> <`_,   >  .   <= redistribute it and/or modify it under
8:`=1 )Y*s>-.--   : the terms of the GNU General Public 8:`=1 )Y*s>-.--   : the terms of the GNU General Public
9.="- .-=="i,     .._ License as published by the Free Software 9.="- .-=="i,     .._ License as published by the Free Software
10 - .   .-<_>     .<> Foundation; either version 2 of the License, 10 - .   .-<_>     .<> Foundation; either version 2 of the License,
11     ._= =}       : or (at your option) any later version. 11     ._= =}       : or (at your option) any later version.
12    .%`+i>       _;_. 12    .%`+i>       _;_.
13    .i_,=:_.      -<s. This file is distributed in the hope that 13    .i_,=:_.      -<s. This file is distributed in the hope that
14     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 14     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
15    : ..    .:,     . . . without even the implied warranty of 15    : ..    .:,     . . . without even the implied warranty of
16    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 16    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
17  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU General 17  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU General
18..}^=.=       =       ; Public License for more details. 18..}^=.=       =       ; Public License for more details.
19++=   -.     .`     .: 19++=   -.     .`     .:
20 :     =  ...= . :.=- You should have received a copy of the GNU 20 :     =  ...= . :.=- You should have received a copy of the GNU
21 -.   .:....=;==+<; General Public License along with this file; 21 -.   .:....=;==+<; General Public License along with this file;
22  -_. . .   )=.  = see the file COPYING. If not, write to the 22  -_. . .   )=.  = see the file COPYING. If not, write to the
23    --        :-=` Free Software Foundation, Inc., 23    --        :-=` Free Software Foundation, Inc.,
24 59 Temple Place - Suite 330, 24 59 Temple Place - Suite 330,
25 Boston, MA 02111-1307, USA. 25 Boston, MA 02111-1307, USA.
26 26
27*/ 27*/
28 28
29#include <qfile.h> 29#include <qfile.h>
30#include <qimage.h> 30#include <qimage.h>
31#include <qlabel.h> 31#include <qlabel.h>
32#include <qlayout.h> 32#include <qlayout.h>
33#include <qpixmap.h> 33#include <qpixmap.h>
34#include <qtextstream.h> 34#include <qtextstream.h>
35 35
36#include <opie/oprocess.h> 36#include <opie/oprocess.h>
37 37
38#include <qpe/config.h> 38#include <qpe/config.h>
39#include <qpe/resource.h> 39#include <qpe/resource.h>
40 40
41#include "weatherpluginwidget.h" 41#include "weatherpluginwidget.h"
42 42
43WeatherPluginWidget::WeatherPluginWidget( QWidget *parent, const char* name ) 43WeatherPluginWidget::WeatherPluginWidget( QWidget *parent, const char* name )
44 : QWidget( parent, name ) 44 : QWidget( parent, name )
45{ 45{
46 QHBoxLayout *layout = new QHBoxLayout( this ); 46 QHBoxLayout *layout = new QHBoxLayout( this );
47 layout->setAutoAdd( TRUE ); 47 layout->setAutoAdd( TRUE );
48 layout->setSpacing( 2 ); 48 layout->setSpacing( 2 );
49 49
50 weatherIcon = new QLabel( this ); 50 weatherIcon = new QLabel( this );
51 weatherIcon->setMaximumWidth( 32 ); 51 weatherIcon->setMaximumWidth( 32 );
52 QImage logo1 = Resource::loadImage( "todayweatherplugin/wait" ); 52 QImage logo1 = Resource::loadImage( "todayweatherplugin/wait" );
53 QPixmap pic; 53 QPixmap pic;
54 pic.convertFromImage( logo1 ); 54 pic.convertFromImage( logo1 );
55 weatherIcon->setPixmap( pic ); 55 weatherIcon->setPixmap( pic );
56 56
57 weatherLabel = new QLabel( tr( "Retreiving current weather information." ), this ); 57 weatherLabel = new QLabel( tr( "Retreiving current weather information." ), this );
58 weatherLabel->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ) ); 58 weatherLabel->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ) );
59 59
60 startTimer(1000); 60 startTimer(1000);
61} 61}
62 62
63WeatherPluginWidget::~WeatherPluginWidget() 63WeatherPluginWidget::~WeatherPluginWidget()
64{ 64{
65 QFile file( localFile ); 65 QFile file( localFile );
66 if ( file.exists() ) 66 if ( file.exists() )
67 { 67 {
68 file.remove(); 68 file.remove();
69 } 69 }
70} 70}
71 71
72void WeatherPluginWidget::timerEvent( QTimerEvent *e ) 72void WeatherPluginWidget::timerEvent( QTimerEvent *e )
73{ 73{
74 killTimer( e->timerId() ); 74 killTimer( e->timerId() );
75 retreiveData(); 75 retreiveData();
76} 76}
77 77
78 78
79 79
80void WeatherPluginWidget::retreiveData() 80void WeatherPluginWidget::retreiveData()
81{ 81{
82 Config config( "todayweatherplugin"); 82 Config config( "todayweatherplugin");
83 config.setGroup( "Config" ); 83 config.setGroup( "Config" );
84 84
85 location = config.readEntry( "Location", "" ); 85 location = config.readEntry( "Location", "" );
86 useMetric = config.readBoolEntry( "Metric", TRUE ); 86 useMetric = config.readBoolEntry( "Metric", TRUE );
87 frequency = config.readNumEntry( "Frequency", 5 ); 87 frequency = config.readNumEntry( "Frequency", 5 );
88 88
89 startTimer( frequency * 60000 ); 89 startTimer( frequency * 60000 );
90 90
91 localFile = "/tmp/"; 91 localFile = "/tmp/";
92 localFile.append( location ); 92 localFile.append( location );
93 localFile.append( ".TXT" ); 93 localFile.append( ".TXT" );
94 94
95 remoteFile = "http://weather.noaa.gov/pub/data/observations/metar/stations/"; 95 remoteFile = "http://weather.noaa.gov/pub/data/observations/metar/stations/";
96 remoteFile.append( location ); 96 remoteFile.append( location );
97 remoteFile.append( ".TXT" ); 97 remoteFile.append( ".TXT" );
98 98
99 QFile file( localFile ); 99 QFile file( localFile );
100 if ( file.exists() ) 100 if ( file.exists() )
101 { 101 {
102 file.remove(); 102 file.remove();
103 } 103 }
104 104
105 OProcess *proc = new OProcess; 105 OProcess *proc = new OProcess;
106 106
107 *proc << "wget" << "-q" << remoteFile << "-O" << localFile; 107 *proc << "wget" << "-q" << remoteFile << "-O" << localFile;
108 connect( proc, SIGNAL( processExited( OProcess * ) ), this, SLOT( dataRetrieved( OProcess * ) ) ); 108 connect( proc, SIGNAL( processExited( OProcess * ) ), this, SLOT( dataRetrieved( OProcess * ) ) );
109 proc->start(); 109 proc->start();
110} 110}
111 111
112void WeatherPluginWidget::displayWeather() 112void WeatherPluginWidget::displayWeather()
113{ 113{
114 weatherData = QString::null; 114 weatherData = QString::null;
115 115
116 QFile file( localFile ); 116 QFile file( localFile );
117 if ( file.open( IO_ReadOnly ) ) 117
118 if ( file.size() > 0 && file.open( IO_ReadOnly ) )
118 { 119 {
119 QTextStream data( &file ); 120 QTextStream data( &file );
120 while ( !data.eof() ) 121 while ( !data.eof() )
121 { 122 {
122 weatherData.append( data.readLine() ); 123 weatherData.append( data.readLine() );
123 } 124 }
124 file.close(); 125 file.close();
125 weatherData = weatherData.simplifyWhiteSpace(); 126 weatherData = weatherData.simplifyWhiteSpace();
126 127
127 QString tmpstr; 128 QString tmpstr;
128 129
129 tmpstr.append( tr( "Temp: " ) ); 130 tmpstr.append( tr( "Temp: " ) );
130 getTemp( weatherData ); 131 getTemp( weatherData );
131 tmpstr.append( dataStr ); 132 tmpstr.append( dataStr );
132 133
133 tmpstr.append( tr( " Wind: " ) ); 134 tmpstr.append( tr( " Wind: " ) );
134 getWind( weatherData ); 135 getWind( weatherData );
135 tmpstr.append( dataStr ); 136 tmpstr.append( dataStr );
136 137
137 tmpstr.append( tr( "\nPres: " ) ); 138 tmpstr.append( tr( "\nPres: " ) );
138 getPressure( weatherData ); 139 getPressure( weatherData );
139 tmpstr.append( dataStr ); 140 tmpstr.append( dataStr );
140 141
141 weatherLabel->setText( tmpstr ); 142 weatherLabel->setText( tmpstr );
142 143
143 tmpstr = "todayweatherplugin/"; 144 tmpstr = "todayweatherplugin/";
144 getIcon( weatherData ); 145 getIcon( weatherData );
145 tmpstr.append( dataStr ); 146 tmpstr.append( dataStr );
146 QImage logo1 = Resource::loadImage( tmpstr ); 147 QImage logo1 = Resource::loadImage( tmpstr );
147 QPixmap pic; 148 QPixmap pic;
148 pic.convertFromImage( logo1 ); 149 pic.convertFromImage( logo1 );
149 weatherIcon->setPixmap( pic ); 150 weatherIcon->setPixmap( pic );
150 } 151 }
151 else 152 else
152 { 153 {
153 weatherLabel->setText( tr( "Current weather data not available.\nTry looking out the window." ) ); 154 weatherLabel->setText( tr( "Current weather data not available." ) );
154 } 155 }
155} 156}
156 157
157void WeatherPluginWidget::getTemp( const QString &data ) 158void WeatherPluginWidget::getTemp( const QString &data )
158{ 159{
159 int value; 160 int value;
160 bool ok; 161 bool ok;
161 162
162 int pos = data.find( QRegExp( "M?[0-9]+/M?[0-9]+" ), 20 ); 163 int pos = data.find( QRegExp( "M?[0-9]+/M?[0-9]+" ), 20 );
163 if ( pos > -1 ) 164 if ( pos > -1 )
164 { 165 {
165 if ( data.at( pos ) == 'M' ) 166 if ( data.at( pos ) == 'M' )
166 { 167 {
167 value = -1 * data.mid( pos + 1, 2 ).toInt( &ok ); 168 value = -1 * data.mid( pos + 1, 2 ).toInt( &ok );
168 } 169 }
169 else 170 else
170 { 171 {
171 value = data.mid( pos, 2 ).toInt( &ok ); 172 value = data.mid( pos, 2 ).toInt( &ok );
172 } 173 }
173 if ( useMetric ) 174 if ( useMetric )
174 { 175 {
175 dataStr = QString::number( value ); 176 dataStr = QString::number( value );
176 dataStr.append( 'C' ); 177 dataStr.append( 'C' );
177 } 178 }
178 else 179 else
179 { 180 {
180 dataStr = QString::number( ( value * 9 / 5 ) + 32 ); 181 dataStr = QString::number( ( value * 9 / 5 ) + 32 );
181 dataStr.append( 'F' ); 182 dataStr.append( 'F' );
182 } 183 }
183 } 184 }
184 else 185 else
185 { 186 {
186 dataStr = tr( "n/a" ); 187 dataStr = tr( "n/a" );
187 } 188 }
188} 189}
189 190
190void WeatherPluginWidget::getWind( const QString &data ) 191void WeatherPluginWidget::getWind( const QString &data )
191{ 192{
192 int value; 193 int value;
193 bool ok; 194 bool ok;
194 195
195 int pos = data.find( QRegExp( "[0-9]*G*[0-9]*KT" ), 20 ); 196 int pos = data.find( QRegExp( "[0-9]*G*[0-9]*KT" ), 20 );
196 if ( pos > -1 ) 197 if ( pos > -1 )
197 { 198 {
198 if ( data.mid( pos, 3 ) != "VRB" ) 199 if ( data.mid( pos, 3 ) != "VRB" )
199 { 200 {
200 value = data.mid( pos, 3 ).toInt( &ok ); 201 value = data.mid( pos, 3 ).toInt( &ok );
201 if ( ( value >= 0 && value < 23 ) || ( value >= 239 && value <= 360 ) ) 202 if ( ( value >= 0 && value < 23 ) || ( value >= 239 && value <= 360 ) )
202 dataStr = tr("E " ); 203 dataStr = tr("E " );
203 else if ( value >= 23 && value < 69 ) 204 else if ( value >= 23 && value < 69 )
204 dataStr = tr( "NE " ); 205 dataStr = tr( "NE " );
205 else if ( value >= 69 && value < 113 ) 206 else if ( value >= 69 && value < 113 )
206 dataStr = tr( "N " ); 207 dataStr = tr( "N " );
207 else if ( value >= 113 && value < 157 ) 208 else if ( value >= 113 && value < 157 )
208 dataStr = tr( "NW " ); 209 dataStr = tr( "NW " );
209 else if ( value >= 157 && value < 203 ) 210 else if ( value >= 157 && value < 203 )
210 dataStr = tr( "W " ); 211 dataStr = tr( "W " );
211 else if ( value >= 203 && value < 248 ) 212 else if ( value >= 203 && value < 248 )
212 dataStr = tr( "SW " ); 213 dataStr = tr( "SW " );
213 else if ( value >= 248 && value < 294 ) 214 else if ( value >= 248 && value < 294 )
214 dataStr = tr( "S " ); 215 dataStr = tr( "S " );
215 else if ( value >= 294 && value < 238 ) 216 else if ( value >= 294 && value < 238 )
216 dataStr = tr( "SE " ); 217 dataStr = tr( "SE " );
217 } 218 }
218 if ( data.mid( pos + 5, 1) == "G" || 219 if ( data.mid( pos + 5, 1) == "G" ||
219 data.mid( pos + 5, 1) == "K" ) 220 data.mid( pos + 5, 1) == "K" )
220 { 221 {
221 value = data.mid( pos + 3, 2 ).toInt( &ok ); 222 value = data.mid( pos + 3, 2 ).toInt( &ok );
222 } 223 }
223 else 224 else
224 { 225 {
225 value = data.mid( pos + 3, 3 ).toInt( &ok ); 226 value = data.mid( pos + 3, 3 ).toInt( &ok );
226 } 227 }
227 if ( useMetric ) 228 if ( useMetric )
228 { 229 {
229 value = value * 3.6 / 1.94; 230 value = value * 3.6 / 1.94;
230 dataStr.append( QString::number( value ) ); 231 dataStr.append( QString::number( value ) );
231 dataStr.append( tr( " KPH" ) ); 232 dataStr.append( tr( " KPH" ) );
232 } 233 }
233 else 234 else
234 { 235 {
235 value = value * 2.24 / 1.94; 236 value = value * 2.24 / 1.94;
236 dataStr.append( QString::number( value ) ); 237 dataStr.append( QString::number( value ) );
237 dataStr.append( tr( " MPH" ) ); 238 dataStr.append( tr( " MPH" ) );
238 } 239 }
239 } 240 }
240 else 241 else
241 { 242 {
242 dataStr = tr( "n/a" ); 243 dataStr = tr( "n/a" );
243 } 244 }
244} 245}
245 246
246void WeatherPluginWidget::getPressure( const QString &data ) 247void WeatherPluginWidget::getPressure( const QString &data )
247{ 248{
248 float value; 249 float value;
249 bool ok; 250 bool ok;
250 251
251 int pos = data.find( QRegExp( "[AQ][0-9]+" ), 20 ); 252 int pos = data.find( QRegExp( "[AQ][0-9]+" ), 20 );
252 if ( pos > -1 ) 253 if ( pos > -1 )
253 { 254 {
254 value = data.mid( pos + 1, 4 ).toFloat( &ok ); 255 value = data.mid( pos + 1, 4 ).toFloat( &ok );
255 if ( useMetric ) 256 if ( useMetric )
256 { 257 {
257 if ( data.mid( pos, 1 ) == "A" ) 258 if ( data.mid( pos, 1 ) == "A" )
258 value *= 33.8639 / 100; 259 value *= 33.8639 / 100;
259 dataStr = QString::number( value, 'f', 2 ); 260 dataStr = QString::number( value, 'f', 2 );
260 dataStr.append( tr( " hPa" ) ); 261 dataStr.append( tr( " hPa" ) );
261 } 262 }
262 else 263 else
263 { 264 {
264 if ( data.mid( pos, 1 ) == "Q" ) 265 if ( data.mid( pos, 1 ) == "Q" )
265 value /= 33.8639; 266 value /= 33.8639;
266 else 267 else
267 value /= 100; 268 value /= 100;
268 dataStr = QString::number( value, 'f', 2 ); 269 dataStr = QString::number( value, 'f', 2 );
269 dataStr.append( tr( " Hg" ) ); 270 dataStr.append( tr( " Hg" ) );
270 } 271 }
271 } 272 }
272 else 273 else
273 { 274 {
274 dataStr = tr( "n/a" ); 275 dataStr = tr( "n/a" );
275 } 276 }
276} 277}
277 278
278void WeatherPluginWidget::getIcon(const QString &data ) 279void WeatherPluginWidget::getIcon(const QString &data )
279{ 280{
280 dataStr = "psunny"; 281 dataStr = "psunny";
281 if ( data.find( "CLR ", 20 ) > -1 || 282 if ( data.find( "CLR ", 20 ) > -1 ||
282 data.find( "SKC ", 20 ) > -1 || 283 data.find( "SKC ", 20 ) > -1 ||
283 data.find( "CAVOK ", 20 ) > -1 ) 284 data.find( "CAVOK ", 20 ) > -1 )
284 { 285 {
285 dataStr = "sunny"; 286 dataStr = "sunny";
286 } 287 }
287 else if ( data.find( "SH ", 20 ) > -1 || 288 else if ( data.find( "SH ", 20 ) > -1 ||
288 data.find( "DZ ", 20 ) > -1 || 289 data.find( "DZ ", 20 ) > -1 ||
289 data.find( "RA ", 20 ) > -1 || 290 data.find( "RA ", 20 ) > -1 ||
290 data.find( "UP ", 20 ) > -1 || 291 data.find( "UP ", 20 ) > -1 ||
291 data.find( "BR ", 20 ) > -1 ) 292 data.find( "BR ", 20 ) > -1 )
292 { 293 {
293 dataStr = "shower"; 294 dataStr = "shower";
294 } 295 }
295 else if ( data.find( "TS ", 20 ) > -1 ) 296 else if ( data.find( "TS ", 20 ) > -1 )
296 { 297 {
297 dataStr = "tstorm"; 298 dataStr = "tstorm";
298 } 299 }
299 else if ( data.find( "SN ", 20 ) > -1 || 300 else if ( data.find( "SN ", 20 ) > -1 ||
300 data.find( "SG ", 20 ) > -1 ) 301 data.find( "SG ", 20 ) > -1 )
301 { 302 {
302 dataStr = "snow"; 303 dataStr = "snow";
303 } 304 }
304 else if ( data.find( "FZ ", 20 ) > -1 || 305 else if ( data.find( "FZ ", 20 ) > -1 ||
305 data.find( "GR ", 20 ) > -1 || 306 data.find( "GR ", 20 ) > -1 ||
306 data.find( "GS ", 20 ) > -1 || 307 data.find( "GS ", 20 ) > -1 ||
307 data.find( "PE ", 20 ) > -1 || 308 data.find( "PE ", 20 ) > -1 ||
308 data.find( "IC ", 20 ) > -1 ) 309 data.find( "IC ", 20 ) > -1 )
309 { 310 {
310 dataStr = "sleet"; 311 dataStr = "sleet";
311 } 312 }
312} 313}
313 314
314void WeatherPluginWidget::dataRetrieved( OProcess *process ) 315void WeatherPluginWidget::dataRetrieved( OProcess *process )
315{ 316{
316 if ( process->normalExit() ) 317 if ( process->normalExit() )
317 { 318 {
318 displayWeather(); 319 displayWeather();
319 } 320 }
320 else 321 else
321 { 322 {
322 weatherLabel->setText( tr( "Current weather data not available.\nTry looking out the window." ) ); 323 weatherLabel->setText( tr( "Current weather data not available." ) );
323 } 324 }
324} 325}