summaryrefslogtreecommitdiff
path: root/noncore/settings/netsystemtime/predicttabwidget.cpp
authordrw <drw>2003-04-13 22:32:47 (UTC)
committer drw <drw>2003-04-13 22:32:47 (UTC)
commit166ac140f8e01369a5d281c2918b0f8b9045f8e5 (patch) (side-by-side diff)
tree672cbb8318703b6cedc7f83fb72c058d0b592c9e /noncore/settings/netsystemtime/predicttabwidget.cpp
parentf47258125bac368987a90ca49a118721ecbc3a8b (diff)
downloadopie-166ac140f8e01369a5d281c2918b0f8b9045f8e5.zip
opie-166ac140f8e01369a5d281c2918b0f8b9045f8e5.tar.gz
opie-166ac140f8e01369a5d281c2918b0f8b9045f8e5.tar.bz2
Revamped NetSystemTime! Changes include: 1. improved UI (e.g. ok/cancel work, timezone correctly changes date, new layout better suited for running in landscape mode, etc.) 2. improved code organization 3. smaller executable
Diffstat (limited to 'noncore/settings/netsystemtime/predicttabwidget.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/netsystemtime/predicttabwidget.cpp167
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 @@
+/*
+                This file is part of the OPIE Project
+ =.
+             .=l. Copyright (c) 2002 OPIE team <opie@handhelds.org?>
+           .>+-=
+ _;:,     .>    :=|. This file is free software; you can
+.> <`_,   >  .   <= redistribute it and/or modify it under
+:`=1 )Y*s>-.--   : the terms of the GNU General Public
+.="- .-=="i,     .._ License as published by the Free Software
+ - .   .-<_>     .<> Foundation; either version 2 of the License,
+     ._= =}       : or (at your option) any later version.
+    .%`+i>       _;_.
+    .i_,=:_.      -<s. This file is distributed in the hope that
+     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
+    : ..    .:,     . . . without even the implied warranty of
+    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
+  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU General
+..}^=.=       =       ; Public License for more details.
+++=   -.     .`     .:
+ :     =  ...= . :.=- You should have received a copy of the GNU
+ -.   .:....=;==+<; General Public License along with this file;
+  -_. . .   )=.  = see the file COPYING. If not, write to the
+    --        :-=` Free Software Foundation, Inc.,
+ 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+*/
+
+#include "predicttabwidget.h"
+
+#include <qpe/config.h>
+#include <qpe/timeconversion.h>
+
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qpushbutton.h>
+#include <qscrollview.h>
+#include <qtable.h>
+
+#include <stdlib.h>
+
+PredictTabWidget::PredictTabWidget( QWidget *parent )
+ : QWidget( parent, 0x0, 0 )
+{
+/*
+ QVBoxLayout *tmpvb = new QVBoxLayout( this );
+ QScrollView *sv = new QScrollView( this );
+ tmpvb->addWidget( sv, 0, 0 );
+ sv->setResizePolicy( QScrollView::AutoOneFit );
+ sv->setFrameStyle( QFrame::NoFrame );
+ QWidget *container = new QWidget( sv->viewport() );
+ sv->addChild( container );
+*/
+
+ QGridLayout *layout = new QGridLayout( this );
+ layout->setMargin( 2 );
+ layout->setSpacing( 4 );
+
+ // Predicted time drift
+ layout->addWidget( new QLabel( tr( "Predicted time drift" ), this ), 0, 0 );
+ lblDrift = new QLabel( tr( "n/a" ), this );
+ layout->addWidget( lblDrift, 0, 1 );
+
+ // Estimated time difference
+ layout->addWidget( new QLabel( tr( "Estimated shift" ), this ), 1, 0 );
+ lblDiff = new QLabel( tr( "n/a" ), this );
+ layout->addWidget( lblDiff, 1, 1 );
+
+ // Predicted time
+ layout->addWidget( new QLabel( tr( "Predicted time" ), this ), 2, 0 );
+ lblPredicted = new QLabel( tr( "n/a" ), this );
+ layout->addWidget( lblPredicted, 2, 1 );
+
+ // Prediction table
+ tblLookups = new QTable( 2, 3, this );
+ QFont font( tblLookups->font() );
+ font.setPointSize( 7 );
+ tblLookups->setFont( font );
+ tblLookups->horizontalHeader()->setLabel( 0, tr( "Shift [s/h]" ) );
+ tblLookups->horizontalHeader()->setLabel( 1, tr( "Last [h]" ) );
+ tblLookups->horizontalHeader()->setLabel( 2, tr( "Offset [s]" ) );
+ tblLookups->setColumnWidth( 0, 78 );
+ tblLookups->setColumnWidth( 1, 50 );
+ tblLookups->setColumnWidth( 2, 50 );
+ tblLookups->setMinimumHeight( 50 );
+ tblLookups->setSizePolicy( QSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum ) );
+ layout->addMultiCellWidget( tblLookups, 3, 3, 0, 1 );
+
+ // Predict time button
+ QPushButton *pb = new QPushButton( tr( "Predict time" ), this );
+ connect( pb, SIGNAL(clicked()), this, SLOT(slotPredictTime()) );
+ layout->addWidget( pb, 4, 0 );
+
+ // Set predicted time button
+ pb = new QPushButton( tr( "Set predicted time" ), this );
+ connect( pb, SIGNAL(clicked()), this, SLOT(slotSetPredictedTime()) );
+ layout->addWidget( pb, 4, 1 );
+
+ // Initialize values
+ Config config( "ntp" );
+ config.setGroup( "lookups" );
+ int lookupCount = config.readNumEntry( "count", 0 );
+ float last, shift, shiftPerSec;
+ tblLookups->setNumRows( lookupCount );
+ int cw = tblLookups->width() / 4;
+ cw = 50;
+ tblLookups->sortColumn( 0, FALSE, TRUE );
+ _shiftPerSec = 0;
+ QString grpname;
+ for ( int i=0; i < lookupCount; i++ )
+ {
+ grpname = "lookup_";
+ grpname.append( QString::number( i ) );
+ config.setGroup( grpname );
+ last = config.readEntry( "secsSinceLast", 0 ).toFloat();
+ shift = QString( config.readEntry( "timeShift", 0 ) ).toFloat();
+ shiftPerSec = shift / last;
+ _shiftPerSec += shiftPerSec;
+ tblLookups->setText( i, 0, QString::number( shiftPerSec * 60 * 60 ) );
+ tblLookups->setText( i, 2, QString::number( shift ) );
+ tblLookups->setText( i, 1, QString::number( last / ( 60 * 60 ) ) );
+ }
+ _shiftPerSec /= lookupCount;
+ QString drift = QString::number( _shiftPerSec * 60 * 60);
+ drift.append( tr( " s/h" ) );
+ lblDrift->setText( drift );
+
+ Config lconfig( "locale" );
+ lconfig.setGroup( "Location" );
+ tz = lconfig.readEntry( "Timezone", "America/New_York" );
+}
+
+PredictTabWidget::~PredictTabWidget()
+{
+}
+
+void PredictTabWidget::setShiftPerSec( int i )
+{
+ _shiftPerSec += i;
+}
+
+void PredictTabWidget::slotTZChanged( const QString &newtz )
+{
+ tz = newtz;
+}
+
+void PredictTabWidget::slotPredictTime()
+{
+ Config config( "ntp" );
+ config.setGroup( "lookups" );
+ int lastTime = config.readNumEntry( "time", 0 );
+ config.writeEntry( "lastNtp", TRUE );
+ setenv( "TZ", tz, 1 );
+ int now = TimeConversion::toUTC( QDateTime::currentDateTime() );
+ int corr = int( ( now - lastTime ) * _shiftPerSec );
+ QString diff = QString::number( corr );
+ diff.append( tr( " seconds" ) );
+ lblDiff->setText( diff );
+ predictedTime = QDateTime::currentDateTime().addSecs( corr );
+ lblPredicted->setText( predictedTime.toString() );
+}
+
+void PredictTabWidget::slotSetPredictedTime()
+{
+ slotPredictTime();
+ emit setTime( predictedTime );
+}