⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clock.cpp

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.7平台上编译为嵌入式图形界面操作系统。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/************************************************************************ Copyright (C) 2000-2002 Trolltech AS.  All rights reserved.**** This file is part of the 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 "clock.h"#include "analogclock.h"#include <qtopia/qpeapplication.h>#ifdef QWS#include <qtopia/qcopenvelope_qws.h>#endif#include <qtopia/config.h>#include <qtopia/timestring.h>#include <qtopia/alarmserver.h>#include <qtopia/sound.h>#include <qtopia/resource.h>#include <qlcdnumber.h>#include <qlabel.h>#include <qtimer.h>#include <qpushbutton.h>#include <qtoolbutton.h>#include <qpainter.h>#include <qtabwidget.h>#include <qspinbox.h>#include <qcombobox.h>#include <qcheckbox.h>#include <qgroupbox.h>#include <qmessagebox.h>#include <qtimer.h>#include <qlayout.h>#include <qhbox.h>#include <qlineedit.h>static const int sw_prec = 2;static const int magic_daily = 2292922;static const int magic_countdown = 2292923;static void toggleScreenSaver( bool on ){    QPEApplication::setTempScreenSaverMode(on ? QPEApplication::Enable : QPEApplication::DisableSuspend);  }class MySpinBox : public QSpinBox{public:    QLineEdit *lineEdit() const {	return editor();    }};Clock::Clock( QWidget * parent, const char *, WFlags f )    : ClockBase( parent, "clock", f ), swatch_splitms(99), init(FALSE) // No tr{    alarmDlg = 0;    alarmDlgLabel = 0;    swLayout = 0;    dayBtn = new QToolButton * [7];    Config config( "qpe" );    config.setGroup("Time");    ampm = config.readBoolEntry( "AMPM", TRUE );    onMonday = config.readBoolEntry( "MONDAY" );    connect( tabs, SIGNAL(currentChanged(QWidget*)),	     this, SLOT(tabChanged(QWidget*)) );    analogStopwatch = new AnalogClock( swFrame );    stopwatchLcd = new QLCDNumber( swFrame );    stopwatchLcd->setFrameStyle( QFrame::NoFrame );    stopwatchLcd->setSegmentStyle( QLCDNumber::Flat );    stopwatchLcd->setSizePolicy( QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred) );    analogClock->display( QTime::currentTime() );    clockLcd->setNumDigits( 5 );    clockLcd->setFixedWidth( clockLcd->sizeHint().width() );    date->setText( TimeString::localYMD( QDate::currentDate(), TimeString::Long ) );    if ( qApp->desktop()->width() < 200 )	date->setFont( QFont(date->font().family(), 14, QFont::Bold) );    if ( qApp->desktop()->height() > 240 ) {	clockLcd->setFixedHeight( 30 );	stopwatchLcd->setFixedHeight( 30 );    }    connect( stopStart, SIGNAL(pressed()), SLOT(stopStartStopWatch()) );    connect( reset, SIGNAL(pressed()), SLOT(resetStopWatch()) );    t = new QTimer( this );    connect( t, SIGNAL(timeout()), SLOT(updateClock()) );    t->start( 1000 );    applyAlarmTimer = new QTimer( this );    connect( applyAlarmTimer, SIGNAL(timeout()),	this, SLOT(applyDailyAlarm()) );    alarmt = new QTimer( this );    connect( alarmt, SIGNAL(timeout()), SLOT(alarmTimeout()) );    connect( qApp, SIGNAL(timeChanged()), SLOT(updateClock()) );    connect( qApp, SIGNAL(timeChanged()), SLOT(applyDailyAlarm()) );    swatch_running = FALSE;    swatch_totalms = 0;    swatch_currLap = 0;    swatch_dispLap = 0;    stopwatchLcd->setNumDigits( 8+1+sw_prec );    stopwatchLcd->display( "00:00:00.00" );    QVBoxLayout *lvb = new QVBoxLayout( lapFrame );    nextLapBtn = new QToolButton( UpArrow, lapFrame );    connect( nextLapBtn, SIGNAL(clicked()), this, SLOT(nextLap()) );    nextLapBtn->setAccel( Key_Up );    lvb->addWidget( nextLapBtn );    prevLapBtn = new QToolButton( DownArrow, lapFrame );    connect( prevLapBtn, SIGNAL(clicked()), this, SLOT(prevLap()) );    prevLapBtn->setAccel( Key_Down );    prevLapBtn->setMinimumWidth( 15 );    lvb->addWidget( prevLapBtn );    prevLapBtn->setEnabled( FALSE );    nextLapBtn->setEnabled( FALSE );    reset->setEnabled( FALSE );    lapLcd->setNumDigits( 8+1+sw_prec );    lapLcd->display( "00:00:00.00" );    splitLcd->setNumDigits( 8+1+sw_prec );    splitLcd->display( "00:00:00.00" );    lapNumLcd->display( 1 );    lapTimer = new QTimer( this );    connect( lapTimer, SIGNAL(timeout()), this, SLOT(lapTimeout()) );    for (uint s = 0; s < swatch_splitms.count(); s++ )	swatch_splitms[(int)s] = 0;    connect( qApp, SIGNAL(clockChanged(bool)), this, SLOT(changeClock(bool)) );    cdGroup->hide(); // XXX implement countdown timer.    connect( dailyHour, SIGNAL(valueChanged(int)), this, SLOT(scheduleApplyDailyAlarm()) );    connect( dailyMinute, SIGNAL(valueChanged(int)), this, SLOT(setDailyMinute(int)) );    connect( dailyAmPm, SIGNAL(activated(int)), this, SLOT(setDailyAmPm(int)) );    connect( dailyEnabled, SIGNAL(toggled(bool)), this, SLOT(enableDaily(bool)) );    cdLcd->display( "00:00" );    dailyMinute->setValidator(0);    Config cConfig( "Clock" ); // No tr    cConfig.setGroup( "Daily Alarm" );    QStringList days;    days.append( tr("Mon", "Monday") );    days.append( tr("Tue", "Tuesday") );    days.append( tr("Wed", "Wednesday") );    days.append( tr("Thu", "Thursday") );    days.append( tr("Fri", "Friday") );    days.append( tr("Sat", "Saturday") );    days.append( tr("Sun", "Sunday") );    int i;    QHBoxLayout *hb = new QHBoxLayout( daysFrame );    for ( i = 0; i < 7; i++ ) {	dayBtn[i] = new QToolButton( daysFrame );	hb->addWidget( dayBtn[i] );	dayBtn[i]->setToggleButton( TRUE );	dayBtn[i]->setOn( TRUE );	dayBtn[i]->setFocusPolicy( StrongFocus );	connect( dayBtn[i], SIGNAL(toggled(bool)), this, SLOT(scheduleApplyDailyAlarm()) );    }    for ( i = 0; i < 7; i++ )	dayBtn[dayBtnIdx(i+1)]->setText( days[i] );    QStringList exclDays = cConfig.readListEntry( "ExcludeDays", ',' );    QStringList::Iterator it;    for ( it = exclDays.begin(); it != exclDays.end(); ++it ) {	int d = (*it).toInt();	if ( d >= 1 && d <= 7 )	    dayBtn[dayBtnIdx(d)]->setOn( FALSE );    }    bool alarm = cConfig.readBoolEntry("Enabled", FALSE);    dailyEnabled->setChecked( alarm );    int m = cConfig.readNumEntry( "Minute", 0 );    dailyMinute->setValue( m );//    dailyMinute->setPrefix( m <= 9 ? "0" : "" );    int h = cConfig.readNumEntry( "Hour", 7 );    if ( ampm ) {	if (h > 12) {	    h -= 12;	    dailyAmPm->setCurrentItem( 1 );	}	if (h == 0) h = 12;	dailyHour->setMinValue( 1 );	dailyHour->setMaxValue( 12 );    } else {	dailyAmPm->hide();    }    dailyHour->setValue( h );    connect( ((MySpinBox*)dailyHour)->lineEdit(), SIGNAL(textChanged(const QString&)),	    this, SLOT(dailyEdited()) );    connect( ((MySpinBox*)dailyMinute)->lineEdit(), SIGNAL(textChanged(const QString&)),	    this, SLOT(dailyEdited()) );#if defined(Q_WS_QWS) && !defined(QT_NO_COP)    connect( qApp, SIGNAL(appMessage(const QCString&, const QByteArray&)),	    this, SLOT(appMessage(const QCString&, const QByteArray&)) );#endif    QTimer::singleShot( 0, this, SLOT(updateClock()) );    swFrame->installEventFilter( this );    init = TRUE;}Clock::~Clock(){    toggleScreenSaver( true );    delete [] dayBtn;}void Clock::updateClock(){    if ( tabs->currentPageIndex() == 0 ) {	QTime tm = QDateTime::currentDateTime().time();	QString s;	if ( ampm ) {	    int hour = tm.hour();	    if (hour == 0) 		hour = 12;	    if (hour > 12)		hour -= 12;	    s.sprintf( "%2d%c%02d", hour, ':', tm.minute() );	    clockAmPm->setText( (tm.hour() >= 12) ? "PM" : "AM" );	    clockAmPm->show();	} else {	    s.sprintf( "%2d%c%02d", tm.hour(), ':', tm.minute() );	    clockAmPm->hide();	}	clockLcd->display( s );	clockLcd->repaint( FALSE );	analogClock->display( QTime::currentTime() );	date->setText( TimeString::localYMD( QDate::currentDate(), TimeString::Long ) );    } else if ( tabs->currentPageIndex() == 1 ) {	int totalms = swatch_totalms;	if ( swatch_running )	    totalms += swatch_start.elapsed();	setSwatchLcd( stopwatchLcd, totalms, !swatch_running );	QTime swatch_time = QTime(0,0,0).addMSecs(totalms);	analogStopwatch->display( swatch_time );	if ( swatch_dispLap == swatch_currLap ) {	    swatch_splitms[swatch_currLap] = swatch_totalms;	    if ( swatch_running )		swatch_splitms[swatch_currLap] += swatch_start.elapsed();	    updateLap();	}    } else if ( tabs->currentPageIndex() == 2 ) {	// nothing.    }}void Clock::changeClock( bool a ){    if ( ampm != a ) {	int minute = dailyMinute->value();	int hour = dailyHour->value();	if ( ampm ) {	    if (hour == 12)		hour = 0;	    if (dailyAmPm->currentItem() == 1 )		hour += 12;	    dailyHour->setMinValue( 0 );	    dailyHour->setMaxValue( 23 );	    dailyAmPm->hide();	} else {	    if (hour > 12) {		hour -= 12;		dailyAmPm->setCurrentItem( 1 );	    }	    if (hour == 0) hour = 12;	    dailyHour->setMinValue( 1 );	    dailyHour->setMaxValue( 12 );	    dailyAmPm->show();	}	dailyMinute->setValue( minute );	dailyHour->setValue( hour );    }    ampm = a;    updateClock();}void Clock::stopStartStopWatch(){    if ( swatch_running ) {	swatch_totalms += swatch_start.elapsed();	swatch_splitms[swatch_currLap] = swatch_totalms;	stopStart->setText( tr("Start") );	reset->setText( tr("Reset") );	reset->setEnabled( TRUE );	t->stop();	swatch_running = FALSE;	toggleScreenSaver( TRUE );	updateClock();    } else {	swatch_start.start();	stopStart->setText( tr("Stop") );	reset->setText( tr("Lap/Split") );	reset->setEnabled( swatch_currLap < 98 );        t->start( 1000 );	swatch_running = TRUE;	// disable screensaver while stop watch is running	toggleScreenSaver( FALSE );    }    swatch_dispLap = swatch_currLap;    updateLap();    prevLapBtn->setEnabled( swatch_dispLap );    nextLapBtn->setEnabled( swatch_dispLap < swatch_currLap );    stopStart->setAccel( Key_Return );

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -