summaryrefslogtreecommitdiffabout
path: root/korganizer
Unidiff
Diffstat (limited to 'korganizer') (more/less context) (show whitespace changes)
-rw-r--r--korganizer/calendarview.cpp167
-rw-r--r--korganizer/calendarview.h20
-rw-r--r--korganizer/kotodoview.cpp2
-rw-r--r--korganizer/mainwindow.cpp4
4 files changed, 191 insertions, 2 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index 503ef12..36db9c4 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -135,12 +135,130 @@
135using namespace KOrg; 135using namespace KOrg;
136using namespace KCal; 136using namespace KCal;
137extern int globalFlagBlockAgenda; 137extern int globalFlagBlockAgenda;
138extern int globalFlagBlockStartup; 138extern int globalFlagBlockStartup;
139 139
140 140
141MissedAlarmTextBrowser::MissedAlarmTextBrowser(QWidget *parent, QPtrList<Incidence> alarms,QDateTime start ) : QTextBrowser(parent)
142
143{
144 mAlarms = alarms;
145 setBackgroundColor( QColor( 86, 153, 205 ) );
146 QString mText = "<table width=\"100%\">\n";
147 //mText += "<tr bgcolor=\"#3679AD\"><td><h2>";
148#ifdef DESKTOP_VERSION
149 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h1>";
150#else
151 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h2>";
152#endif
153 // mText += "<img src=\"";
154 // mText += ipath;
155 // mText += "\">";
156 //mEventDate = QDate::currentDate();
157#ifdef DESKTOP_VERSION
158 mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h1>";
159#else
160 mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h2>";
161#endif
162 mText += "</td></tr>\n<tr bgcolor=\"#FF997D\"><td>";
163
164 Incidence * inc = getNextInc( start );
165 int time = 0;
166 mText += "<table>";
167 while ( inc ) {
168 QDateTime dt ;
169 QString tempText = "<a ";
170 bool ok;
171 dt = inc->getNextOccurence( start, &ok );
172 if ( !ok ) continue;
173 if ( inc->type() == "Event" ) {
174 tempText += "href=\"event:";
175 } else if ( inc->type() == "Todo" ) {
176 tempText += "href=\"todo:";
177 }
178 tempText += inc->uid() + "\">";
179 if ( inc->type() == "Todo" )
180 tempText += i18n("Todo: ");
181 if ( inc->summary().length() > 0 )
182 tempText += inc->summary();
183 else
184 tempText += i18n("-no summary-");
185 QString timestr;
186 if (!inc->doesFloat())
187 timestr = KGlobal::locale()->formatDateTime( dt, KOPrefs::instance()->mShortDateInViewer) +": ";
188 else
189 timestr = KGlobal::locale()->formatDate( dt.date() , KOPrefs::instance()->mShortDateInViewer) +": ";
190 if ( dt.date() == QDate::currentDate() && time == 0 ) {
191 time = 1;
192 mText +="</table>";
193 mText += "</td></tr>\n<tr bgcolor=\"#FFDC64\"><td>";
194 mText += "<table>";
195
196 }
197 if ( dt.date() > QDate::currentDate() && time != 2 ) {
198 time = 2;
199 mText +="</table>";
200 mText += "</td></tr>\n<tr bgcolor=\"#6AFF6A\"><td>";
201 mText += "<table>";
202 }
203 mText +="<tr><td><b>";
204 mText += timestr;
205 mText += "</b></td><td>";
206 mText += tempText;
207 mText += "</td></tr>\n";
208 inc = getNextInc( start );
209 }
210 mText +="</table>";
211 setText( mText );
212}
213
214Incidence * MissedAlarmTextBrowser::getNextInc( QDateTime start )
215{
216 QDateTime dt ;
217 Incidence * retInc;
218 Incidence * inc = mAlarms.first();
219 if ( inc == 0 )
220 return 0;
221 bool ok;
222 dt = inc->getNextOccurence( start, &ok );
223 if ( ! ok ) return 0;
224 QDateTime dtn ;
225 retInc = inc;
226 inc = mAlarms.next();
227 while ( inc ) {
228 dtn = inc->getNextOccurence( start, &ok );
229 if ( ! ok ) return 0;
230 if ( dtn < dt ) {
231 dt = dtn;
232 retInc = inc;
233 }
234 inc = mAlarms.next();
235 }
236 mAlarms.remove( retInc );
237 return retInc;
238
239}
240void MissedAlarmTextBrowser::setSource(const QString & n)
241{
242 if (n.startsWith("event:")) {
243#ifdef DESKTOP_VERSION
244 emit showIncidence(n.mid(8));
245#else
246 emit showIncidence(n.mid(6));
247#endif
248 return;
249 } else if (n.startsWith("todo:")) {
250#ifdef DESKTOP_VERSION
251 emit showIncidence(n.mid(7));
252#else
253 emit showIncidence(n.mid(5));
254#endif
255 return;
256 }
257}
258
141 259
142class KOBeamPrefs : public QDialog 260class KOBeamPrefs : public QDialog
143{ 261{
144 public: 262 public:
145 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) : 263 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) :
146 QDialog( parent, name, true ) 264 QDialog( parent, name, true )
@@ -503,13 +621,51 @@ CalendarView::~CalendarView()
503 delete mStorage; 621 delete mStorage;
504 delete mDateFrame ; 622 delete mDateFrame ;
505 delete beamDialog; 623 delete beamDialog;
506 delete mEventViewerDialog; 624 delete mEventViewerDialog;
507 //kdDebug() << "~CalendarView() done" << endl; 625 //kdDebug() << "~CalendarView() done" << endl;
508} 626}
627void CalendarView::checkAlarms()
628{
629 KConfig *config = KOGlobals::config();
630 config->setGroup( "AppRun" );
631 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) );
632 int secs = config->readNumEntry( "LatestProgramStop" ) - 30;
633 //secs -= ( 3600 * 24*3 ); // debug only
634 QDateTime latest = dt.addSecs ( secs );
635 qDebug("KO: Last termination on %s ", latest.toString().latin1());
636 QPtrList<Incidence> el = mCalendar->rawIncidences();
637 QPtrList<Incidence> al;
638 Incidence* inL = el.first();
639 while ( inL ) {
640 bool ok = false;
641 int offset = 0;
642 QDateTime next = inL->getNextAlarmDateTime(& ok, &offset, latest ) ;
643 if ( ok ) {
644 //qDebug("OK %s",next.toString().latin1());
645 if ( next < QDateTime::currentDateTime() ) {
646 al.append( inL );
647 qDebug("found missed alarm: %s ", inL->summary().latin1() );
648 }
649 }
650 inL = el.next();
651 }
652 if ( al.count() ) {
653 QDialog dia ( this, "huhu", true );
654 dia.setCaption( i18n("KO/Pi: Missing alarm notification!") );
655 QVBoxLayout* lay = new QVBoxLayout( &dia );
656 lay->setSpacing( 3 );
657 lay->setMargin( 3 );
658 MissedAlarmTextBrowser* matb = new MissedAlarmTextBrowser ( &dia, al, latest );
659 connect( matb, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) ));
660 lay->addWidget( matb );
661 dia.resize(240,240);
662 dia.exec();
509 663
664 }
665}
510void CalendarView::showDay( QDate d ) 666void CalendarView::showDay( QDate d )
511{ 667{
512 dateNavigator()->blockSignals( true ); 668 dateNavigator()->blockSignals( true );
513 dateNavigator()->selectDate( d ); 669 dateNavigator()->selectDate( d );
514 dateNavigator()->blockSignals( false ); 670 dateNavigator()->blockSignals( false );
515 mViewManager->showDayView(); 671 mViewManager->showDayView();
@@ -1966,13 +2122,15 @@ void CalendarView::writeSettings()
1966 mTodoList->saveLayout(config,QString("Todo Layout")); 2122 mTodoList->saveLayout(config,QString("Todo Layout"));
1967 mDialogManager->writeSettings( config ); 2123 mDialogManager->writeSettings( config );
1968 //KOPrefs::instance()->usrWriteConfig(); 2124 //KOPrefs::instance()->usrWriteConfig();
1969 KOPrefs::instance()->writeConfig(); 2125 KOPrefs::instance()->writeConfig();
1970 2126
1971 writeFilterSettings(config); 2127 writeFilterSettings(config);
1972 2128 config->setGroup( "AppRun" );
2129 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) );
2130 config->writeEntry( "LatestProgramStop", dt.secsTo( QDateTime::currentDateTime() ) );
1973 config->setGroup( "Views" ); 2131 config->setGroup( "Views" );
1974 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() ); 2132 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() );
1975 2133
1976 QValueList<int> listINT = mLeftFrame->sizes(); 2134 QValueList<int> listINT = mLeftFrame->sizes();
1977 config->writeEntry("Left Splitter Frame",listINT); 2135 config->writeEntry("Left Splitter Frame",listINT);
1978 QValueList<int> listINT2 = mMainFrame->sizes(); 2136 QValueList<int> listINT2 = mMainFrame->sizes();
@@ -3918,13 +4076,18 @@ void CalendarView::deleteIncidence()
3918 Incidence *incidence = currentSelection(); 4076 Incidence *incidence = currentSelection();
3919 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 4077 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3920 if ( incidence ) { 4078 if ( incidence ) {
3921 deleteIncidence(incidence); 4079 deleteIncidence(incidence);
3922 } 4080 }
3923} 4081}
3924 4082void CalendarView::showIncidence(QString uid)
4083{
4084 Incidence *inc = mCalendar->incidence( uid );
4085 if ( inc )
4086 showIncidence( inc );
4087}
3925void CalendarView::showIncidence(Incidence *incidence) 4088void CalendarView::showIncidence(Incidence *incidence)
3926{ 4089{
3927 mViewerCallerIsSearchDialog = false; 4090 mViewerCallerIsSearchDialog = false;
3928 //qDebug("%x %x ",sender (), mDialogManager->getSearchDialog() ); 4091 //qDebug("%x %x ",sender (), mDialogManager->getSearchDialog() );
3929 if ( sender() && mDialogManager->getSearchDialog() ) { 4092 if ( sender() && mDialogManager->getSearchDialog() ) {
3930 if ( sender () == mDialogManager->getSearchDialog()->listview() ) { 4093 if ( sender () == mDialogManager->getSearchDialog()->listview() ) {
diff --git a/korganizer/calendarview.h b/korganizer/calendarview.h
index 05a34b4..1eca905 100644
--- a/korganizer/calendarview.h
+++ b/korganizer/calendarview.h
@@ -77,12 +77,30 @@ using namespace KCal;
77 of the different views and controls the different dialogs like preferences, 77 of the different views and controls the different dialogs like preferences,
78 event editor, search dialog etc. 78 event editor, search dialog etc.
79 79
80 @short main calendar view widget 80 @short main calendar view widget
81 @author Cornelius Schumacher 81 @author Cornelius Schumacher
82*/ 82*/
83
84#include <qtextbrowser.h>
85#include <qtextcodec.h>
86
87class MissedAlarmTextBrowser : public QTextBrowser {
88 Q_OBJECT
89 public:
90 MissedAlarmTextBrowser(QWidget *parent, QPtrList<Incidence> alarms ,QDateTime start);
91 void setSource(const QString & n);
92
93 private:
94 Incidence * getNextInc(QDateTime start );
95 QPtrList<Incidence> mAlarms;
96 signals:
97 void showIncidence( QString uid);
98};
99
100
83class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Observer, public KSyncInterface 101class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Observer, public KSyncInterface
84{ 102{
85 Q_OBJECT 103 Q_OBJECT
86 public: 104 public:
87 /** 105 /**
88 Constructs a new calendar view widget. 106 Constructs a new calendar view widget.
@@ -173,12 +191,13 @@ class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Obser
173 191
174 void calendarViewExpanded( bool ); 192 void calendarViewExpanded( bool );
175 void updateSearchDialog(); 193 void updateSearchDialog();
176 194
177 195
178 public slots: 196 public slots:
197 void checkAlarms();
179 void slotprintSelInc(); 198 void slotprintSelInc();
180 void showNextAlarms(); 199 void showNextAlarms();
181 void showOpenError(); 200 void showOpenError();
182 void watchSavedFile(); 201 void watchSavedFile();
183 void recheckTimerAlarm(); 202 void recheckTimerAlarm();
184 void checkNextTimerAlarm(); 203 void checkNextTimerAlarm();
@@ -237,12 +256,13 @@ class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Obser
237 default hint. */ 256 default hint. */
238 void newEvent(); 257 void newEvent();
239 void newFloatingEvent(); 258 void newFloatingEvent();
240 259
241 /** Create a read-only viewer dialog for the supplied incidence. It calls the correct showXXX method*/ 260 /** Create a read-only viewer dialog for the supplied incidence. It calls the correct showXXX method*/
242 void showIncidence(Incidence *); 261 void showIncidence(Incidence *);
262 void showIncidence(QString uid);
243 /** Create an editor for the supplied incidence. It calls the correct editXXX method*/ 263 /** Create an editor for the supplied incidence. It calls the correct editXXX method*/
244 void editIncidence(Incidence *); 264 void editIncidence(Incidence *);
245 /** Delete the supplied incidence. It calls the correct deleteXXX method*/ 265 /** Delete the supplied incidence. It calls the correct deleteXXX method*/
246 void deleteIncidence(Incidence *); 266 void deleteIncidence(Incidence *);
247 void cloneIncidence(Incidence *); 267 void cloneIncidence(Incidence *);
248 void cancelIncidence(Incidence *); 268 void cancelIncidence(Incidence *);
diff --git a/korganizer/kotodoview.cpp b/korganizer/kotodoview.cpp
index 8fe9999..5aaf360 100644
--- a/korganizer/kotodoview.cpp
+++ b/korganizer/kotodoview.cpp
@@ -474,14 +474,16 @@ KOTodoView::KOTodoView(Calendar *calendar,QWidget* parent,const char* name) :
474 mItemPopupMenu->insertItem( i18n("Delete"), this, 474 mItemPopupMenu->insertItem( i18n("Delete"), this,
475 SLOT (deleteTodo())); 475 SLOT (deleteTodo()));
476 mItemPopupMenu->insertItem( i18n("Clone..."), this, 476 mItemPopupMenu->insertItem( i18n("Clone..."), this,
477 SLOT (cloneTodo())); 477 SLOT (cloneTodo()));
478 mItemPopupMenu->insertItem( i18n("Move..."), this, 478 mItemPopupMenu->insertItem( i18n("Move..."), this,
479 SLOT (moveTodo())); 479 SLOT (moveTodo()));
480#ifndef DESKTOP_VERSION
480 mItemPopupMenu->insertItem( i18n("Beam..."), this, 481 mItemPopupMenu->insertItem( i18n("Beam..."), this,
481 SLOT (beamTodo())); 482 SLOT (beamTodo()));
483#endif
482 mItemPopupMenu->insertItem( i18n("Toggle Cancel"), this, 484 mItemPopupMenu->insertItem( i18n("Toggle Cancel"), this,
483 SLOT (cancelTodo())); 485 SLOT (cancelTodo()));
484 mItemPopupMenu->insertSeparator(); 486 mItemPopupMenu->insertSeparator();
485 mItemPopupMenu->insertItem( i18n("Start/Stop todo..."), this, 487 mItemPopupMenu->insertItem( i18n("Start/Stop todo..."), this,
486 SLOT (toggleRunningItem())); 488 SLOT (toggleRunningItem()));
487 mItemPopupMenu->insertSeparator(); 489 mItemPopupMenu->insertSeparator();
diff --git a/korganizer/mainwindow.cpp b/korganizer/mainwindow.cpp
index 94d7293..1320231 100644
--- a/korganizer/mainwindow.cpp
+++ b/korganizer/mainwindow.cpp
@@ -369,12 +369,14 @@ MainWindow::MainWindow( QWidget *parent, const char *name, QString msg) :
369 updateFilterToolbar(); 369 updateFilterToolbar();
370 updateWeek( mView->startDate() ); 370 updateWeek( mView->startDate() );
371 connect( mView->dateNavigator(), SIGNAL( datesSelected( const KCal::DateList & ) ), 371 connect( mView->dateNavigator(), SIGNAL( datesSelected( const KCal::DateList & ) ),
372 SLOT( updateWeekNum( const KCal::DateList & ) ) ); 372 SLOT( updateWeekNum( const KCal::DateList & ) ) );
373 mBRdisabled = false; 373 mBRdisabled = false;
374 //toggleBeamReceive(); 374 //toggleBeamReceive();
375
376 QTimer::singleShot( 1000, mView, SLOT ( checkAlarms() ));
375} 377}
376MainWindow::~MainWindow() 378MainWindow::~MainWindow()
377{ 379{
378 //qDebug("MainWindow::~MainWindow() "); 380 //qDebug("MainWindow::~MainWindow() ");
379 //save toolbar location 381 //save toolbar location
380 delete mCalendar; 382 delete mCalendar;
@@ -794,12 +796,14 @@ void MainWindow::initActions()
794 connect( mView->viewManager(), SIGNAL( signalFullScreen( bool ) ), 796 connect( mView->viewManager(), SIGNAL( signalFullScreen( bool ) ),
795 mToggleNav, SLOT( setEnabled ( bool ) ) ); 797 mToggleNav, SLOT( setEnabled ( bool ) ) );
796 connect( mView->viewManager(), SIGNAL( signalFullScreen( bool ) ), 798 connect( mView->viewManager(), SIGNAL( signalFullScreen( bool ) ),
797 mToggleFilter, SLOT( setEnabled ( bool ) ) ); 799 mToggleFilter, SLOT( setEnabled ( bool ) ) );
798 connect( mView->viewManager(), SIGNAL( signalAgendaView( bool ) ), 800 connect( mView->viewManager(), SIGNAL( signalAgendaView( bool ) ),
799 mToggleAllday, SLOT( setEnabled ( bool ) ) ); 801 mToggleAllday, SLOT( setEnabled ( bool ) ) );
802 // connect( mView->viewManager(), SIGNAL( signalAgendaView( bool ) ),
803 // configureAgendaMenu, SLOT( setEnabled ( bool ) ) );
800 804
801 viewMenu->insertSeparator(); 805 viewMenu->insertSeparator();
802 icon = loadPixmap( pathString + "picker" ); 806 icon = loadPixmap( pathString + "picker" );
803 action = new QAction( i18n("Date Picker"), icon, i18n("Date Picker"), 0, this ); 807 action = new QAction( i18n("Date Picker"), icon, i18n("Date Picker"), 0, this );
804 action->addTo( viewMenu ); 808 action->addTo( viewMenu );
805 connect( action, SIGNAL( activated() ), 809 connect( action, SIGNAL( activated() ),