summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/tools/clock/clock.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/noncore/tools/clock/clock.cpp b/noncore/tools/clock/clock.cpp
index 0ad69d9..3473d01 100644
--- a/noncore/tools/clock/clock.cpp
+++ b/noncore/tools/clock/clock.cpp
@@ -1,213 +1,213 @@
/**********************************************************************
** 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.
**
**********************************************************************/
// changes added and Copyright (C) by L. J. Potter <ljp@llornkcor.com> 2002
-// changes added and Copyright (C) by Holger Freyther 2004
+// changes added and Copyright (C) by Holger Freyther 2004,2005
#include "clock.h"
#include "analogclock.h"
#include <qtabwidget.h>
#include <opie2/ofiledialog.h>
#include <qpe/qpeapplication.h>
#include <qpe/qcopenvelope_qws.h>
#include <qpe/config.h>
#include <qpe/timestring.h>
#include <qpe/alarmserver.h>
#include <qpe/sound.h>
#include <qpe/resource.h>
#include <qsound.h>
#include <qtimer.h>
#include <qlcdnumber.h>
#include <qslider.h>
#include <qlabel.h>
#include <qtimer.h>
#include <qpushbutton.h>
#include <qtoolbutton.h>
#include <qpainter.h>
#include <qmessagebox.h>
#include <qdatetime.h>
#include <qspinbox.h>
#include <qcombobox.h>
#include <qcheckbox.h>
#include <qgroupbox.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 const int magic_snooze = 2292924;
static const int magic_playmp = 2292925;
static const char ALARM_CLOCK_CHANNEL [] = "QPE/Application/clock";
static const char ALARM_CLOCK_MESSAGE [] = "alarm(QDateTime,int)";
#include <math.h>
#include <unistd.h>
#include <sys/types.h>
#include <pthread.h>
static void toggleScreenSaver( bool on )
{
QCopEnvelope e( "QPE/System", "setScreenSaverMode(int)" );
e << ( on ? QPEApplication::Enable : QPEApplication::DisableSuspend );
}
static void startPlayer()
{
Config config( "qpe" );
config.setGroup( "Time" );
sleep(15);
QCopEnvelope e( "QPE/Application/opieplayer", "setDocument(QString)" );
e << config.readEntry( "mp3File", "" );
}
class MySpinBox : public QSpinBox
{
public:
QLineEdit *lineEdit() const {
return editor();
}
};
//
//
//
AlarmDlg::AlarmDlg(QWidget *parent, const char *name, bool modal,
const QString &txt) :
AlarmDlgBase(parent, name, modal)
{
setCaption( tr("Clock") );
pixmap->setPixmap( Resource::loadPixmap("clock/alarmbell") );
alarmDlgLabel->setText(txt);
connect(snoozeTime, SIGNAL(valueChanged(int)), this,
SLOT(changePrompt(int)));
connect(cmdOk, SIGNAL(clicked()), this, SLOT(checkSnooze()));
}
//
//
//
void
AlarmDlg::setText(const QString &txt)
{
alarmDlgLabel->setText(txt);
}
//
//
//
void
AlarmDlg::checkSnooze(void)
{
//
// Ensure we have only one snooze alarm.
//
AlarmServer::deleteAlarm(QDateTime(), ALARM_CLOCK_CHANNEL,
ALARM_CLOCK_MESSAGE, magic_snooze);
if (snoozeTime->value() > 0) {
QDateTime wake = QDateTime::currentDateTime();
wake = wake.addSecs(snoozeTime->value() * 60); // snoozeTime in minutes
AlarmServer::addAlarm(wake, ALARM_CLOCK_CHANNEL,
ALARM_CLOCK_MESSAGE, magic_snooze);
}
accept();
}
void
AlarmDlg::changePrompt(int mins)
{
cmdOk->setText(mins > 0 ? tr("Snooze") : tr("Close") );
}
Clock::Clock( QWidget * parent, const char *, WFlags f )
: ClockBase( parent, "clock", f ), swatch_splitms(99), init(FALSE) // No tr
{
alarmDlg = 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::dateString( QDate::currentDate(), TimeString::currentDateFormat() ) );
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()) );
@@ -612,200 +612,200 @@ void Clock::appMessage( const QCString &msg, const QByteArray &data )
// Set for tomorrow, so user wakes up every day, even if they
// don't confirm the dialog. Don't set it again when snoozing.
if (t != magic_snooze) {
applyDailyAlarm();
}
if ( !alarmDlg->isVisible() ) {
QPEApplication::execDialog(alarmDlg);
alarmt->stop();
}
} else if ( t == magic_countdown ) {
// countdown
Sound::soundAlarm();
}
} else if ( msg == "setDailyEnabled(int)" ) {
QDataStream ds(data,IO_ReadOnly);
int enableDaily;
ds >> enableDaily;
dailyEnabled->setChecked( enableDaily );
applyDailyAlarm();
} else if ( msg == "editDailyAlarm()" ) {
tabs->setCurrentPage(2);
QPEApplication::setKeepRunning();
} else if (msg == "showClock()") {
tabs->setCurrentPage(0);
QPEApplication::setKeepRunning();
} else if (msg == "timerStart()" ) {
if ( !swatch_running )
stopStartStopWatch();
tabs->setCurrentPage(1);
QPEApplication::setKeepRunning();
} else if (msg == "timerStop()" ) {
if ( swatch_running )
stopStartStopWatch();
tabs->setCurrentPage(1);
QPEApplication::setKeepRunning();
} else if (msg == "timerReset()" ) {
resetStopWatch();
tabs->setCurrentPage(1);
QPEApplication::setKeepRunning();
}
}
void Clock::alarmTimeout()
{
if ( alarmCount < 10 ) {
Sound::soundAlarm();
alarmCount++;
} else {
alarmCount = 0;
alarmt->stop();
}
}
QDateTime Clock::nextAlarm( int h, int m )
{
QDateTime now = QDateTime::currentDateTime();
QTime at( h, m );
QDateTime when( now.date(), at );
int count = 0;
int dow = when.date().dayOfWeek();
while ( when < now || !dayBtn[dayBtnIdx(dow)]->isOn() ) {
when = when.addDays( 1 );
dow = when.date().dayOfWeek();
if ( ++count > 7 )
return QDateTime();
}
return when;
}
int Clock::dayBtnIdx( int d ) const
{
if ( onMonday )
return d-1;
else if ( d == 7 )
return 0;
else
return d;
}
void Clock::scheduleApplyDailyAlarm()
{
applyAlarmTimer->start( 5000, TRUE );
}
void Clock::applyDailyAlarm()
{
if ( !init )
return;
applyAlarmTimer->stop();
int minute = dailyMinute->value();
int hour = dailyHour->value();
if ( ampm ) {
if (hour == 12)
hour = 0;
if (dailyAmPm->currentItem() == 1 )
hour += 12;
}
Config config( "Clock" );
config.setGroup( "Daily Alarm" );
config.writeEntry( "Hour", hour );
config.writeEntry( "Minute", minute );
bool enableDaily = dailyEnabled->isChecked();
bool isSound = sndCheck->isChecked();
int isMagic = isSound ? magic_playmp : magic_daily;
config.writeEntry( "Enabled", enableDaily );
config.writeEntry( "SoundEnabled", isSound );
QString exclDays;
int exclCount = 0;
for ( int i = 1; i <= 7; i++ ) {
if ( !dayBtn[dayBtnIdx(i)]->isOn() ) {
if ( !exclDays.isEmpty() )
exclDays += ",";
exclDays += QString::number( i );
exclCount++;
}
}
config.writeEntry( "ExcludeDays", exclDays );
/* try to delete all */
AlarmServer::deleteAlarm(QDateTime(), ALARM_CLOCK_CHANNEL,
ALARM_CLOCK_MESSAGE, magic_daily);
AlarmServer::deleteAlarm(QDateTime(), ALARM_CLOCK_CHANNEL,
ALARM_CLOCK_MESSAGE, magic_playmp );
AlarmServer::deleteAlarm(QDateTime(), ALARM_CLOCK_CHANNEL,
ALARM_CLOCK_MESSAGE, magic_snooze);
if ( enableDaily && exclCount < 7 ) {
QDateTime when = nextAlarm( hour, minute );
AlarmServer::addAlarm(when, ALARM_CLOCK_CHANNEL,
ALARM_CLOCK_MESSAGE, isMagic);
}
}
bool Clock::validDaysSelected(void)
{
for ( int i = 1; i <= 7; i++ ) {
if ( dayBtn[dayBtnIdx(i)]->isOn() ) {
return TRUE;
}
}
return FALSE;
}
void Clock::closeEvent( QCloseEvent *e )
{
if (dailyEnabled->isChecked()) {
if (!validDaysSelected()) {
QMessageBox::warning(this, tr("Select Day"),
tr("Daily alarm requires at least\none day to be selected."));
return;
}
}
applyDailyAlarm();
ClockBase::closeEvent(e);
}
bool Clock::spinBoxValid( QSpinBox *sb )
{
bool valid = TRUE;
QString tv = sb->text();
for ( uint i = 0; i < tv.length(); i++ ) {
if ( !tv[0].isDigit() )
valid = FALSE;
}
bool ok = FALSE;
int v = tv.toInt( &ok );
if ( !ok )
valid = FALSE;
if ( v < sb->minValue() || v > sb->maxValue() )
valid = FALSE;
return valid;
}
void Clock::slotBrowseMp3File() {
Config config( "qpe" );
config.setGroup("Time");
QMap<QString, QStringList> map;
map.insert(tr("All"), QStringList() );
QStringList text;
text << "audio/*";
map.insert(tr("Audio"), text );
- QString str = Opie::Ui::OFileDialog::getOpenFileName( 2,"/", QString::null, map);
+ QString str = Opie::Ui::OFileDialog::getOpenFileName( 2, QPEApplication::qpeDir() + "sounds/", QString::null, map);
if(!str.isEmpty() ) {
config.writeEntry("mp3Alarm",1);
config.writeEntry("mp3File",str);
sndFileName->setText( str );
scheduleApplyDailyAlarm();
}
}