summaryrefslogtreecommitdiff
authorzecke <zecke>2004-02-18 22:11:25 (UTC)
committer zecke <zecke>2004-02-18 22:11:25 (UTC)
commit71b6aa6d19ed2e4690cd98ecdb7dbfe40f857653 (patch) (unidiff)
tree2d300c075b052fa1ad7e4814f52256e51fd7d8ba
parent859ad22772e90dfbd4a8c0760ddc52d451f50011 (diff)
downloadopie-71b6aa6d19ed2e4690cd98ecdb7dbfe40f857653.zip
opie-71b6aa6d19ed2e4690cd98ecdb7dbfe40f857653.tar.gz
opie-71b6aa6d19ed2e4690cd98ecdb7dbfe40f857653.tar.bz2
be more clever when it comes to searching events
Fix bug 1193
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/datebook/datebook.cpp35
1 files changed, 14 insertions, 21 deletions
diff --git a/core/pim/datebook/datebook.cpp b/core/pim/datebook/datebook.cpp
index 706cc08..832b2f8 100644
--- a/core/pim/datebook/datebook.cpp
+++ b/core/pim/datebook/datebook.cpp
@@ -125,129 +125,128 @@ DateBook::DateBook( QWidget *parent, const char *, WFlags f )
125 connect( a, SIGNAL( activated() ), this, SLOT( slotToday() ) ); 125 connect( a, SIGNAL( activated() ), this, SLOT( slotToday() ) );
126 a->addTo( sub_bar ); 126 a->addTo( sub_bar );
127 //a->addTo( view ); 127 //a->addTo( view );
128 128
129 sub_bar->addSeparator(); 129 sub_bar->addSeparator();
130 130
131 a = new QAction( tr( "Day" ), Resource::loadPixmap( "day" ), QString::null, 0, g, 0 ); 131 a = new QAction( tr( "Day" ), Resource::loadPixmap( "day" ), QString::null, 0, g, 0 );
132 connect( a, SIGNAL( activated() ), this, SLOT( viewDay() ) ); 132 connect( a, SIGNAL( activated() ), this, SLOT( viewDay() ) );
133 a->addTo( sub_bar ); 133 a->addTo( sub_bar );
134// a->addTo( view ); 134// a->addTo( view );
135 a->setToggleAction( TRUE ); 135 a->setToggleAction( TRUE );
136 a->setOn( TRUE ); 136 a->setOn( TRUE );
137 dayAction = a; 137 dayAction = a;
138 138
139 a = new QAction( tr( "Week" ), Resource::loadPixmap( "week" ), QString::null, 0, g, 0 ); 139 a = new QAction( tr( "Week" ), Resource::loadPixmap( "week" ), QString::null, 0, g, 0 );
140 connect( a, SIGNAL( activated() ), this, SLOT( viewWeek() ) ); 140 connect( a, SIGNAL( activated() ), this, SLOT( viewWeek() ) );
141 a->addTo( sub_bar ); 141 a->addTo( sub_bar );
142// a->addTo( view ); 142// a->addTo( view );
143 a->setToggleAction( TRUE ); 143 a->setToggleAction( TRUE );
144 weekAction = a; 144 weekAction = a;
145 145
146 a = new QAction( tr( "WeekLst" ), Resource::loadPixmap( "datebook/weeklst" ), QString::null, 0, g, 0 ); 146 a = new QAction( tr( "WeekLst" ), Resource::loadPixmap( "datebook/weeklst" ), QString::null, 0, g, 0 );
147 connect( a, SIGNAL( activated() ), this, SLOT( viewWeekLst() ) ); 147 connect( a, SIGNAL( activated() ), this, SLOT( viewWeekLst() ) );
148 a->addTo( sub_bar ); 148 a->addTo( sub_bar );
149// a->addTo( view ); 149// a->addTo( view );
150 a->setToggleAction( TRUE ); 150 a->setToggleAction( TRUE );
151 weekLstAction = a; 151 weekLstAction = a;
152 152
153 a = new QAction( tr( "Month" ), Resource::loadPixmap( "month" ), QString::null, 0, g, 0 ); 153 a = new QAction( tr( "Month" ), Resource::loadPixmap( "month" ), QString::null, 0, g, 0 );
154 connect( a, SIGNAL( activated() ), this, SLOT( viewMonth() ) ); 154 connect( a, SIGNAL( activated() ), this, SLOT( viewMonth() ) );
155 a->addTo( sub_bar ); 155 a->addTo( sub_bar );
156// a->addTo( view ); 156// a->addTo( view );
157 a->setToggleAction( TRUE ); 157 a->setToggleAction( TRUE );
158 monthAction = a; 158 monthAction = a;
159 159
160 sub_bar->addSeparator(); 160 sub_bar->addSeparator();
161 161
162 a = new QAction( tr( "Find" ), Resource::loadPixmap( "mag" ), QString::null, 0, this, 0 ); 162 a = new QAction( tr( "Find" ), Resource::loadPixmap( "mag" ), QString::null, 0, this, 0 );
163 connect( a, SIGNAL(activated()), this, SLOT(slotFind()) ); 163 connect( a, SIGNAL(activated()), this, SLOT(slotFind()) );
164 a->addTo( sub_bar ); 164 a->addTo( sub_bar );
165 165
166 a = new QAction( tr( "Edit..." ), Resource::loadPixmap("SettingsIcon"), QString::null, 0, this, 0 ); 166 a = new QAction( tr( "Edit..." ), Resource::loadPixmap("SettingsIcon"), QString::null, 0, this, 0 );
167 connect( a, SIGNAL( activated() ), this, SLOT( slotSettings() ) ); 167 connect( a, SIGNAL( activated() ), this, SLOT( slotSettings() ) );
168 a->addTo( sub_bar ); 168 a->addTo( sub_bar );
169 169
170 if(defaultView==DAY) viewDay(); 170 if(defaultView==DAY) viewDay();
171 if(defaultView==WEEK) needEvilHack=true;// viewWeek(); 171 if(defaultView==WEEK) needEvilHack=true;// viewWeek();
172 if(defaultView==WEEKLST) viewWeekLst(); 172 if(defaultView==WEEKLST) viewWeekLst();
173 if(defaultView==MONTH) viewMonth(); 173 if(defaultView==MONTH) viewMonth();
174 174
175 connect( qApp, SIGNAL(clockChanged(bool)), this, SLOT(changeClock(bool)) ); 175 connect( qApp, SIGNAL(clockChanged(bool)), this, SLOT(changeClock(bool)) );
176 connect( qApp, SIGNAL(weekChanged(bool)), this, SLOT(changeWeek(bool)) ); 176 connect( qApp, SIGNAL(weekChanged(bool)), this, SLOT(changeWeek(bool)) );
177 177
178#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 178#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
179 connect( qApp, SIGNAL(appMessage(const QCString&, const QByteArray&)), this, SLOT(appMessage(const QCString&, const QByteArray&)) ); 179 connect( qApp, SIGNAL(appMessage(const QCString&, const QByteArray&)), this, SLOT(appMessage(const QCString&, const QByteArray&)) );
180#endif 180#endif
181 181
182 // listen on QPE/System 182 // listen on QPE/System
183#if defined(Q_WS_QWS) 183#if defined(Q_WS_QWS)
184#if !defined(QT_NO_COP) 184#if !defined(QT_NO_COP)
185 QCopChannel *channel = new QCopChannel( "QPE/System", this ); 185 QCopChannel *channel = new QCopChannel( "QPE/System", this );
186 connect( channel, SIGNAL(received(const QCString&, const QByteArray&)), this, SLOT(receive(const QCString&, const QByteArray&)) ); 186 connect( channel, SIGNAL(received(const QCString&, const QByteArray&)), this, SLOT(receive(const QCString&, const QByteArray&)) );
187 channel = new QCopChannel( "QPE/Datebook", this ); 187 channel = new QCopChannel( "QPE/Datebook", this );
188 connect( channel, SIGNAL(received(const QCString&, const QByteArray&)), this, SLOT(receive(const QCString&, const QByteArray&)) ); 188 connect( channel, SIGNAL(received(const QCString&, const QByteArray&)), this, SLOT(receive(const QCString&, const QByteArray&)) );
189 qDebug("olle\n");
190#endif 189#endif
191#endif 190#endif
192 191
193 qDebug("done t=%d", t.elapsed() ); 192 qDebug("done t=%d", t.elapsed() );
194 193
195 connect( qApp, SIGNAL( flush() ), this, SLOT( flush() ) ); 194 connect( qApp, SIGNAL( flush() ), this, SLOT( flush() ) );
196 connect( qApp, SIGNAL( reload()), this, SLOT( reload() ) ); 195 connect( qApp, SIGNAL( reload()), this, SLOT( reload() ) );
197 /* 196 /*
198 * Here is a problem description: 197 * Here is a problem description:
199 * When Weekview is the default view 198 * When Weekview is the default view
200 * a DateBookWeekView get's created 199 * a DateBookWeekView get's created
201 * redraw() get's called. So what? 200 * redraw() get's called. So what?
202 * Remember that we're still in the c'tor 201 * Remember that we're still in the c'tor
203 * and no final layout has happened? Ok 202 * and no final layout has happened? Ok
204 * now all Events get arranged. Their x 203 * now all Events get arranged. Their x
205 * position get's determined by a QHeader 204 * position get's determined by a QHeader
206 * position. But the QHeader isn't layouted or 205 * position. But the QHeader isn't layouted or
207 * at the right position. redraw() is a slot 206 * at the right position. redraw() is a slot
208 * so we'll call it then via a singleShot 207 * so we'll call it then via a singleShot
209 * from view() 208 * from view()
210 */ 209 */
211 if( needEvilHack ){ 210 if( needEvilHack ){
212 QTimer::singleShot( 500, this, SLOT(viewWeek()) ); 211 QTimer::singleShot( 500, this, SLOT(viewWeek()) );
213 } 212 }
214} 213}
215 214
216void DateBook::receive( const QCString &msg, const QByteArray &data ) 215void DateBook::receive( const QCString &msg, const QByteArray &data )
217{ 216{
218 QDataStream stream( data, IO_ReadOnly ); 217 QDataStream stream( data, IO_ReadOnly );
219 if ( msg == "timeChange(QString)" ) { 218 if ( msg == "timeChange(QString)" ) {
220 // update active view! 219 // update active view!
221 if ( dayAction->isOn() ) 220 if ( dayAction->isOn() )
222 viewDay(); 221 viewDay();
223 else if ( weekAction->isOn() ) 222 else if ( weekAction->isOn() )
224 viewWeek(); 223 viewWeek();
225 else if ( monthAction->isOn() ) 224 else if ( monthAction->isOn() )
226 viewMonth(); 225 viewMonth();
227 } 226 }
228 else if (msg == "editEvent(int)") { 227 else if (msg == "editEvent(int)") {
229 int uid; 228 int uid;
230 stream >> uid; 229 stream >> uid;
231 Event e=db->eventByUID(uid); 230 Event e=db->eventByUID(uid);
232 editEvent(e); 231 editEvent(e);
233 }else if (msg == "viewDefault(QDate)"){ 232 }else if (msg == "viewDefault(QDate)"){
234 QDate day; 233 QDate day;
235 stream >> day; 234 stream >> day;
236 viewDefault(day); 235 viewDefault(day);
237 } 236 }
238} 237}
239 238
240DateBook::~DateBook() 239DateBook::~DateBook()
241{ 240{
242} 241}
243 242
244void DateBook::slotSettings() 243void DateBook::slotSettings()
245{ 244{
246 DateBookSettings frmSettings( ampm, this ); 245 DateBookSettings frmSettings( ampm, this );
247 frmSettings.setStartTime( startTime ); 246 frmSettings.setStartTime( startTime );
248 frmSettings.setAlarmPreset( aPreset, presetTime ); 247 frmSettings.setAlarmPreset( aPreset, presetTime );
249 frmSettings.setJumpToCurTime( bJumpToCurTime ); 248 frmSettings.setJumpToCurTime( bJumpToCurTime );
250 frmSettings.setRowStyle( rowStyle ); 249 frmSettings.setRowStyle( rowStyle );
251 frmSettings.comboDefaultView->setCurrentItem(defaultView-1); 250 frmSettings.comboDefaultView->setCurrentItem(defaultView-1);
252 frmSettings.comboWeekListView->setCurrentItem(weeklistviewconfig); 251 frmSettings.comboWeekListView->setCurrentItem(weeklistviewconfig);
253 252
@@ -348,227 +347,227 @@ QDate DateBook::currentDate()
348 return d; 347 return d;
349} 348}
350 349
351void DateBook::view(int v, const QDate &d) { 350void DateBook::view(int v, const QDate &d) {
352 if (v==DAY) { 351 if (v==DAY) {
353 initDay(); 352 initDay();
354 dayAction->setOn( TRUE ); 353 dayAction->setOn( TRUE );
355 dayView->setDate( d ); 354 dayView->setDate( d );
356 views->raiseWidget( dayView ); 355 views->raiseWidget( dayView );
357 dayView->redraw(); 356 dayView->redraw();
358 } else if (v==WEEK) { 357 } else if (v==WEEK) {
359 initWeek(); 358 initWeek();
360 weekAction->setOn( TRUE ); 359 weekAction->setOn( TRUE );
361 weekView->setDate( d ); 360 weekView->setDate( d );
362 views->raiseWidget( weekView ); 361 views->raiseWidget( weekView );
363 weekView->redraw(); 362 weekView->redraw();
364 } else if (v==WEEKLST) { 363 } else if (v==WEEKLST) {
365 initWeekLst(); 364 initWeekLst();
366 weekLstAction->setOn( TRUE ); 365 weekLstAction->setOn( TRUE );
367 weekLstView->setDate(d); 366 weekLstView->setDate(d);
368 views->raiseWidget( weekLstView ); 367 views->raiseWidget( weekLstView );
369 weekLstView->redraw(); 368 weekLstView->redraw();
370 } else if (v==MONTH) { 369 } else if (v==MONTH) {
371 initMonth(); 370 initMonth();
372 monthAction->setOn( TRUE ); 371 monthAction->setOn( TRUE );
373 monthView->setDate( d.year(), d.month(), d.day() ); 372 monthView->setDate( d.year(), d.month(), d.day() );
374 views->raiseWidget( monthView ); 373 views->raiseWidget( monthView );
375 monthView->redraw(); 374 monthView->redraw();
376 } 375 }
377} 376}
378 377
379void DateBook::viewDefault(const QDate &d) { 378void DateBook::viewDefault(const QDate &d) {
380 view(defaultView,d); 379 view(defaultView,d);
381} 380}
382 381
383void DateBook::viewDay() { 382void DateBook::viewDay() {
384 view(DAY,currentDate()); 383 view(DAY,currentDate());
385} 384}
386 385
387void DateBook::viewWeek() { 386void DateBook::viewWeek() {
388 view(WEEK,currentDate()); 387 view(WEEK,currentDate());
389} 388}
390 389
391void DateBook::viewWeekLst() { 390void DateBook::viewWeekLst() {
392 view(WEEKLST,currentDate()); 391 view(WEEKLST,currentDate());
393} 392}
394 393
395void DateBook::viewMonth() { 394void DateBook::viewMonth() {
396 view(MONTH,currentDate()); 395 view(MONTH,currentDate());
397} 396}
398 397
399void DateBook::insertEvent( const Event &e ) 398void DateBook::insertEvent( const Event &e )
400{ 399{
401 Event dupEvent=e; 400 Event dupEvent=e;
402 if(!dupEvent.isValidUid() ) // tkcRom seems to be different 401 if(!dupEvent.isValidUid() ) // tkcRom seems to be different
403 dupEvent.assignUid(); 402 dupEvent.assignUid();
404 dupEvent.setLocation(defaultLocation); 403 dupEvent.setLocation(defaultLocation);
405 dupEvent.setCategories(defaultCategories); 404 dupEvent.setCategories(defaultCategories);
406 db->addEvent(dupEvent); 405 db->addEvent(dupEvent);
407 emit newEvent(); 406 emit newEvent();
408} 407}
409 408
410void DateBook::duplicateEvent( const Event &e ) 409void DateBook::duplicateEvent( const Event &e )
411{ 410{
412 qWarning("Hmmm...");
413 // Alot of code duplication, as this is almost like editEvent(); 411 // Alot of code duplication, as this is almost like editEvent();
414 if (syncing) { 412 if (syncing) {
415 QMessageBox::warning( this, tr("Calendar"), tr( "Can not edit data, currently syncing") ); 413 QMessageBox::warning( this, tr("Calendar"), tr( "Can not edit data, currently syncing") );
416 return; 414 return;
417 } 415 }
418 416
419 Event dupevent(e);// Make a duplicate. 417 Event dupevent(e);// Make a duplicate.
420 418
421 // workaround added for text input. 419 // workaround added for text input.
422 QDialog editDlg( this, 0, TRUE ); 420 QDialog editDlg( this, 0, TRUE );
423 DateEntry *entry; 421 DateEntry *entry;
424 editDlg.setCaption( tr("Duplicate Event") ); 422 editDlg.setCaption( tr("Duplicate Event") );
425 QVBoxLayout *vb = new QVBoxLayout( &editDlg ); 423 QVBoxLayout *vb = new QVBoxLayout( &editDlg );
426 QScrollView *sv = new QScrollView( &editDlg, "scrollview" ); 424 QScrollView *sv = new QScrollView( &editDlg, "scrollview" );
427 sv->setResizePolicy( QScrollView::AutoOneFit ); 425 sv->setResizePolicy( QScrollView::AutoOneFit );
428 // KLUDGE!!! 426 // KLUDGE!!!
429 sv->setHScrollBarMode( QScrollView::AlwaysOff ); 427 sv->setHScrollBarMode( QScrollView::AlwaysOff );
430 vb->addWidget( sv ); 428 vb->addWidget( sv );
431 entry = new DateEntry( onMonday, dupevent, ampm, &editDlg, "editor" ); 429 entry = new DateEntry( onMonday, dupevent, ampm, &editDlg, "editor" );
432 entry->timezone->setEnabled( FALSE ); 430 entry->timezone->setEnabled( FALSE );
433 sv->addChild( entry ); 431 sv->addChild( entry );
434 432
435 while ( QPEApplication::execDialog( &editDlg ) ) { 433 while ( QPEApplication::execDialog( &editDlg ) ) {
436 Event newEv = entry->event(); 434 Event newEv = entry->event();
437 QString error = checkEvent(newEv); 435 QString error = checkEvent(newEv);
438 if (!error.isNull()) { 436 if (!error.isNull()) {
439 if (QMessageBox::warning(this, tr("error box"), error, tr("Fix it"), tr("Continue"), 0, 0, 1) == 0) 437 if (QMessageBox::warning(this, tr("error box"), error, tr("Fix it"), tr("Continue"), 0, 0, 1) == 0)
440 continue; 438 continue;
441 } 439 }
442 /* 440 /*
443 * The problem: 441 * The problem:
444 * DateBookDB does remove repeating events not by uid but by the time 442 * DateBookDB does remove repeating events not by uid but by the time
445 * the recurrence was created 443 * the recurrence was created
446 * so we need to update that time as well 444 * so we need to update that time as well
447 */ 445 */
448 Event::RepeatPattern rp = newEv.repeatPattern(); 446 Event::RepeatPattern rp = newEv.repeatPattern();
449 rp.createTime = ::time( NULL ); 447 rp.createTime = ::time( NULL );
450 newEv.setRepeat( TRUE, rp ); // has repeat and repeatPattern... 448 newEv.setRepeat( TRUE, rp ); // has repeat and repeatPattern...
451 if( newEv.uid() == e.uid() || !newEv.isValidUid() ) 449 if( newEv.uid() == e.uid() || !newEv.isValidUid() )
452 newEv.assignUid(); 450 newEv.assignUid();
453 451
454 db->addEvent(newEv); 452 db->addEvent(newEv);
455 emit newEvent(); 453 emit newEvent();
456 break; 454 break;
457 } 455 }
458} 456}
459 457
460void DateBook::editEvent( const Event &e ) 458void DateBook::editEvent( const Event &e )
461{ 459{
462 if (syncing) { 460 if (syncing) {
463 QMessageBox::warning( this, tr("Calendar"), tr( "Can not edit data, currently syncing") ); 461 QMessageBox::warning( this, tr("Calendar"), tr( "Can not edit data, currently syncing") );
464 return; 462 return;
465 } 463 }
466 464
467 // workaround added for text input. 465 // workaround added for text input.
468 QDialog editDlg( this, 0, TRUE ); 466 QDialog editDlg( this, 0, TRUE );
469 DateEntry *entry; 467 DateEntry *entry;
470 editDlg.setCaption( tr("Edit Event") ); 468 editDlg.setCaption( tr("Edit Event") );
471 QVBoxLayout *vb = new QVBoxLayout( &editDlg ); 469 QVBoxLayout *vb = new QVBoxLayout( &editDlg );
472 QScrollView *sv = new QScrollView( &editDlg, "scrollview" ); 470 QScrollView *sv = new QScrollView( &editDlg, "scrollview" );
473 sv->setResizePolicy( QScrollView::AutoOneFit ); 471 sv->setResizePolicy( QScrollView::AutoOneFit );
474 // KLUDGE!!! 472 // KLUDGE!!!
475 sv->setHScrollBarMode( QScrollView::AlwaysOff ); 473 sv->setHScrollBarMode( QScrollView::AlwaysOff );
476 vb->addWidget( sv ); 474 vb->addWidget( sv );
477 entry = new DateEntry( onMonday, e, ampm, &editDlg, "editor" ); 475 entry = new DateEntry( onMonday, e, ampm, &editDlg, "editor" );
478 entry->timezone->setEnabled( FALSE ); 476 entry->timezone->setEnabled( FALSE );
479 sv->addChild( entry ); 477 sv->addChild( entry );
480 478
481 while ( QPEApplication::execDialog( &editDlg ) ) { 479 while ( QPEApplication::execDialog( &editDlg ) ) {
482 Event newEv = entry->event(); 480 Event newEv = entry->event();
483 if(newEv.description().isEmpty() && newEv.notes().isEmpty() ) 481 if(newEv.description().isEmpty() && newEv.notes().isEmpty() )
484 break; 482 break;
485 newEv.setUid(e.uid()); // FIXME: Hack not to clear uid 483 newEv.setUid(e.uid()); // FIXME: Hack not to clear uid
486 QString error = checkEvent(newEv); 484 QString error = checkEvent(newEv);
487 if (!error.isNull()) { 485 if (!error.isNull()) {
488 if (QMessageBox::warning(this, tr("error box"), error, tr("Fix it"), tr("Continue"), 0, 0, 1) == 0) continue; 486 if (QMessageBox::warning(this, tr("error box"), error, tr("Fix it"), tr("Continue"), 0, 0, 1) == 0) continue;
489 } 487 }
490 db->editEvent(e, newEv); 488 db->editEvent(e, newEv);
491 emit newEvent(); 489 emit newEvent();
492 break; 490 break;
493 } 491 }
494} 492}
495 493
496void DateBook::removeEvent( const Event &e ) 494void DateBook::removeEvent( const Event &e )
497{ 495{
498 if (syncing) { 496 if (syncing) {
499 QMessageBox::warning( this, tr("Calendar"), tr( "Can not edit data, currently syncing") ); 497 QMessageBox::warning( this, tr("Calendar"), tr( "Can not edit data, currently syncing") );
500 return; 498 return;
501 } 499 }
502 500
503 QString strName = e.description(); 501 QString strName = e.description();
504 502
505 if ( !QPEMessageBox::confirmDelete( this, tr( "Calendar" ),strName ) ) 503 if ( !QPEMessageBox::confirmDelete( this, tr( "Calendar" ),strName ) )
506 return; 504 return;
507 505
508 db->removeEvent( e ); 506 db->removeEvent( e );
509 if ( views->visibleWidget() == dayView && dayView ) 507 if ( views->visibleWidget() == dayView && dayView )
510 dayView->redraw(); 508 dayView->redraw();
509
511} 510}
512 511
513void DateBook::addEvent( const Event &e ) 512void DateBook::addEvent( const Event &e )
514{ 513{
515 QDate d = e.start().date(); 514 QDate d = e.start().date();
516 initDay(); 515 initDay();
517 dayView->setDate( d ); 516 dayView->setDate( d );
518} 517}
519 518
520void DateBook::showDay( int year, int month, int day ) 519void DateBook::showDay( int year, int month, int day )
521{ 520{
522 QDate d(year, month, day); 521 QDate d(year, month, day);
523 view(DAY,d); 522 view(DAY,d);
524} 523}
525 524
526void DateBook::initDay() 525void DateBook::initDay()
527{ 526{
528 if ( !dayView ) { 527 if ( !dayView ) {
529 dayView = new DateBookDay( ampm, onMonday, db, views, "day view" ); 528 dayView = new DateBookDay( ampm, onMonday, db, views, "day view" );
530 views->addWidget( dayView, DAY ); 529 views->addWidget( dayView, DAY );
531 dayView->setJumpToCurTime( bJumpToCurTime ); 530 dayView->setJumpToCurTime( bJumpToCurTime );
532 dayView->setStartViewTime( startTime ); 531 dayView->setStartViewTime( startTime );
533 dayView->setRowStyle( rowStyle ); 532 dayView->setRowStyle( rowStyle );
534 connect( this, SIGNAL( newEvent() ), dayView, SLOT( redraw() ) ); 533 connect( this, SIGNAL( newEvent() ), dayView, SLOT( redraw() ) );
535 connect( dayView, SIGNAL( newEvent() ), this, SLOT( fileNew() ) ); 534 connect( dayView, SIGNAL( newEvent() ), this, SLOT( fileNew() ) );
536 connect( dayView, SIGNAL( removeEvent( const Event & ) ), this, SLOT( removeEvent( const Event & ) ) ); 535 connect( dayView, SIGNAL( removeEvent( const Event & ) ), this, SLOT( removeEvent( const Event & ) ) );
537 connect( dayView, SIGNAL( editEvent( const Event & ) ), this, SLOT( editEvent( const Event & ) ) ); 536 connect( dayView, SIGNAL( editEvent( const Event & ) ), this, SLOT( editEvent( const Event & ) ) );
538 connect( dayView, SIGNAL( duplicateEvent( const Event & ) ), this, SLOT( duplicateEvent( const Event & ) ) ); 537 connect( dayView, SIGNAL( duplicateEvent( const Event & ) ), this, SLOT( duplicateEvent( const Event & ) ) );
539 connect( dayView, SIGNAL( beamEvent( const Event & ) ), this, SLOT( beamEvent( const Event & ) ) ); 538 connect( dayView, SIGNAL( beamEvent( const Event & ) ), this, SLOT( beamEvent( const Event & ) ) );
540 connect( dayView, SIGNAL(sigNewEvent(const QString &)), this, SLOT(slotNewEventFromKey(const QString &)) ); 539 connect( dayView, SIGNAL(sigNewEvent(const QString &)), this, SLOT(slotNewEventFromKey(const QString &)) );
541 } 540 }
542} 541}
543 542
544void DateBook::initWeek() 543void DateBook::initWeek()
545{ 544{
546 if ( !weekView ) { 545 if ( !weekView ) {
547 weekView = new DateBookWeek( ampm, onMonday, db, views, "week view" ); 546 weekView = new DateBookWeek( ampm, onMonday, db, views, "week view" );
548 weekView->setStartViewTime( startTime ); 547 weekView->setStartViewTime( startTime );
549 views->addWidget( weekView, WEEK ); 548 views->addWidget( weekView, WEEK );
550 connect( weekView, SIGNAL( showDate( int, int, int ) ), this, SLOT( showDay( int, int, int ) ) ); 549 connect( weekView, SIGNAL( showDate( int, int, int ) ), this, SLOT( showDay( int, int, int ) ) );
551 connect( this, SIGNAL( newEvent() ), weekView, SLOT( redraw() ) ); 550 connect( this, SIGNAL( newEvent() ), weekView, SLOT( redraw() ) );
552 } 551 }
553 552
554 //But also get it right: the year that we display can be different 553 //But also get it right: the year that we display can be different
555 //from the year of the current date. So, first find the year 554 //from the year of the current date. So, first find the year
556 //number of the current week. 555 //number of the current week.
557 int yearNumber, totWeeks; 556 int yearNumber, totWeeks;
558 calcWeek( currentDate(), totWeeks, yearNumber, onMonday ); 557 calcWeek( currentDate(), totWeeks, yearNumber, onMonday );
559 558
560 QDate d = QDate( yearNumber, 12, 31 ); 559 QDate d = QDate( yearNumber, 12, 31 );
561 calcWeek( d, totWeeks, yearNumber, onMonday ); 560 calcWeek( d, totWeeks, yearNumber, onMonday );
562 561
563 while ( totWeeks == 1 ) { 562 while ( totWeeks == 1 ) {
564 d = d.addDays( -1 ); 563 d = d.addDays( -1 );
565 calcWeek( d, totWeeks, yearNumber, onMonday ); 564 calcWeek( d, totWeeks, yearNumber, onMonday );
566 } 565 }
567} 566}
568 567
569void DateBook::initWeekLst() { 568void DateBook::initWeekLst() {
570 if ( !weekLstView ) { 569 if ( !weekLstView ) {
571 weekLstView = new DateBookWeekLst( ampm, onMonday, db, views, "weeklst view" ); 570 weekLstView = new DateBookWeekLst( ampm, onMonday, db, views, "weeklst view" );
572 views->addWidget( weekLstView, WEEKLST ); 571 views->addWidget( weekLstView, WEEKLST );
573 572
574 //weekLstView->setStartViewTime( startTime ); 573 //weekLstView->setStartViewTime( startTime );
@@ -930,153 +929,147 @@ void DateBook::beamDone( Ir *ir )
930{ 929{
931 delete ir; 930 delete ir;
932 unlink( beamfile ); 931 unlink( beamfile );
933} 932}
934 933
935void DateBook::slotFind() 934void DateBook::slotFind()
936{ 935{
937 // move it to the day view... 936 // move it to the day view...
938 viewDay(); 937 viewDay();
939 FindDialog frmFind( "Calendar", this ); // no tr needed 938 FindDialog frmFind( "Calendar", this ); // no tr needed
940 frmFind.setUseDate( true ); 939 frmFind.setUseDate( true );
941 frmFind.setDate( currentDate() ); 940 frmFind.setDate( currentDate() );
942 QObject::connect( &frmFind, 941 QObject::connect( &frmFind,
943 SIGNAL(signalFindClicked(const QString&, const QDate&, 942 SIGNAL(signalFindClicked(const QString&, const QDate&,
944 bool, bool, int)), 943 bool, bool, int)),
945 this, 944 this,
946 SLOT(slotDoFind(const QString&, const QDate&, 945 SLOT(slotDoFind(const QString&, const QDate&,
947 bool, bool, int)) ); 946 bool, bool, int)) );
948 QObject::connect( this, 947 QObject::connect( this,
949 SIGNAL(signalNotFound()), 948 SIGNAL(signalNotFound()),
950 &frmFind, 949 &frmFind,
951 SLOT(slotNotFound()) ); 950 SLOT(slotNotFound()) );
952 QObject::connect( this, 951 QObject::connect( this,
953 SIGNAL(signalWrapAround()), 952 SIGNAL(signalWrapAround()),
954 &frmFind, 953 &frmFind,
955 SLOT(slotWrapAround()) ); 954 SLOT(slotWrapAround()) );
956 frmFind.move(0,0); 955 frmFind.move(0,0);
957 frmFind.exec(); 956 frmFind.exec();
958 inSearch = false; 957 inSearch = false;
959} 958}
960 959
961bool catComp( QArray<int> cats, int category ) 960bool catComp( QArray<int> cats, int category )
962{ 961{
963 bool returnMe; 962 bool returnMe;
964 int i, 963 int i,
965 count; 964 count;
966 965
967 count = int(cats.count()); 966 count = int(cats.count());
968 returnMe = false; 967 returnMe = false;
969 if ( (category == -1 && count == 0) || category == -2 ) 968 if ( (category == -1 && count == 0) || category == -2 )
970 returnMe = true; 969 returnMe = true;
971 else { 970 else {
972 for ( i = 0; i < count; i++ ) { 971 for ( i = 0; i < count; i++ ) {
973 if ( category == cats[i] ) { 972 if ( category == cats[i] ) {
974 returnMe = true; 973 returnMe = true;
975 break; 974 break;
976 } 975 }
977 } 976 }
978 } 977 }
979 return returnMe; 978 return returnMe;
980} 979}
981 980
982 981
983void DateBook::slotDoFind( const QString& txt, const QDate &dt, 982void DateBook::slotDoFind( const QString& txt, const QDate &dt,
984 bool caseSensitive, bool /*backwards*/, 983 bool caseSensitive, bool /*backwards*/,
985 int category ) 984 int category )
986{ 985{
987 QDateTime dtEnd( QDate(3001, 1, 1), QTime(0, 0, 0) ), 986 QDateTime dtEnd( QDate(3001, 1, 1), QTime(0, 0, 0) ),
988 next; 987 next;
989 988
990 QRegExp r( txt ); 989 QRegExp r( txt );
991 r.setCaseSensitive( caseSensitive ); 990 r.setCaseSensitive( caseSensitive );
992 991
993 992
994 static Event rev, 993 static Event rev, nonrev;
995 nonrev;
996 if ( !inSearch ) { 994 if ( !inSearch ) {
997 rev.setStart( QDateTime(QDate(1960, 1, 1), QTime(0, 0, 0)) ); 995 rev.setStart( QDateTime(QDate(1960, 1, 1), QTime(0, 0, 0)) );
998 nonrev.setStart( rev.start() ); 996 nonrev.setStart( rev.start() );
999 inSearch = true; 997 inSearch = true;
1000 } 998 }
1001 static QDate searchDate = dt; 999 static QDate searchDate = dt;
1002 static bool wrapAround = true; 1000 static bool wrapAround = true;
1003 bool candidtate; 1001 bool candidtate;
1004 candidtate = false; 1002 candidtate = false;
1005 1003
1006 QValueList<Event> repeats = db->getRawRepeats(); 1004 QValueList<Event> repeats = db->getRawRepeats();
1007 1005
1008 // find the candidate for the first repeat that matches... 1006 // find the candidate for the first repeat that matches...
1009 QValueListConstIterator<Event> it; 1007 QValueListConstIterator<Event> it;
1010 QDate start = dt; 1008 QDate start = dt;
1011 for ( it = repeats.begin(); it != repeats.end(); ++it ) { 1009 for ( it = repeats.begin(); it != repeats.end(); ++it ) {
1012 if ( catComp( (*it).categories(), category ) ) { 1010 if ( catComp( (*it).categories(), category ) ) {
1013 while ( nextOccurance( *it, start, next ) ) { 1011 if ( (*it).match( r ) ) {
1014 if ( next < dtEnd ) { 1012 if ( nextOccurance( *it, start, next ) ) {
1015 if ( (*it).match( r ) && !(next <= rev.start()) ) { 1013 if ( next < dtEnd && !(next <= rev.start() ) ) {
1016 rev = *it; 1014 rev = *it;
1017 dtEnd = next; 1015 dtEnd = next;
1018 rev.setStart( next ); 1016 rev.setStart( next );
1019 candidtate = true; 1017 candidtate = true;
1020 wrapAround = true; 1018 wrapAround = true;
1021 start = dt; 1019 }
1022 break; 1020 }
1023 } else 1021 }
1024 start = next.date().addDays( 1 ); 1022 }
1025 }
1026 }
1027 }
1028 } 1023 }
1029 1024
1030 // now the for first non repeat... 1025 // now the for first non repeat...
1031 QValueList<Event> nonRepeats = db->getNonRepeatingEvents( dt, dtEnd.date() ); 1026 QValueList<Event> nonRepeats = db->getNonRepeatingEvents( dt, dtEnd.date() );
1032 qHeapSort( nonRepeats.begin(), nonRepeats.end() ); 1027 qHeapSort( nonRepeats.begin(), nonRepeats.end() );
1033 for ( it = nonRepeats.begin(); it != nonRepeats.end(); ++it ) { 1028 for ( it = nonRepeats.begin(); it != nonRepeats.end(); ++it ) {
1034 if ( catComp( (*it).categories(), category ) ) { 1029 if ( catComp( (*it).categories(), category ) ) {
1035 if ( (*it).start() < dtEnd ) { 1030 if ( (*it).start() < dtEnd ) {
1036 if ( (*it).match( r ) && !(*it <= nonrev) ) { 1031 if ( (*it).match( r ) && !(*it <= nonrev) ) {
1037 nonrev = *it; 1032 nonrev = *it;
1038 dtEnd = nonrev.start(); 1033 dtEnd = nonrev.start();
1039 candidtate = true; 1034 candidtate = true;
1040 wrapAround = true; 1035 wrapAround = true;
1041 break; 1036 break;
1042 } 1037 }
1043 } 1038 }
1044 } 1039 }
1045 } 1040 }
1046 if ( candidtate ) { 1041 if ( candidtate ) {
1047 dayView->setStartViewTime( dtEnd.time().hour() ); 1042 dayView->setStartViewTime( dtEnd.time().hour() );
1048 dayView->setDate( dtEnd.date().year(), dtEnd.date().month(), 1043 dayView->setDate( dtEnd.date().year(), dtEnd.date().month(),
1049 dtEnd.date().day() ); 1044 dtEnd.date().day() );
1050 } else { 1045 } else {
1051 if ( wrapAround ) { 1046 if ( wrapAround ) {
1052 emit signalWrapAround(); 1047 emit signalWrapAround();
1053 rev.setStart( QDateTime(QDate(1960, 1, 1), QTime(0, 0, 0)) ); 1048 rev.setStart( QDateTime(QDate(1960, 1, 1), QTime(0, 0, 0)) );
1054 nonrev.setStart( rev.start() ); 1049 nonrev.setStart( rev.start() );
1055 } else 1050 } else
1056 emit signalNotFound(); 1051 emit signalNotFound();
1057 wrapAround = !wrapAround; 1052 wrapAround = !wrapAround;
1058 } 1053 }
1059} 1054}
1060 1055
1061Event DateBookDBHack::eventByUID(int uid) { 1056Event DateBookDBHack::eventByUID(int uid) {
1062 1057
1063 // FIXME: Dirty Hacks to get hold of the private event lists 1058 // FIXME: Dirty Hacks to get hold of the private event lists
1064 QDate start; 1059 QDate start;
1065 QDate end=start.addDays(-1); 1060 QDate end=start.addDays(-1);
1066 QValueList<Event> myEventList=getNonRepeatingEvents(start,end); 1061 QValueList<Event> myEventList=getNonRepeatingEvents(start,end);
1067 QValueList<Event> myRepeatEvents=getRawRepeats(); 1062 QValueList<Event> myRepeatEvents=getRawRepeats();
1068 1063
1069 QValueList<Event>::ConstIterator it; 1064 QValueList<Event>::ConstIterator it;
1070 1065
1071 for (it = myEventList.begin(); it != myEventList.end(); it++) { 1066 for (it = myEventList.begin(); it != myEventList.end(); it++) {
1072 if ((*it).uid() == uid) return *it; 1067 if ((*it).uid() == uid) return *it;
1073 } 1068 }
1074 for (it = myRepeatEvents.begin(); it != myRepeatEvents.end(); it++) { 1069 for (it = myRepeatEvents.begin(); it != myRepeatEvents.end(); it++) {
1075 if ((*it).uid() == uid) return *it; 1070 if ((*it).uid() == uid) return *it;
1076 } 1071 }
1077 1072
1078 qDebug("Event not found: uid=%d\n", uid);
1079 Event ev; 1073 Event ev;
1080 return ev; // return at least 1074 return ev; // return at least
1081} 1075}
1082