Diffstat (limited to 'noncore/settings/netsystemtime/predicttabwidget.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/settings/netsystemtime/predicttabwidget.cpp | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/noncore/settings/netsystemtime/predicttabwidget.cpp b/noncore/settings/netsystemtime/predicttabwidget.cpp new file mode 100644 index 0000000..8dc889f --- a/dev/null +++ b/noncore/settings/netsystemtime/predicttabwidget.cpp | |||
@@ -0,0 +1,167 @@ | |||
1 | /* | ||
2 | This file is part of the OPIE Project | ||
3 | =. | ||
4 | .=l. Copyright (c) 2002 OPIE team <opie@handhelds.org?> | ||
5 | .>+-= | ||
6 | _;:, .> :=|. This file is free software; you can | ||
7 | .> <`_, > . <= redistribute it and/or modify it under | ||
8 | :`=1 )Y*s>-.-- : the terms of the GNU General Public | ||
9 | .="- .-=="i, .._ License as published by the Free Software | ||
10 | - . .-<_> .<> Foundation; either version 2 of the License, | ||
11 | ._= =} : or (at your option) any later version. | ||
12 | .%`+i> _;_. | ||
13 | .i_,=:_. -<s. This file is distributed in the hope that | ||
14 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; | ||
15 | : .. .:, . . . without even the implied warranty of | ||
16 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A | ||
17 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU General | ||
18 | ..}^=.= = ; Public License for more details. | ||
19 | ++= -. .` .: | ||
20 | : = ...= . :.=- You should have received a copy of the GNU | ||
21 | -. .:....=;==+<; General Public License along with this file; | ||
22 | -_. . . )=. = see the file COPYING. If not, write to the | ||
23 | -- :-=` Free Software Foundation, Inc., | ||
24 | 59 Temple Place - Suite 330, | ||
25 | Boston, MA 02111-1307, USA. | ||
26 | |||
27 | */ | ||
28 | |||
29 | #include "predicttabwidget.h" | ||
30 | |||
31 | #include <qpe/config.h> | ||
32 | #include <qpe/timeconversion.h> | ||
33 | |||
34 | #include <qlabel.h> | ||
35 | #include <qlayout.h> | ||
36 | #include <qpushbutton.h> | ||
37 | #include <qscrollview.h> | ||
38 | #include <qtable.h> | ||
39 | |||
40 | #include <stdlib.h> | ||
41 | |||
42 | PredictTabWidget::PredictTabWidget( QWidget *parent ) | ||
43 | : QWidget( parent, 0x0, 0 ) | ||
44 | { | ||
45 | /* | ||
46 | QVBoxLayout *tmpvb = new QVBoxLayout( this ); | ||
47 | QScrollView *sv = new QScrollView( this ); | ||
48 | tmpvb->addWidget( sv, 0, 0 ); | ||
49 | sv->setResizePolicy( QScrollView::AutoOneFit ); | ||
50 | sv->setFrameStyle( QFrame::NoFrame ); | ||
51 | QWidget *container = new QWidget( sv->viewport() ); | ||
52 | sv->addChild( container ); | ||
53 | */ | ||
54 | |||
55 | QGridLayout *layout = new QGridLayout( this ); | ||
56 | layout->setMargin( 2 ); | ||
57 | layout->setSpacing( 4 ); | ||
58 | |||
59 | // Predicted time drift | ||
60 | layout->addWidget( new QLabel( tr( "Predicted time drift" ), this ), 0, 0 ); | ||
61 | lblDrift = new QLabel( tr( "n/a" ), this ); | ||
62 | layout->addWidget( lblDrift, 0, 1 ); | ||
63 | |||
64 | // Estimated time difference | ||
65 | layout->addWidget( new QLabel( tr( "Estimated shift" ), this ), 1, 0 ); | ||
66 | lblDiff = new QLabel( tr( "n/a" ), this ); | ||
67 | layout->addWidget( lblDiff, 1, 1 ); | ||
68 | |||
69 | // Predicted time | ||
70 | layout->addWidget( new QLabel( tr( "Predicted time" ), this ), 2, 0 ); | ||
71 | lblPredicted = new QLabel( tr( "n/a" ), this ); | ||
72 | layout->addWidget( lblPredicted, 2, 1 ); | ||
73 | |||
74 | // Prediction table | ||
75 | tblLookups = new QTable( 2, 3, this ); | ||
76 | QFont font( tblLookups->font() ); | ||
77 | font.setPointSize( 7 ); | ||
78 | tblLookups->setFont( font ); | ||
79 | tblLookups->horizontalHeader()->setLabel( 0, tr( "Shift [s/h]" ) ); | ||
80 | tblLookups->horizontalHeader()->setLabel( 1, tr( "Last [h]" ) ); | ||
81 | tblLookups->horizontalHeader()->setLabel( 2, tr( "Offset [s]" ) ); | ||
82 | tblLookups->setColumnWidth( 0, 78 ); | ||
83 | tblLookups->setColumnWidth( 1, 50 ); | ||
84 | tblLookups->setColumnWidth( 2, 50 ); | ||
85 | tblLookups->setMinimumHeight( 50 ); | ||
86 | tblLookups->setSizePolicy( QSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum ) ); | ||
87 | layout->addMultiCellWidget( tblLookups, 3, 3, 0, 1 ); | ||
88 | |||
89 | // Predict time button | ||
90 | QPushButton *pb = new QPushButton( tr( "Predict time" ), this ); | ||
91 | connect( pb, SIGNAL(clicked()), this, SLOT(slotPredictTime()) ); | ||
92 | layout->addWidget( pb, 4, 0 ); | ||
93 | |||
94 | // Set predicted time button | ||
95 | pb = new QPushButton( tr( "Set predicted time" ), this ); | ||
96 | connect( pb, SIGNAL(clicked()), this, SLOT(slotSetPredictedTime()) ); | ||
97 | layout->addWidget( pb, 4, 1 ); | ||
98 | |||
99 | // Initialize values | ||
100 | Config config( "ntp" ); | ||
101 | config.setGroup( "lookups" ); | ||
102 | int lookupCount = config.readNumEntry( "count", 0 ); | ||
103 | float last, shift, shiftPerSec; | ||
104 | tblLookups->setNumRows( lookupCount ); | ||
105 | int cw = tblLookups->width() / 4; | ||
106 | cw = 50; | ||
107 | tblLookups->sortColumn( 0, FALSE, TRUE ); | ||
108 | _shiftPerSec = 0; | ||
109 | QString grpname; | ||
110 | for ( int i=0; i < lookupCount; i++ ) | ||
111 | { | ||
112 | grpname = "lookup_"; | ||
113 | grpname.append( QString::number( i ) ); | ||
114 | config.setGroup( grpname ); | ||
115 | last = config.readEntry( "secsSinceLast", 0 ).toFloat(); | ||
116 | shift = QString( config.readEntry( "timeShift", 0 ) ).toFloat(); | ||
117 | shiftPerSec = shift / last; | ||
118 | _shiftPerSec += shiftPerSec; | ||
119 | tblLookups->setText( i, 0, QString::number( shiftPerSec * 60 * 60 ) ); | ||
120 | tblLookups->setText( i, 2, QString::number( shift ) ); | ||
121 | tblLookups->setText( i, 1, QString::number( last / ( 60 * 60 ) ) ); | ||
122 | } | ||
123 | _shiftPerSec /= lookupCount; | ||
124 | QString drift = QString::number( _shiftPerSec * 60 * 60); | ||
125 | drift.append( tr( " s/h" ) ); | ||
126 | lblDrift->setText( drift ); | ||
127 | |||
128 | Config lconfig( "locale" ); | ||
129 | lconfig.setGroup( "Location" ); | ||
130 | tz = lconfig.readEntry( "Timezone", "America/New_York" ); | ||
131 | } | ||
132 | |||
133 | PredictTabWidget::~PredictTabWidget() | ||
134 | { | ||
135 | } | ||
136 | |||
137 | void PredictTabWidget::setShiftPerSec( int i ) | ||
138 | { | ||
139 | _shiftPerSec += i; | ||
140 | } | ||
141 | |||
142 | void PredictTabWidget::slotTZChanged( const QString &newtz ) | ||
143 | { | ||
144 | tz = newtz; | ||
145 | } | ||
146 | |||
147 | void PredictTabWidget::slotPredictTime() | ||
148 | { | ||
149 | Config config( "ntp" ); | ||
150 | config.setGroup( "lookups" ); | ||
151 | int lastTime = config.readNumEntry( "time", 0 ); | ||
152 | config.writeEntry( "lastNtp", TRUE ); | ||
153 | setenv( "TZ", tz, 1 ); | ||
154 | int now = TimeConversion::toUTC( QDateTime::currentDateTime() ); | ||
155 | int corr = int( ( now - lastTime ) * _shiftPerSec ); | ||
156 | QString diff = QString::number( corr ); | ||
157 | diff.append( tr( " seconds" ) ); | ||
158 | lblDiff->setText( diff ); | ||
159 | predictedTime = QDateTime::currentDateTime().addSecs( corr ); | ||
160 | lblPredicted->setText( predictedTime.toString() ); | ||
161 | } | ||
162 | |||
163 | void PredictTabWidget::slotSetPredictedTime() | ||
164 | { | ||
165 | slotPredictTime(); | ||
166 | emit setTime( predictedTime ); | ||
167 | } | ||