summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--bin/kdepim/korganizer/germantranslation.txt4
-rw-r--r--korganizer/calendarview.cpp167
-rw-r--r--korganizer/calendarview.h20
-rw-r--r--korganizer/kotodoview.cpp2
-rw-r--r--korganizer/mainwindow.cpp4
-rw-r--r--libkcal/calendarlocal.cpp6
-rw-r--r--libkcal/event.cpp6
-rw-r--r--libkcal/event.h2
-rw-r--r--libkcal/incidence.h2
-rw-r--r--libkcal/journal.cpp2
-rw-r--r--libkcal/journal.h2
-rw-r--r--libkcal/todo.cpp4
-rw-r--r--libkcal/todo.h2
13 files changed, 206 insertions, 17 deletions
diff --git a/bin/kdepim/korganizer/germantranslation.txt b/bin/kdepim/korganizer/germantranslation.txt
index 41868d9..cc8102c 100644
--- a/bin/kdepim/korganizer/germantranslation.txt
+++ b/bin/kdepim/korganizer/germantranslation.txt
@@ -1372,4 +1372,4 @@
{ "Agenda view shows completed todos","Agenda Ansicht zeigt erledigte Todos" },
-{ "","" },
-{ "","" },
+{ "KO/Pi: Missing alarm notification!","KO/Pi: Benachrichtigung über verpasste Alarme!" },
+{ "You missed the alarms for the following events or todos:","Sie verpassten die Alarme für folgende Termine oder Todos:" },
{ "","" },
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index 503ef12..36db9c4 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -140,2 +140,120 @@ extern int globalFlagBlockStartup;
+MissedAlarmTextBrowser::MissedAlarmTextBrowser(QWidget *parent, QPtrList<Incidence> alarms,QDateTime start ) : QTextBrowser(parent)
+
+{
+ mAlarms = alarms;
+ setBackgroundColor( QColor( 86, 153, 205 ) );
+ QString mText = "<table width=\"100%\">\n";
+ //mText += "<tr bgcolor=\"#3679AD\"><td><h2>";
+#ifdef DESKTOP_VERSION
+ mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h1>";
+#else
+ mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h2>";
+#endif
+ // mText += "<img src=\"";
+ // mText += ipath;
+ // mText += "\">";
+ //mEventDate = QDate::currentDate();
+#ifdef DESKTOP_VERSION
+ mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h1>";
+#else
+ mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h2>";
+#endif
+ mText += "</td></tr>\n<tr bgcolor=\"#FF997D\"><td>";
+
+ Incidence * inc = getNextInc( start );
+ int time = 0;
+ mText += "<table>";
+ while ( inc ) {
+ QDateTime dt ;
+ QString tempText = "<a ";
+ bool ok;
+ dt = inc->getNextOccurence( start, &ok );
+ if ( !ok ) continue;
+ if ( inc->type() == "Event" ) {
+ tempText += "href=\"event:";
+ } else if ( inc->type() == "Todo" ) {
+ tempText += "href=\"todo:";
+ }
+ tempText += inc->uid() + "\">";
+ if ( inc->type() == "Todo" )
+ tempText += i18n("Todo: ");
+ if ( inc->summary().length() > 0 )
+ tempText += inc->summary();
+ else
+ tempText += i18n("-no summary-");
+ QString timestr;
+ if (!inc->doesFloat())
+ timestr = KGlobal::locale()->formatDateTime( dt, KOPrefs::instance()->mShortDateInViewer) +": ";
+ else
+ timestr = KGlobal::locale()->formatDate( dt.date() , KOPrefs::instance()->mShortDateInViewer) +": ";
+ if ( dt.date() == QDate::currentDate() && time == 0 ) {
+ time = 1;
+ mText +="</table>";
+ mText += "</td></tr>\n<tr bgcolor=\"#FFDC64\"><td>";
+ mText += "<table>";
+
+ }
+ if ( dt.date() > QDate::currentDate() && time != 2 ) {
+ time = 2;
+ mText +="</table>";
+ mText += "</td></tr>\n<tr bgcolor=\"#6AFF6A\"><td>";
+ mText += "<table>";
+ }
+ mText +="<tr><td><b>";
+ mText += timestr;
+ mText += "</b></td><td>";
+ mText += tempText;
+ mText += "</td></tr>\n";
+ inc = getNextInc( start );
+ }
+ mText +="</table>";
+ setText( mText );
+}
+
+Incidence * MissedAlarmTextBrowser::getNextInc( QDateTime start )
+{
+ QDateTime dt ;
+ Incidence * retInc;
+ Incidence * inc = mAlarms.first();
+ if ( inc == 0 )
+ return 0;
+ bool ok;
+ dt = inc->getNextOccurence( start, &ok );
+ if ( ! ok ) return 0;
+ QDateTime dtn ;
+ retInc = inc;
+ inc = mAlarms.next();
+ while ( inc ) {
+ dtn = inc->getNextOccurence( start, &ok );
+ if ( ! ok ) return 0;
+ if ( dtn < dt ) {
+ dt = dtn;
+ retInc = inc;
+ }
+ inc = mAlarms.next();
+ }
+ mAlarms.remove( retInc );
+ return retInc;
+
+}
+void MissedAlarmTextBrowser::setSource(const QString & n)
+{
+ if (n.startsWith("event:")) {
+#ifdef DESKTOP_VERSION
+ emit showIncidence(n.mid(8));
+#else
+ emit showIncidence(n.mid(6));
+#endif
+ return;
+ } else if (n.startsWith("todo:")) {
+#ifdef DESKTOP_VERSION
+ emit showIncidence(n.mid(7));
+#else
+ emit showIncidence(n.mid(5));
+#endif
+ return;
+ }
+}
+
@@ -508,3 +626,41 @@ CalendarView::~CalendarView()
}
+void CalendarView::checkAlarms()
+{
+ KConfig *config = KOGlobals::config();
+ config->setGroup( "AppRun" );
+ QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) );
+ int secs = config->readNumEntry( "LatestProgramStop" ) - 30;
+ //secs -= ( 3600 * 24*3 ); // debug only
+ QDateTime latest = dt.addSecs ( secs );
+ qDebug("KO: Last termination on %s ", latest.toString().latin1());
+ QPtrList<Incidence> el = mCalendar->rawIncidences();
+ QPtrList<Incidence> al;
+ Incidence* inL = el.first();
+ while ( inL ) {
+ bool ok = false;
+ int offset = 0;
+ QDateTime next = inL->getNextAlarmDateTime(& ok, &offset, latest ) ;
+ if ( ok ) {
+ //qDebug("OK %s",next.toString().latin1());
+ if ( next < QDateTime::currentDateTime() ) {
+ al.append( inL );
+ qDebug("found missed alarm: %s ", inL->summary().latin1() );
+ }
+ }
+ inL = el.next();
+ }
+ if ( al.count() ) {
+ QDialog dia ( this, "huhu", true );
+ dia.setCaption( i18n("KO/Pi: Missing alarm notification!") );
+ QVBoxLayout* lay = new QVBoxLayout( &dia );
+ lay->setSpacing( 3 );
+ lay->setMargin( 3 );
+ MissedAlarmTextBrowser* matb = new MissedAlarmTextBrowser ( &dia, al, latest );
+ connect( matb, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) ));
+ lay->addWidget( matb );
+ dia.resize(240,240);
+ dia.exec();
+ }
+}
void CalendarView::showDay( QDate d )
@@ -1971,3 +2127,5 @@ void CalendarView::writeSettings()
writeFilterSettings(config);
-
+ config->setGroup( "AppRun" );
+ QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) );
+ config->writeEntry( "LatestProgramStop", dt.secsTo( QDateTime::currentDateTime() ) );
config->setGroup( "Views" );
@@ -3923,3 +4081,8 @@ void CalendarView::deleteIncidence()
}
-
+void CalendarView::showIncidence(QString uid)
+{
+ Incidence *inc = mCalendar->incidence( uid );
+ if ( inc )
+ showIncidence( inc );
+}
void CalendarView::showIncidence(Incidence *incidence)
diff --git a/korganizer/calendarview.h b/korganizer/calendarview.h
index 05a34b4..1eca905 100644
--- a/korganizer/calendarview.h
+++ b/korganizer/calendarview.h
@@ -82,2 +82,20 @@ using namespace KCal;
*/
+
+#include <qtextbrowser.h>
+#include <qtextcodec.h>
+
+class MissedAlarmTextBrowser : public QTextBrowser {
+ Q_OBJECT
+ public:
+ MissedAlarmTextBrowser(QWidget *parent, QPtrList<Incidence> alarms ,QDateTime start);
+ void setSource(const QString & n);
+
+ private:
+ Incidence * getNextInc(QDateTime start );
+ QPtrList<Incidence> mAlarms;
+ signals:
+ void showIncidence( QString uid);
+};
+
+
class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Observer, public KSyncInterface
@@ -178,2 +196,3 @@ class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Obser
public slots:
+ void checkAlarms();
void slotprintSelInc();
@@ -242,2 +261,3 @@ class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Obser
void showIncidence(Incidence *);
+ void showIncidence(QString uid);
/** Create an editor for the supplied incidence. It calls the correct editXXX method*/
diff --git a/korganizer/kotodoview.cpp b/korganizer/kotodoview.cpp
index 8fe9999..5aaf360 100644
--- a/korganizer/kotodoview.cpp
+++ b/korganizer/kotodoview.cpp
@@ -479,4 +479,6 @@ KOTodoView::KOTodoView(Calendar *calendar,QWidget* parent,const char* name) :
SLOT (moveTodo()));
+#ifndef DESKTOP_VERSION
mItemPopupMenu->insertItem( i18n("Beam..."), this,
SLOT (beamTodo()));
+#endif
mItemPopupMenu->insertItem( i18n("Toggle Cancel"), this,
diff --git a/korganizer/mainwindow.cpp b/korganizer/mainwindow.cpp
index 94d7293..1320231 100644
--- a/korganizer/mainwindow.cpp
+++ b/korganizer/mainwindow.cpp
@@ -374,2 +374,4 @@ MainWindow::MainWindow( QWidget *parent, const char *name, QString msg) :
//toggleBeamReceive();
+
+ QTimer::singleShot( 1000, mView, SLOT ( checkAlarms() ));
}
@@ -799,2 +801,4 @@ void MainWindow::initActions()
mToggleAllday, SLOT( setEnabled ( bool ) ) );
+ // connect( mView->viewManager(), SIGNAL( signalAgendaView( bool ) ),
+ // configureAgendaMenu, SLOT( setEnabled ( bool ) ) );
diff --git a/libkcal/calendarlocal.cpp b/libkcal/calendarlocal.cpp
index e75df70..bc76c0b 100644
--- a/libkcal/calendarlocal.cpp
+++ b/libkcal/calendarlocal.cpp
@@ -308,3 +308,3 @@ void CalendarLocal::checkAlarmForIncidence( Incidence * incidence, bool deleted
if ( ! deleted ) {
- nextA = incidence->getNextAlarmDateTime(& ok, &offset ) ;
+ nextA = incidence->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ;
if ( ok ) {
@@ -423,3 +423,3 @@ QDateTime CalendarLocal::nextAlarm( int daysTo )
for( e = mEventList.first(); e; e = mEventList.next() ) {
- next = e->getNextAlarmDateTime(& ok, &offset ) ;
+ next = e->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ;
if ( ok ) {
@@ -436,3 +436,3 @@ QDateTime CalendarLocal::nextAlarm( int daysTo )
for( t = mTodoList.first(); t; t = mTodoList.next() ) {
- next = t->getNextAlarmDateTime(& ok, &offset ) ;
+ next = t->getNextAlarmDateTime(& ok, &offset, QDateTime::currentDateTime() ) ;
if ( ok ) {
diff --git a/libkcal/event.cpp b/libkcal/event.cpp
index de8dceb..9b99855 100644
--- a/libkcal/event.cpp
+++ b/libkcal/event.cpp
@@ -173,3 +173,3 @@ void Event::setDuration(int seconds)
}
-QDateTime Event::getNextAlarmDateTime( bool * ok, int * offset ) const
+QDateTime Event::getNextAlarmDateTime( bool * ok, int * offset, QDateTime start_dt ) const
{
@@ -177,3 +177,3 @@ QDateTime Event::getNextAlarmDateTime( bool * ok, int * offset ) const
bool yes;
- QDateTime incidenceStart = getNextOccurence( QDateTime::currentDateTime(), &yes );
+ QDateTime incidenceStart = getNextOccurence( start_dt, &yes );
if ( ! yes || cancelled() ) {
@@ -211,3 +211,3 @@ QDateTime Event::getNextAlarmDateTime( bool * ok, int * offset ) const
if ( enabled ) {
- if ( alarmStart > QDateTime::currentDateTime() ) {
+ if ( alarmStart > start_dt ) {
*ok = true;
diff --git a/libkcal/event.h b/libkcal/event.h
index 3bc8adc..8729956 100644
--- a/libkcal/event.h
+++ b/libkcal/event.h
@@ -44,3 +44,3 @@ class Event : public Incidence
Incidence *clone();
- QDateTime getNextAlarmDateTime( bool * ok, int * offset ) const;
+ QDateTime getNextAlarmDateTime( bool * ok, int * offset ,QDateTime start_dt ) const;
diff --git a/libkcal/incidence.h b/libkcal/incidence.h
index ebd50d0..aa51e84 100644
--- a/libkcal/incidence.h
+++ b/libkcal/incidence.h
@@ -116,3 +116,3 @@ class Incidence : public IncidenceBase
- virtual QDateTime getNextAlarmDateTime( bool * ok, int * offset ) const = 0;
+ virtual QDateTime getNextAlarmDateTime( bool * ok, int * offset, QDateTime start_dt ) const = 0;
void setReadOnly( bool );
diff --git a/libkcal/journal.cpp b/libkcal/journal.cpp
index 351fb32..859161f 100644
--- a/libkcal/journal.cpp
+++ b/libkcal/journal.cpp
@@ -44,3 +44,3 @@ bool KCal::operator==( const Journal& j1, const Journal& j2 )
-QDateTime Journal::getNextAlarmDateTime( bool * ok, int * offset ) const
+QDateTime Journal::getNextAlarmDateTime( bool * ok, int * offset, QDateTime start_dt ) const
{
diff --git a/libkcal/journal.h b/libkcal/journal.h
index cb90c7a..2c1d7ea 100644
--- a/libkcal/journal.h
+++ b/libkcal/journal.h
@@ -41,3 +41,3 @@ class Journal : public Incidence
Incidence *clone();
- QDateTime getNextAlarmDateTime( bool * ok, int * offset ) const;
+ QDateTime getNextAlarmDateTime( bool * ok, int * offset ,QDateTime start_dt ) const;
private:
diff --git a/libkcal/todo.cpp b/libkcal/todo.cpp
index d7431c7..473247a 100644
--- a/libkcal/todo.cpp
+++ b/libkcal/todo.cpp
@@ -517,3 +517,3 @@ void Todo::setPercentComplete(int v)
}
-QDateTime Todo::getNextAlarmDateTime( bool * ok, int * offset ) const
+QDateTime Todo::getNextAlarmDateTime( bool * ok, int * offset, QDateTime start_dt ) const
{
@@ -553,3 +553,3 @@ QDateTime Todo::getNextAlarmDateTime( bool * ok, int * offset ) const
if ( enabled ) {
- if ( alarmStart > QDateTime::currentDateTime() ) {
+ if ( alarmStart > start_dt ) {
*ok = true;
diff --git a/libkcal/todo.h b/libkcal/todo.h
index a5354ce..ab8fdf1 100644
--- a/libkcal/todo.h
+++ b/libkcal/todo.h
@@ -46,3 +46,3 @@ namespace KCal {
Incidence *clone();
- QDateTime getNextAlarmDateTime( bool * ok, int * offset ) const;
+ QDateTime getNextAlarmDateTime( bool * ok, int * offset, QDateTime start_dt ) const;