author | harlekin <harlekin> | 2002-04-10 16:51:46 (UTC) |
---|---|---|
committer | harlekin <harlekin> | 2002-04-10 16:51:46 (UTC) |
commit | 34e0e7af48992314d461be1a5a573dc0967fe260 (patch) (side-by-side diff) | |
tree | e3e8bbf44ebf767f28de3fe89eced38e785a7b55 /core/pim/today/today.cpp | |
parent | 1d32fda5b67e89321ecbd0c8700edb8292b9ca90 (diff) | |
download | opie-34e0e7af48992314d461be1a5a573dc0967fe260.zip opie-34e0e7af48992314d461be1a5a573dc0967fe260.tar.gz opie-34e0e7af48992314d461be1a5a573dc0967fe260.tar.bz2 |
am/pm support, ugly
-rw-r--r-- | core/pim/today/today.cpp | 186 |
1 files changed, 118 insertions, 68 deletions
diff --git a/core/pim/today/today.cpp b/core/pim/today/today.cpp index 7cef035..028947d 100644 --- a/core/pim/today/today.cpp +++ b/core/pim/today/today.cpp @@ -18,22 +18,22 @@ ***************************************************************************/ #include "today.h" #include <qpe/timestring.h> #include <qpe/config.h> -#include <qpe/qcopenvelope_qws.h> +#include <qpe/qcopenvelope_qws.h> #include <qpe/qprocess.h> #include <qpe/resource.h> #include <qpe/contact.h> #include <qpe/global.h> #include <qpe/qpeapplication.h> #include <qdir.h> #include <qfile.h> -#include <qdatetime.h> +#include <qdatetime.h> #include <qtextstream.h> #include <qcheckbox.h> #include <qspinbox.h> #include <qpushbutton.h> #include <qlabel.h> #include <qtimer.h> @@ -53,31 +53,33 @@ int SHOW_LOCATION; int SHOW_NOTES; // show only later dates int ONLY_LATER; int AUTOSTART; int NEW_START=1; -/* - * Constructs a Example which is a child of 'parent', with the - * name 'name' and widget flags set to 'f' +/* + * Constructs a Example which is a child of 'parent', with the + * name 'name' and widget flags set to 'f' */ Today::Today( QWidget* parent, const char* name, WFlags fl ) : TodayBase( parent, name, fl ), AllDateBookEvents(NULL) { QObject::connect( (QObject*)PushButton1, SIGNAL( clicked() ), this, SLOT(startConfig() ) ); QObject::connect( (QObject*)TodoButton, SIGNAL( clicked() ), this, SLOT(startTodo() ) ); QObject::connect( (QObject*)DatesButton, SIGNAL( clicked() ), this, SLOT(startDatebook() ) ); QObject::connect( (QObject*)MailButton, SIGNAL( clicked() ), this, SLOT(startMail() ) ); - -#if defined(Q_WS_QWS) + +#if defined(Q_WS_QWS) #if !defined(QT_NO_COP) QCopChannel *todayChannel = new QCopChannel("QPE/Today" , this ); connect (todayChannel, SIGNAL( received(const QCString &, const QByteArray &)), this, SLOT ( channelReceived(const QCString &, const QByteArray &)) ); #endif #endif - + + + db = NULL; setOwnerField(); todo = new ToDoDB; getTodo(); draw(); autoStart(); @@ -95,13 +97,13 @@ void Today::channelReceived(const QCString &msg, const QByteArray & data) { } } /* * Initialises the owner field with the default value, the username - */ + */ void Today::setOwnerField() { QString file = Global::applicationFileName("addressbook", "businesscard.vcf"); if (QFile::exists(file)) { Contact cont = Contact::readVCard(file)[0]; QString returnString = cont.fullName(); OwnerField->setText( tr ("<b>Owned by " + returnString + "</b>")); @@ -114,21 +116,21 @@ void Today::setOwnerField() { * Set the owner field with a given QString, for example per qcop. */ void Today::setOwnerField(QString &message) { if (!message.isEmpty()) { OwnerField->setText("<b>" + message + "</b>"); } -} +} /* * Autostart, uses the new (opie only) autostart method in the launcher code. * If registered against that today ist started on each resume. */ void Today::autoStart() { Config cfg("today"); - cfg.setGroup("Autostart"); + cfg.setGroup("Autostart"); AUTOSTART = cfg.readNumEntry("autostart",1); if (AUTOSTART) { QCopEnvelope e("QPE/System", "autoStart(QString,QString)"); e << QString("add"); e << QString("today"); } else { @@ -142,13 +144,13 @@ void Today::autoStart() { * Repaint method. Reread all fields. */ void Today::draw() { init(); getDates(); getMail(); - + // if the todolist.xml file was not modified in between, do not parse it. if (checkIfModified()) { if (todo) delete todo; todo = new ToDoDB; getTodo(); } @@ -218,16 +220,16 @@ void Today::init() { */ void Today::startConfig() { conf = new todayconfig ( this, "", true ); // read the config Config cfg("today"); - cfg.setGroup("BaseConfig"); - + cfg.setGroup("BaseConfig"); + //init(); - + conf->SpinBox1->setValue(MAX_LINES_MEET); // location show box conf->CheckBox1->setChecked(SHOW_LOCATION); // notes show box conf->CheckBox2->setChecked(SHOW_NOTES); // task lines @@ -237,32 +239,32 @@ void Today::startConfig() { // only later conf->CheckBox3->setChecked(ONLY_LATER); // if today should be autostarted conf->CheckBoxAuto->setChecked(AUTOSTART); conf->exec(); - + int maxlinestask = conf->SpinBox2->value(); int maxmeet = conf->SpinBox1->value(); int location = conf->CheckBox1->isChecked(); int notes = conf->CheckBox2->isChecked(); int maxcharclip = conf->SpinBox7->value(); int onlylater = conf->CheckBox3->isChecked(); int autostart =conf->CheckBoxAuto->isChecked(); - + cfg.writeEntry("maxlinestask",maxlinestask); - cfg.writeEntry("maxcharclip", maxcharclip); + cfg.writeEntry("maxcharclip", maxcharclip); cfg.writeEntry("maxlinesmeet",maxmeet); cfg.writeEntry("showlocation",location); cfg.writeEntry("shownotes", notes); cfg.writeEntry("onlylater", onlylater); cfg.setGroup("Autostart"); cfg.writeEntry("autostart", autostart); - + // sync it to "disk" - cfg.write(); + cfg.write(); NEW_START=1; draw(); autoStart(); } @@ -276,88 +278,88 @@ void Today::getDates() { AllDateBookEvents = new QWidget( ); QVBoxLayout* layoutDates = new QVBoxLayout(AllDateBookEvents); if (db) { delete db; } - db = new DateBookDB; + db = new DateBookDB; QValueList<EffectiveEvent> list = db->getEffectiveEvents(date, date); qBubbleSort(list); // printf("Get dates\n"); Config config( "qpe" ); // if 24 h format //bool ampm = config.readBoolEntry( "AMPM", TRUE ); - + int count=0; - + if ( list.count() > 0 ) { - + for ( QValueList<EffectiveEvent>::ConstIterator it=list.begin(); it!=list.end(); ++it ) { - - + + if ( count <= MAX_LINES_MEET ) { QTime time = QTime::currentTime(); - + if (!ONLY_LATER) { count++; DateBookEvent *l=new DateBookEvent(*it, AllDateBookEvents, SHOW_LOCATION, SHOW_NOTES); layoutDates->addWidget(l); connect (l, SIGNAL(editEvent(const Event &)), this, SLOT(editEvent(const Event &))); } else if ((time.toString() <= TimeString::dateString((*it).event().end())) ) { count++; - + // show only later appointments DateBookEventLater *l=new DateBookEventLater(*it, AllDateBookEvents, SHOW_LOCATION, SHOW_NOTES); layoutDates->addWidget(l); connect (l, SIGNAL(editEvent(const Event &)), this, SLOT(editEvent(const Event &))); - } + } } } if (ONLY_LATER && count==0) { QLabel* noMoreEvents = new QLabel(AllDateBookEvents); noMoreEvents->setText(tr("No more appointments today")); layoutDates->addWidget(noMoreEvents); - } + } } else { QLabel* noEvents = new QLabel(AllDateBookEvents); noEvents->setText(tr("No appointments today")); layoutDates->addWidget(noEvents); } - + layoutDates->addItem(new QSpacerItem(1,1, QSizePolicy::Minimum, QSizePolicy::Expanding)); sv1->addChild(AllDateBookEvents); AllDateBookEvents->show(); } - + void Today::getMail() { Config cfg("opiemail"); - cfg.setGroup("today"); - + cfg.setGroup("today"); + // how many lines should be showed in the task section int NEW_MAILS = cfg.readNumEntry("newmails",0); int OUTGOING = cfg.readNumEntry("outgoing",0); - + QString output = tr("<b>%1</b> new mail(s), <b>%2</b> outgoing").arg(NEW_MAILS).arg(OUTGOING); - + MailField->setText(output); } /* * Get the todos */ void Today::getTodo() { - + QString output; QString tmpout; int count = 0; int ammount = 0; // get overdue todos first @@ -367,69 +369,69 @@ void Today::getTodo() { it!=overDueList.end(); ++it ) { if (!(*it).isCompleted() && ( ammount < MAX_LINES_TASK) ) { tmpout += "<font color=#e00000><b>-" +((*it).description()).mid(0, MAX_CHAR_CLIP) + "</b></font><br>"; ammount++; } } - + // get total number of still open todos QValueList<ToDoEvent> open = todo->rawToDos(); qBubbleSort(open); for ( QValueList<ToDoEvent>::Iterator it=open.begin(); it!=open.end(); ++it ) { if (!(*it).isCompleted()){ count +=1; - // not the overdues, we allready got them, and not if we are + // not the overdues, we allready got them, and not if we are // over the maxlines if (!(*it).isOverdue() && ( ammount < MAX_LINES_TASK) ) { tmpout += "<b>-</b>" + ((*it).description()).mid(0, MAX_CHAR_CLIP) + "<br>"; ammount++; } } } - - + + if (count > 0) { if( count == 1 ) { output = tr("There is <b> 1</b> active task: <br>" ); } else { output = tr("There are <b> %1</b> active tasks: <br>").arg(count); } output += tmpout; } else { output = tr("No active tasks"); } - + TodoField->setText(tr(output)); } /* * launches datebook */ -void Today::startDatebook() { +void Today::startDatebook() { QCopEnvelope e("QPE/System", "execute(QString)"); e << QString("datebook"); } /* * starts the edit dialog as known from datebook - */ + */ extern QPEApplication *todayApp; void Today::editEvent(const Event &e) { startDatebook(); - + while(!QCopChannel::isRegistered("QPE/Datebook")) todayApp->processEvents(); QCopEnvelope env("QPE/Datebook", "editEvent(int)"); env << e.uid(); } /* * launches todolist - */ + */ void Today::startTodo() { QCopEnvelope e("QPE/System", "execute(QString)"); e << QString("todolist"); } /* @@ -441,100 +443,148 @@ void Today::startMail() { } Today::~Today() { } - - /* - * Gets the events for the current day, if it should get all dates + * Gets the events for the current day, if it should get all dates */ -DateBookEvent::DateBookEvent(const EffectiveEvent &ev, - QWidget* parent = 0, +DateBookEvent::DateBookEvent(const EffectiveEvent &ev, + QWidget* parent = 0, int SHOW_LOCATION = 0, int SHOW_NOTES = 0, - const char* name = 0, + const char* name = 0, WFlags fl = 0) : ClickableLabel(parent,name,fl), event(ev) { - + QString msg; //QTime time = QTime::currentTime(); - + + Config config( "qpe" ); + // if 24 h format + ampm = config.readBoolEntry( "AMPM", TRUE ); + + if (!ONLY_LATER) { msg += "<B>" + (ev).description() + "</B>"; if ( (ev).event().hasAlarm() ) { msg += " <b>[with alarm]</b>"; } // include location or not if (SHOW_LOCATION == 1) { msg += "<BR><i>" + (ev).location() + "</i>"; } - + if ( (TimeString::timeString(QTime((ev).event().start().time()) ) == "00:00") && (TimeString::timeString(QTime((ev).event().end().time()) ) == "23:59") ) { msg += "<br>All day"; } else { // start time of event - msg += "<br>" + TimeString::timeString(QTime((ev).event().start().time()) ) + msg += "<br>" + ampmTime(QTime((ev).event().start().time()) ); // end time of event - + "<b> - </b>" + TimeString::timeString(QTime((ev).event().end().time()) ); + + "<b> - </b>" + ampmTime(QTime((ev).event().end().time()) ); } - + // include possible note or not if (SHOW_NOTES == 1) { msg += "<br> <i>note</i>:" +((ev).notes()).mid(0, MAX_CHAR_CLIP); } } setText(msg); connect(this, SIGNAL(clicked()), this, SLOT(editMe())); setAlignment( int( QLabel::WordBreak | QLabel::AlignLeft ) ); } -DateBookEventLater::DateBookEventLater(const EffectiveEvent &ev, - QWidget* parent = 0, +QString DateBookEvent::ampmTime(QTime tm) { + + QString s; + if( ampm ) { + int hour = tm.hour(); + if (hour == 0) + hour = 12; + if (hour > 12) + hour -= 12; + s.sprintf( "%2d:%02d %s", hour, tm.minute(), + (tm.hour() >= 12) ? "PM" : "AM" ); + return s; + } else { + s.sprintf( "%2d:%02d", tm.hour(), tm.minute() ); + return s; + } + +} + + +DateBookEventLater::DateBookEventLater(const EffectiveEvent &ev, + QWidget* parent = 0, int SHOW_LOCATION = 0, int SHOW_NOTES = 0, - const char* name = 0, + const char* name = 0, WFlags fl = 0) : ClickableLabel(parent,name,fl), event(ev) { - + QString msg; QTime time = QTime::currentTime(); - + + Config config( "qpe" ); + // if 24 h format + ampm = config.readBoolEntry( "AMPM", TRUE ); + + if ((time.toString() <= TimeString::dateString((ev).event().end())) ) { // show only later appointments msg += "<B>" + (ev).description() + "</B>"; if ( (ev).event().hasAlarm() ) { msg += " <b>[with alarm]</b>"; } // include location or not if (SHOW_LOCATION == 1) { msg += "<BR><i>" + (ev).location() + "</i>"; } - + if ( (TimeString::timeString(QTime((ev).event().start().time()) ) == "00:00") && (TimeString::timeString(QTime((ev).event().end().time()) ) == "23:59") ) { msg += "<br>All day"; } else { // start time of event - msg += "<br>" + TimeString::timeString(QTime((ev).event().start().time()) ) + msg += "<br>" + ampmTime(QTime((ev).event().start().time()) ) // end time of event - + "<b> - </b>" + TimeString::timeString(QTime((ev).event().end().time()) ); + + "<b> - </b>" + ampmTime(QTime((ev).event().end().time()) ); } // include possible note or not if (SHOW_NOTES == 1) { msg += "<br> <i>note</i>:" +((ev).notes()).mid(0, MAX_CHAR_CLIP); } - } - + } + setText(msg); connect(this, SIGNAL(clicked()), this, SLOT(editMe())); setAlignment( int( QLabel::WordBreak | QLabel::AlignLeft ) ); } +QString DateBookEventLater::ampmTime(QTime tm) { + + QString s; + if( ampm ) { + int hour = tm.hour(); + if (hour == 0) + hour = 12; + if (hour > 12) + hour -= 12; + s.sprintf( "%2d:%02d %s", hour, tm.minute(), + (tm.hour() >= 12) ? "PM" : "AM" ); + return s; + } else { + s.sprintf( "%2d:%02d", tm.hour(), tm.minute() ); + return s; + } + +} + + void DateBookEvent::editMe() { emit editEvent(event.event()); } void DateBookEventLater::editMe() { emit editEvent(event.event()); |