From 166ac140f8e01369a5d281c2918b0f8b9045f8e5 Mon Sep 17 00:00:00 2001 From: drw Date: Sun, 13 Apr 2003 22:32:47 +0000 Subject: 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 --- (limited to 'noncore/settings') diff --git a/noncore/settings/netsystemtime/formattabwidget.cpp b/noncore/settings/netsystemtime/formattabwidget.cpp new file mode 100644 index 0000000..daa020f --- a/dev/null +++ b/noncore/settings/netsystemtime/formattabwidget.cpp @@ -0,0 +1,168 @@ +/* +                This file is part of the OPIE Project + =. +             .=l. Copyright (c) 2002 OPIE team +           .>+-= + _;:,     .>    :=|. 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_,=:_.      -`: 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 "formattabwidget.h" + +#include + +#if ( defined Q_WS_QWS || defined(_WS_QWS_) ) && !defined(QT_NO_COP) +#include +#endif + +#include +#include +#include +#include +#include + +FormatTabWidget::FormatTabWidget( 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( container ); + layout->setMargin( 2 ); + layout->setSpacing( 4 ); + + // Time format selector + layout->addWidget( new QLabel( tr( "Time format" ), container ), 0, 0 ); + cbAppletFormat = new QComboBox( container ); + cbAppletFormat->insertItem( tr( "hh:mm" ), 0 ); + cbAppletFormat->insertItem( tr( "D/M hh:mm" ), 1 ); + cbAppletFormat->insertItem( tr( "M/D hh:mm" ), 2 ); + layout->addWidget( cbAppletFormat, 0, 1 ); + + // 12/24 hour selector + layout->addWidget( new QLabel( tr( "12/24 hour" ), container ), 1, 0 ); + cbAmpm = new QComboBox( container ); + cbAmpm->insertItem( tr( "24 hour" ), 0 ); + cbAmpm->insertItem( tr( "12 hour" ), 1 ); + connect( cbAmpm, SIGNAL(activated(int)), this, SIGNAL(show12HourTime(int)) ); + layout->addWidget( cbAmpm, 1, 1 ); + + // Date format selector + layout->addWidget( new QLabel( tr( "Date format" ), container ), 2, 0 ); + cbDateFormat = new QComboBox( container ); + connect( cbDateFormat, SIGNAL(activated(int)), this, SLOT(slotDateFormatChanged(int)) ); + layout->addWidget( cbDateFormat, 2, 1 ); + + // Week starts on selector + layout->addWidget( new QLabel( tr( "Weeks start on" ), container ), 3, 0 ); + cbWeekStart = new QComboBox( container ); + cbWeekStart->insertItem( tr( "Sunday" ), 0 ); + cbWeekStart->insertItem( tr( "Monday" ), 1 ); + connect( cbWeekStart, SIGNAL(activated(int)), this, SIGNAL(weekStartChanged(int)) ); + layout->addWidget( cbWeekStart, 3, 1 ); + + // Initialize values + Config config( "qpe" ); + config.setGroup( "Date" ); + cbAppletFormat->setCurrentItem( config.readNumEntry( "ClockApplet", 0 ) ); + + DateFormat df(QChar(config.readEntry("Separator", "/")[0]), + (DateFormat::Order)config .readNumEntry("ShortOrder", DateFormat::DayMonthYear), + (DateFormat::Order)config.readNumEntry("LongOrder", DateFormat::DayMonthYear)); + + int currentdf = 0; + date_formats[0] = DateFormat( '/', DateFormat::MonthDayYear ); + cbDateFormat->insertItem( tr( date_formats[0].toNumberString() ) ); + date_formats[1] = DateFormat( '.', DateFormat::DayMonthYear ); + if ( df == date_formats[1] ) + currentdf = 1; + cbDateFormat->insertItem( tr( date_formats[1].toNumberString() ) ); + date_formats[2] = DateFormat( '-', DateFormat::YearMonthDay, DateFormat::DayMonthYear ); + if ( df == date_formats[2] ) + currentdf = 2; + cbDateFormat->insertItem( tr( date_formats[2].toNumberString() ) ); //ISO8601 + date_formats[3] = DateFormat( '/', DateFormat::DayMonthYear ); + if ( df == date_formats[3] ) + currentdf = 3; + cbDateFormat->insertItem( tr( date_formats[3].toNumberString() ) ); + + cbDateFormat->setCurrentItem( currentdf ); + //dateButton->setDateFormat( df ); + + config.setGroup( "Time" ); + cbAmpm->setCurrentItem( config.readBoolEntry( "AMPM" ) ? 1 : 0 ); + cbWeekStart->setCurrentItem( config.readBoolEntry( "MONDAY" ) ? 1 : 0 ); + + // Send initial configuration options + QTimer::singleShot( 1200, this, SLOT(sendOptions()) ); +} + +FormatTabWidget::~FormatTabWidget() +{ +} + +void FormatTabWidget::saveSettings( bool commit ) +{ + int ampm = cbAmpm->currentItem(); + int weekstart = cbWeekStart->currentItem(); + DateFormat df = date_formats[cbDateFormat->currentItem()]; + int appletformat = cbAppletFormat->currentItem(); + + if ( commit ) + { + // Write settings to config file + Config config("qpe"); + config.setGroup( "Time" ); + config.writeEntry( "AMPM", ampm ); + config.writeEntry( "MONDAY", weekstart ); + config.setGroup( "Date" ); + config.writeEntry( "Separator", QString( df.separator() ) ); + config.writeEntry( "ShortOrder", df.shortOrder() ); + config.writeEntry( "LongOrder", df.longOrder() ); + config.writeEntry( "ClockApplet", appletformat ); + } + + // Make rest of system aware of new settings + QCopEnvelope setClock( "QPE/System", "clockChange(bool)" ); + setClock << ampm; + QCopEnvelope setWeek( "QPE/System", "weekChange(bool)" ); + setWeek << weekstart; + QCopEnvelope setDateFormat( "QPE/System", "setDateFormat(DateFormat)" ); + setDateFormat << df; +} + +void FormatTabWidget::slotDateFormatChanged( int selected ) +{ + emit dateFormatChanged( date_formats[selected] ); +} + +void FormatTabWidget::sendOptions() +{ + emit show12HourTime( cbAmpm->currentItem() ); + emit dateFormatChanged( date_formats[cbDateFormat->currentItem()] ); + emit weekStartChanged( cbWeekStart->currentItem() ); +} diff --git a/noncore/settings/netsystemtime/formattabwidget.h b/noncore/settings/netsystemtime/formattabwidget.h new file mode 100644 index 0000000..e4073e7 --- a/dev/null +++ b/noncore/settings/netsystemtime/formattabwidget.h @@ -0,0 +1,65 @@ +/* +                This file is part of the OPIE Project + =. +             .=l. Copyright (c) 2002 OPIE team +           .>+-= + _;:,     .>    :=|. 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_,=:_.      -`: 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. + +*/ + +#ifndef FORMATTABWIDGET_H +#define FORMATTABWIDGET_H + +#include + +#include + +class QComboBox; + +class FormatTabWidget : public QWidget +{ + Q_OBJECT + +public: + FormatTabWidget( QWidget * = 0x0 ); + ~FormatTabWidget(); + + void saveSettings( bool ); + +private: + QComboBox *cbAmpm; + QComboBox *cbWeekStart; + QComboBox *cbDateFormat; + QComboBox *cbAppletFormat; + DateFormat date_formats[4]; + +signals: + void show12HourTime( int ); + void dateFormatChanged( const DateFormat & ); + void weekStartChanged( int ); + +private slots: + void slotDateFormatChanged( int ); + void sendOptions(); +}; + +#endif diff --git a/noncore/settings/netsystemtime/main.cpp b/noncore/settings/netsystemtime/main.cpp index 80fbcb8..4b20a61 100644 --- a/noncore/settings/netsystemtime/main.cpp +++ b/noncore/settings/netsystemtime/main.cpp @@ -1,15 +1,40 @@ -#include -#include "ntp.h" +/* +                This file is part of the OPIE Project + =. +             .=l. Copyright (c) 2002 OPIE team +           .>+-= + _;:,     .>    :=|. 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_,=:_.      -`: 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 "mainwindow.h" + #include int main( int argc, char ** argv ) { - printf("This is netsystemtime "); - printf("$Id$\n"); - QPEApplication a( argc, argv ); - Ntp mw; + MainWindow mw; a.showMainWidget( &mw ); return a.exec(); diff --git a/noncore/settings/netsystemtime/mainwindow.cpp b/noncore/settings/netsystemtime/mainwindow.cpp new file mode 100644 index 0000000..306117a --- a/dev/null +++ b/noncore/settings/netsystemtime/mainwindow.cpp @@ -0,0 +1,404 @@ +/* +                This file is part of the OPIE Project + =. +             .=l. Copyright (c) 2002 OPIE team +           .>+-= + _;:,     .>    :=|. 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_,=:_.      -`: 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 "mainwindow.h" +#include "timetabwidget.h" +#include "formattabwidget.h" +#include "settingstabwidget.h" +#include "ntptabwidget.h" +#include "predicttabwidget.h" +#include "systemtimeconfig.h" + +#include +#include + +#include +#include +#include + +#if ( defined Q_WS_QWS || defined(_WS_QWS_) ) && !defined(QT_NO_COP) +#include +#endif + +#include +#include +#include +#include +#include + +MainWindow::MainWindow() + : QDialog( 0x0, 0x0, TRUE, 0 ) +{ + setCaption( tr( "SystemTime" ) ); + + QVBoxLayout *layout = new QVBoxLayout( this ); + layout->setMargin( 2 ); + layout->setSpacing( 4 ); + + // Create main tabbed control + mainWidget = new OTabWidget( this ); + + // Default object pointers to null + ntpProcess = 0x0; + ntpTab = 0x0; + + // Add tab widgets + mainWidget->addTab( timeTab = new TimeTabWidget( mainWidget ), "netsystemtime/DateTime", tr( "Time" ) ); + mainWidget->addTab( formatTab = new FormatTabWidget( mainWidget ), "netsystemtime/formattab", tr( "Format" ) ); + mainWidget->addTab( settingsTab = new SettingsTabWidget( mainWidget ), "SettingsIcon", tr( "Settings" ) ); + mainWidget->addTab( predictTab = new PredictTabWidget( mainWidget ), "netsystemtime/predicttab", tr( "Predict" ) ); + Config config( "ntp" ); + config.setGroup( "settings" ); + slotDisplayNTPTab( config.readBoolEntry( "displayNtpTab", FALSE ) ); + slotDisplayPredictTab( config.readBoolEntry( "displayPredictTab", FALSE ) ); + + mainWidget->setCurrentTab( tr( "Time" ) ); + layout->addWidget( mainWidget ); + + // Create QCOP channel + QCopChannel *channel = new QCopChannel( "QPE/Application/netsystemtime", this ); + connect( channel, SIGNAL(received(const QCString&, const QByteArray&)), + this, SLOT(slotQCopReceive(const QCString&, const QByteArray&)) ); + + // Create NTP socket + ntpSock = new QSocket( this ); + connect( ntpSock, SIGNAL(error(int)),SLOT(slotCheckNtp(int)) ); + slotProbeNTPServer(); + + // Create timer for automatic time lookups + ntpTimer = new QTimer( this ); + + // Connect everything together + connect( timeTab, SIGNAL(getNTPTime()), this, SLOT(slotGetNTPTime()) ); + connect( timeTab, SIGNAL(tzChanged(const QString &)), predictTab, SLOT(slotTZChanged(const QString &)) ); + connect( timeTab, SIGNAL(getPredictedTime()), predictTab, SLOT(slotSetPredictedTime()) ); + connect( formatTab, SIGNAL(show12HourTime(int)), timeTab, SLOT(slotUse12HourTime( int )) ); + connect( formatTab, SIGNAL(dateFormatChanged(const DateFormat &)), + timeTab, SLOT(slotDateFormatChanged(const DateFormat &)) ); + connect( formatTab, SIGNAL(weekStartChanged(int)), timeTab, SLOT(slotWeekStartChanged(int)) ); + connect( settingsTab, SIGNAL(ntpDelayChanged(int)), this, SLOT(slotNTPDelayChanged(int)) ); + connect( settingsTab, SIGNAL(displayNTPTab(bool)), this, SLOT(slotDisplayNTPTab(bool)) ); + connect( settingsTab, SIGNAL(displayPredictTab(bool)), this, SLOT(slotDisplayPredictTab(bool)) ); + connect( predictTab, SIGNAL(setTime(const QDateTime &)), this, SLOT(slotSetTime(const QDateTime &)) ); + + // Do initial time server check + slotNTPDelayChanged( config.readNumEntry( "ntpRefreshFreq", 1440 ) ); + slotCheckNtp( -1 ); + + // Display app + showMaximized(); +} + +MainWindow::~MainWindow() +{ + if ( ntpProcess ) + delete ntpProcess; +} + +void MainWindow::accept() +{ + // Turn off the screensaver (Note: needs to be encased in { } so that it deconstructs and sends) + { + QCopEnvelope disableScreenSaver( "QPE/System", "setScreenSaverIntervals(int,int,int)" ); + disableScreenSaver << 0 << 0 << 0; + } + + // Update the systemtime + timeTab->saveSettings( TRUE ); + + // Save format options + formatTab->saveSettings( TRUE ); + + // Save settings options + settingsTab->saveSettings(); + + // Since time has changed quickly load in the DateBookDB to allow the alarm server to get a better + // grip on itself (example re-trigger alarms for when we travel back in time). + DateBookDB db; + + // Turn back on the screensaver + QCopEnvelope enableScreenSaver( "QPE/System", "setScreenSaverIntervals(int,int,int)" ); + enableScreenSaver << -1 << -1 << -1; + + // Exit app + qApp->quit(); +} + +void MainWindow::reject() +{ + // Reset time settings + timeTab->saveSettings( FALSE ); + + // Send notifications but do not save settings + formatTab->saveSettings( FALSE ); + + // Exit app + qApp->quit(); +} + +void MainWindow::runNTP() +{ + if ( !ntpDelayElapsed() && ntpInteractive ) + { + QString msg = tr( "You asked for a delay of " ); + msg.append( QString::number( ntpDelay ) ); + msg.append( tr( " minutes, but only " ) ); + msg.append( QString::number( _lookupDiff / 60 ) ); + msg.append( tr(" minutes elapsed since last lookup.
Continue?") ); + + switch ( + QMessageBox::warning( this, tr( "Continue?" ), msg, QMessageBox::Yes, QMessageBox::No ) + ) + { + case QMessageBox::Yes: break; + case QMessageBox::No: return; + default: return; + } + } + + QString srv = settingsTab->ntpServer(); + + // Send information to time server tab if enabled + if ( ntpTabEnabled ) + { + ntpTab->setStartTime( QDateTime::currentDateTime().toString() ); + QString output = tr( "Running:\nntpdate " ); + output.append( srv ); + ntpTab->addNtpOutput( output ); + } + + if ( !ntpProcess ) + { + ntpProcess = new OProcess(); + connect( ntpProcess, SIGNAL(receivedStdout(OProcess*,char*,int)), + this, SLOT(slotNtpOutput(OProcess*,char*,int)) ); + connect( ntpProcess, SIGNAL(processExited(OProcess*)), + this, SLOT(slotNtpFinished(OProcess*)) ); + } + + else + ntpProcess->clearArguments(); + + *ntpProcess << "ntpdate" << srv; + bool ret = ntpProcess->start( OProcess::NotifyOnExit, OProcess::AllOutput ); + if ( !ret ) + { + QMessageBox::critical( this, tr( "Error" ), tr( "Error while getting time from network." ) ); + if ( ntpTabEnabled ) + ntpTab->addNtpOutput( tr( "Error while executing ntpdate" ) ); + } +} + +bool MainWindow::ntpDelayElapsed() +{ + // Determine if time elapsed is greater than time delay + Config config( "ntp" ); + config.setGroup( "lookups" ); + _lookupDiff = TimeConversion::toUTC( QDateTime::currentDateTime() ) - config.readNumEntry( "time", 0 ); + if ( _lookupDiff < 0 ) + return true; + return ( _lookupDiff - ( ntpDelay * 60) ) > 0; +} + +void MainWindow::slotSetTime( const QDateTime &dt ) +{ + timeTab->setDateTime( dt ); +} + +void MainWindow::slotQCopReceive( const QCString &msg, const QByteArray & ) +{ + if ( msg == "ntpLookup(QString)" ) + { + ntpInteractive = false; + runNTP(); + } + if ( msg == "setPredictedTime(QString)" ) + { + //setPredictTime(); + } +} + +void MainWindow::slotDisplayNTPTab( bool display ) +{ + ntpTabEnabled = display; + + // Create widget if it hasn't needed + if ( display && !ntpTab ) + { + ntpTab = new NTPTabWidget( mainWidget ); + connect( ntpTab, SIGNAL(getNTPTime()), this, SLOT(slotGetNTPTime()) ); + } + + // Display/hide tab + display ? mainWidget->addTab( ntpTab, "netsystemtime/ntptab", tr( "Time Server" ) ) + : mainWidget->removePage( ntpTab ); +} + +void MainWindow::slotDisplayPredictTab( bool display ) +{ + predictTabEnabled = display; + + // Create widget if it hasn't needed + if ( display && !predictTab ) + { + } + // Display/hide tab + display ? mainWidget->addTab( predictTab, "netsystemtime/predicttab", tr( "Predict" ) ) + : mainWidget->removePage( predictTab ); +} + +void MainWindow::slotGetNTPTime() +{ + ntpInteractive = TRUE; + runNTP(); +} + +void MainWindow::slotTimerGetNTPTime() +{ + ntpInteractive = FALSE; + runNTP(); +} + +void MainWindow::slotProbeNTPServer() +{ + ntpSock->connectToHost( settingsTab->ntpServer(), 123 ); +} + +void MainWindow::slotNtpOutput( OProcess *, char *buffer, int buflen ) +{ + QString output = QString( buffer ).left( buflen ); + ntpOutput.append( output ); + + if ( ntpTabEnabled ) + ntpTab->addNtpOutput( output ); +} + +void MainWindow::slotNtpFinished( OProcess *p ) +{ + QString output; + QDateTime dt = QDateTime::currentDateTime(); + + // Verify run was successful + if ( p->exitStatus() != 0 || !p->normalExit() ) + { + if ( isVisible() && ntpInteractive ) + { + output = tr( "Error while getting time from\n server: " ); + output.append( settingsTab->ntpServer() ); + QMessageBox::critical(this, tr( "Error" ), output ); + } + // slotCheckNtp(-1); + return; + } + + // Set controls on time tab to new time value + timeTab->setDateTime( dt ); + + // Write out lookup information + Config config( "ntp" ); + config.setGroup( "lookups" ); + int lastLookup = config.readNumEntry( "time", 0 ); + int lookupCount = config.readNumEntry( "count", 0 ); + bool lastNtp = config.readBoolEntry( "lastNtp", FALSE ); + int time = TimeConversion::toUTC( QDateTime::currentDateTime() ); + config.writeEntry( "time", time ); + + // Calculate new time/time shift + QString _offset = "offset"; + QString _sec = "sec"; + QRegExp _reOffset = QRegExp( _offset ); + QRegExp _reEndOffset = QRegExp( _sec ); + int posOffset = _reOffset.match( ntpOutput ); + int posEndOffset = _reEndOffset.match( ntpOutput, posOffset ); + posOffset += _offset.length() + 1; + QString diff = ntpOutput.mid( posOffset, posEndOffset - posOffset - 1 ); + + float timeShift = diff.toFloat(); + if ( timeShift == 0.0 ) + return; + int secsSinceLast = time - lastLookup; + output = QString::number( timeShift ); + output.append( tr( " seconds" ) ); + + // Display information on time server tab + if ( ntpTabEnabled ) + { + ntpTab->setTimeShift( output ); + ntpTab->setNewTime( dt.toString() ); + } + + if ( lastNtp && lastLookup > 0 && secsSinceLast > 60 * ntpDelay ) + { + QString grpname = QString( "lookup_" ).append( QString::number( lookupCount ) ); + config.setGroup( grpname ); + lookupCount++; + predictTab->setShiftPerSec( timeShift / secsSinceLast ); + config.writeEntry( "secsSinceLast", secsSinceLast ); + config.writeEntry( "timeShift", QString::number( timeShift ) ); + config.setGroup( "lookups" ); + config.writeEntry( "count", lookupCount ); + config.writeEntry( "lastNtp", TRUE ); + } +} + +void MainWindow::slotNTPDelayChanged( int delay ) +{ + ntpTimer->changeInterval( delay * 1000 * 60 ); + ntpDelay = delay; +} + +void MainWindow::slotCheckNtp( int i ) +{ + if ( i == 0 ) + { + if ( ntpDelayElapsed() ) + { + runNTP(); + disconnect( ntpTimer, SIGNAL(timeout()), this, SLOT(slotProbeNTPServer()) ); + connect( ntpTimer, SIGNAL(timeout()), SLOT(slotTimerGetNTPTime()) ); + } + else + { + disconnect(ntpTimer, SIGNAL(timeout()), this, SLOT(slotTimerGetNTPTime()) ); + connect(ntpTimer, SIGNAL(timeout()), SLOT(slotProbeNTPServer()) ); + } + } + else + { + predictTab->slotPredictTime(); + if ( i > 0 ) + { + QString output = tr( "Could not connect to server " ); + output.append( settingsTab->ntpServer() ); + ntpOutput.append( output ); + if ( ntpTabEnabled ) + ntpTab->addNtpOutput( output ); + } + connect( ntpTimer, SIGNAL(timeout()), SLOT(slotProbeNTPServer()) ); + } +} diff --git a/noncore/settings/netsystemtime/mainwindow.h b/noncore/settings/netsystemtime/mainwindow.h new file mode 100644 index 0000000..fa94335 --- a/dev/null +++ b/noncore/settings/netsystemtime/mainwindow.h @@ -0,0 +1,95 @@ +/* +                This file is part of the OPIE Project + =. +             .=l. Copyright (c) 2002 OPIE team +           .>+-= + _;:,     .>    :=|. 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_,=:_.      -`: 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. + +*/ + +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include + +class TimeTabWidget; +class FormatTabWidget; +class SettingsTabWidget; +class NTPTabWidget; +class PredictTabWidget; + +class OProcess; +class OTabWidget; +class QDateTime; +class QSocket; +class QTimer; + +class MainWindow : public QDialog +{ + Q_OBJECT + +public: + MainWindow(); + ~MainWindow(); + +protected: + void accept(); + void reject(); + +private: + OTabWidget *mainWidget; + + TimeTabWidget *timeTab; + FormatTabWidget *formatTab; + SettingsTabWidget *settingsTab; + NTPTabWidget *ntpTab; + PredictTabWidget *predictTab; + + bool ntpTabEnabled; + bool predictTabEnabled; + + OProcess *ntpProcess; + QTimer *ntpTimer; + QSocket *ntpSock; + int ntpDelay; + bool ntpInteractive; + QString ntpOutput; + int _lookupDiff; + + void runNTP(); + bool ntpDelayElapsed(); + +private slots: + void slotSetTime( const QDateTime & ); + void slotQCopReceive( const QCString &, const QByteArray & ); + void slotDisplayNTPTab( bool ); + void slotDisplayPredictTab( bool ); + void slotGetNTPTime(); + void slotTimerGetNTPTime(); + void slotProbeNTPServer(); + void slotNtpOutput( OProcess *, char *, int ); + void slotNtpFinished( OProcess* ); + void slotNTPDelayChanged( int ); + void slotCheckNtp( int ); +}; + +#endif diff --git a/noncore/settings/netsystemtime/netsystemtime.pro b/noncore/settings/netsystemtime/netsystemtime.pro index 3d0f299..0d154a6 100644 --- a/noncore/settings/netsystemtime/netsystemtime.pro +++ b/noncore/settings/netsystemtime/netsystemtime.pro @@ -1,13 +1,24 @@ TEMPLATE = app CONFIG = qt warn_on debug #CONFIG = qt warn_on release -HEADERS = ntp.h settime.h -SOURCES = main.cpp ntp.cpp settime.cpp +HEADERS = mainwindow.h \ + timetabwidget.h \ + formattabwidget.h \ + settingstabwidget.h \ + predicttabwidget.h \ + ntptabwidget.h +SOURCES = main.cpp \ + mainwindow.cpp \ + timetabwidget.cpp \ + formattabwidget.cpp \ + settingstabwidget.cpp \ + predicttabwidget.cpp \ + ntptabwidget.cpp INCLUDEPATH += $(OPIEDIR)/include DEPENDPATH += $(OPIEDIR)/include -LIBS += -lqpe -lopie -INTERFACES = ntpbase.ui -DESTDIR = $(OPIEDIR)/bin +LIBS += -lqpe -lopie +INTERFACES = +DESTDIR = $(OPIEDIR)/bin TARGET = systemtime TRANSLATIONS = ../../../i18n/de/systemtime.ts \ diff --git a/noncore/settings/netsystemtime/ntp.cpp b/noncore/settings/netsystemtime/ntp.cpp deleted file mode 100644 index f653cd0..0000000 --- a/noncore/settings/netsystemtime/ntp.cpp +++ b/dev/null @@ -1,446 +0,0 @@ -#include "ntp.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -Ntp::Ntp( QWidget* parent, const char* name, WFlags fl ) - : SetDateTime( parent, name, fl ) -{ - _interactive = false; - Config ntpSrvs(QPEApplication::qpeDir()+"etc/ntpservers",Config::File); - ntpSrvs.setGroup("servers"); - int srvCount = ntpSrvs.readNumEntry("count", 0 ); - for (int i = 0; i < srvCount; i++) - { - ntpSrvs.setGroup(QString::number(i)); - ComboNtpSrv->insertItem( ntpSrvs.readEntry("name") ); - } - if ( srvCount==0 ) ComboNtpSrv->insertItem(tr("time.fu-berlin.de")); - - Config cfg("ntp",Config::User); - cfg.setGroup("settings"); - SpinBoxMinLookupDelay->setValue( cfg.readNumEntry("minLookupDiff",720) ); - SpinBoxNtpDelay->setValue( cfg.readNumEntry("ntpRefreshFreq",1440) ); - ComboNtpSrv->setCurrentItem( cfg.readNumEntry("ntpServer", 0) ); - - //make tab order - - TabWidgetMain->removePage( tabMain ); - TabWidgetMain->removePage( tabManualSetTime ); - TabWidgetMain->removePage( TabSettings ); - TabWidgetMain->removePage( tabPredict ); - TabWidgetMain->removePage( tabNtp ); - - TabWidgetMain->insertTab( tabMain, tr( "Main" ) ); - TabWidgetMain->insertTab( TabSettings, tr( "Settings" ) ); - TabWidgetMain->insertTab( tabPredict, tr( "Predict" ) ); - TabWidgetMain->insertTab( tabNtp, tr( "NTP" ) ); - NtpBaseLayout->addWidget( TabWidgetMain, 0, 0 ); - - - - bool advMode = cfg.readBoolEntry("advancedFeatures", false ); - showAdvancedFeatures(advMode); - CheckBoxAdvSettings->setChecked( advMode ); - connect( CheckBoxAdvSettings, SIGNAL( toggled( bool ) ), - SLOT( showAdvancedFeatures( bool ) ) ); - - makeChannel(); - - ntpTimer = new QTimer(this); - - ntpProcess = new OProcess( ); - connect( SpinBoxNtpDelay, SIGNAL( valueChanged(int) ), - SLOT(slotNtpDelayChanged(int)) ); - - ntpSock = new QSocket( this ); - connect( ntpSock, SIGNAL( error(int) ),SLOT(slotCheckNtp(int)) ); - slotProbeNtpServer(); - - connect ( ntpProcess, SIGNAL(receivedStdout(OProcess*,char*,int)), - this, SLOT(getNtpOutput(OProcess*,char*,int))); - connect ( ntpProcess, SIGNAL(processExited(OProcess*)), - this, SLOT(ntpFinished(OProcess*))); - connect(runNtp, SIGNAL(clicked()), this, SLOT(slotButtonRunNtp())); - connect(PushButtonPredict, SIGNAL(clicked()), this, SLOT(preditctTime())); - connect(PushButtonSetPredTime, SIGNAL(clicked()), this, SLOT(setPredictTime())); - slotCheckNtp(-1); - readLookups(); -} - -Ntp::~Ntp() -{ - delete ntpProcess; -} - -void Ntp::saveConfig(){ - int srvCount = ComboNtpSrv->count(); - bool serversChanged = true; - int curSrv = ComboNtpSrv->currentItem(); - QString edit = ComboNtpSrv->currentText(); - for (int i = 0; i < srvCount; i++){ - if ( edit == ComboNtpSrv->text(i)) serversChanged = false; - } - if (serversChanged){ - Config ntpSrvs(QPEApplication::qpeDir()+"etc/ntpservers",Config::File); - ntpSrvs.setGroup("servers"); - ntpSrvs.writeEntry("count", ++srvCount); - ntpSrvs.setGroup("0"); - ntpSrvs.writeEntry( "name", edit ); - curSrv = 0; - for (int i = 1; i < srvCount; i++){ - qDebug("ntpSrvs[%i/%i]=%s",i,srvCount,ComboNtpSrv->text(i).latin1()); - ntpSrvs.setGroup(QString::number(i)); - ntpSrvs.writeEntry( "name", ComboNtpSrv->text(i-1) ); - } - } - Config cfg("ntp",Config::User); - cfg.setGroup("settings"); - cfg.writeEntry("ntpServer", curSrv ); - cfg.writeEntry( "minLookupDiff", SpinBoxMinLookupDelay->value() ); - cfg.writeEntry( "ntpRefreshFreq", SpinBoxNtpDelay->value() ); - cfg.writeEntry( "advancedFeatures", CheckBoxAdvSettings->isChecked() ); -} - -bool Ntp::ntpDelayElapsed() -{ - Config cfg("ntp",Config::User); - cfg.setGroup("lookups"); - _lookupDiff = TimeConversion::toUTC(QDateTime::currentDateTime()) - cfg.readNumEntry("time",0); - if (_lookupDiff < 0) return true; - int i =_lookupDiff - (SpinBoxNtpDelay->value()*60); - return i > -60; -} - -QString Ntp::getNtpServer() -{ - return ComboNtpSrv->currentText(); -} - -void Ntp::slotButtonRunNtp() -{ - _interactive = true; - slotRunNtp(); -} - -void Ntp::slotTimerRunNtp() -{ - _interactive = false; - slotRunNtp(); -} - - -void Ntp::slotRunNtp() -{ - if ( !ntpDelayElapsed() && CheckBoxAdvSettings->isChecked() ) - { - switch ( - QMessageBox::warning(this, tr("Run NTP?"), - tr("You asked for a delay of ")+SpinBoxNtpDelay->text()+tr(" minutes, but only ")+ - QString::number(_lookupDiff/60)+tr(" minutes elapsed since last lookup.")+ - "
"+tr("Rerun NTP?"), - QMessageBox::Ok,QMessageBox::Cancel) - ) { - case QMessageBox::Ok: break; - case QMessageBox::Cancel: return; - default: return; - } - } - TextLabelStartTime->setText(QDateTime::currentDateTime().toString()); - ntpOutPut( tr("Running:")+"\nntpdate "+getNtpServer() ); - - ntpProcess->clearArguments(); - *ntpProcess << "ntpdate" << getNtpServer(); - bool ret = ntpProcess->start(OProcess::NotifyOnExit,OProcess::AllOutput); - if ( !ret ) { - QMessageBox::critical(this, tr("ntp error"), - tr("Error while getting time form network!")); - qDebug("Error while executing ntpdate"); - ntpOutPut( tr("Error while executing ntpdate")); - } -} - -void Ntp::getNtpOutput(OProcess *proc, char *buffer, int buflen) -{ - if (! proc ) qDebug("Ntp::getNtpOutput OProcess is null"); - QString lineStr, lineStrOld; - lineStr = buffer; - lineStr=lineStr.left(buflen); - if (lineStr!=lineStrOld) - { - ntpOutPut(lineStr); - _ntpOutput += lineStr; - } - lineStrOld = lineStr; -} - -void Ntp::ntpFinished(OProcess *p) -{ - qDebug("p->exitStatus() %i",p->exitStatus()); - if (p->exitStatus()!=0 || !p->normalExit()) - { - if ( isVisible() && _interactive ){ - QMessageBox::critical(this, tr("ntp error"),tr("Error while getting time form\n server")+getNtpServer()+"\n"+_ntpOutput ); - } -// slotCheckNtp(-1); - return; - } - - Config cfg("ntp",Config::User); - cfg.setGroup("lookups"); - int lastLookup = cfg.readNumEntry("time",0); - int lookupCount = cfg.readNumEntry("count",0); - bool lastNtp = cfg.readBoolEntry("lastNtp",false); - int time = TimeConversion::toUTC( QDateTime::currentDateTime() ); - cfg.writeEntry("time", time); - - float timeShift = getTimeShift(); - if (timeShift == 0.0) return; - int secsSinceLast = time - lastLookup; - TextLabelNewTime->setText(QDateTime::currentDateTime().toString()); - TextLabelTimeShift->setText(QString::number(timeShift)+tr(" seconds")); - - dateButton->setDate( QDate::currentDate() ); - timeButton->setTime( QDateTime::currentDateTime() ); - - if ( lastNtp && lastLookup > 0 && secsSinceLast > 60* SpinBoxMinLookupDelay->value()) - { - cfg.setGroup("lookup_"+QString::number(lookupCount)); - lookupCount++; - _shiftPerSec = timeShift / secsSinceLast; - qDebug("secs since last lookup %i", secsSinceLast);qDebug("timeshift since last lookup %f", timeShift);qDebug("timeshift since per sec %f", _shiftPerSec); - cfg.writeEntry("secsSinceLast",secsSinceLast); - cfg.writeEntry("timeShift",QString::number(timeShift)); - cfg.setGroup("lookups"); - cfg.writeEntry("count",lookupCount); - cfg.writeEntry("lastNtp",true); - } -} - - -float Ntp::getTimeShift() -{ - QString _offset = "offset"; - QString _sec = "sec"; - QRegExp _reOffset = QRegExp(_offset); - QRegExp _reEndOffset = QRegExp(_sec); - int posOffset = _reOffset.match( _ntpOutput ); - int posEndOffset = _reEndOffset.match( _ntpOutput, posOffset ); - posOffset += _offset.length() + 1; - QString diff = _ntpOutput.mid(posOffset, posEndOffset-posOffset-1); - qDebug("%s", _ntpOutput.latin1()); - qDebug("diff = >%s<",diff.latin1()); - return diff.toFloat(); -} - -void Ntp::readLookups() -{ - Config cfg("ntp",Config::User); - cfg.setGroup("lookups"); - int lookupCount = cfg.readNumEntry("count",0); - float last, shift, shiftPerSec; - qDebug("lookupCount = %i",lookupCount); - TableLookups->setNumCols( 3 ); - TableLookups->setNumRows( lookupCount); - TableLookups->horizontalHeader()->setLabel(1,tr("last [h]")); - TableLookups->horizontalHeader()->setLabel(2,tr("offset [s]")); - TableLookups->horizontalHeader()->setLabel(0,tr("shift [s/h]")); - int cw = TableLookups->width()/4; - qDebug("column width %i",cw); - cw = 50; - TableLookups->setColumnWidth( 0, cw+30 ); - TableLookups->setColumnWidth( 1, cw ); - TableLookups->setColumnWidth( 2, cw ); - TableLookups->sortColumn(0, false, true ); - // TableLookups->setSorting( true ); - _shiftPerSec = 0; - for (int i=0; i < lookupCount; i++) - { - cfg.setGroup("lookup_"+QString::number(i)); - last = cfg.readEntry("secsSinceLast",0).toFloat(); - shift = QString(cfg.readEntry("timeShift",0)).toFloat(); - shiftPerSec = shift / last; - qDebug("%i shift %f",i,shiftPerSec); - _shiftPerSec += shiftPerSec; - TableLookups->setText( i,0,QString::number(shiftPerSec*60*60)); - TableLookups->setText( i,2,QString::number(shift)); - TableLookups->setText( i,1,QString::number(last/(60*60))); - } - _shiftPerSec /= lookupCount; - TextLabelShift->setText(QString::number(_shiftPerSec*60*60)+tr(" s/h")); -} - -void Ntp::preditctTime() -{ - Config cfg("ntp",Config::User); - cfg.setGroup("lookups"); - int lastTime = cfg.readNumEntry("time",0); - cfg.writeEntry("lastNtp",true); - setenv( "TZ", tz->currentZone(), 1 ); - int now = TimeConversion::toUTC( QDateTime::currentDateTime() ); - int corr = int((now - lastTime) * _shiftPerSec); - TextLabelEstimatedShift->setText(QString::number(corr)+tr(" seconds")); - predictedTime = QDateTime::currentDateTime().addSecs(corr); - TextLabelPredTime->setText(predictedTime.toString()); -// TextLabelMainPredTime->setText(tr("Predicted time:")+"
"+predictedTime.toString()+""); -} - -void Ntp::setPredictTime() -{ - qDebug("Ntp::setPredictTime"); - preditctTime(); - timeButton->setTime( predictedTime ); -} - -void Ntp::slotCheckNtp(int i) -{ - qDebug(" Ntp::slotCheckNtp(%i)",i); - if (i == 0) - { -// TextLabelMainPredTime->hide(); - ButtonSetTime->setText( tr("Get time from network") ); - connect( ButtonSetTime, SIGNAL(clicked()), SLOT(slotButtonRunNtp()) ); - if ( ntpDelayElapsed() ) - { - slotRunNtp(); - disconnect(ntpTimer, SIGNAL( timeout() ), this, SLOT(slotProbeNtpServer()) ); - connect(ntpTimer, SIGNAL( timeout() ), SLOT(slotTimerRunNtp()) ); - }else{ - disconnect(ntpTimer, SIGNAL( timeout() ), this, SLOT(slotTimerRunNtp()) ); - connect(ntpTimer, SIGNAL( timeout() ), SLOT(slotProbeNtpServer()) ); - } - }else{ - preditctTime(); - ButtonSetTime->setText( tr("Set predicted time: ")+predictedTime.toString() ); - if (i>0)ntpOutPut(tr("Could not connect to server ")+getNtpServer()); - connect( ButtonSetTime, SIGNAL(clicked()), SLOT(setPredictTime()) ); - connect( ntpTimer, SIGNAL( timeout() ), SLOT(slotProbeNtpServer()) ); - } -} - -void Ntp::slotProbeNtpServer() -{ - ntpSock->connectToHost( getNtpServer() ,123); -} - -void Ntp::slotNtpDelayChanged(int delay) -{ - ntpTimer->changeInterval( delay*1000*60 ); -} - -void Ntp::ntpOutPut(QString out) -{ - - MultiLineEditntpOutPut->append(out); - MultiLineEditntpOutPut->setCursorPosition(MultiLineEditntpOutPut->numLines() + 1,0,FALSE); -} - - -void Ntp::makeChannel() -{ - channel = new QCopChannel( "QPE/Application/netsystemtime", this ); - connect( channel, SIGNAL(received(const QCString&, const QByteArray&)), - this, SLOT(receive(const QCString&, const QByteArray&)) ); -} - - - -void Ntp::receive(const QCString &msg, const QByteArray &arg) -{ - qDebug("QCop(Ntp) "+msg+" "+QCString(arg)); - if ( msg == "ntpLookup(QString)" ) - { - _interactive = false; - slotRunNtp(); - } - if ( msg == "setPredictedTime(QString)" ) - { - setPredictTime(); - }else{ - qDebug("Ntp::receive: Huh what do ya want"); - } -} - -void Ntp::setDocument(const QString &fileName) -{ - qDebug("Ntp::setDocument( %s )",fileName.latin1()); -} - -void Ntp::showAdvancedFeatures(bool advMode) -{ - if (advMode) { - - if ( tabNtp->isVisible() ) { - TabWidgetMain->addTab( tabPredict, tr( "Predict" ) ); - TabWidgetMain->addTab( tabNtp, tr( "NTP" ) ); - } - TextLabel1_2_2->show(); - TextLabel2_3->show(); - TextLabel3_3_2->show(); - TextLabel1_2->show(); - SpinBoxMinLookupDelay->show(); - TextLabel2->show(); - TextLabel3_3->show(); - SpinBoxNtpDelay->show(); - Line1->show(); - }else{ - TabWidgetMain->removePage( tabPredict ); - TabWidgetMain->removePage( tabNtp ); - TextLabel1_2_2->hide(); - TextLabel2_3->hide(); - TextLabel3_3_2->hide(); - TextLabel1_2->hide(); - SpinBoxMinLookupDelay->hide(); - TextLabel2->hide(); - TextLabel3_3->hide(); - SpinBoxNtpDelay->hide(); - Line1->hide(); - }; - TabWidgetMain->show(); -} - - -void Ntp::accept( ){ - qDebug("saving"); - //SetTimeDate - commitTime(); - writeSettings(); - updateSystem(); - // Ntp - saveConfig(); - qApp->quit(); -} - -void Ntp::reject( ){ - qDebug("_oldTimeZone %s",_oldTimeZone.latin1()); - if (!_oldTimeZone.isEmpty()){ - qDebug("reverting timezone"); - tzChange(_oldTimeZone); - commitTime(); - } -} diff --git a/noncore/settings/netsystemtime/ntp.h b/noncore/settings/netsystemtime/ntp.h deleted file mode 100644 index 150140e..0000000 --- a/noncore/settings/netsystemtime/ntp.h +++ b/dev/null @@ -1,58 +0,0 @@ -#ifndef NTP_H -#define NTP_H -#include "settime.h" -#include - -class OProcess; -class QString; -class QTimer; -class QSocket; -class QCopChannel; - -class Ntp : public SetDateTime -{ - Q_OBJECT - -public: - Ntp( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 ); - ~Ntp(); - -public slots: - void setDocument (const QString &); -protected: - virtual void accept( ); - virtual void reject( ); - QDateTime predictedTime; - void makeChannel(); -protected slots: - void receive(const QCString &msg, const QByteArray &arg); -private: - QString _ntpOutput; - float _shiftPerSec; - int _lookupDiff; - OProcess *ntpProcess; - QTimer *ntpTimer; - QSocket *ntpSock; - QCopChannel *channel; - bool _interactive; - float getTimeShift(); - void readLookups(); - void ntpOutPut(QString); - bool ntpDelayElapsed(); - QString getNtpServer(); - void saveConfig(); -private slots: - void slotTimerRunNtp(); - void slotButtonRunNtp(); - void slotRunNtp(); - void getNtpOutput(OProcess *proc, char *buffer, int buflen); - void ntpFinished(OProcess*); - void preditctTime(); - void slotCheckNtp(int); - void setPredictTime(); - void showAdvancedFeatures(bool); - void slotProbeNtpServer(); - void slotNtpDelayChanged(int); -}; - -#endif diff --git a/noncore/settings/netsystemtime/ntpbase.ui b/noncore/settings/netsystemtime/ntpbase.ui deleted file mode 100644 index 8c106be..0000000 --- a/noncore/settings/netsystemtime/ntpbase.ui +++ b/dev/null @@ -1,838 +0,0 @@ - -NtpBase - - QDialog - - name - NtpBase - - - geometry - - 0 - 0 - 317 - 411 - - - - caption - Network Time - - - layoutMargin - - - layoutSpacing - - - - margin - 2 - - - spacing - 2 - - - QTabWidget - - name - TabWidgetMain - - - layoutMargin - - - layoutSpacing - - - QWidget - - name - tabMain - - - title - Main - - - - margin - 2 - - - spacing - 2 - - - QFrame - - name - FrameSystemTime - - - - - - QWidget - - name - tabNtp - - - title - NTP - - - - margin - 1 - - - spacing - 2 - - - QPushButton - - name - runNtp - - - text - Get time from network - - - - QWidget - - name - FrameNtp - - - layoutMargin - - - layoutSpacing - - - - margin - 2 - - - spacing - 2 - - - QLayoutWidget - - name - Layout4 - - - - margin - 0 - - - spacing - 6 - - - QLabel - - name - TextLabel1 - - - autoMask - false - - - text - Start Time: - - - - QLabel - - name - TextLabelStartTime - - - text - nan - - - - QLabel - - name - TextLabel3 - - - text - Time Shift: - - - - QLabel - - name - TextLabelTimeShift - - - text - nan - - - - QLabel - - name - TextLabel5 - - - text - New Time: - - - - QLabel - - name - TextLabelNewTime - - - text - nan - - - - - name - Spacer1 - - - orientation - Vertical - - - sizeType - Expanding - - - sizeHint - - 20 - 20 - - - - - - - QMultiLineEdit - - name - MultiLineEditntpOutPut - - - font - - 7 - - - - wordWrap - WidgetWidth - - - text - - - - - - - - - QWidget - - name - tabPredict - - - title - Predict - - - - margin - 5 - - - spacing - 6 - - - QTable - - name - TableLookups - - - font - - 8 - - - - numRows - 2 - - - numCols - 2 - - - - QLayoutWidget - - name - Layout9 - - - - margin - 0 - - - spacing - 6 - - - QLabel - - name - TextLabelShift - - - text - nan - - - - QLabel - - name - TextLabel4 - - - text - Esimated Shift: - - - - QLabel - - name - TextLabelEstimatedShift - - - text - nan - - - - QLabel - - name - TextLabel3_2 - - - text - Predicted Time: - - - - QLabel - - name - Mean_shift_label - - - text - Mean shift: - - - - QLabel - - name - TextLabelPredTime - - - text - nan - - - - - - QLayoutWidget - - name - Layout11 - - - - margin - 0 - - - spacing - 6 - - - QPushButton - - name - PushButtonSetPredTime - - - text - Set predicted time - - - - QPushButton - - name - PushButtonPredict - - - text - Predict time - - - - - - - - QWidget - - name - TabSettings - - - title - Settings - - - - margin - 2 - - - spacing - 2 - - - QWidget - - name - FrameSettings - - - layoutMargin - - - layoutSpacing - - - - margin - 11 - - - spacing - 6 - - - QLayoutWidget - - name - Layout6 - - - - margin - 0 - - - spacing - 6 - - - QLabel - - name - TextLabel7_2 - - - text - Use - - - - QLabel - - name - TextLabel2_2 - - - text - as - - - - QLabel - - name - TextLabel1_3 - - - text - NTP server to get the time from the network. - - - alignment - WordBreak|AlignVCenter|AlignLeft - - - wordwrap - - - - QComboBox - - name - ComboNtpSrv - - - editable - true - - - - - - - name - Spacer3 - - - orientation - Vertical - - - sizeType - Minimum - - - sizeHint - - 20 - 20 - - - - - QCheckBox - - name - CheckBoxAdvSettings - - - text - Advanced settings - - - - - name - Spacer4 - - - orientation - Vertical - - - sizeType - Expanding - - - sizeHint - - 20 - 20 - - - - - Line - - name - Line1 - - - orientation - Horizontal - - - - QLayoutWidget - - name - Layout7_2 - - - - margin - 0 - - - spacing - 6 - - - QLabel - - name - TextLabel1_2_2 - - - sizePolicy - - 1 - 1 - - - - text - Wait for - - - - QLabel - - name - TextLabel2_3 - - - text - minutes until - - - - QLabel - - name - TextLabel3_3_2 - - - text - NTP tries to syncronises the clock with the network. - - - alignment - WordBreak|AlignVCenter|AlignLeft - - - wordwrap - - - - QSpinBox - - name - SpinBoxNtpDelay - - - wrapping - true - - - maxValue - 9999999 - - - minValue - 1 - - - value - 1440 - - - - - - QLayoutWidget - - name - Layout7 - - - - margin - 0 - - - spacing - 6 - - - QLabel - - name - TextLabel1_2 - - - text - Insure a delay of - - - - QLabel - - name - TextLabel2 - - - text - minutes until - - - - QLabel - - name - TextLabel3_3 - - - text - a new NTP lookup will be used to predict the time. - - - alignment - WordBreak|AlignVCenter|AlignLeft - - - wordwrap - - - - QSpinBox - - name - SpinBoxMinLookupDelay - - - wrapping - true - - - maxValue - 9999999 - - - minValue - 42 - - - value - 720 - - - - - - - - - - QWidget - - name - tabManualSetTime - - - title - Manual - - - - margin - 11 - - - spacing - 6 - - - QWidget - - name - FrameSetTime - - - sizePolicy - - 5 - 3 - - - - - QPushButton - - name - PushButtonSetManualTime - - - text - Set time - - - - - name - Spacer4_2 - - - orientation - Vertical - - - sizeType - Expanding - - - sizeHint - - 20 - 20 - - - - - - - - - diff --git a/noncore/settings/netsystemtime/ntptabwidget.cpp b/noncore/settings/netsystemtime/ntptabwidget.cpp new file mode 100644 index 0000000..d71c230 --- a/dev/null +++ b/noncore/settings/netsystemtime/ntptabwidget.cpp @@ -0,0 +1,107 @@ +/* +                This file is part of the OPIE Project + =. +             .=l. Copyright (c) 2002 OPIE team +           .>+-= + _;:,     .>    :=|. 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_,=:_.      -`: 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 "ntptabwidget.h" + +#include + +#include +#include +#include +#include +#include + +NTPTabWidget::NTPTabWidget( 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( container ); + layout->setMargin( 2 ); + layout->setSpacing( 4 ); + + // Start time + layout->addWidget( new QLabel( tr( "Start time" ), container ), 0, 0 ); + lblStartTime = new QLabel( tr( "n/a" ), container ); + layout->addWidget( lblStartTime, 0, 1 ); + + // Time shift + layout->addWidget( new QLabel( tr( "Time shift" ), container ), 1, 0 ); + lblTimeShift = new QLabel( tr( "n/a" ), container ); + layout->addWidget( lblTimeShift, 1, 1 ); + + // New time + layout->addWidget( new QLabel( tr( "New time" ), container ), 2, 0 ); + lblNewTime = new QLabel( tr( "n/a" ), container ); + layout->addWidget( lblNewTime, 2, 1 ); + + // NTP output display + mleNtpOutput = new QMultiLineEdit( container ); + QFont font( mleNtpOutput->font() ); + font.setPointSize( 7 ); + mleNtpOutput->setFont( font ); + mleNtpOutput->setWordWrap( QMultiLineEdit::WidgetWidth ); + layout->addMultiCellWidget( mleNtpOutput, 3, 3, 0, 1 ); + + // Set NTP time button + QPushButton *pb = new QPushButton( Resource::loadPixmap( "netsystemtime/ntptab" ), + tr( "Get time from the network" ), container ); + connect( pb, SIGNAL(clicked()), this, SIGNAL(getNTPTime()) ); + layout->addMultiCellWidget( pb, 4, 4, 0, 1 ); +} + +NTPTabWidget::~NTPTabWidget() +{ +} + +void NTPTabWidget::setStartTime( const QString &str ) +{ + lblStartTime->setText( str ); +} + +void NTPTabWidget::setTimeShift( const QString &str ) +{ + lblTimeShift->setText( str ); +} + +void NTPTabWidget::setNewTime( const QString &str ) +{ + lblNewTime->setText( str ); +} + +void NTPTabWidget::addNtpOutput( const QString &str ) +{ + mleNtpOutput->append( str ); + mleNtpOutput->setCursorPosition( mleNtpOutput->numLines() + 1, 0, FALSE ); +} diff --git a/noncore/settings/netsystemtime/ntptabwidget.h b/noncore/settings/netsystemtime/ntptabwidget.h new file mode 100644 index 0000000..811c57e --- a/dev/null +++ b/noncore/settings/netsystemtime/ntptabwidget.h @@ -0,0 +1,60 @@ +/* +                This file is part of the OPIE Project + =. +             .=l. Copyright (c) 2002 OPIE team +           .>+-= + _;:,     .>    :=|. 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_,=:_.      -`: 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. + +*/ + +#ifndef NTPTABWIDGET_H +#define NTPTABWIDGET_H + +#include + +class QLabel; +class QMultiLineEdit; + +class NTPTabWidget : public QWidget +{ + Q_OBJECT + +public: + NTPTabWidget( QWidget * = 0x0 ); + ~NTPTabWidget(); + + void setStartTime( const QString & ); + void setTimeShift( const QString & ); + void setNewTime( const QString & ); + void addNtpOutput( const QString & ); + +private: + QLabel *lblStartTime; + QLabel *lblTimeShift; + QLabel *lblNewTime; + QMultiLineEdit *mleNtpOutput; + +signals: + void getNTPTime(); +}; + +#endif 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 +           .>+-= + _;:,     .>    :=|. 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_,=:_.      -`: 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 +#include + +#include +#include +#include +#include +#include + +#include + +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 ); +} diff --git a/noncore/settings/netsystemtime/predicttabwidget.h b/noncore/settings/netsystemtime/predicttabwidget.h new file mode 100644 index 0000000..da1d8ed --- a/dev/null +++ b/noncore/settings/netsystemtime/predicttabwidget.h @@ -0,0 +1,68 @@ +/* +                This file is part of the OPIE Project + =. +             .=l. Copyright (c) 2002 OPIE team +           .>+-= + _;:,     .>    :=|. 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_,=:_.      -`: 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. + +*/ + +#ifndef PREDICTTABWIDGET_H +#define PREDICTTABWIDGET_H + +#include +#include +#include + +class QLabel; +class QTable; + +class PredictTabWidget : public QWidget +{ + Q_OBJECT + +public: + PredictTabWidget( QWidget * = 0x0 ); + ~PredictTabWidget(); + + void setShiftPerSec( int ); + +private: + QTable *tblLookups; + QLabel *lblDrift; + QLabel *lblDiff; + QLabel *lblPredicted; + + float _shiftPerSec; + QString tz; + QDateTime predictedTime; + +signals: + void setTime( const QDateTime & ); + +public slots: + void slotTZChanged( const QString & ); + void slotPredictTime(); + void slotSetPredictedTime(); +}; + +#endif diff --git a/noncore/settings/netsystemtime/settime.cpp b/noncore/settings/netsystemtime/settime.cpp deleted file mode 100644 index 6a28989..0000000 --- a/noncore/settings/netsystemtime/settime.cpp +++ b/dev/null @@ -1,533 +0,0 @@ -/********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. -** -** This file is part of Qtopia Environment. -** -** This file may be distributed and/or modified under the terms of the -** GNU General Public License version 2 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. -** -** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -** -** See http://www.trolltech.com/gpl/ for GPL licensing information. -** -** Contact info@trolltech.com if any conditions of this licensing are -** not clear to you. -** -**********************************************************************/ - -#include "settime.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#if ( defined Q_WS_QWS || defined(_WS_QWS_) ) && !defined(QT_NO_COP) -#include -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - - -SetDateTime::SetDateTime(QWidget *parent, const char *name, WFlags f ) - : NtpBase( parent, name, true, f ) -{ - setCaption( tr("System Time") ); - _oldTimeZone=""; - QVBoxLayout *vb = new QVBoxLayout( FrameSystemTime, 5 ); - -// TextLabelMainPredTime = new QLabel( FrameSystemTime ); -// vb->addWidget( TextLabelMainPredTime, 1, 0 ); - - timeButton = new SetTime( FrameSystemTime ); - vb->addWidget( timeButton ); - - QHBoxLayout *db = new QHBoxLayout( vb ); - QLabel *dateLabel = new QLabel( tr("Date"), FrameSystemTime ); - db->addWidget( dateLabel, 1 ); - dateButton = new DateButton( TRUE, FrameSystemTime ); - db->addWidget( dateButton, 2 ); - - ButtonSetTime = new QPushButton( FrameSystemTime ); - vb->addWidget( ButtonSetTime, 1, 0 ); - - QFrame *hline = new QFrame( FrameSystemTime ); - hline->setFrameStyle( QFrame::HLine | QFrame::Sunken ); - vb->addWidget( hline ); - - QHBoxLayout *hb = new QHBoxLayout( vb, -1, "timezone layout" ); - - QLabel *lblZone = new QLabel( tr( "Time Zone" ), FrameSystemTime, "timezone label" ); - lblZone->setMaximumSize( lblZone->sizeHint() ); - hb->addWidget( lblZone ); - - tz = new TimeZoneSelector( FrameSystemTime, "Timezone choices" ); - tz->setMinimumSize( tz->sizeHint() ); - hb->addWidget( tz ); - - hline = new QFrame( FrameSystemTime ); - hline->setFrameStyle( QFrame::HLine | QFrame::Sunken ); - vb->addWidget( hline ); - - QSpacerItem* spacer = new QSpacerItem( 20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding ); - vb->addItem( spacer ); - - Config config("qpe"); - config.setGroup( "Time" ); - - QHBoxLayout *hb1 = new QHBoxLayout( vb ); - - QLabel *l = new QLabel( tr("Time format"), FrameSystemTime ); - hb1->addWidget( l, 1 ); - - - ampmCombo = new QComboBox( FrameSystemTime ); - ampmCombo->insertItem( tr("24 hour"), 0 ); - ampmCombo->insertItem( tr("12 hour"), 1 ); - hb1->addWidget( ampmCombo, 2 ); - - int show12hr = config.readBoolEntry("AMPM") ? 1 : 0; - ampmCombo->setCurrentItem( show12hr ); - timeButton->show12hourTime( show12hr ); - - connect(ampmCombo, SIGNAL(activated(int)), - timeButton, SLOT(show12hourTime(int))); - - - - QHBoxLayout *hb2 = new QHBoxLayout( vb ); - l = new QLabel( tr("Weeks start on" ), FrameSystemTime ); - //l->setAlignment( AlignRight | AlignVCenter ); - hb2->addWidget( l, 1 ); - - weekStartCombo = new QComboBox( FrameSystemTime ); - weekStartCombo->insertItem( tr("Sunday"), 0 ); - weekStartCombo->insertItem( tr("Monday"), 1 ); - - hb2->addWidget( weekStartCombo, 2 ); - int startMonday = config.readBoolEntry("MONDAY") ? 1 : 0; - dateButton->setWeekStartsMonday( startMonday ); - weekStartCombo->setCurrentItem( startMonday ); - - connect( weekStartCombo, SIGNAL( activated(int)), - dateButton, SLOT(setWeekStartsMonday(int))); - - - QHBoxLayout *hb3 = new QHBoxLayout( vb ); - l = new QLabel( tr("Date format" ), FrameSystemTime ); - hb3->addWidget( l, 1 ); - dateFormatCombo = new QComboBox( FrameSystemTime ); - hb3->addWidget( dateFormatCombo, 2 ); - - config.setGroup( "Date" ); - DateFormat df(QChar(config.readEntry("Separator", "/")[0]), - (DateFormat::Order)config .readNumEntry("ShortOrder", DateFormat::DayMonthYear), - (DateFormat::Order)config.readNumEntry("LongOrder", DateFormat::DayMonthYear)); - - int currentdf = 0; - date_formats[0] = DateFormat('/', DateFormat::MonthDayYear); - dateFormatCombo->insertItem( tr( date_formats[0].toNumberString()) ); - date_formats[1] = DateFormat('.', DateFormat::DayMonthYear); - if (df == date_formats[1]) - currentdf = 1; - dateFormatCombo->insertItem( tr( date_formats[1].toNumberString() ) ); - date_formats[2] = DateFormat('-', DateFormat::YearMonthDay, - DateFormat::DayMonthYear); - if (df == date_formats[2]) - currentdf = 2; - dateFormatCombo->insertItem( tr( date_formats[2].toNumberString() ) ); //ISO8601 - date_formats[3] = DateFormat('/', DateFormat::DayMonthYear); - if (df == date_formats[3]) - currentdf = 3; - dateFormatCombo->insertItem( tr( date_formats[3].toNumberString() ) ); - - dateFormatCombo->setCurrentItem( currentdf ); - dateButton->setDateFormat( df ); - - connect( dateFormatCombo, SIGNAL( activated(int)), - SLOT(formatChanged(int))); - - QHBoxLayout *hb4 = new QHBoxLayout( vb ); - l = new QLabel( tr("Applet format" ), FrameSystemTime ); - hb4->addWidget( l, 1 ); - - clockAppletCombo = new QComboBox( FrameSystemTime ); - clockAppletCombo->insertItem( tr("hh:mm"), 0 ); - clockAppletCombo->insertItem( tr("D/M hh:mm"), 1 ); - clockAppletCombo->insertItem( tr("M/D hh:mm"), 2 ); - - hb4->addWidget( clockAppletCombo, 2 ); - int clockApplet = config.readNumEntry("ClockApplet",0); - clockAppletCombo->setCurrentItem( clockApplet ); - - vb->addStretch( 0 ); - -// hline = new QFrame( FrameSystemTime ); -// hline->setFrameStyle( QFrame::HLine | QFrame::Sunken ); -// vb->addWidget( hline ); -// -// ButtonSetTime = new QPushButton( FrameSystemTime ); -// vb->addWidget( ButtonSetTime, 1, 0 ); - - - QObject::connect( tz, SIGNAL( signalNewTz( const QString& ) ), - timeButton, SLOT( slotTzChange( const QString& ) ) ); - QObject::connect( tz, SIGNAL( signalNewTz( const QString& ) ), - SLOT( tzChange( const QString& ) ) ); - -// QObject::connect( weekStartCombo, SIGNAL( activated ( int )), -// SLOT(updateSystem(int ) )); -// QObject::connect( ampmCombo, SIGNAL( activated ( int )), -// SLOT(updateSystem(int ) )); -// QObject::connect( dateFormatCombo, SIGNAL( activated ( int )), -// SLOT(updateSystem(int ) )); -// QObject::connect( clockAppletCombo, SIGNAL( activated ( int )), -// SLOT(updateSystem(int ) )); -} - -SetDateTime::~SetDateTime() -{ -} - -void SetDateTime::writeSettings() -{ - Config config("qpe"); - config.setGroup( "Time" ); - config.writeEntry( "AMPM", ampmCombo->currentItem() ); - config.writeEntry( "MONDAY", weekStartCombo->currentItem() ); - config.setGroup( "Date" ); - DateFormat df = date_formats[dateFormatCombo->currentItem()]; - config.writeEntry( "Separator", QString(df.separator())); - config.writeEntry( "ShortOrder", df.shortOrder()); - config.writeEntry( "LongOrder", df.longOrder()); - config.writeEntry( "ClockApplet", clockAppletCombo->currentItem() ); - - Config lconfig("locale"); - lconfig.setGroup( "Location" ); - lconfig.writeEntry( "Timezone", tz->currentZone() ); - -} - -void SetDateTime::commitTime() -{ - Config cfg("ntp",Config::User); - cfg.setGroup("lookups"); - cfg.writeEntry("lastNtp",false); - tz->setFocus(); - // Need to process the QCOP event generated above before proceeding - qApp->processEvents(); - - // before we progress further, set our TZ! - setenv( "TZ", tz->currentZone(), 1 ); - // now set the time... - QDateTime dt( dateButton->date(), timeButton->time() ); - - if ( dt.isValid() ) setTime(dt); -} - -void SetDateTime::setTime(QDateTime dt) -{ - // really turn off the screensaver before doing anything - { - // Needs to be encased in { } so that it deconstructs and sends - QCopEnvelope disableScreenSaver( "QPE/System", "setScreenSaverIntervals(int,int,int)" ); - disableScreenSaver << 0 << 0 << 0; - } - Config cfg("ntp",Config::User); - cfg.setGroup("correction"); - int t = TimeConversion::toUTC(dt); - struct timeval myTv; - myTv.tv_sec = t; - cfg.writeEntry("time", t ); - myTv.tv_usec = 0; - - if ( myTv.tv_sec != -1 ) - ::settimeofday( &myTv, 0 ); - Global::writeHWClock(); - // since time has changed quickly load in the datebookdb - // to allow the alarm server to get a better grip on itself - // (example re-trigger alarms for when we travel back in time) - DateBookDB db; - //QCopEnvelope timeApplet( "QPE/TaskBar", "reloadApplets()" ); - //timeApplet << ""; - // Restore screensaver - QCopEnvelope enableScreenSaver( "QPE/System", "setScreenSaverIntervals(int,int,int)" ); - enableScreenSaver << -1 << -1 << -1; -} - -void SetDateTime::updateSystem() -{ - // really turn off the screensaver before doing anything - { - // Needs to be encased in { } so that it deconstructs and sends - QCopEnvelope disableScreenSaver( "QPE/System", "setScreenSaverIntervals(int,int,int)" ); - disableScreenSaver << 0 << 0 << 0; - } - qDebug("SetDateTime::updateSystem()"); - writeSettings(); - - // set the timezone for everyone else... - QCopEnvelope setTimeZone( "QPE/System", "timeChange(QString)" ); - setTimeZone << tz->currentZone(); - - // AM/PM setting and notify time changed - QCopEnvelope setClock( "QPE/System", "clockChange(bool)" ); - setClock << ampmCombo->currentItem(); - - // Notify everyone what day we prefer to start the week on. - QCopEnvelope setWeek( "QPE/System", "weekChange(bool)" ); - setWeek << weekStartCombo->currentItem(); - - // Notify everyone what date format to use - QCopEnvelope setDateFormat( "QPE/System", "setDateFormat(DateFormat)" ); - setDateFormat << date_formats[dateFormatCombo->currentItem()]; - - // Restore screensaver - QCopEnvelope enableScreenSaver( "QPE/System", "setScreenSaverIntervals(int,int,int)" ); - enableScreenSaver << -1 << -1 << -1; - // since time has changed quickly load in the datebookdb - // to allow the alarm server to get a better grip on itself - // (example re-trigger alarms for when we travel back in time) - DateBookDB db; - -} - -void SetDateTime::tzChange( const QString &tz ) -{ - // set the TZ get the time and leave gracefully... - _oldTimeZone = getenv( "TZ" ); - setenv( "TZ", tz, 1 ); - - QDate d = QDate::currentDate(); - // reset the time. - if ( !_oldTimeZone.isNull() ) { - setenv( "TZ", _oldTimeZone, 1 ); - } - dateButton->setDate( d ); - updateSystem(); -} - -void SetDateTime::formatChanged(int i) -{ - dateButton->setDateFormat(date_formats[i]); -} - -static const int ValueAM = 0; -static const int ValuePM = 1; - - - -SetTime::SetTime( QWidget *parent, const char *name ) - : QWidget( parent, name ) -{ - clock = new QTimer(this, "clock" ); - connect(clock, SIGNAL( timeout() ), SLOT(slotClockTick()) ); - clock->start( 1000 * 60 ); - - use12hourTime = FALSE; - - _time = QDateTime::currentDateTime(); - hour = _time.time().hour(); - minute = _time.time().minute(); - - QHBoxLayout *hb2 = new QHBoxLayout( this ); - hb2->setSpacing( 3 ); - - QLabel *l = new QLabel( tr("Hour"), this ); - // l->setAlignment( AlignRight | AlignVCenter ); - hb2->addWidget( l ); - - sbHour = new QSpinBox( this ); - sbHour->setMinimumWidth( 30 ); - if(use12hourTime) { - sbHour->setMinValue(1); - sbHour->setMaxValue( 12 ); - int show_hour = hour; - if (hour > 12) - show_hour -= 12; - if (show_hour == 0) - show_hour = 12; - - sbHour->setValue( show_hour ); - } else { - sbHour->setMinValue( 0 ); - sbHour->setMaxValue( 23 ); - sbHour->setValue( hour ); - } - sbHour->setWrapping(TRUE); - connect( sbHour, SIGNAL(valueChanged(int)), this, SLOT(hourChanged(int)) ); - hb2->addWidget( sbHour ); - - hb2->addStretch( 1 ); - - l = new QLabel( tr("Minute"), this ); - //l->setAlignment( AlignRight | AlignVCenter ); - hb2->addWidget( l ); - - sbMin = new QSpinBox( this ); - sbMin->setMinValue( 0 ); - sbMin->setMaxValue( 59 ); - sbMin->setWrapping(TRUE); - sbMin->setValue( minute ); - sbMin->setMinimumWidth( 30 ); - connect( sbMin, SIGNAL(valueChanged(int)), this, SLOT(minuteChanged(int)) ); - hb2->addWidget( sbMin ); - - hb2->addStretch( 1 ); - - ampm = new QComboBox( this ); - ampm->insertItem( tr("AM"), ValueAM ); - ampm->insertItem( tr("PM"), ValuePM ); - connect( ampm, SIGNAL(activated(int)), this, SLOT(checkedPM(int)) ); - hb2->addWidget( ampm ); - - hb2->addStretch( 1 ); - -} - -QTime SetTime::time() const -{ - return QTime( hour, minute, 0 ); -} - -void SetTime::hourChanged( int value ) -{ - if(use12hourTime) { - int realhour = value; - if (realhour == 12) - realhour = 0; - if (ampm->currentItem() == ValuePM ) - realhour += 12; - hour = realhour; - } else - hour = value; -} - -void SetTime::minuteChanged( int value ) -{ - minute = value; -} - -void SetTime::show12hourTime( int on ) -{ - use12hourTime = on; - ampm->setEnabled(on); - - int show_hour = hour; - if ( on ) { - /* this might change the value of hour */ - sbHour->setMinValue(1); - sbHour->setMaxValue( 12 ); - - /* so use one we saved earlier */ - if (show_hour >= 12) { - show_hour -= 12; - ampm->setCurrentItem( ValuePM ); - } else { - ampm->setCurrentItem( ValueAM ); - } - if (show_hour == 0) - show_hour = 12; - - } else { - sbHour->setMinValue( 0 ); - sbHour->setMaxValue( 23 ); - } - - - sbHour->setValue( show_hour ); -} - -void SetTime::checkedPM( int c ) -{ - int show_hour = sbHour->value(); - if (show_hour == 12) - show_hour = 0; - - if ( c == ValuePM ) - show_hour += 12; - - hour = show_hour; -} - -void SetTime::slotTzChange( const QString &tz ) -{ - // set the TZ get the time and leave gracefully... - QString strSave; - strSave = getenv( "TZ" ); - setenv( "TZ", tz, 1 ); - - QTime t = QTime::currentTime(); - // reset the time. - if ( !strSave.isNull() ) { - setenv( "TZ", strSave, 1 ); - } - - // just set the spinboxes and let it propage through - if(use12hourTime) { - int show_hour = t.hour(); - if (t.hour() >= 12) { - show_hour -= 12; - ampm->setCurrentItem( ValuePM ); - } else { - ampm->setCurrentItem( ValueAM ); - } - if (show_hour == 0) - show_hour = 12; - sbHour->setValue( show_hour ); - } else { - sbHour->setValue( t.hour() ); - } - sbMin->setValue( t.minute() ); -} - -void SetTime::setTime( QDateTime dt ) -{ - _time = dt; - QTime t = dt.time(); - // just set the spinboxes and let it propage through - if(use12hourTime) { - int show_hour = t.hour(); - if (t.hour() >= 12) { - show_hour -= 12; - ampm->setCurrentItem( ValuePM ); - } else { - ampm->setCurrentItem( ValueAM ); - } - if (show_hour == 0) - show_hour = 12; - sbHour->setValue( show_hour ); - } else { - sbHour->setValue( t.hour() ); - } - sbMin->setValue( t.minute() ); -} - -void SetTime::slotClockTick() -{ - setTime( _time.addSecs(60) ); - qDebug("SetTime::slotClockTick %s",_time.toString().latin1()); -} diff --git a/noncore/settings/netsystemtime/settime.h b/noncore/settings/netsystemtime/settime.h deleted file mode 100644 index 58d1006..0000000 --- a/noncore/settings/netsystemtime/settime.h +++ b/dev/null @@ -1,102 +0,0 @@ -/********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. -** -** This file is part of Qtopia Environment. -** -** This file may be distributed and/or modified under the terms of the -** GNU General Public License version 2 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. -** -** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -** -** See http://www.trolltech.com/gpl/ for GPL licensing information. -** -** Contact info@trolltech.com if any conditions of this licensing are -** not clear to you. -** -**********************************************************************/ -#ifndef SYSTEM_TIME_H -#define SYSTEM_TIME_H - - -#include -#include - -#include -#include "ntpbase.h" - -class QToolButton; -class QSpinBox; -class QLabel; -class TimeZoneSelector; -class DateBookMonth; -class QComboBox; - -class SetTime : public QWidget -{ - Q_OBJECT -public: - SetTime( QWidget *parent=0, const char *name=0 ); - - QTime time() const; - void setTime( QDateTime ); - -public slots: - void slotTzChange( const QString& tz ); - void show12hourTime( int ); - -protected slots: - void slotClockTick(); - void hourChanged( int value ); - void minuteChanged( int value ); - - void checkedPM( int ); - -protected: - int hour; - int minute; - bool use12hourTime; - QDateTime _time; - QTimer *clock; - QComboBox *ampm; - QSpinBox *sbHour; - QSpinBox *sbMin; -}; - -class DateButton; - -class SetDateTime : public NtpBase -{ - Q_OBJECT -public: - SetDateTime( QWidget *parent=0, const char *name=0, WFlags f=0 ); - ~SetDateTime(); - -protected slots: - void commitTime(); - void tzChange( const QString &tz ); - void formatChanged(int); - void updateSystem(); - -protected: - void setTime(QDateTime dt); - void writeSettings(); - - SetTime *timeButton; - DateButton *dateButton; - TimeZoneSelector *tz; - QString _oldTimeZone; - QComboBox *weekStartCombo; - QComboBox *ampmCombo; - QComboBox *dateFormatCombo; - QComboBox *clockAppletCombo; - QPushButton *ButtonSetTime; - - DateFormat date_formats[4]; -}; - - -#endif - diff --git a/noncore/settings/netsystemtime/settingstabwidget.cpp b/noncore/settings/netsystemtime/settingstabwidget.cpp new file mode 100644 index 0000000..2a7e28d --- a/dev/null +++ b/noncore/settings/netsystemtime/settingstabwidget.cpp @@ -0,0 +1,159 @@ +/* +                This file is part of the OPIE Project + =. +             .=l. Copyright (c) 2002 OPIE team +           .>+-= + _;:,     .>    :=|. 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_,=:_.      -`: 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 "settingstabwidget.h" + +#include +#include + +#include +#include +#include +#include +#include +#include + +SettingsTabWidget::SettingsTabWidget( 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( container ); + layout->setMargin( 2 ); + layout->setSpacing( 4 ); + + // Time server selector + layout->addWidget( new QLabel( tr( "Time server" ), container ), 0, 0 ); + cbTimeServer = new QComboBox( TRUE, container ); + layout->addMultiCellWidget( cbTimeServer, 1, 1, 0, 1 ); + + // Lookup delay selector + layout->addWidget( new QLabel( tr( "minutes between time updates" ), container ), 2, 1 ); + sbNtpDelay = new QSpinBox( 1, 9999999, 1, container ); + sbNtpDelay->setWrapping( TRUE ); + sbNtpDelay->setMaximumWidth( 50 ); + connect( sbNtpDelay, SIGNAL(valueChanged(int)), this, SIGNAL(ntpDelayChanged(int)) ); + layout->addWidget( sbNtpDelay, 2, 0 ); + + // Prediction delay selector + layout->addWidget( new QLabel( tr( "minutes between prediction updates" ), container ), 3, 1 ); + sbPredictDelay = new QSpinBox( 42, 9999999, 1, container ); + sbPredictDelay->setWrapping( TRUE ); + sbPredictDelay->setMaximumWidth( 50 ); + layout->addWidget( sbPredictDelay, 3, 0 ); + + // Space filler + layout->addItem( new QSpacerItem( 1, 1, QSizePolicy::Minimum, QSizePolicy::Expanding ), 4, 0 ); + + // Display time server information selector + chNtpTab = new QCheckBox( tr( "Display time server information" ), container ); + connect( chNtpTab, SIGNAL( toggled( bool ) ), this, SIGNAL( displayNTPTab( bool ) ) ); + layout->addMultiCellWidget( chNtpTab, 5, 5, 0, 1 ); + + // Display time prediction information selector + chPredictTab = new QCheckBox( tr( "Display time prediction information" ), container ); + connect( chPredictTab, SIGNAL( toggled( bool ) ), this, SIGNAL( displayPredictTab( bool ) ) ); + layout->addMultiCellWidget( chPredictTab, 6, 6, 0, 1 ); + + // Space filler + layout->addItem( new QSpacerItem( 1, 1, QSizePolicy::Minimum, QSizePolicy::Expanding ), 7, 0 ); + + // Initialize values + QString ntpSrvsFile = QPEApplication::qpeDir(); + ntpSrvsFile.append( "etc/ntpservers" ); + Config ntpSrvs( ntpSrvsFile, Config::File ); + ntpSrvs.setGroup( "servers" ); + int srvCount = ntpSrvs.readNumEntry( "count", 0 ); + for ( int i = 0; i < srvCount; i++ ) + { + ntpSrvs.setGroup( QString::number( i ) ); + cbTimeServer->insertItem( ntpSrvs.readEntry( "name" ) ); + } + if ( srvCount==0 ) + cbTimeServer->insertItem( "time.fu-berlin.de" ); + + Config config( "ntp" ); + config.setGroup( "settings" ); + sbPredictDelay->setValue( config.readNumEntry( "minLookupDiff", 720 ) ); + sbNtpDelay->setValue( config.readNumEntry( "ntpRefreshFreq", 1440 ) ); + cbTimeServer->setCurrentItem( config.readNumEntry( "ntpServer", 0 ) ); + chNtpTab->setChecked( config.readBoolEntry( "displayNtpTab", FALSE ) ); + chPredictTab->setChecked( config.readBoolEntry( "displayPredictTab", FALSE ) ); +} + +SettingsTabWidget::~SettingsTabWidget() +{ +} + +void SettingsTabWidget::saveSettings() +{ + int srvCount = cbTimeServer->count(); + bool serversChanged = TRUE; + int curSrv = cbTimeServer->currentItem(); + QString edit = cbTimeServer->currentText(); + for ( int i = 0; i < srvCount; i++ ) + { + if ( edit == cbTimeServer->text( i ) ) + serversChanged = FALSE; + } + if ( serversChanged ) + { + QString ntpSrvsFile = QPEApplication::qpeDir(); + ntpSrvsFile.append( "etc/ntpservers" ); + Config ntpSrvs( ntpSrvsFile, Config::File ); + ntpSrvs.setGroup( "servers" ); + ntpSrvs.writeEntry( "count", ++srvCount ); + ntpSrvs.setGroup( "0" ); + ntpSrvs.writeEntry( "name", edit ); + curSrv = 0; + for ( int i = 1; i < srvCount; i++ ) + { +// qDebug( "ntpSrvs[%i/%i]=%s", i, srvCount, cbTimeServer->text( i ).latin1() ); + ntpSrvs.setGroup( QString::number( i ) ); + ntpSrvs.writeEntry( "name", cbTimeServer->text( i-1 ) ); + } + } + Config config( "ntp", Config::User ); + config.setGroup( "settings" ); + config.writeEntry( "ntpServer", curSrv ); + config.writeEntry( "minLookupDiff", sbPredictDelay->value() ); + config.writeEntry( "ntpRefreshFreq", sbNtpDelay->value() ); + config.writeEntry( "displayNtpTab", chNtpTab->isChecked() ); + config.writeEntry( "displayPredictTab", chPredictTab->isChecked() ); +} + +QString SettingsTabWidget::ntpServer() +{ + return cbTimeServer->currentText(); +} diff --git a/noncore/settings/netsystemtime/settingstabwidget.h b/noncore/settings/netsystemtime/settingstabwidget.h new file mode 100644 index 0000000..2901bb3 --- a/dev/null +++ b/noncore/settings/netsystemtime/settingstabwidget.h @@ -0,0 +1,62 @@ +/* +                This file is part of the OPIE Project + =. +             .=l. Copyright (c) 2002 OPIE team +           .>+-= + _;:,     .>    :=|. 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_,=:_.      -`: 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. + +*/ + +#ifndef SETTINGSTABWIDGET_H +#define SETTINGSTABWIDGET_H + +#include + +class QCheckBox; +class QComboBox; +class QSpinBox; + +class SettingsTabWidget : public QWidget +{ + Q_OBJECT + +public: + SettingsTabWidget( QWidget * = 0x0 ); + ~SettingsTabWidget(); + + void saveSettings(); + QString ntpServer(); + +private: + QComboBox *cbTimeServer; + QSpinBox *sbNtpDelay; + QSpinBox *sbPredictDelay; + QCheckBox *chNtpTab; + QCheckBox *chPredictTab; + +signals: + void ntpDelayChanged( int ); + void displayNTPTab( bool ); + void displayPredictTab( bool ); +}; + +#endif diff --git a/noncore/settings/netsystemtime/timetabwidget.cpp b/noncore/settings/netsystemtime/timetabwidget.cpp new file mode 100644 index 0000000..6f24462 --- a/dev/null +++ b/noncore/settings/netsystemtime/timetabwidget.cpp @@ -0,0 +1,292 @@ +/* +                This file is part of the OPIE Project + =. +             .=l. Copyright (c) 2002 OPIE team +           .>+-= + _;:,     .>    :=|. 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_,=:_.      -`: 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 "timetabwidget.h" + +#include +#include +#include +#include +#include + +#if ( defined Q_WS_QWS || defined(_WS_QWS_) ) && !defined(QT_NO_COP) +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +static const int ValueAM = 0; +static const int ValuePM = 1; + +TimeTabWidget::TimeTabWidget( QWidget *parent ) + : QWidget( parent, 0x0, 0 ) +{ + // Synchronize HW clock to systemtime + // This app will update systemtime + // - if Cancel is clicked, will reset systemtime to HW clock's time + // - if Ok is clicked, will leave systemtime as is + system("/sbin/hwclock --systohc --utc"); + + 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( container ); + layout->setMargin( 2 ); + layout->setSpacing( 4 ); + + // Hours + layout->addMultiCellWidget( new QLabel( tr( "Hour" ), container ), 1, 1, 0, 1 ); + sbHour = new QSpinBox( container ); + sbHour->setWrapping( TRUE ); + layout->addMultiCellWidget( sbHour, 2, 2, 0, 1 ); + + // Minutes + layout->addMultiCellWidget( new QLabel( tr( "Minute" ), container ), 1, 1, 2, 3 ); + sbMin = new QSpinBox( container ); + sbMin->setWrapping( TRUE ); + sbMin->setMinValue( 0 ); + sbMin->setMaxValue( 59 ); + layout->addMultiCellWidget( sbMin, 2, 2, 2, 3 ); + + // AM/PM + cbAmpm = new QComboBox( container ); + cbAmpm->insertItem( tr( "AM" ), ValueAM ); + cbAmpm->insertItem( tr( "PM" ), ValuePM ); + layout->addMultiCellWidget( cbAmpm, 2, 2, 4, 5 ); + + // Date + layout->addWidget( new QLabel( tr( "Date" ), container ), 4, 0 ); + btnDate = new DateButton( TRUE, container ); + layout->addMultiCellWidget( btnDate, 4, 4, 1, 5 ); + + // Timezone + layout->addMultiCellWidget( new QLabel( tr( "Time zone" ), container ), 6, 6, 0, 1 ); + selTimeZone = new TimeZoneSelector( container ); + connect( selTimeZone, SIGNAL(signalNewTz(const QString &)), this, SLOT(slotTZChanged(const QString &)) ); + layout->addMultiCellWidget( selTimeZone, 6, 6, 2, 5 ); + + // Space filler + layout->addItem( new QSpacerItem( 1, 1, QSizePolicy::Minimum, QSizePolicy::Expanding ), 7, 0 ); + + // Set NTP time button + QPushButton *pb = new QPushButton( Resource::loadPixmap( "netsystemtime/ntptab" ), + tr( "Get time from the network" ), container ); + connect( pb, SIGNAL(clicked()), this, SIGNAL(getNTPTime()) ); + layout->addMultiCellWidget( pb, 8, 8, 0, 5 ); + + // Set predicted time button + pb = new QPushButton( Resource::loadPixmap( "netsystemtime/predicttab" ), tr( "Set predicted time" ), + container ); + connect( pb, SIGNAL(clicked()), this, SIGNAL(getPredictedTime()) ); + layout->addMultiCellWidget( pb, 9, 9, 0, 5 ); + + // Space filler at bottom of widget + layout->addItem( new QSpacerItem( 1, 1, QSizePolicy::Minimum, QSizePolicy::Expanding ), 10, 0 ); + + // Initialize values + Config config( "locale" ); + config.setGroup( "Location" ); + selTimeZone->setCurrentZone( config.readEntry( "Timezone", "America/New_York" ) ); + use12HourTime = FALSE; + setDateTime( QDateTime::currentDateTime() ); +} + +TimeTabWidget::~TimeTabWidget() +{ +} + +void TimeTabWidget::saveSettings( bool commit ) +{ + if ( commit ) + { + // Set timezone and announce to world + QString tz = selTimeZone->currentZone(); + Config config("locale"); + config.setGroup( "Location" ); + config.writeEntry( "Timezone", tz ); + setenv( "TZ", tz, 1 ); + QCopEnvelope setTimeZone( "QPE/System", "timeChange(QString)" ); + setTimeZone << tz; + + // If controls have a valid date & time, update systemtime + int hour = sbHour->value(); + if ( use12HourTime && cbAmpm->currentItem() == ValuePM ) + hour += 12; + QDateTime dt( btnDate->date(), QTime ( hour, sbMin->value(), QTime::currentTime().second() ) ); + setSystemTime( dt ); + } + else + { + // Reset systemtime to hardware clock (i.e. undo any changes made by this app) + system("/sbin/hwclock --hctosys --utc"); + } +} + +void TimeTabWidget::setDateTime( const QDateTime &dt ) +{ + // Set time + QTime t = dt.time(); + if( use12HourTime ) + { + int show_hour = t.hour(); + if ( t.hour() >= 12 ) + { + show_hour -= 12; + cbAmpm->setCurrentItem( ValuePM ); + } + else + { + cbAmpm->setCurrentItem( ValueAM ); + } + if ( show_hour == 0 ) + show_hour = 12; + sbHour->setValue( show_hour ); + } + else + { + sbHour->setValue( t.hour() ); + } + sbMin->setValue( t.minute() ); + + // Set date + btnDate->setDate( dt.date() ); +} + +void TimeTabWidget::setSystemTime( const QDateTime &dt ) +{ + // Set system clock + if ( dt.isValid() ) + { + struct timeval myTv; + int t = TimeConversion::toUTC( dt ); + myTv.tv_sec = t; + myTv.tv_usec = 0; + + if ( myTv.tv_sec != -1 ) + ::settimeofday( &myTv, 0 ); + } +} + +void TimeTabWidget::slotUse12HourTime( int i ) +{ + use12HourTime = (i == 1); + + cbAmpm->setEnabled( use12HourTime ); + + int show_hour = sbHour->value(); + + if ( use12HourTime ) + { + sbHour->setMinValue( 1 ); + sbHour->setMaxValue( 12 ); + + if ( show_hour >= 12 ) + { + show_hour -= 12; + cbAmpm->setCurrentItem( ValuePM ); + } + else + { + cbAmpm->setCurrentItem( ValueAM ); + } + if ( show_hour == 0 ) + show_hour = 12; + } + else + { + sbHour->setMinValue( 0 ); + sbHour->setMaxValue( 23 ); + + if ( cbAmpm->currentItem() == ValuePM ) + { + show_hour += 12; + if ( show_hour == 24 ) + show_hour = 0; + } + } + + sbHour->setValue( show_hour ); +} + +void TimeTabWidget::slotDateFormatChanged( const DateFormat &df ) +{ + btnDate->setDateFormat( df ); +} + +void TimeTabWidget::slotWeekStartChanged( int monday ) +{ + btnDate->setWeekStartsMonday( monday ); +} + +void TimeTabWidget::slotTZChanged( const QString &newtz ) +{ + // If controls have a valid date & time, update systemtime + int hour = sbHour->value(); + if ( use12HourTime && cbAmpm->currentItem() == ValuePM ) + hour += 12; + QDateTime dt( btnDate->date(), QTime ( hour, sbMin->value(), QTime::currentTime().second() ) ); + setSystemTime( dt ); + QCopEnvelope setTimeZone( "QPE/System", "timeChange(QString)" ); + setTimeZone << newtz; + + // Set system timezone + QString currtz = getenv( "TZ" ); + setenv( "TZ", newtz, 1 ); + + // Get new date/time + hour = sbHour->value(); + if ( use12HourTime && cbAmpm->currentItem() == ValuePM ) + hour += 12; + dt = QDateTime::currentDateTime(); + + // Reset system timezone + if ( !currtz.isNull() ) + { + setenv( "TZ", currtz, 1 ); + } + + // Set controls to new time + setDateTime( dt ); + + emit tzChanged( newtz ); +} diff --git a/noncore/settings/netsystemtime/timetabwidget.h b/noncore/settings/netsystemtime/timetabwidget.h new file mode 100644 index 0000000..f44a1da --- a/dev/null +++ b/noncore/settings/netsystemtime/timetabwidget.h @@ -0,0 +1,77 @@ +/* +                This file is part of the OPIE Project + =. +             .=l. Copyright (c) 2002 OPIE team +           .>+-= + _;:,     .>    :=|. 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_,=:_.      -`: 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. + +*/ + +#ifndef TIMETABWIDGET_H +#define TIMETABWIDGET_H + +#include + +class DateButton; +class DateFormat; +class QComboBox; +class QDateTime; +class QSpinBox; +class TimeZoneSelector; + +class TimeTabWidget : public QWidget +{ + Q_OBJECT + +public: + TimeTabWidget( QWidget * = 0x0 ); + ~TimeTabWidget(); + + void saveSettings( bool ); + void setDateTime( const QDateTime & ); + +private: + QSpinBox *sbHour; + QSpinBox *sbMin; + QComboBox *cbAmpm; + DateButton *btnDate; + TimeZoneSelector *selTimeZone; + + bool use12HourTime; + + void setSystemTime( const QDateTime & ); + +signals: + void tzChanged( const QString & ); + void getNTPTime(); + void getPredictedTime(); + +public slots: + void slotUse12HourTime( int ); + void slotDateFormatChanged( const DateFormat & ); + void slotWeekStartChanged( int ); + +private slots: + void slotTZChanged( const QString & ); +}; + +#endif -- cgit v0.9.0.2