author | zecke <zecke> | 2003-05-21 17:04:59 (UTC) |
---|---|---|
committer | zecke <zecke> | 2003-05-21 17:04:59 (UTC) |
commit | 6041221c6d2892c6e7a61570c524fd090f447739 (patch) (unidiff) | |
tree | 2df82af7bfd19f1bb42268f696d38b3ab180135d | |
parent | 9a3bcbb66840f7a0affddd551ee1356259c85ca4 (diff) | |
download | opie-6041221c6d2892c6e7a61570c524fd090f447739.zip opie-6041221c6d2892c6e7a61570c524fd090f447739.tar.gz opie-6041221c6d2892c6e7a61570c524fd090f447739.tar.bz2 |
Fix to prevent division by 0
from Mark Hsu
-rw-r--r-- | noncore/settings/netsystemtime/predicttabwidget.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/noncore/settings/netsystemtime/predicttabwidget.cpp b/noncore/settings/netsystemtime/predicttabwidget.cpp index 8dc889f..a9fe418 100644 --- a/noncore/settings/netsystemtime/predicttabwidget.cpp +++ b/noncore/settings/netsystemtime/predicttabwidget.cpp | |||
@@ -1,167 +1,168 @@ | |||
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 OPIE team <opie@handhelds.org?> | 4 | .=l. Copyright (c) 2002 OPIE team <opie@handhelds.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 "predicttabwidget.h" | 29 | #include "predicttabwidget.h" |
30 | 30 | ||
31 | #include <qpe/config.h> | 31 | #include <qpe/config.h> |
32 | #include <qpe/timeconversion.h> | 32 | #include <qpe/timeconversion.h> |
33 | 33 | ||
34 | #include <qlabel.h> | 34 | #include <qlabel.h> |
35 | #include <qlayout.h> | 35 | #include <qlayout.h> |
36 | #include <qpushbutton.h> | 36 | #include <qpushbutton.h> |
37 | #include <qscrollview.h> | 37 | #include <qscrollview.h> |
38 | #include <qtable.h> | 38 | #include <qtable.h> |
39 | 39 | ||
40 | #include <stdlib.h> | 40 | #include <stdlib.h> |
41 | 41 | ||
42 | PredictTabWidget::PredictTabWidget( QWidget *parent ) | 42 | PredictTabWidget::PredictTabWidget( QWidget *parent ) |
43 | : QWidget( parent, 0x0, 0 ) | 43 | : QWidget( parent, 0x0, 0 ) |
44 | { | 44 | { |
45 | /* | 45 | /* |
46 | QVBoxLayout *tmpvb = new QVBoxLayout( this ); | 46 | QVBoxLayout *tmpvb = new QVBoxLayout( this ); |
47 | QScrollView *sv = new QScrollView( this ); | 47 | QScrollView *sv = new QScrollView( this ); |
48 | tmpvb->addWidget( sv, 0, 0 ); | 48 | tmpvb->addWidget( sv, 0, 0 ); |
49 | sv->setResizePolicy( QScrollView::AutoOneFit ); | 49 | sv->setResizePolicy( QScrollView::AutoOneFit ); |
50 | sv->setFrameStyle( QFrame::NoFrame ); | 50 | sv->setFrameStyle( QFrame::NoFrame ); |
51 | QWidget *container = new QWidget( sv->viewport() ); | 51 | QWidget *container = new QWidget( sv->viewport() ); |
52 | sv->addChild( container ); | 52 | sv->addChild( container ); |
53 | */ | 53 | */ |
54 | 54 | ||
55 | QGridLayout *layout = new QGridLayout( this ); | 55 | QGridLayout *layout = new QGridLayout( this ); |
56 | layout->setMargin( 2 ); | 56 | layout->setMargin( 2 ); |
57 | layout->setSpacing( 4 ); | 57 | layout->setSpacing( 4 ); |
58 | 58 | ||
59 | // Predicted time drift | 59 | // Predicted time drift |
60 | layout->addWidget( new QLabel( tr( "Predicted time drift" ), this ), 0, 0 ); | 60 | layout->addWidget( new QLabel( tr( "Predicted time drift" ), this ), 0, 0 ); |
61 | lblDrift = new QLabel( tr( "n/a" ), this ); | 61 | lblDrift = new QLabel( tr( "n/a" ), this ); |
62 | layout->addWidget( lblDrift, 0, 1 ); | 62 | layout->addWidget( lblDrift, 0, 1 ); |
63 | 63 | ||
64 | // Estimated time difference | 64 | // Estimated time difference |
65 | layout->addWidget( new QLabel( tr( "Estimated shift" ), this ), 1, 0 ); | 65 | layout->addWidget( new QLabel( tr( "Estimated shift" ), this ), 1, 0 ); |
66 | lblDiff = new QLabel( tr( "n/a" ), this ); | 66 | lblDiff = new QLabel( tr( "n/a" ), this ); |
67 | layout->addWidget( lblDiff, 1, 1 ); | 67 | layout->addWidget( lblDiff, 1, 1 ); |
68 | 68 | ||
69 | // Predicted time | 69 | // Predicted time |
70 | layout->addWidget( new QLabel( tr( "Predicted time" ), this ), 2, 0 ); | 70 | layout->addWidget( new QLabel( tr( "Predicted time" ), this ), 2, 0 ); |
71 | lblPredicted = new QLabel( tr( "n/a" ), this ); | 71 | lblPredicted = new QLabel( tr( "n/a" ), this ); |
72 | layout->addWidget( lblPredicted, 2, 1 ); | 72 | layout->addWidget( lblPredicted, 2, 1 ); |
73 | 73 | ||
74 | // Prediction table | 74 | // Prediction table |
75 | tblLookups = new QTable( 2, 3, this ); | 75 | tblLookups = new QTable( 2, 3, this ); |
76 | QFont font( tblLookups->font() ); | 76 | QFont font( tblLookups->font() ); |
77 | font.setPointSize( 7 ); | 77 | font.setPointSize( 7 ); |
78 | tblLookups->setFont( font ); | 78 | tblLookups->setFont( font ); |
79 | tblLookups->horizontalHeader()->setLabel( 0, tr( "Shift [s/h]" ) ); | 79 | tblLookups->horizontalHeader()->setLabel( 0, tr( "Shift [s/h]" ) ); |
80 | tblLookups->horizontalHeader()->setLabel( 1, tr( "Last [h]" ) ); | 80 | tblLookups->horizontalHeader()->setLabel( 1, tr( "Last [h]" ) ); |
81 | tblLookups->horizontalHeader()->setLabel( 2, tr( "Offset [s]" ) ); | 81 | tblLookups->horizontalHeader()->setLabel( 2, tr( "Offset [s]" ) ); |
82 | tblLookups->setColumnWidth( 0, 78 ); | 82 | tblLookups->setColumnWidth( 0, 78 ); |
83 | tblLookups->setColumnWidth( 1, 50 ); | 83 | tblLookups->setColumnWidth( 1, 50 ); |
84 | tblLookups->setColumnWidth( 2, 50 ); | 84 | tblLookups->setColumnWidth( 2, 50 ); |
85 | tblLookups->setMinimumHeight( 50 ); | 85 | tblLookups->setMinimumHeight( 50 ); |
86 | tblLookups->setSizePolicy( QSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum ) ); | 86 | tblLookups->setSizePolicy( QSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum ) ); |
87 | layout->addMultiCellWidget( tblLookups, 3, 3, 0, 1 ); | 87 | layout->addMultiCellWidget( tblLookups, 3, 3, 0, 1 ); |
88 | 88 | ||
89 | // Predict time button | 89 | // Predict time button |
90 | QPushButton *pb = new QPushButton( tr( "Predict time" ), this ); | 90 | QPushButton *pb = new QPushButton( tr( "Predict time" ), this ); |
91 | connect( pb, SIGNAL(clicked()), this, SLOT(slotPredictTime()) ); | 91 | connect( pb, SIGNAL(clicked()), this, SLOT(slotPredictTime()) ); |
92 | layout->addWidget( pb, 4, 0 ); | 92 | layout->addWidget( pb, 4, 0 ); |
93 | 93 | ||
94 | // Set predicted time button | 94 | // Set predicted time button |
95 | pb = new QPushButton( tr( "Set predicted time" ), this ); | 95 | pb = new QPushButton( tr( "Set predicted time" ), this ); |
96 | connect( pb, SIGNAL(clicked()), this, SLOT(slotSetPredictedTime()) ); | 96 | connect( pb, SIGNAL(clicked()), this, SLOT(slotSetPredictedTime()) ); |
97 | layout->addWidget( pb, 4, 1 ); | 97 | layout->addWidget( pb, 4, 1 ); |
98 | 98 | ||
99 | // Initialize values | 99 | // Initialize values |
100 | Config config( "ntp" ); | 100 | Config config( "ntp" ); |
101 | config.setGroup( "lookups" ); | 101 | config.setGroup( "lookups" ); |
102 | int lookupCount = config.readNumEntry( "count", 0 ); | 102 | int lookupCount = config.readNumEntry( "count", 0 ); |
103 | float last, shift, shiftPerSec; | 103 | float last, shift, shiftPerSec; |
104 | tblLookups->setNumRows( lookupCount ); | 104 | tblLookups->setNumRows( lookupCount ); |
105 | int cw = tblLookups->width() / 4; | 105 | int cw = tblLookups->width() / 4; |
106 | cw = 50; | 106 | cw = 50; |
107 | tblLookups->sortColumn( 0, FALSE, TRUE ); | 107 | tblLookups->sortColumn( 0, FALSE, TRUE ); |
108 | _shiftPerSec = 0; | 108 | _shiftPerSec = 0; |
109 | QString grpname; | 109 | QString grpname; |
110 | for ( int i=0; i < lookupCount; i++ ) | 110 | for ( int i=0; i < lookupCount; i++ ) |
111 | { | 111 | { |
112 | grpname = "lookup_"; | 112 | grpname = "lookup_"; |
113 | grpname.append( QString::number( i ) ); | 113 | grpname.append( QString::number( i ) ); |
114 | config.setGroup( grpname ); | 114 | config.setGroup( grpname ); |
115 | last = config.readEntry( "secsSinceLast", 0 ).toFloat(); | 115 | last = config.readEntry( "secsSinceLast", 0 ).toFloat(); |
116 | shift = QString( config.readEntry( "timeShift", 0 ) ).toFloat(); | 116 | shift = QString( config.readEntry( "timeShift", 0 ) ).toFloat(); |
117 | shiftPerSec = shift / last; | 117 | shiftPerSec = shift / last; |
118 | _shiftPerSec += shiftPerSec; | 118 | _shiftPerSec += shiftPerSec; |
119 | tblLookups->setText( i, 0, QString::number( shiftPerSec * 60 * 60 ) ); | 119 | tblLookups->setText( i, 0, QString::number( shiftPerSec * 60 * 60 ) ); |
120 | tblLookups->setText( i, 2, QString::number( shift ) ); | 120 | tblLookups->setText( i, 2, QString::number( shift ) ); |
121 | tblLookups->setText( i, 1, QString::number( last / ( 60 * 60 ) ) ); | 121 | tblLookups->setText( i, 1, QString::number( last / ( 60 * 60 ) ) ); |
122 | } | 122 | } |
123 | _shiftPerSec /= lookupCount; | 123 | if(lookupCount) |
124 | _shiftPerSec /= lookupCount; | ||
124 | QString drift = QString::number( _shiftPerSec * 60 * 60); | 125 | QString drift = QString::number( _shiftPerSec * 60 * 60); |
125 | drift.append( tr( " s/h" ) ); | 126 | drift.append( tr( " s/h" ) ); |
126 | lblDrift->setText( drift ); | 127 | lblDrift->setText( drift ); |
127 | 128 | ||
128 | Config lconfig( "locale" ); | 129 | Config lconfig( "locale" ); |
129 | lconfig.setGroup( "Location" ); | 130 | lconfig.setGroup( "Location" ); |
130 | tz = lconfig.readEntry( "Timezone", "America/New_York" ); | 131 | tz = lconfig.readEntry( "Timezone", "America/New_York" ); |
131 | } | 132 | } |
132 | 133 | ||
133 | PredictTabWidget::~PredictTabWidget() | 134 | PredictTabWidget::~PredictTabWidget() |
134 | { | 135 | { |
135 | } | 136 | } |
136 | 137 | ||
137 | void PredictTabWidget::setShiftPerSec( int i ) | 138 | void PredictTabWidget::setShiftPerSec( int i ) |
138 | { | 139 | { |
139 | _shiftPerSec += i; | 140 | _shiftPerSec += i; |
140 | } | 141 | } |
141 | 142 | ||
142 | void PredictTabWidget::slotTZChanged( const QString &newtz ) | 143 | void PredictTabWidget::slotTZChanged( const QString &newtz ) |
143 | { | 144 | { |
144 | tz = newtz; | 145 | tz = newtz; |
145 | } | 146 | } |
146 | 147 | ||
147 | void PredictTabWidget::slotPredictTime() | 148 | void PredictTabWidget::slotPredictTime() |
148 | { | 149 | { |
149 | Config config( "ntp" ); | 150 | Config config( "ntp" ); |
150 | config.setGroup( "lookups" ); | 151 | config.setGroup( "lookups" ); |
151 | int lastTime = config.readNumEntry( "time", 0 ); | 152 | int lastTime = config.readNumEntry( "time", 0 ); |
152 | config.writeEntry( "lastNtp", TRUE ); | 153 | config.writeEntry( "lastNtp", TRUE ); |
153 | setenv( "TZ", tz, 1 ); | 154 | setenv( "TZ", tz, 1 ); |
154 | int now = TimeConversion::toUTC( QDateTime::currentDateTime() ); | 155 | int now = TimeConversion::toUTC( QDateTime::currentDateTime() ); |
155 | int corr = int( ( now - lastTime ) * _shiftPerSec ); | 156 | int corr = int( ( now - lastTime ) * _shiftPerSec ); |
156 | QString diff = QString::number( corr ); | 157 | QString diff = QString::number( corr ); |
157 | diff.append( tr( " seconds" ) ); | 158 | diff.append( tr( " seconds" ) ); |
158 | lblDiff->setText( diff ); | 159 | lblDiff->setText( diff ); |
159 | predictedTime = QDateTime::currentDateTime().addSecs( corr ); | 160 | predictedTime = QDateTime::currentDateTime().addSecs( corr ); |
160 | lblPredicted->setText( predictedTime.toString() ); | 161 | lblPredicted->setText( predictedTime.toString() ); |
161 | } | 162 | } |
162 | 163 | ||
163 | void PredictTabWidget::slotSetPredictedTime() | 164 | void PredictTabWidget::slotSetPredictedTime() |
164 | { | 165 | { |
165 | slotPredictTime(); | 166 | slotPredictTime(); |
166 | emit setTime( predictedTime ); | 167 | emit setTime( predictedTime ); |
167 | } | 168 | } |