-rw-r--r-- | core/pim/today/changelog | 7 | ||||
-rw-r--r-- | core/pim/today/clickablelabel.cpp | 31 | ||||
-rw-r--r-- | core/pim/today/clickablelabel.h | 20 | ||||
-rw-r--r-- | core/pim/today/opie-today.control | 2 | ||||
-rw-r--r-- | core/pim/today/today.cpp | 4 | ||||
-rw-r--r-- | core/pim/today/today.h | 6 | ||||
-rw-r--r-- | core/pim/today/today.pro | 4 |
7 files changed, 15 insertions, 59 deletions
diff --git a/core/pim/today/changelog b/core/pim/today/changelog index 0bc5fe0..c687cea 100644 --- a/core/pim/today/changelog +++ b/core/pim/today/changelog @@ -1,85 +1,92 @@ +0.3.3 + +* Changed the logo so it better scales to bigger display and also + made the "Today" string translatable. +* some am/pm fixes +* clickable labels now in libopie + 0.3.2 * Autostart is now more configurable. You can decide how long the ipaq has to has been suspended, before autostart is triggered.(Opie only) * am/pm time optinal (autodetect) 0.3.1 * fixed the wrong color of the buttons * better translation (thanks carsten and others) * fixes memory leaks * bugfixes in calendar part, now location and note are working again. 0.3.0 * today uses now tododb from libopie. So major changes in the todo part: - overdue items on top - then sorted by date, then by priority * some cleanups * speed optimisations 0.2.9 * Many bugfixes. * Today now apparently sorts the dates _allways_ right, i would assume it to be a qt bug 0.2.8 * Appointments are now clickable (connection to datebook still missing) * autostart support (opie only) 0.2.7 * check if todolist.xml was changed before parsing it * check only every 30 sec for changes. * some visual stuff * as usual many little improvements .-) 0.2.6 * added scrollbars to dates and todo * all day detection * some smaller bugfixes 0.2.5 * some other minor fixes regarding autoupdate * fixed segfault with todolist > 7 entries * fixed the "ugly grey border around buttons" issue * fixed the "empty calendar field" "bug" * shown only later appointments as option 0.2.4 * added support for email * autoupdates after 1 min * QCopEnvelope instead of system() * starting to use qvbox in gui 0.2.3 * the 4 am release * several bugfixes 0.2.2 * started working on calling other apps * and finished it 0.2.1 * images no more inline * config dialog 0.1.1 * started changelog. * fixed segfault on empty/nonexistant todolist.xml * better handling for file location diff --git a/core/pim/today/clickablelabel.cpp b/core/pim/today/clickablelabel.cpp deleted file mode 100644 index e11cef6..0000000 --- a/core/pim/today/clickablelabel.cpp +++ b/dev/null @@ -1,31 +0,0 @@ -#include "clickablelabel.h" - -ClickableLabel::ClickableLabel(QWidget* parent, - const char* name, - WFlags fl) : - QLabel(parent,name,fl) -{ - setFrameShape(NoFrame); - setFrameShadow(Sunken); -} - -void ClickableLabel::mousePressEvent( QMouseEvent *e ) { - setFrameShape(Panel); - repaint(); -} - -void ClickableLabel::mouseReleaseEvent( QMouseEvent *e ) { - setFrameShape(NoFrame); - repaint(); - if (rect().contains(e->pos())) { - emit clicked(); - } -} - -void ClickableLabel::mouseMoveEvent( QMouseEvent *e ) { - if (rect().contains(e->pos())) { - setFrameShape(Panel); - } else { - setFrameShape(NoFrame); - } -} diff --git a/core/pim/today/clickablelabel.h b/core/pim/today/clickablelabel.h deleted file mode 100644 index b6d33ad..0000000 --- a/core/pim/today/clickablelabel.h +++ b/dev/null @@ -1,20 +0,0 @@ -#ifndef CLICKABLELABEL -#define CLICKABLELABEL - -#include <qlabel.h> - -class ClickableLabel: public QLabel -{ - Q_OBJECT -public: - ClickableLabel(QWidget* parent = 0, const char* name = 0, - WFlags fl = 0); - protected: - void mousePressEvent( QMouseEvent *e ); - void mouseReleaseEvent( QMouseEvent *e ); - void mouseMoveEvent( QMouseEvent *e ); - signals: - void clicked(); -}; - -#endif diff --git a/core/pim/today/opie-today.control b/core/pim/today/opie-today.control index cf982fd..da9d9fa 100644 --- a/core/pim/today/opie-today.control +++ b/core/pim/today/opie-today.control @@ -1,16 +1,16 @@ Files: bin/today apps/Applications/today.desktop pics/today/* Priority: optional Section: opie/applications Maintainer: Maximilian Reiß <max.reiss@gmx.de> Architecture: arm -Version: 0.3.2-$SUB_VERSION +Version: 0.3.3-$SUB_VERSION Depends: opie-base ($QPE_VERSION), libopie ($QPE_VERSION) License: GPL Description: today screen This today screen app gives an overview of appointments and todos. It also shows incoming and outgoing mails from opiemail. When using Opie (opie.handhelds.org) today can be autostarted on resume. It is highly configurable. diff --git a/core/pim/today/today.cpp b/core/pim/today/today.cpp index 1b4408c..0f4cbdb 100644 --- a/core/pim/today/today.cpp +++ b/core/pim/today/today.cpp @@ -220,394 +220,394 @@ void Today::init() { cfg.setGroup("Autostart"); AUTOSTART = cfg.readNumEntry("autostart",1); AUTOSTART_TIMER = cfg.readEntry("autostartdelay", "0"); //db = new DateBookDB; } /* * The method for the configuration dialog. */ void Today::startConfig() { conf = new todayconfig ( this, "", true ); // read the config Config cfg("today"); 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 conf->SpinBox2->setValue(MAX_LINES_TASK); // clip when? conf->SpinBox7->setValue(MAX_CHAR_CLIP); // only later conf->CheckBox3->setChecked(ONLY_LATER); // if today should be autostarted conf->CheckBoxAuto->setChecked(AUTOSTART); // autostart only if device has been suspended for X minutes conf->SpinBoxTime->setValue( AUTOSTART_TIMER.toInt() ); 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(); int autostartdelay = conf->SpinBoxTime->value(); cfg.writeEntry("maxlinestask",maxlinestask); 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); cfg.writeEntry("autostartdelay", autostartdelay); // sync it to "disk" cfg.write(); NEW_START=1; draw(); AUTOSTART=autostart; autoStart(); } /* * Get all events that are in the datebook xml file for today */ void Today::getDates() { QDate date = QDate::currentDate(); if (AllDateBookEvents) delete AllDateBookEvents; AllDateBookEvents = new QWidget( ); QVBoxLayout* layoutDates = new QVBoxLayout(AllDateBookEvents); if (db) { delete db; } 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"); // 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 QValueList<ToDoEvent> overDueList = todo->overDue(); qBubbleSort(overDueList); for ( QValueList<ToDoEvent>::Iterator it=overDueList.begin(); 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 // 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() { 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"); } /* * launch opiemail */ void Today::startMail() { QCopEnvelope e("QPE/System", "execute(QString)"); e << QString("opiemail"); //Right now start both, maybe decide which to rum via config file .. QCopEnvelope f("QPE/System", "execute(QString)"); f << QString("qtmail"); } Today::~Today() { } /* * Gets the events for the current day, if it should get all dates */ DateBookEvent::DateBookEvent(const EffectiveEvent &ev, QWidget* parent, int SHOW_LOCATION, int SHOW_NOTES, const char* name, WFlags fl) : - ClickableLabel(parent,name,fl), event(ev) { + OClickableLabel(parent,name,fl), event(ev) { QString msg; //QTime time = QTime::currentTime(); Config config( "qpe" ); config.setGroup( "Time" ); // 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>" + ampmTime(QTime((ev).event().start().time()) ) // end time of event + "<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 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, int SHOW_LOCATION, int SHOW_NOTES, const char* name, WFlags fl) : - ClickableLabel(parent,name,fl), event(ev) { + OClickableLabel(parent,name,fl), event(ev) { QString msg; QTime time = QTime::currentTime(); Config config( "qpe" ); config.setGroup( "Time" ); // 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>" + ampmTime(QTime((ev).event().start().time()) ) // end time of event + "<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()); } diff --git a/core/pim/today/today.h b/core/pim/today/today.h index d265d67..32bb4a3 100644 --- a/core/pim/today/today.h +++ b/core/pim/today/today.h @@ -1,116 +1,116 @@ /* * today.h * * --------------------- * * begin : Sun 10 17:20:00 CEST 2002 * copyright : (c) 2002 by Maximilian Reiß * email : max.reiss@gmx.de * */ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifndef TODAY_H #define TODAY_H #include <qpe/datebookdb.h> #include <qpe/event.h> #include <opie/tododb.h> +#include <opie/oclickablelabel.h> #include <qdatetime.h> #include <qlist.h> #include "todayconfig.h" #include "todaybase.h" -#include "clickablelabel.h" class QVBoxLayout; class Today : public TodayBase { Q_OBJECT public: Today( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 ); ~Today(); private slots: void startConfig(); void startTodo(); void startDatebook(); void startMail(); void draw(); void editEvent(const Event &e); private: void init(); void getDates(); void getTodo(); void getMail(); void autoStart(); bool checkIfModified(); void setOwnerField(); void setOwnerField(QString &string); private slots: void channelReceived(const QCString &msg, const QByteArray & data); private: DateBookDB *db; ToDoDB *todo; todayconfig *conf; QWidget* AllDateBookEvents; //Config cfg; int MAX_LINES_TASK; int MAX_CHAR_CLIP; int MAX_LINES_MEET; int SHOW_LOCATION; int SHOW_NOTES; }; -class DateBookEvent: public ClickableLabel { +class DateBookEvent: public OClickableLabel { Q_OBJECT public: DateBookEvent(const EffectiveEvent &ev, QWidget* parent = 0, int SHOW_LOCATION = 0, int SHOW_NOTES = 0, const char* name = 0, WFlags fl = 0); signals: void editEvent(const Event &e); private slots: void editMe(); private: QString ampmTime(QTime); const EffectiveEvent event; bool ampm; }; -class DateBookEventLater: public ClickableLabel { +class DateBookEventLater: public OClickableLabel { Q_OBJECT public: DateBookEventLater(const EffectiveEvent &ev, QWidget* parent = 0, int SHOW_LOCATION = 0, int SHOW_NOTES = 0, const char* name = 0, WFlags fl = 0); signals: void editEvent(const Event &e); private slots: void editMe(); private: QString ampmTime(QTime); const EffectiveEvent event; bool ampm; }; #endif // TODAY_H diff --git a/core/pim/today/today.pro b/core/pim/today/today.pro index 2d37b5d..f40edca 100644 --- a/core/pim/today/today.pro +++ b/core/pim/today/today.pro @@ -1,24 +1,24 @@ TEMPLATE = app #CONFIG = qt warn_on debug CONFIG = qt warn_on release -HEADERS = today.h todaybase.h todayconfig.h clickablelabel.h -SOURCES = main.cpp today.cpp todaybase.cpp todayconfig.cpp clickablelabel.cpp +HEADERS = today.h todaybase.h todayconfig.h +SOURCES = main.cpp today.cpp todaybase.cpp todayconfig.cpp INCLUDEPATH += $(OPIEDIR)/include DEPENDPATH += $(OPIEDIR)/include LIBS += -lqpe -lopie INTERFACES = TARGET = today DESTDIR = $(OPIEDIR)/bin TRANSLATIONS = ../i18n/pt_BR/today.ts TRANSLATIONS += ../i18n/de/today.ts TRANSLATIONS += ../i18n/en/today.ts TRANSLATIONS += ../i18n/hu/today.ts TRANSLATIONS += ../i18n/sl/today.ts TRANSLATIONS += ../i18n/ja/today.ts TRANSLATIONS += ../i18n/ko/today.ts TRANSLATIONS += ../i18n/no/today.ts TRANSLATIONS += ../i18n/zh_CN/today.ts TRANSLATIONS += ../i18n/zh_TW/today.ts TRANSLATIONS += ../i18n/fr/today.ts TRANSLATIONS += ../i18n/pl/today.ts |