summaryrefslogtreecommitdiff
authoreilers <eilers>2003-08-01 14:19:44 (UTC)
committer eilers <eilers>2003-08-01 14:19:44 (UTC)
commit34991bac7d96b1c17601be6a5607819342571e0c (patch) (unidiff)
tree65d0bc2db22bcc1dc1b5eafdafd53b9cb08a6395
parent5346424fc26bde232a15aa34fbb720f86218b26f (diff)
downloadopie-34991bac7d96b1c17601be6a5607819342571e0c.zip
opie-34991bac7d96b1c17601be6a5607819342571e0c.tar.gz
opie-34991bac7d96b1c17601be6a5607819342571e0c.tar.bz2
Merging changes from BRANCH_1_0 to HEAD..
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/datebook/datebook.cpp50
-rw-r--r--core/pim/datebook/datebook.pro6
-rw-r--r--core/pim/datebook/datebookday.cpp127
-rw-r--r--core/pim/datebook/datebookday.h6
-rw-r--r--core/pim/datebook/datebookdayallday.cpp226
-rw-r--r--core/pim/datebook/datebookdayallday.h80
-rw-r--r--core/pim/datebook/datebooksettings.h5
-rw-r--r--core/pim/datebook/datebookweek.cpp65
-rw-r--r--core/pim/datebook/datebookweekheaderimpl.cpp12
-rw-r--r--core/pim/datebook/datebookweeklst.cpp10
-rw-r--r--core/pim/datebook/dateentryimpl.cpp2
-rw-r--r--core/pim/datebook/opie-datebook.control6
-rw-r--r--core/pim/datebook/repeatentry.cpp50
13 files changed, 564 insertions, 81 deletions
diff --git a/core/pim/datebook/datebook.cpp b/core/pim/datebook/datebook.cpp
index b7e89b0..10a9b59 100644
--- a/core/pim/datebook/datebook.cpp
+++ b/core/pim/datebook/datebook.cpp
@@ -167,129 +167,133 @@ DateBook::DateBook( QWidget *parent, const char *, WFlags f )
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"); 189 qDebug("olle\n");
190#endif 190#endif
191#endif 191#endif
192 192
193 qDebug("done t=%d", t.elapsed() ); 193 qDebug("done t=%d", t.elapsed() );
194 194
195 /* 195 /*
196 * Here is a problem description: 196 * Here is a problem description:
197 * When Weekview is the default view 197 * When Weekview is the default view
198 * a DateBookWeekView get's created 198 * a DateBookWeekView get's created
199 * redraw() get's called. So what? 199 * redraw() get's called. So what?
200 * Remember that we're still in the c'tor 200 * Remember that we're still in the c'tor
201 * and no final layout has happened? Ok 201 * and no final layout has happened? Ok
202 * now all Events get arranged. Their x 202 * now all Events get arranged. Their x
203 * position get's determined by a QHeader 203 * position get's determined by a QHeader
204 * position. But the QHeader isn't layouted or 204 * position. But the QHeader isn't layouted or
205 * at the right position. redraw() is a slot 205 * at the right position. redraw() is a slot
206 * so we'll call it then via a singleShot 206 * so we'll call it then via a singleShot
207 * from view() 207 * from view()
208 */ 208 */
209 if( needEvilHack ){ 209 if( needEvilHack ){
210 QTimer::singleShot( 500, this, SLOT(viewWeek()) ); 210 QTimer::singleShot( 500, this, SLOT(viewWeek()) );
211 } 211 }
212} 212}
213 213
214void DateBook::receive( const QCString &msg, const QByteArray &data ) 214void DateBook::receive( const QCString &msg, const QByteArray &data )
215{ 215{
216 QDataStream stream( data, IO_ReadOnly ); 216 QDataStream stream( data, IO_ReadOnly );
217 if ( msg == "timeChange(QString)" ) { 217 if ( msg == "timeChange(QString)" ) {
218 // update active view! 218 // update active view!
219 if ( dayAction->isOn() ) 219 if ( dayAction->isOn() )
220 viewDay(); 220 viewDay();
221 else if ( weekAction->isOn() ) 221 else if ( weekAction->isOn() )
222 viewWeek(); 222 viewWeek();
223 else if ( monthAction->isOn() ) 223 else if ( monthAction->isOn() )
224 viewMonth(); 224 viewMonth();
225 } 225 }
226 else if (msg == "editEvent(int)") { 226 else if (msg == "editEvent(int)") {
227 int uid; 227 int uid;
228 stream >> uid; 228 stream >> uid;
229 Event e=db->eventByUID(uid); 229 Event e=db->eventByUID(uid);
230 editEvent(e); 230 editEvent(e);
231 } 231 }else if (msg == "viewDefault(QDate)"){
232 QDate day;
233 stream >> day;
234 viewDefault(day);
235 }
232} 236}
233 237
234DateBook::~DateBook() 238DateBook::~DateBook()
235{ 239{
236} 240}
237 241
238void DateBook::slotSettings() 242void DateBook::slotSettings()
239{ 243{
240 DateBookSettings frmSettings( ampm, this ); 244 DateBookSettings frmSettings( ampm, this );
241 frmSettings.setStartTime( startTime ); 245 frmSettings.setStartTime( startTime );
242 frmSettings.setAlarmPreset( aPreset, presetTime ); 246 frmSettings.setAlarmPreset( aPreset, presetTime );
243 frmSettings.setJumpToCurTime( bJumpToCurTime ); 247 frmSettings.setJumpToCurTime( bJumpToCurTime );
244 frmSettings.setRowStyle( rowStyle ); 248 frmSettings.setRowStyle( rowStyle );
245 frmSettings.comboDefaultView->setCurrentItem(defaultView-1); 249 frmSettings.comboDefaultView->setCurrentItem(defaultView-1);
246 frmSettings.comboWeekListView->setCurrentItem(weeklistviewconfig); 250 frmSettings.comboWeekListView->setCurrentItem(weeklistviewconfig);
247 251
248 bool found=false; 252 bool found=false;
249 for (int i=0; i<(frmSettings.comboLocation->count()); i++) { 253 for (int i=0; i<(frmSettings.comboLocation->count()); i++) {
250 if ( frmSettings.comboLocation->text(i) == defaultLocation ) { 254 if ( frmSettings.comboLocation->text(i) == defaultLocation ) {
251 frmSettings.comboLocation->setCurrentItem(i); 255 frmSettings.comboLocation->setCurrentItem(i);
252 found=true; 256 found=true;
253 break; 257 break;
254 } 258 }
255 } 259 }
256 if(!found) { 260 if(!found) {
257 frmSettings.comboLocation->insertItem(defaultLocation); 261 frmSettings.comboLocation->insertItem(defaultLocation);
258 frmSettings.comboLocation->setCurrentItem(frmSettings.comboLocation->count()-1); 262 frmSettings.comboLocation->setCurrentItem(frmSettings.comboLocation->count()-1);
259 } 263 }
260 frmSettings.comboCategory->setCategories(defaultCategories,"Calendar", tr("Calendar")); 264 frmSettings.comboCategory->setCategories(defaultCategories,"Calendar", tr("Calendar"));
261 265
262#if defined (Q_WS_QWS) || defined(_WS_QWS_) 266#if defined (Q_WS_QWS) || defined(_WS_QWS_)
263 frmSettings.showMaximized(); 267 frmSettings.showMaximized();
264#endif 268#endif
265 269
266 if ( frmSettings.exec() ) { 270 if ( frmSettings.exec() ) {
267 271
268 aPreset = frmSettings.alarmPreset(); 272 aPreset = frmSettings.alarmPreset();
269 presetTime = frmSettings.presetTime(); 273 presetTime = frmSettings.presetTime();
270 startTime = frmSettings.startTime(); 274 startTime = frmSettings.startTime();
271 bJumpToCurTime = frmSettings.jumpToCurTime(); 275 bJumpToCurTime = frmSettings.jumpToCurTime();
272 rowStyle = frmSettings.rowStyle(); 276 rowStyle = frmSettings.rowStyle();
273 defaultView=frmSettings.comboDefaultView->currentItem()+1; 277 defaultView=frmSettings.comboDefaultView->currentItem()+1;
274 weeklistviewconfig=frmSettings.comboWeekListView->currentItem(); 278 weeklistviewconfig=frmSettings.comboWeekListView->currentItem();
275 defaultLocation=frmSettings.comboLocation->currentText(); 279 defaultLocation=frmSettings.comboLocation->currentText();
276 defaultCategories=frmSettings.comboCategory->currentCategories(); 280 defaultCategories=frmSettings.comboCategory->currentCategories();
277 281
278 if ( dayView ) { 282 if ( dayView ) {
279 dayView->setStartViewTime( startTime ); 283 dayView->setStartViewTime( startTime );
280 dayView->setJumpToCurTime( bJumpToCurTime ); 284 dayView->setJumpToCurTime( bJumpToCurTime );
281 dayView->setRowStyle( rowStyle ); 285 dayView->setRowStyle( rowStyle );
282 } 286 }
283 if ( weekView ) { 287 if ( weekView ) {
284 weekView->setStartViewTime( startTime ); 288 weekView->setStartViewTime( startTime );
285 } 289 }
286 saveSettings(); 290 saveSettings();
287 291
288 // make the change obvious 292 // make the change obvious
289 if ( views->visibleWidget() ) { 293 if ( views->visibleWidget() ) {
290 if ( views->visibleWidget() == dayView ) 294 if ( views->visibleWidget() == dayView )
291 dayView->redraw(); 295 dayView->redraw();
292 else if ( views->visibleWidget() == weekView ) 296 else if ( views->visibleWidget() == weekView )
293 weekView->redraw(); 297 weekView->redraw();
294 else if ( views->visibleWidget() == weekLstView ) 298 else if ( views->visibleWidget() == weekLstView )
295 weekLstView->redraw(); 299 weekLstView->redraw();
@@ -375,213 +379,223 @@ void DateBook::view(int v, const QDate &d) {
375 } 379 }
376} 380}
377 381
378void DateBook::viewDefault(const QDate &d) { 382void DateBook::viewDefault(const QDate &d) {
379 view(defaultView,d); 383 view(defaultView,d);
380} 384}
381 385
382void DateBook::viewDay() { 386void DateBook::viewDay() {
383 view(DAY,currentDate()); 387 view(DAY,currentDate());
384} 388}
385 389
386void DateBook::viewWeek() { 390void DateBook::viewWeek() {
387 view(WEEK,currentDate()); 391 view(WEEK,currentDate());
388} 392}
389 393
390void DateBook::viewWeekLst() { 394void DateBook::viewWeekLst() {
391 view(WEEKLST,currentDate()); 395 view(WEEKLST,currentDate());
392} 396}
393 397
394void DateBook::viewMonth() { 398void DateBook::viewMonth() {
395 view(MONTH,currentDate()); 399 view(MONTH,currentDate());
396} 400}
397 401
398void DateBook::insertEvent( const Event &e ) 402void DateBook::insertEvent( const Event &e )
399{ 403{
400 Event dupEvent=e; 404 Event dupEvent=e;
401 dupEvent.setLocation(defaultLocation); 405 dupEvent.setLocation(defaultLocation);
402 dupEvent.setCategories(defaultCategories); 406 dupEvent.setCategories(defaultCategories);
403 db->addEvent(dupEvent); 407 db->addEvent(dupEvent);
404 emit newEvent(); 408 emit newEvent();
405} 409}
406 410
407void DateBook::duplicateEvent( const Event &e ) 411void DateBook::duplicateEvent( const Event &e )
408{ 412{
409 qWarning("Hmmm..."); 413 qWarning("Hmmm...");
410 // Alot of code duplication, as this is almost like editEvent(); 414 // Alot of code duplication, as this is almost like editEvent();
411 if (syncing) { 415 if (syncing) {
412 QMessageBox::warning( this, tr("Calendar"), tr( "Can not edit data, currently syncing") ); 416 QMessageBox::warning( this, tr("Calendar"), tr( "Can not edit data, currently syncing") );
413 return; 417 return;
414 } 418 }
415 419
416 Event dupevent(e);// Make a duplicate. 420 Event dupevent(e);// Make a duplicate.
417 421
418 // workaround added for text input. 422 // workaround added for text input.
419 QDialog editDlg( this, 0, TRUE ); 423 QDialog editDlg( this, 0, TRUE );
420 DateEntry *entry; 424 DateEntry *entry;
421 editDlg.setCaption( tr("Duplicate Event") ); 425 editDlg.setCaption( tr("Duplicate Event") );
422 QVBoxLayout *vb = new QVBoxLayout( &editDlg ); 426 QVBoxLayout *vb = new QVBoxLayout( &editDlg );
423 QScrollView *sv = new QScrollView( &editDlg, "scrollview" ); 427 QScrollView *sv = new QScrollView( &editDlg, "scrollview" );
424 sv->setResizePolicy( QScrollView::AutoOneFit ); 428 sv->setResizePolicy( QScrollView::AutoOneFit );
425 // KLUDGE!!! 429 // KLUDGE!!!
426 sv->setHScrollBarMode( QScrollView::AlwaysOff ); 430 sv->setHScrollBarMode( QScrollView::AlwaysOff );
427 vb->addWidget( sv ); 431 vb->addWidget( sv );
428 entry = new DateEntry( onMonday, dupevent, ampm, &editDlg, "editor" ); 432 entry = new DateEntry( onMonday, dupevent, ampm, &editDlg, "editor" );
429 entry->timezone->setEnabled( FALSE ); 433 entry->timezone->setEnabled( FALSE );
430 sv->addChild( entry ); 434 sv->addChild( entry );
431 435
432#if defined(Q_WS_QWS) || defined(_WS_QWS_) 436#if defined(Q_WS_QWS) || defined(_WS_QWS_)
433 editDlg.showMaximized(); 437 editDlg.showMaximized();
434#endif 438#endif
435 while (editDlg.exec() ) { 439 while (editDlg.exec() ) {
436 Event newEv = entry->event(); 440 Event newEv = entry->event();
437 QString error = checkEvent(newEv); 441 QString error = checkEvent(newEv);
438 if (!error.isNull()) { 442 if (!error.isNull()) {
439 if (QMessageBox::warning(this, "error box", error, "Fix it", "Continue", 0, 0, 1) == 0) 443 if (QMessageBox::warning(this, tr("error box"), error, tr("Fix it"), tr("Continue"), 0, 0, 1) == 0)
440 continue; 444 continue;
441 } 445 }
446 /*
447 * The problem:
448 * DateBookDB does remove repeating events not by uid but by the time
449 * the recurrence was created
450 * so we need to update that time as well
451 */
452 Event::RepeatPattern rp = newEv.repeatPattern();
453 rp.createTime = ::time( NULL );
454 newEv.setRepeat( TRUE, rp ); // has repeat and repeatPattern...
455
442 db->addEvent(newEv); 456 db->addEvent(newEv);
443 emit newEvent(); 457 emit newEvent();
444 break; 458 break;
445 } 459 }
446} 460}
447 461
448void DateBook::editEvent( const Event &e ) 462void DateBook::editEvent( const Event &e )
449{ 463{
450 if (syncing) { 464 if (syncing) {
451 QMessageBox::warning( this, tr("Calendar"), tr( "Can not edit data, currently syncing") ); 465 QMessageBox::warning( this, tr("Calendar"), tr( "Can not edit data, currently syncing") );
452 return; 466 return;
453 } 467 }
454 468
455 // workaround added for text input. 469 // workaround added for text input.
456 QDialog editDlg( this, 0, TRUE ); 470 QDialog editDlg( this, 0, TRUE );
457 DateEntry *entry; 471 DateEntry *entry;
458 editDlg.setCaption( tr("Edit Event") ); 472 editDlg.setCaption( tr("Edit Event") );
459 QVBoxLayout *vb = new QVBoxLayout( &editDlg ); 473 QVBoxLayout *vb = new QVBoxLayout( &editDlg );
460 QScrollView *sv = new QScrollView( &editDlg, "scrollview" ); 474 QScrollView *sv = new QScrollView( &editDlg, "scrollview" );
461 sv->setResizePolicy( QScrollView::AutoOneFit ); 475 sv->setResizePolicy( QScrollView::AutoOneFit );
462 // KLUDGE!!! 476 // KLUDGE!!!
463 sv->setHScrollBarMode( QScrollView::AlwaysOff ); 477 sv->setHScrollBarMode( QScrollView::AlwaysOff );
464 vb->addWidget( sv ); 478 vb->addWidget( sv );
465 entry = new DateEntry( onMonday, e, ampm, &editDlg, "editor" ); 479 entry = new DateEntry( onMonday, e, ampm, &editDlg, "editor" );
466 entry->timezone->setEnabled( FALSE ); 480 entry->timezone->setEnabled( FALSE );
467 sv->addChild( entry ); 481 sv->addChild( entry );
468 482
469#if defined(Q_WS_QWS) || defined(_WS_QWS_) 483#if defined(Q_WS_QWS) || defined(_WS_QWS_)
470 editDlg.showMaximized(); 484 editDlg.showMaximized();
471#endif 485#endif
472 while (editDlg.exec() ) { 486 while (editDlg.exec() ) {
473 Event newEv = entry->event(); 487 Event newEv = entry->event();
474 if(newEv.description().isEmpty() && newEv.notes().isEmpty() ) 488 if(newEv.description().isEmpty() && newEv.notes().isEmpty() )
475 break; 489 break;
476 newEv.setUid(e.uid()); // FIXME: Hack not to clear uid 490 newEv.setUid(e.uid()); // FIXME: Hack not to clear uid
477 QString error = checkEvent(newEv); 491 QString error = checkEvent(newEv);
478 if (!error.isNull()) { 492 if (!error.isNull()) {
479 if (QMessageBox::warning(this, "error box", error, "Fix it", "Continue", 0, 0, 1) == 0) continue; 493 if (QMessageBox::warning(this, tr("error box"), error, tr("Fix it"), tr("Continue"), 0, 0, 1) == 0) continue;
480 } 494 }
481 db->editEvent(e, newEv); 495 db->editEvent(e, newEv);
482 emit newEvent(); 496 emit newEvent();
483 break; 497 break;
484 } 498 }
485} 499}
486 500
487void DateBook::removeEvent( const Event &e ) 501void DateBook::removeEvent( const Event &e )
488{ 502{
489 if (syncing) { 503 if (syncing) {
490 QMessageBox::warning( this, tr("Calendar"), tr( "Can not edit data, currently syncing") ); 504 QMessageBox::warning( this, tr("Calendar"), tr( "Can not edit data, currently syncing") );
491 return; 505 return;
492 } 506 }
493 507
494 QString strName = e.description(); 508 QString strName = e.description();
495 509
496 if ( !QPEMessageBox::confirmDelete( this, tr( "Calendar" ),strName ) ) 510 if ( !QPEMessageBox::confirmDelete( this, tr( "Calendar" ),strName ) )
497 return; 511 return;
498 512
499 db->removeEvent( e ); 513 db->removeEvent( e );
500 if ( views->visibleWidget() == dayView && dayView ) 514 if ( views->visibleWidget() == dayView && dayView )
501 dayView->redraw(); 515 dayView->redraw();
502} 516}
503 517
504void DateBook::addEvent( const Event &e ) 518void DateBook::addEvent( const Event &e )
505{ 519{
506 QDate d = e.start().date(); 520 QDate d = e.start().date();
507 initDay(); 521 initDay();
508 dayView->setDate( d ); 522 dayView->setDate( d );
509} 523}
510 524
511void DateBook::showDay( int year, int month, int day ) 525void DateBook::showDay( int year, int month, int day )
512{ 526{
513 QDate d(year, month, day); 527 QDate d(year, month, day);
514 view(DAY,d); 528 view(DAY,d);
515} 529}
516 530
517void DateBook::initDay() 531void DateBook::initDay()
518{ 532{
519 if ( !dayView ) { 533 if ( !dayView ) {
520 dayView = new DateBookDay( ampm, onMonday, db, views, "day view" ); 534 dayView = new DateBookDay( ampm, onMonday, db, views, "day view" );
521 views->addWidget( dayView, DAY ); 535 views->addWidget( dayView, DAY );
536 dayView->setJumpToCurTime( bJumpToCurTime );
522 dayView->setStartViewTime( startTime ); 537 dayView->setStartViewTime( startTime );
523 dayView->setJumpToCurTime( bJumpToCurTime );
524 dayView->setRowStyle( rowStyle ); 538 dayView->setRowStyle( rowStyle );
525 connect( this, SIGNAL( newEvent() ), dayView, SLOT( redraw() ) ); 539 connect( this, SIGNAL( newEvent() ), dayView, SLOT( redraw() ) );
526 connect( dayView, SIGNAL( newEvent() ), this, SLOT( fileNew() ) ); 540 connect( dayView, SIGNAL( newEvent() ), this, SLOT( fileNew() ) );
527 connect( dayView, SIGNAL( removeEvent( const Event & ) ), this, SLOT( removeEvent( const Event & ) ) ); 541 connect( dayView, SIGNAL( removeEvent( const Event & ) ), this, SLOT( removeEvent( const Event & ) ) );
528 connect( dayView, SIGNAL( editEvent( const Event & ) ), this, SLOT( editEvent( const Event & ) ) ); 542 connect( dayView, SIGNAL( editEvent( const Event & ) ), this, SLOT( editEvent( const Event & ) ) );
529 connect( dayView, SIGNAL( duplicateEvent( const Event & ) ), this, SLOT( duplicateEvent( const Event & ) ) ); 543 connect( dayView, SIGNAL( duplicateEvent( const Event & ) ), this, SLOT( duplicateEvent( const Event & ) ) );
530 connect( dayView, SIGNAL( beamEvent( const Event & ) ), this, SLOT( beamEvent( const Event & ) ) ); 544 connect( dayView, SIGNAL( beamEvent( const Event & ) ), this, SLOT( beamEvent( const Event & ) ) );
531 connect( dayView, SIGNAL(sigNewEvent(const QString &)), this, SLOT(slotNewEventFromKey(const QString &)) ); 545 connect( dayView, SIGNAL(sigNewEvent(const QString &)), this, SLOT(slotNewEventFromKey(const QString &)) );
532 } 546 }
533} 547}
534 548
535void DateBook::initWeek() 549void DateBook::initWeek()
536{ 550{
537 if ( !weekView ) { 551 if ( !weekView ) {
538 weekView = new DateBookWeek( ampm, onMonday, db, views, "week view" ); 552 weekView = new DateBookWeek( ampm, onMonday, db, views, "week view" );
539 weekView->setStartViewTime( startTime ); 553 weekView->setStartViewTime( startTime );
540 views->addWidget( weekView, WEEK ); 554 views->addWidget( weekView, WEEK );
541 connect( weekView, SIGNAL( showDate( int, int, int ) ), this, SLOT( showDay( int, int, int ) ) ); 555 connect( weekView, SIGNAL( showDate( int, int, int ) ), this, SLOT( showDay( int, int, int ) ) );
542 connect( this, SIGNAL( newEvent() ), weekView, SLOT( redraw() ) ); 556 connect( this, SIGNAL( newEvent() ), weekView, SLOT( redraw() ) );
543 } 557 }
544 558
545 //But also get it right: the year that we display can be different 559 //But also get it right: the year that we display can be different
546 //from the year of the current date. So, first find the year 560 //from the year of the current date. So, first find the year
547 //number of the current week. 561 //number of the current week.
548 int yearNumber, totWeeks; 562 int yearNumber, totWeeks;
549 calcWeek( currentDate(), totWeeks, yearNumber, onMonday ); 563 calcWeek( currentDate(), totWeeks, yearNumber, onMonday );
550 564
551 QDate d = QDate( yearNumber, 12, 31 ); 565 QDate d = QDate( yearNumber, 12, 31 );
552 calcWeek( d, totWeeks, yearNumber, onMonday ); 566 calcWeek( d, totWeeks, yearNumber, onMonday );
553 567
554 while ( totWeeks == 1 ) { 568 while ( totWeeks == 1 ) {
555 d = d.addDays( -1 ); 569 d = d.addDays( -1 );
556 calcWeek( d, totWeeks, yearNumber, onMonday ); 570 calcWeek( d, totWeeks, yearNumber, onMonday );
557 } 571 }
558} 572}
559 573
560void DateBook::initWeekLst() { 574void DateBook::initWeekLst() {
561 if ( !weekLstView ) { 575 if ( !weekLstView ) {
562 weekLstView = new DateBookWeekLst( ampm, onMonday, db, views, "weeklst view" ); 576 weekLstView = new DateBookWeekLst( ampm, onMonday, db, views, "weeklst view" );
563 views->addWidget( weekLstView, WEEKLST ); 577 views->addWidget( weekLstView, WEEKLST );
564 578
565 //weekLstView->setStartViewTime( startTime ); 579 //weekLstView->setStartViewTime( startTime );
566 connect( weekLstView, SIGNAL( showDate( int, int, int ) ), this, SLOT( showDay( int, int, int ) ) ); 580 connect( weekLstView, SIGNAL( showDate( int, int, int ) ), this, SLOT( showDay( int, int, int ) ) );
567 connect( weekLstView, SIGNAL( addEvent( const QDateTime &, const QDateTime &, const QString & , const QString &) ), 581 connect( weekLstView, SIGNAL( addEvent( const QDateTime &, const QDateTime &, const QString & , const QString &) ),
568 this, SLOT( slotNewEntry( const QDateTime &, const QDateTime &, const QString & , const QString &) ) ); 582 this, SLOT( slotNewEntry( const QDateTime &, const QDateTime &, const QString & , const QString &) ) );
569 connect( this, SIGNAL( newEvent() ), weekLstView, SLOT( redraw() ) ); 583 connect( this, SIGNAL( newEvent() ), weekLstView, SLOT( redraw() ) );
570 connect( weekLstView, SIGNAL( editEvent( const Event & ) ), this, SLOT( editEvent( const Event & ) ) ); 584 connect( weekLstView, SIGNAL( editEvent( const Event & ) ), this, SLOT( editEvent( const Event & ) ) );
571 } 585 }
572} 586}
573 587
574 588
575void DateBook::initMonth() 589void DateBook::initMonth()
576{ 590{
577 if ( !monthView ) { 591 if ( !monthView ) {
578 monthView = new DateBookMonth( views, "month view", FALSE, db ); 592 monthView = new DateBookMonth( views, "month view", FALSE, db );
579 views->addWidget( monthView, MONTH ); 593 views->addWidget( monthView, MONTH );
580 connect( monthView, SIGNAL( dateClicked( int, int, int ) ), this, SLOT( showDay( int, int, int ) ) ); 594 connect( monthView, SIGNAL( dateClicked( int, int, int ) ), this, SLOT( showDay( int, int, int ) ) );
581 connect( this, SIGNAL( newEvent() ), monthView, SLOT( redraw() ) ); 595 connect( this, SIGNAL( newEvent() ), monthView, SLOT( redraw() ) );
582 qApp->processEvents(); 596 qApp->processEvents();
583 } 597 }
584} 598}
585 599
586void DateBook::loadSettings() 600void DateBook::loadSettings()
587{ 601{
@@ -636,154 +650,170 @@ void DateBook::appMessage(const QCString& msg, const QByteArray& data)
636{ 650{
637 bool needShow = FALSE; 651 bool needShow = FALSE;
638 if ( msg == "alarm(QDateTime,int)" ) { 652 if ( msg == "alarm(QDateTime,int)" ) {
639 QDataStream ds(data,IO_ReadOnly); 653 QDataStream ds(data,IO_ReadOnly);
640 QDateTime when; int warn; 654 QDateTime when; int warn;
641 ds >> when >> warn; 655 ds >> when >> warn;
642 656
643 // check to make it's okay to continue, 657 // check to make it's okay to continue,
644 // this is the case that the time was set ahead, and 658 // this is the case that the time was set ahead, and
645 // we are forced given a stale alarm... 659 // we are forced given a stale alarm...
646 QDateTime current = QDateTime::currentDateTime(); 660 QDateTime current = QDateTime::currentDateTime();
647 if ( current.time().hour() != when.time().hour() && current.time().minute() != when.time().minute() ) 661 if ( current.time().hour() != when.time().hour() && current.time().minute() != when.time().minute() )
648 return; 662 return;
649 663
650 QValueList<EffectiveEvent> list = db->getEffectiveEvents(when.addSecs(warn*60)); 664 QValueList<EffectiveEvent> list = db->getEffectiveEvents(when.addSecs(warn*60));
651 if ( list.count() > 0 ) { 665 if ( list.count() > 0 ) {
652 QString msg; 666 QString msg;
653 bool bSound = FALSE; 667 bool bSound = FALSE;
654 int stopTimer = 0; 668 int stopTimer = 0;
655 bool found = FALSE; 669 bool found = FALSE;
656 for ( QValueList<EffectiveEvent>::ConstIterator it=list.begin(); it!=list.end(); ++it ) { 670 for ( QValueList<EffectiveEvent>::ConstIterator it=list.begin(); it!=list.end(); ++it ) {
657 if ( (*it).event().hasAlarm() ) { 671 if ( (*it).event().hasAlarm() ) {
658 found = TRUE; 672 found = TRUE;
659 msg += "<CENTER><B>" + (*it).description() + "</B>" 673 msg += "<CENTER><B>" + (*it).description() + "</B>"
660 + "<BR>" + (*it).location() + "<BR>" 674 + "<BR>" + (*it).location() + "<BR>"
661 + TimeString::dateString((*it).event().start(),ampm) 675 + TimeString::dateString((*it).event().start(),ampm)
662 + (warn 676 + (warn
663 ? tr(" (in " + QString::number(warn) 677 ? tr(" (in " + QString::number(warn)
664 + tr(" minutes)")) 678 + tr(" minutes)"))
665 : QString("")) 679 : QString(""))
666 + "<BR>" 680 + "<BR>"
667 + (*it).notes() + "</CENTER>"; 681 + (*it).notes() + "</CENTER>";
668 if ( (*it).event().alarmSound() != Event::Silent ) { 682 if ( (*it).event().alarmSound() != Event::Silent ) {
669 bSound = TRUE; 683 bSound = TRUE;
670 } 684 }
671 } 685 }
672 } 686 }
673 if ( found ) { 687 if ( found ) {
674 if ( bSound ) { 688 if ( bSound ) {
675 Sound::soundAlarm(); 689 Sound::soundAlarm();
676 alarmCounter = 0; 690 alarmCounter = 0;
677 stopTimer = startTimer( 5000 ); 691 stopTimer = startTimer( 5000 );
678 } 692 }
679 QDialog dlg( this, 0, TRUE ); 693 QDialog dlg( this, 0, TRUE );
680 QVBoxLayout *vb = new QVBoxLayout( &dlg ); 694 QVBoxLayout *vb = new QVBoxLayout( &dlg );
681 QScrollView *view = new QScrollView( &dlg, "scrollView"); 695 QScrollView *view = new QScrollView( &dlg, "scrollView");
682 view->setResizePolicy( QScrollView::AutoOneFit ); 696 view->setResizePolicy( QScrollView::AutoOneFit );
683 vb->addWidget( view ); 697 vb->addWidget( view );
684 QLabel *lblMsg = new QLabel( msg, &dlg ); 698 QLabel *lblMsg = new QLabel( msg, &dlg );
685 view->addChild( lblMsg ); 699 view->addChild( lblMsg );
686 QPushButton *cmdOk = new QPushButton( tr("OK"), &dlg ); 700 QPushButton *cmdOk = new QPushButton( tr("OK"), &dlg );
687 connect( cmdOk, SIGNAL(clicked()), &dlg, SLOT(accept()) ); 701 connect( cmdOk, SIGNAL(clicked()), &dlg, SLOT(accept()) );
688 vb->addWidget( cmdOk ); 702 vb->addWidget( cmdOk );
689 703
690#if defined(Q_WS_QWS) || defined(_WS_QWS_) 704#if defined(Q_WS_QWS) || defined(_WS_QWS_)
691 dlg.showMaximized(); 705 dlg.showMaximized();
692#endif 706#endif
693 needShow = dlg.exec(); 707 needShow = dlg.exec();
694 708
695 if ( bSound ) 709 if ( bSound )
696 killTimer( stopTimer ); 710 killTimer( stopTimer );
697 } 711 }
698 } 712 }
699 } else if ( msg == "nextView()" ) { 713 } else if ( msg == "nextView()" ) {
714 needShow = true;
700 if ( !qApp-> activeWindow ( )) { 715 if ( !qApp-> activeWindow ( )) {
701 needShow = TRUE; 716 needShow = TRUE;
702 } else { 717 } else {
703 QWidget* cur = views->visibleWidget(); 718 QWidget* cur = views->visibleWidget();
704 if ( cur ) { 719 if ( cur ) {
705 if ( cur == dayView ) 720 if ( cur == dayView )
706 viewWeek(); 721 viewWeek();
707 else if ( cur == weekView ) 722 else if ( cur == weekView )
708 viewWeekLst(); 723 viewWeekLst();
709 else if ( cur == weekLstView ) 724 else if ( cur == weekLstView )
710 viewMonth(); 725 viewMonth();
711 else if ( cur == monthView ) 726 else if ( cur == monthView )
712 viewDay(); 727 viewDay();
713 needShow = TRUE; 728 needShow = TRUE;
714 } 729 }
715 } 730 }
716 } 731 } else if (msg == "editEvent(int)") {
732 /* simple copy from receive */
733 QDataStream stream(data,IO_ReadOnly);
734 int uid;
735 stream >> uid;
736 Event e=db->eventByUID(uid);
737 editEvent(e);
738 } else if (msg == "viewDefault(QDate)"){
739 /* simple copy from receive */
740 QDataStream stream(data,IO_ReadOnly);
741 QDate day;
742 stream >> day;
743 viewDefault(day);
744 needShow = true;
745 }
746
717 if ( needShow ) { 747 if ( needShow ) {
718#if defined(Q_WS_QWS) || defined(_WS_QWS_) 748#if defined(Q_WS_QWS) || defined(_WS_QWS_)
719 showMaximized(); 749 // showMaximized();
720#else 750#else
721 show(); 751 // show();
722#endif 752#endif
723 raise(); 753 // raise();
724 QPEApplication::setKeepRunning(); 754 QPEApplication::setKeepRunning();
725 setActiveWindow(); 755 // setActiveWindow();
726 } 756 }
727} 757}
728 758
729void DateBook::reload() 759void DateBook::reload()
730{ 760{
731 db->reload(); 761 db->reload();
732 if ( dayAction->isOn() ) viewDay(); 762 if ( dayAction->isOn() ) viewDay();
733 else if ( weekAction->isOn() ) viewWeek(); 763 else if ( weekAction->isOn() ) viewWeek();
734 else if ( monthAction->isOn() ) viewMonth(); 764 else if ( monthAction->isOn() ) viewMonth();
735 syncing = FALSE; 765 syncing = FALSE;
736} 766}
737 767
738void DateBook::flush() 768void DateBook::flush()
739{ 769{
740 syncing = TRUE; 770 syncing = TRUE;
741 db->save(); 771 db->save();
742} 772}
743 773
744void DateBook::timerEvent( QTimerEvent *e ) 774void DateBook::timerEvent( QTimerEvent *e )
745{ 775{
746 if ( alarmCounter < 10 ) { 776 if ( alarmCounter < 10 ) {
747 alarmCounter++; 777 alarmCounter++;
748 Sound::soundAlarm(); 778 Sound::soundAlarm();
749 } else { 779 } else {
750 killTimer( e->timerId() ); 780 killTimer( e->timerId() );
751 } 781 }
752} 782}
753 783
754void DateBook::changeClock( bool newClock ) 784void DateBook::changeClock( bool newClock )
755{ 785{
756 ampm = newClock; 786 ampm = newClock;
757 // repaint the affected objects... 787 // repaint the affected objects...
758 if (dayView) dayView->redraw(); 788 if (dayView) dayView->redraw();
759 if (weekView) weekView->redraw(); 789 if (weekView) weekView->redraw();
760 if (weekLstView) weekLstView->redraw(); 790 if (weekLstView) weekLstView->redraw();
761} 791}
762 792
763void DateBook::changeWeek( bool m ) 793void DateBook::changeWeek( bool m )
764{ 794{
765 /* no need to redraw, each widget catches. Do need to 795 /* no need to redraw, each widget catches. Do need to
766 store though for widgets we haven't made yet */ 796 store though for widgets we haven't made yet */
767 onMonday = m; 797 onMonday = m;
768} 798}
769 799
770void DateBook::slotToday() 800void DateBook::slotToday()
771{ 801{
772 // we need to view today using default view 802 // we need to view today using default view
773 view(defaultView,QDate::currentDate()); 803 view(defaultView,QDate::currentDate());
774} 804}
775 805
776void DateBook::closeEvent( QCloseEvent *e ) 806void DateBook::closeEvent( QCloseEvent *e )
777{ 807{
778 if(syncing) { 808 if(syncing) {
779 /* no need to save, did that at flush */ 809 /* no need to save, did that at flush */
780 e->accept(); 810 e->accept();
781 return; 811 return;
782 } 812 }
783 813
784 // save settings will generate it's own error messages, no 814 // save settings will generate it's own error messages, no
785 // need to do checking ourselves. 815 // need to do checking ourselves.
786 saveSettings(); 816 saveSettings();
787 if ( db->save() ) { 817 if ( db->save() ) {
788 e->accept(); 818 e->accept();
789 } else { 819 } else {
@@ -856,129 +886,129 @@ void DateBook::slotNewEntry(const QDateTime &start, const QDateTime &end, const
856 } else { 886 } else {
857 ev.setLocation( defaultLocation ); 887 ev.setLocation( defaultLocation );
858 } 888 }
859 } else { 889 } else {
860 ev.setLocation(location); 890 ev.setLocation(location);
861 } 891 }
862 ev.setCategories(defaultCategories); 892 ev.setCategories(defaultCategories);
863 ev.setStart( start ); 893 ev.setStart( start );
864 ev.setEnd( end ); 894 ev.setEnd( end );
865 895
866 e = new DateEntry( onMonday, ev, ampm, &newDlg ); 896 e = new DateEntry( onMonday, ev, ampm, &newDlg );
867 e->setAlarmEnabled( aPreset, presetTime, Event::Loud ); 897 e->setAlarmEnabled( aPreset, presetTime, Event::Loud );
868 sv->addChild( e ); 898 sv->addChild( e );
869#if defined(Q_WS_QWS) || defined(_WS_QWS_) 899#if defined(Q_WS_QWS) || defined(_WS_QWS_)
870 newDlg.showMaximized(); 900 newDlg.showMaximized();
871#endif 901#endif
872 while (newDlg.exec()) { 902 while (newDlg.exec()) {
873 ev = e->event(); 903 ev = e->event();
874 ev.assignUid(); 904 ev.assignUid();
875 QString error = checkEvent( ev ); 905 QString error = checkEvent( ev );
876 if ( !error.isNull() ) { 906 if ( !error.isNull() ) {
877 if ( QMessageBox::warning( this, tr("Error!"), error, tr("Fix it"), tr("Continue"), 0, 0, 1 ) == 0 ) 907 if ( QMessageBox::warning( this, tr("Error!"), error, tr("Fix it"), tr("Continue"), 0, 0, 1 ) == 0 )
878 continue; 908 continue;
879 } 909 }
880 db->addEvent( ev ); 910 db->addEvent( ev );
881 emit newEvent(); 911 emit newEvent();
882 break; 912 break;
883 } 913 }
884} 914}
885 915
886void DateBook::setDocument( const QString &filename ) 916void DateBook::setDocument( const QString &filename )
887{ 917{
888 if ( filename.find(".vcs") != int(filename.length()) - 4 ) return; 918 if ( filename.find(".vcs") != int(filename.length()) - 4 ) return;
889 919
890 QValueList<Event> tl = Event::readVCalendar( filename ); 920 QValueList<Event> tl = Event::readVCalendar( filename );
891 for( QValueList<Event>::Iterator it = tl.begin(); it != tl.end(); ++it ) { 921 for( QValueList<Event>::Iterator it = tl.begin(); it != tl.end(); ++it ) {
892 db->addEvent( *it ); 922 db->addEvent( *it );
893 } 923 }
894} 924}
895 925
896static const char * beamfile = "/tmp/obex/event.vcs"; 926static const char * beamfile = "/tmp/obex/event.vcs";
897 927
898void DateBook::beamEvent( const Event &e ) 928void DateBook::beamEvent( const Event &e )
899{ 929{
900 qDebug("trying to beamn"); 930 qDebug("trying to beamn");
901 unlink( beamfile ); // delete if exists 931 unlink( beamfile ); // delete if exists
902 mkdir("/tmp/obex/", 0755); 932 mkdir("/tmp/obex/", 0755);
903 Event::writeVCalendar( beamfile, e ); 933 Event::writeVCalendar( beamfile, e );
904 Ir *ir = new Ir( this ); 934 Ir *ir = new Ir( this );
905 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); 935 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
906 QString description = e.description(); 936 QString description = e.description();
907 ir->send( beamfile, description, "text/x-vCalendar" ); 937 ir->send( beamfile, description, "text/x-vCalendar" );
908} 938}
909 939
910void DateBook::beamDone( Ir *ir ) 940void DateBook::beamDone( Ir *ir )
911{ 941{
912 delete ir; 942 delete ir;
913 unlink( beamfile ); 943 unlink( beamfile );
914} 944}
915 945
916void DateBook::slotFind() 946void DateBook::slotFind()
917{ 947{
918 // move it to the day view... 948 // move it to the day view...
919 viewDay(); 949 viewDay();
920 FindDialog frmFind( "Calendar", this ); 950 FindDialog frmFind( "Calendar", this ); // no tr needed
921 frmFind.setUseDate( true ); 951 frmFind.setUseDate( true );
922 frmFind.setDate( currentDate() ); 952 frmFind.setDate( currentDate() );
923 QObject::connect( &frmFind, 953 QObject::connect( &frmFind,
924 SIGNAL(signalFindClicked(const QString&, const QDate&, 954 SIGNAL(signalFindClicked(const QString&, const QDate&,
925 bool, bool, int)), 955 bool, bool, int)),
926 this, 956 this,
927 SLOT(slotDoFind(const QString&, const QDate&, 957 SLOT(slotDoFind(const QString&, const QDate&,
928 bool, bool, int)) ); 958 bool, bool, int)) );
929 QObject::connect( this, 959 QObject::connect( this,
930 SIGNAL(signalNotFound()), 960 SIGNAL(signalNotFound()),
931 &frmFind, 961 &frmFind,
932 SLOT(slotNotFound()) ); 962 SLOT(slotNotFound()) );
933 QObject::connect( this, 963 QObject::connect( this,
934 SIGNAL(signalWrapAround()), 964 SIGNAL(signalWrapAround()),
935 &frmFind, 965 &frmFind,
936 SLOT(slotWrapAround()) ); 966 SLOT(slotWrapAround()) );
937 frmFind.move(0,0); 967 frmFind.move(0,0);
938 frmFind.exec(); 968 frmFind.exec();
939 inSearch = false; 969 inSearch = false;
940} 970}
941 971
942bool catComp( QArray<int> cats, int category ) 972bool catComp( QArray<int> cats, int category )
943{ 973{
944 bool returnMe; 974 bool returnMe;
945 int i, 975 int i,
946 count; 976 count;
947 977
948 count = int(cats.count()); 978 count = int(cats.count());
949 returnMe = false; 979 returnMe = false;
950 if ( (category == -1 && count == 0) || category == -2 ) 980 if ( (category == -1 && count == 0) || category == -2 )
951 returnMe = true; 981 returnMe = true;
952 else { 982 else {
953 for ( i = 0; i < count; i++ ) { 983 for ( i = 0; i < count; i++ ) {
954 if ( category == cats[i] ) { 984 if ( category == cats[i] ) {
955 returnMe = true; 985 returnMe = true;
956 break; 986 break;
957 } 987 }
958 } 988 }
959 } 989 }
960 return returnMe; 990 return returnMe;
961} 991}
962 992
963 993
964void DateBook::slotDoFind( const QString& txt, const QDate &dt, 994void DateBook::slotDoFind( const QString& txt, const QDate &dt,
965 bool caseSensitive, bool /*backwards*/, 995 bool caseSensitive, bool /*backwards*/,
966 int category ) 996 int category )
967{ 997{
968 QDateTime dtEnd( QDate(3001, 1, 1), QTime(0, 0, 0) ), 998 QDateTime dtEnd( QDate(3001, 1, 1), QTime(0, 0, 0) ),
969 next; 999 next;
970 1000
971 QRegExp r( txt ); 1001 QRegExp r( txt );
972 r.setCaseSensitive( caseSensitive ); 1002 r.setCaseSensitive( caseSensitive );
973 1003
974 1004
975 static Event rev, 1005 static Event rev,
976 nonrev; 1006 nonrev;
977 if ( !inSearch ) { 1007 if ( !inSearch ) {
978 rev.setStart( QDateTime(QDate(1960, 1, 1), QTime(0, 0, 0)) ); 1008 rev.setStart( QDateTime(QDate(1960, 1, 1), QTime(0, 0, 0)) );
979 nonrev.setStart( rev.start() ); 1009 nonrev.setStart( rev.start() );
980 inSearch = true; 1010 inSearch = true;
981 } 1011 }
982 static QDate searchDate = dt; 1012 static QDate searchDate = dt;
983 static bool wrapAround = true; 1013 static bool wrapAround = true;
984 bool candidtate; 1014 bool candidtate;
diff --git a/core/pim/datebook/datebook.pro b/core/pim/datebook/datebook.pro
index e8e0a98..ae30c8d 100644
--- a/core/pim/datebook/datebook.pro
+++ b/core/pim/datebook/datebook.pro
@@ -1,61 +1,63 @@
1 TEMPLATE= app 1 TEMPLATE= app
2 CONFIG += qt warn_on release 2 CONFIG += qt warn_on release
3 DESTDIR = $(OPIEDIR)/bin 3 DESTDIR = $(OPIEDIR)/bin
4 HEADERS= datebookday.h \ 4 HEADERS= datebookday.h \
5 datebook.h \ 5 datebook.h \
6 dateentryimpl.h \ 6 dateentryimpl.h \
7 datebookdayheaderimpl.h \ 7 datebookdayheaderimpl.h \
8 datebooksettings.h \ 8 datebooksettings.h \
9 datebookweek.h \ 9 datebookweek.h \
10 datebookweeklst.h \ 10 datebookweeklst.h \
11 datebookweekheaderimpl.h \ 11 datebookweekheaderimpl.h \
12 repeatentry.h \ 12 repeatentry.h \
13 noteentryimpl.h \ 13 noteentryimpl.h \
14 onoteedit.h 14 onoteedit.h \
15 datebookdayallday.h
15 SOURCES= main.cpp \ 16 SOURCES= main.cpp \
16 datebookday.cpp \ 17 datebookday.cpp \
17 datebook.cpp \ 18 datebook.cpp \
18 dateentryimpl.cpp \ 19 dateentryimpl.cpp \
19 datebookdayheaderimpl.cpp \ 20 datebookdayheaderimpl.cpp \
20 datebooksettings.cpp \ 21 datebooksettings.cpp \
21 datebookweek.cpp \ 22 datebookweek.cpp \
22 datebookweeklst.cpp \ 23 datebookweeklst.cpp \
23 datebookweekheaderimpl.cpp \ 24 datebookweekheaderimpl.cpp \
24 repeatentry.cpp \ 25 repeatentry.cpp \
25 noteentryimpl.cpp \ 26 noteentryimpl.cpp \
26 onoteedit.cpp 27 onoteedit.cpp \
28 datebookdayallday.cpp
27 INTERFACES= dateentry.ui \ 29 INTERFACES= dateentry.ui \
28 datebookdayheader.ui \ 30 datebookdayheader.ui \
29 datebookweekheader.ui \ 31 datebookweekheader.ui \
30 datebookweeklstheader.ui \ 32 datebookweeklstheader.ui \
31 datebookweeklstdayhdr.ui \ 33 datebookweeklstdayhdr.ui \
32 repeatentrybase.ui \ 34 repeatentrybase.ui \
33 datebooksettingsbase.ui \ 35 datebooksettingsbase.ui \
34 noteentry.ui 36 noteentry.ui
35INCLUDEPATH += $(OPIEDIR)/include 37INCLUDEPATH += $(OPIEDIR)/include
36 DEPENDPATH+= $(OPIEDIR)/include 38 DEPENDPATH+= $(OPIEDIR)/include
37LIBS += -lqpe -lopie 39LIBS += -lqpe -lopie
38 TARGET = datebook 40 TARGET = datebook
39 41
40TRANSLATIONS = ../../../i18n/de/datebook.ts \ 42TRANSLATIONS = ../../../i18n/de/datebook.ts \
41 ../../../i18n/nl/datebook.ts \ 43 ../../../i18n/nl/datebook.ts \
42 ../../../i18n/xx/datebook.ts \ 44 ../../../i18n/xx/datebook.ts \
43 ../../../i18n/en/datebook.ts \ 45 ../../../i18n/en/datebook.ts \
44 ../../../i18n/es/datebook.ts \ 46 ../../../i18n/es/datebook.ts \
45 ../../../i18n/fr/datebook.ts \ 47 ../../../i18n/fr/datebook.ts \
46 ../../../i18n/hu/datebook.ts \ 48 ../../../i18n/hu/datebook.ts \
47 ../../../i18n/ja/datebook.ts \ 49 ../../../i18n/ja/datebook.ts \
48 ../../../i18n/ko/datebook.ts \ 50 ../../../i18n/ko/datebook.ts \
49 ../../../i18n/no/datebook.ts \ 51 ../../../i18n/no/datebook.ts \
50 ../../../i18n/pl/datebook.ts \ 52 ../../../i18n/pl/datebook.ts \
51 ../../../i18n/pt/datebook.ts \ 53 ../../../i18n/pt/datebook.ts \
52 ../../../i18n/pt_BR/datebook.ts \ 54 ../../../i18n/pt_BR/datebook.ts \
53 ../../../i18n/sl/datebook.ts \ 55 ../../../i18n/sl/datebook.ts \
54 ../../../i18n/zh_CN/datebook.ts \ 56 ../../../i18n/zh_CN/datebook.ts \
55 ../../../i18n/it/datebook.ts \ 57 ../../../i18n/it/datebook.ts \
56 ../../../i18n/zh_TW/datebook.ts \ 58 ../../../i18n/zh_TW/datebook.ts \
57 ../../../i18n/da/datebook.ts 59 ../../../i18n/da/datebook.ts
58 60
59 61
60 62
61include ( $(OPIEDIR)/include.pro ) 63include ( $(OPIEDIR)/include.pro )
diff --git a/core/pim/datebook/datebookday.cpp b/core/pim/datebook/datebookday.cpp
index 0b213e9..f4008e9 100644
--- a/core/pim/datebook/datebookday.cpp
+++ b/core/pim/datebook/datebookday.cpp
@@ -1,87 +1,88 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qtopia Environment. 4** This file is part of Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#include <qmessagebox.h> 20#include <qmessagebox.h>
21 21
22#include "datebookday.h" 22#include "datebookday.h"
23#include "datebookdayheaderimpl.h" 23#include "datebookdayheaderimpl.h"
24#include "datebookdayallday.h"
24 25
25#include <qpe/datebookdb.h> 26#include <qpe/datebookdb.h>
26#include <qpe/resource.h> 27#include <qpe/resource.h>
27#include <qpe/event.h> 28#include <qpe/event.h>
28#include <qpe/qpeapplication.h> 29#include <qpe/qpeapplication.h>
29#include <qpe/timestring.h> 30#include <qpe/timestring.h>
30#include <qpe/qpedebug.h> 31#include <qpe/qpedebug.h>
31#include <qpe/ir.h> 32#include <qpe/ir.h>
32 33
33#include <qheader.h> 34#include <qheader.h>
34#include <qdatetime.h> 35#include <qdatetime.h>
35#include <qpainter.h> 36#include <qpainter.h>
36#include <qsimplerichtext.h> 37#include <qsimplerichtext.h>
37#include <qpopupmenu.h> 38#include <qpopupmenu.h>
38#include <qtextcodec.h> 39#include <qtextcodec.h>
39#include <qpalette.h> 40#include <qpalette.h>
40 41
41#include <qlineedit.h> 42#include <qlineedit.h>
42 43
43#include <qtimer.h> 44#include <qtimer.h>
44 45
45DateBookDayView::DateBookDayView( bool whichClock, QWidget *parent, const char *name ) 46DateBookDayView::DateBookDayView( bool whichClock, QWidget *parent, const char *name )
46 : QTable( 24, 1, parent, name ), ampm( whichClock ), currDate( QDate::currentDate() ) 47 : QTable( 24, 1, parent, name ), ampm( whichClock ), currDate( QDate::currentDate() )
47{ 48{
48 enableClipper(TRUE); 49 enableClipper(TRUE);
49 setTopMargin( 0 ); 50 setTopMargin( 0 );
50 horizontalHeader()->hide(); 51 horizontalHeader()->hide();
51 setLeftMargin(38); 52 setLeftMargin(38);
52 setColumnStretchable( 0, TRUE ); 53 setColumnStretchable( 0, TRUE );
53 setHScrollBarMode( QScrollView::AlwaysOff ); 54 setHScrollBarMode( QScrollView::AlwaysOff );
54 verticalHeader()->setPalette(white); 55 verticalHeader()->setPalette(white);
55 verticalHeader()->setResizeEnabled(FALSE); 56 verticalHeader()->setResizeEnabled(FALSE);
56 setSelectionMode( Single ); 57 setSelectionMode( Single );
57 58
58 // get rid of being able to edit things... 59 // get rid of being able to edit things...
59 QTableItem *tmp; 60 QTableItem *tmp;
60 int row; 61 int row;
61 for ( row = 0; row < numRows(); row++ ) { 62 for ( row = 0; row < numRows(); row++ ) {
62 tmp = new QTableItem( this, QTableItem::Never, QString::null); 63 tmp = new QTableItem( this, QTableItem::Never, QString::null);
63 setItem( row, 0, tmp ); 64 setItem( row, 0, tmp );
64 //setRowHeight( row, 40); 65 //setRowHeight( row, 40);
65 } 66 }
66 67
67 initHeader(); 68 initHeader();
68 QObject::connect( qApp, SIGNAL(clockChanged(bool)), this, SLOT(slotChangeClock(bool)) ); 69 QObject::connect( qApp, SIGNAL(clockChanged(bool)), this, SLOT(slotChangeClock(bool)) );
69} 70}
70 71
71void DateBookDayView::initHeader() 72void DateBookDayView::initHeader()
72{ 73{
73 QString strTmp; 74 QString strTmp;
74 for ( int i = 0; i < 24; ++i ) { 75 for ( int i = 0; i < 24; ++i ) {
75 if ( ampm ) { 76 if ( ampm ) {
76 if ( i == 0 ) 77 if ( i == 0 )
77 strTmp = QString::number(12) + ":00"; 78 strTmp = QString::number(12) + ":00";
78 else if ( i == 12 ) 79 else if ( i == 12 )
79 strTmp = QString::number(12) + tr(":00p"); 80 strTmp = QString::number(12) + tr(":00p");
80 else if ( i > 12 ) 81 else if ( i > 12 )
81 strTmp = QString::number( i - 12 ) + tr(":00p"); 82 strTmp = QString::number( i - 12 ) + tr(":00p");
82 else 83 else
83 strTmp = QString::number(i) + ":00"; 84 strTmp = QString::number(i) + ":00";
84 } else { 85 } else {
85 if ( i < 10 ) 86 if ( i < 10 )
86 strTmp = "0" + QString::number(i) + ":00"; 87 strTmp = "0" + QString::number(i) + ":00";
87 else 88 else
@@ -150,316 +151,346 @@ void DateBookDayView::resizeEvent( QResizeEvent *e )
150 columnWidthChanged( 0 ); 151 columnWidthChanged( 0 );
151 emit sigColWidthChanged(); 152 emit sigColWidthChanged();
152} 153}
153 154
154void DateBookDayView::keyPressEvent( QKeyEvent *e ) 155void DateBookDayView::keyPressEvent( QKeyEvent *e )
155{ 156{
156 QString txt = e->text(); 157 QString txt = e->text();
157 if ( !txt.isNull() && txt[0] > ' ' && e->key() < 0x1000 ) { 158 if ( !txt.isNull() && txt[0] > ' ' && e->key() < 0x1000 ) {
158 // we this is some sort of thing we know about... 159 // we this is some sort of thing we know about...
159 e->accept(); 160 e->accept();
160 emit sigCapturedKey( txt ); 161 emit sigCapturedKey( txt );
161 } else { 162 } else {
162 // I don't know what this key is, do you? 163 // I don't know what this key is, do you?
163 e->ignore(); 164 e->ignore();
164 } 165 }
165} 166}
166 167
167void DateBookDayView::setRowStyle( int style ) 168void DateBookDayView::setRowStyle( int style )
168{ 169{
169 if (style<0) style = 0; 170 if (style<0) style = 0;
170 171
171 for (int i=0; i<numRows(); i++) 172 for (int i=0; i<numRows(); i++)
172 setRowHeight(i, style*10+20); 173 setRowHeight(i, style*10+20);
173} 174}
174 175
175void DateBookDayView::contentsMouseReleaseEvent( QMouseEvent *e ) 176void DateBookDayView::contentsMouseReleaseEvent( QMouseEvent *e )
176{ 177{
177 int sh=99,eh=-1; 178 int sh=99,eh=-1;
178 179
179 for(int i=0;i<this->numSelections();i++) { 180 for(int i=0;i<this->numSelections();i++) {
180 QTableSelection sel = this->selection( i ); 181 QTableSelection sel = this->selection( i );
181 sh = QMIN(sh,sel.topRow()); 182 sh = QMIN(sh,sel.topRow());
182 eh = QMAX(sh,sel.bottomRow()+1); 183 eh = QMAX(sh,sel.bottomRow()+1);
183 } 184 }
184 if (sh > 23 || eh < 1) { 185 if (sh > 23 || eh < 1) {
185 sh=8; 186 sh=8;
186 eh=9; 187 eh=9;
187 } 188 }
188 189
189 quickLineEdit=new DateBookDayViewQuickLineEdit(QDateTime(currDate,QTime(sh,0,0,0)),QDateTime(currDate,QTime(eh,0,0,0)),this->viewport(),"quickedit"); 190 quickLineEdit=new DateBookDayViewQuickLineEdit(QDateTime(currDate,QTime(sh,0,0,0)),QDateTime(currDate,QTime(eh,0,0,0)),this->viewport(),"quickedit");
190 quickLineEdit->setGeometry(0,0,this->columnWidth(0)-1,this->rowHeight(0)); 191 quickLineEdit->setGeometry(0,0,this->columnWidth(0)-1,this->rowHeight(0));
191 this->moveChild(quickLineEdit,0,sh*this->rowHeight(0)); 192 this->moveChild(quickLineEdit,0,sh*this->rowHeight(0));
192 quickLineEdit->setFocus(); 193 quickLineEdit->setFocus();
193 quickLineEdit->show(); 194 quickLineEdit->show();
194} 195}
195 196
196//=========================================================================== 197//===========================================================================
197 198
198DateBookDayViewQuickLineEdit::DateBookDayViewQuickLineEdit(const QDateTime &start, const QDateTime &end,QWidget * parent, const char *name) : QLineEdit(parent,name) 199DateBookDayViewQuickLineEdit::DateBookDayViewQuickLineEdit(const QDateTime &start, const QDateTime &end,QWidget * parent, const char *name) : QLineEdit(parent,name)
199{ 200{
200 active=1; 201 active=1;
201 quickEvent.setStart(start); 202 quickEvent.setStart(start);
202 quickEvent.setEnd(end); 203 quickEvent.setEnd(end);
203 connect(this,SIGNAL(returnPressed()),this,SLOT(slotReturnPressed())); 204 connect(this,SIGNAL(returnPressed()),this,SLOT(slotReturnPressed()));
204} 205}
205 206
206void DateBookDayViewQuickLineEdit::slotReturnPressed() 207void DateBookDayViewQuickLineEdit::slotReturnPressed()
207{ 208{
208 if(active && (!this->text().isEmpty())) {// Fix to avoid having this event beeing added multiple times. 209 if(active && (!this->text().isEmpty())) {// Fix to avoid having this event beeing added multiple times.
209 quickEvent.setDescription(this->text()); 210 quickEvent.setDescription(this->text());
210 connect(this,SIGNAL(insertEvent(const Event &)),this->topLevelWidget(),SLOT(insertEvent(const Event &))); 211 connect(this,SIGNAL(insertEvent(const Event &)),this->topLevelWidget(),SLOT(insertEvent(const Event &)));
211 emit(insertEvent(quickEvent)); 212 emit(insertEvent(quickEvent));
212 active=0; 213 active=0;
213 } 214 }
214 this->close(true);// Close and also delete this widget 215 /* we need to return to this object.. */
216 QTimer::singleShot(500, this, SLOT(finallyCallClose()) );// Close and also delete this widget
217}
218void DateBookDayViewQuickLineEdit::finallyCallClose() {
219 close(true); // also deletes this widget...
215} 220}
216 221
217void DateBookDayViewQuickLineEdit::focusOutEvent ( QFocusEvent * e ) 222void DateBookDayViewQuickLineEdit::focusOutEvent ( QFocusEvent * e )
218{ 223{
219 slotReturnPressed(); // Reuse code to add event and close this widget. 224 slotReturnPressed(); // Reuse code to add event and close this widget.
220} 225}
221 226
222//=========================================================================== 227//===========================================================================
223 228
224DateBookDay::DateBookDay( bool ampm, bool startOnMonday, DateBookDB *newDb, QWidget *parent, const char *name ) 229DateBookDay::DateBookDay( bool ampm, bool startOnMonday, DateBookDB *newDb, QWidget *parent, const char *name )
225 : QVBox( parent, name ), currDate( QDate::currentDate() ), db( newDb ), startTime( 0 ) 230 : QVBox( parent, name ), currDate( QDate::currentDate() ), db( newDb ), startTime( 0 )
226{ 231{
227 widgetList.setAutoDelete( true ); 232 widgetList.setAutoDelete( true );
228 header = new DateBookDayHeader( startOnMonday, this, "day header" ); 233 header = new DateBookDayHeader( startOnMonday, this, "day header" );
229 header->setDate( currDate.year(), currDate.month(), currDate.day() ); 234 header->setDate( currDate.year(), currDate.month(), currDate.day() );
235
236 m_allDays = new DatebookdayAllday(newDb, this, "all day event list" );
237 m_allDays->hide();
238
230 view = new DateBookDayView( ampm, this, "day view" ); 239 view = new DateBookDayView( ampm, this, "day view" );
231 240
232 connect( header, SIGNAL( dateChanged( int, int, int ) ), this, SLOT( dateChanged( int, int, int ) ) ); 241 connect( header, SIGNAL( dateChanged( int, int, int ) ), this, SLOT( dateChanged( int, int, int ) ) );
233 connect( header, SIGNAL( dateChanged( int, int, int ) ), view, SLOT( slotDateChanged( int, int, int ) ) ); 242 connect( header, SIGNAL( dateChanged( int, int, int ) ), view, SLOT( slotDateChanged( int, int, int ) ) );
234 connect( view, SIGNAL( sigColWidthChanged() ), this, SLOT( slotColWidthChanged() ) ); 243 connect( view, SIGNAL( sigColWidthChanged() ), this, SLOT( slotColWidthChanged() ) );
235 connect( qApp, SIGNAL(weekChanged(bool)), this, SLOT(slotWeekChanged(bool)) ); 244 connect( qApp, SIGNAL(weekChanged(bool)), this, SLOT(slotWeekChanged(bool)) );
236 connect( view, SIGNAL(sigCapturedKey(const QString &)), this, SIGNAL(sigNewEvent(const QString&)) ); 245 connect( view, SIGNAL(sigCapturedKey(const QString &)), this, SIGNAL(sigNewEvent(const QString&)) );
237 246
238 QTimer *timer = new QTimer( this ); 247 QTimer *timer = new QTimer( this );
239 248
240 connect( timer, SIGNAL(timeout()), this, SLOT(updateView()) );//connect timer for updating timeMarker & daywidgetcolors 249 connect( timer, SIGNAL(timeout()), this, SLOT(updateView()) );//connect timer for updating timeMarker & daywidgetcolors
241 timer->start( 1000*60*5, FALSE ); //update every 5min 250 timer->start( 1000*60*5, FALSE ); //update every 5min
242 251
243 selectedWidget = 0; 252 selectedWidget = 0;
244 253
245 timeMarker = new DateBookDayTimeMarker( this ); 254 timeMarker = new DateBookDayTimeMarker( this );
246 timeMarker->setTime( QTime::currentTime() ); 255 timeMarker->setTime( QTime::currentTime() );
247 rowStyle = -1; // initialize with bogus values 256 rowStyle = -1; // initialize with bogus values
257 jumpToCurTime = false;
248} 258}
249 259
250void DateBookDay::setJumpToCurTime( bool bJump ) 260void DateBookDay::setJumpToCurTime( bool bJump )
251{ 261{
252 jumpToCurTime = bJump; 262 jumpToCurTime = bJump;
253} 263}
254 264
255void DateBookDay::setRowStyle( int style ) 265void DateBookDay::setRowStyle( int style )
256{ 266{
257 if (rowStyle != style) view->setRowStyle( style ); 267 if (rowStyle != style) view->setRowStyle( style );
258 rowStyle = style; 268 rowStyle = style;
259} 269}
260 270
261void DateBookDay::updateView( void ) 271void DateBookDay::updateView( void )
262{ 272{
263 timeMarker->setTime( QTime::currentTime() ); 273 timeMarker->setTime( QTime::currentTime() );
264 //need to find a way to update all DateBookDayWidgets 274 //need to find a way to update all DateBookDayWidgets
265} 275}
266 276
267void DateBookDay::setSelectedWidget( DateBookDayWidget *w ) 277void DateBookDay::setSelectedWidget( DateBookDayWidget *w )
268{ 278{
269 selectedWidget = w; 279 selectedWidget = w;
270} 280}
271 281
272DateBookDayWidget * DateBookDay::getSelectedWidget( void ) 282DateBookDayWidget * DateBookDay::getSelectedWidget( void )
273{ 283{
274 return selectedWidget; 284 return selectedWidget;
275} 285}
276 286
277void DateBookDay::selectedDates( QDateTime &start, QDateTime &end ) 287void DateBookDay::selectedDates( QDateTime &start, QDateTime &end )
278{ 288{
279 start.setDate( currDate ); 289 start.setDate( currDate );
280 end.setDate( currDate ); 290 end.setDate( currDate );
281 291
282 int sh=99,eh=-1; 292 int sh=99,eh=-1;
283 293
284 int n = dayView()->numSelections(); 294 int n = dayView()->numSelections();
285 295
286 for (int i=0; i<n; i++) { 296 for (int i=0; i<n; i++) {
287 QTableSelection sel = dayView()->selection( i ); 297 QTableSelection sel = dayView()->selection( i );
288 sh = QMIN(sh,sel.topRow()); 298 sh = QMIN(sh,sel.topRow());
289 eh = QMAX(sh,sel.bottomRow()+1); 299 eh = QMAX(sh,sel.bottomRow()+1);
290 } 300 }
291 301
292 if (sh > 23 || eh < 1) { 302 if (sh > 23 || eh < 1) {
293 sh=8; 303 sh=8;
294 eh=9; 304 eh=9;
295 } 305 }
296 306
297 start.setTime( QTime( sh, 0, 0 ) ); 307 start.setTime( QTime( sh, 0, 0 ) );
298 end.setTime( QTime( eh, 0, 0 ) ); 308 end.setTime( QTime( eh, 0, 0 ) );
299} 309}
300 310
301void DateBookDay::setDate( int y, int m, int d ) 311void DateBookDay::setDate( int y, int m, int d )
302{ 312{
303 header->setDate( y, m, d ); 313 header->setDate( y, m, d );
304 selectedWidget = 0; 314 selectedWidget = 0;
305} 315}
306 316
307void DateBookDay::setDate( QDate d) 317void DateBookDay::setDate( QDate d)
308{ 318{
309 header->setDate( d.year(), d.month(), d.day() ); 319 header->setDate( d.year(), d.month(), d.day() );
310 selectedWidget = 0; 320 selectedWidget = 0;
311} 321}
312 322
313void DateBookDay::dateChanged( int y, int m, int d ) 323void DateBookDay::dateChanged( int y, int m, int d )
314{ 324{
315 QDate date( y, m, d ); 325 QDate date( y, m, d );
316 if ( currDate == date ) 326 if ( currDate == date )
317 return; 327 return;
318 currDate.setYMD( y, m, d ); 328 currDate.setYMD( y, m, d );
319 relayoutPage(); 329 relayoutPage();
320 dayView()->clearSelection(); 330 dayView()->clearSelection();
321 QTableSelection ts; 331 QTableSelection ts;
322 332
323 if (jumpToCurTime && this->date() == QDate::currentDate()) 333 if (jumpToCurTime && this->date() == QDate::currentDate())
324 { 334 {
325 ts.init( QTime::currentTime().hour(), 0); 335 ts.init( QTime::currentTime().hour(), 0);
326 ts.expandTo( QTime::currentTime().hour(), 0); 336 ts.expandTo( QTime::currentTime().hour(), 0);
327 } else { 337 } else {
328 ts.init( startTime, 0 ); 338 ts.init( startTime, 0 );
329 ts.expandTo( startTime, 0 ); 339 ts.expandTo( startTime, 0 );
330 } 340 }
331 341
332 dayView()->addSelection( ts ); 342 dayView()->addSelection( ts );
333 selectedWidget = 0; 343 selectedWidget = 0;
334} 344}
335 345
336void DateBookDay::redraw() 346void DateBookDay::redraw()
337{ 347{
338 if ( isUpdatesEnabled() ) 348 if ( isUpdatesEnabled() )
339 relayoutPage(); 349 relayoutPage();
340} 350}
341 351
342void DateBookDay::getEvents() 352void DateBookDay::getEvents()
343{ 353{
344 widgetList.clear(); 354 widgetList.clear();
345 355
356 /* clear the AllDay List */
357 m_allDays->hide(); // just in case
358 m_allDays->removeAllEvents();
359
346 QValueList<EffectiveEvent> eventList = db->getEffectiveEvents( currDate, currDate ); 360 QValueList<EffectiveEvent> eventList = db->getEffectiveEvents( currDate, currDate );
347 QValueListIterator<EffectiveEvent> it; 361 QValueListIterator<EffectiveEvent> it;
362 QObject* object = 0;
348 for ( it = eventList.begin(); it != eventList.end(); ++it ) { 363 for ( it = eventList.begin(); it != eventList.end(); ++it ) {
349 EffectiveEvent ev=*it; 364 EffectiveEvent ev=*it;
350 if(!((ev.end().hour()==0) && (ev.end().minute()==0) && (ev.startDate()!=ev.date()))) {// Skip events ending at 00:00 starting at another day. 365 if(!((ev.end().hour()==0) && (ev.end().minute()==0) && (ev.startDate()!=ev.date()))) {// Skip events ending at 00:00 starting at another day.
366 if (ev.event().type() == Event::AllDay ) {
367 object = m_allDays->addEvent( ev );
368 if (!object)
369 continue;
370 }else {
351 DateBookDayWidget* w = new DateBookDayWidget( *it, this ); 371 DateBookDayWidget* w = new DateBookDayWidget( *it, this );
352 connect( w, SIGNAL( deleteMe( const Event & ) ), this, SIGNAL( removeEvent( const Event & ) ) ); 372 widgetList.append( w );
353 connect( w, SIGNAL( duplicateMe( const Event & ) ), this, SIGNAL( duplicateEvent( const Event & ) ) ); 373 object = w;
354 connect( w, SIGNAL( editMe( const Event & ) ), this, SIGNAL( editEvent( const Event & ) ) ); 374 }
355 connect( w, SIGNAL( beamMe( const Event & ) ), this, SIGNAL( beamEvent( const Event & ) ) ); 375
356 widgetList.append( w ); 376 connect( object, SIGNAL( deleteMe( const Event & ) ), this, SIGNAL( removeEvent( const Event & ) ) );
377 connect( object, SIGNAL( duplicateMe( const Event & ) ), this, SIGNAL( duplicateEvent( const Event & ) ) );
378 connect( object, SIGNAL( editMe( const Event & ) ), this, SIGNAL( editEvent( const Event & ) ) );
379 connect( object, SIGNAL( beamMe( const Event & ) ), this, SIGNAL( beamEvent( const Event & ) ) );
380
357 } 381 }
358 } 382 }
359} 383}
360 384
361static int place( const DateBookDayWidget *item, bool *used, int maxn ) 385static int place( const DateBookDayWidget *item, bool *used, int maxn )
362{ 386{
363 int place = 0; 387 int place = 0;
364 int start = item->event().start().hour(); 388 int start = item->event().start().hour();
365 QTime e = item->event().end(); 389 QTime e = item->event().end();
366 int end = e.hour(); 390 int end = e.hour();
367 if ( e.minute() < 5 ) 391 if ( e.minute() < 5 )
368 end--; 392 end--;
369 if ( end < start ) 393 if ( end < start )
370 end = start; 394 end = start;
371 while ( place < maxn ) { 395 while ( place < maxn ) {
372 bool free = TRUE; 396 bool free = TRUE;
373 int s = start; 397 int s = start;
374 while( s <= end ) { 398 while( s <= end ) {
375 if ( used[10*s+place] ) { 399 if ( used[10*s+place] ) {
376 free = FALSE; 400 free = FALSE;
377 break; 401 break;
378 } 402 }
379 s++; 403 s++;
380 } 404 }
381 if ( free ) 405 if ( free )
382 break; 406 break;
383 place++; 407 place++;
384 } 408 }
385 if ( place == maxn ) { 409 if ( place == maxn ) {
386 return -1; 410 return -1;
387 } 411 }
388 while( start <= end ) { 412 while( start <= end ) {
389 used[10*start+place] = TRUE; 413 used[10*start+place] = TRUE;
390 start++; 414 start++;
391 } 415 }
392 return place; 416 return place;
393} 417}
394 418
395 419
396void DateBookDay::relayoutPage( bool fromResize ) 420void DateBookDay::relayoutPage( bool fromResize )
397{ 421{
398 setUpdatesEnabled( FALSE ); 422 setUpdatesEnabled( FALSE );
399 if ( !fromResize ) 423 if ( !fromResize ) {
400 getEvents(); // no need we already have them! 424 getEvents(); // no need we already have them!
401 425
426 if (m_allDays->items() > 0 )
427 m_allDays->show();
428 /*
429 * else if ( m_allDays->items() == 0 ) already hide in getEvents
430 */
431 }
432
402 widgetList.sort(); 433 widgetList.sort();
403 //sorts the widgetList by the heights of the widget so that the tallest widgets are at the beginning 434 //sorts the widgetList by the heights of the widget so that the tallest widgets are at the beginning
404 //this is needed for the simple algo below to work correctly, otherwise some widgets would be drawn outside the view 435 //this is needed for the simple algo below to work correctly, otherwise some widgets would be drawn outside the view
405 436
406 int wCount = widgetList.count(); 437 int wCount = widgetList.count();
407 int wid = view->columnWidth(0)-1; 438 int wid = view->columnWidth(0)-1;
408 int wd; 439 int wd;
409 int n = 1; 440 int n = 1;
410 441
411 QArray<int> anzIntersect(wCount); //this stores the number of maximal intersections of each widget 442 QArray<int> anzIntersect(wCount); //this stores the number of maximal intersections of each widget
412 443
413 for (int i = 0; i<wCount; anzIntersect[i] = 1, i++); 444 for (int i = 0; i<wCount; anzIntersect[i] = 1, i++);
414 445
415 if ( wCount < 20 ) { 446 if ( wCount < 20 ) {
416 447
417 QArray<QRect> geometries(wCount); 448 QArray<QRect> geometries(wCount);
418 for (int i = 0; i < wCount; geometries[i] = widgetList.at(i)->geometry(), i++);//stores geometry for each widget in vector 449 for (int i = 0; i < wCount; geometries[i] = widgetList.at(i)->geometry(), i++);//stores geometry for each widget in vector
419 450
420 for ( int i = 0; i < wCount; i++) { 451 for ( int i = 0; i < wCount; i++) {
421 QValueList<int> intersectedWidgets; 452 QValueList<int> intersectedWidgets;
422 453
423 //find all widgets intersecting with widgetList.at(i) 454 //find all widgets intersecting with widgetList.at(i)
424 for ( int j = 0; j < wCount; j++) { 455 for ( int j = 0; j < wCount; j++) {
425 if (i != j) 456 if (i != j)
426 if (geometries[j].intersects(geometries[i])) 457 if (geometries[j].intersects(geometries[i]))
427 intersectedWidgets.append(j); 458 intersectedWidgets.append(j);
428 } 459 }
429 460
430 //for each of these intersecting widgets find out how many widgets are they intersecting with 461 //for each of these intersecting widgets find out how many widgets are they intersecting with
431 for ( uint j = 0; j < intersectedWidgets.count(); j++) 462 for ( uint j = 0; j < intersectedWidgets.count(); j++)
432 { 463 {
433 QArray<int> inter(wCount); 464 QArray<int> inter(wCount);
434 inter[j]=1; 465 inter[j]=1;
435 466
436 if (intersectedWidgets[j] != -1) 467 if (intersectedWidgets[j] != -1)
437 for ( uint k = j; k < intersectedWidgets.count(); k++) { 468 for ( uint k = j; k < intersectedWidgets.count(); k++) {
438 if (j != k && intersectedWidgets[k] != -1) 469 if (j != k && intersectedWidgets[k] != -1)
439 if (geometries[intersectedWidgets[k]].intersects(geometries[intersectedWidgets[j]])) { 470 if (geometries[intersectedWidgets[k]].intersects(geometries[intersectedWidgets[j]])) {
440 inter[j]++; 471 inter[j]++;
441 intersectedWidgets[k] = -1; 472 intersectedWidgets[k] = -1;
442 } 473 }
443 if (inter[j] > anzIntersect[i]) anzIntersect[i] = inter[j] + 1; 474 if (inter[j] > anzIntersect[i]) anzIntersect[i] = inter[j] + 1;
444 } 475 }
445 } 476 }
446 if (anzIntersect[i] == 1 && intersectedWidgets.count()) anzIntersect[i]++; 477 if (anzIntersect[i] == 1 && intersectedWidgets.count()) anzIntersect[i]++;
447 } 478 }
448 479
449 480
450 for ( int i = 0; i < wCount; i++) { 481 for ( int i = 0; i < wCount; i++) {
451 DateBookDayWidget *w = widgetList.at(i); 482 DateBookDayWidget *w = widgetList.at(i);
452 QRect geom = w->geometry(); 483 QRect geom = w->geometry();
453 geom.setX( 0 ); 484 geom.setX( 0 );
454 wd = (view->columnWidth(0)-1) / anzIntersect[i] - (anzIntersect[i]>1?2:0); 485 wd = (view->columnWidth(0)-1) / anzIntersect[i] - (anzIntersect[i]>1?2:0);
455 geom.setWidth( wd ); 486 geom.setWidth( wd );
456 while ( intersects( w, geom ) ) { 487 while ( intersects( w, geom ) ) {
457 geom.moveBy( wd + 2 + 1, 0 ); 488 geom.moveBy( wd + 2 + 1, 0 );
458 } 489 }
459 w->setGeometry( geom ); 490 w->setGeometry( geom );
460 } 491 }
461 492
462 if (jumpToCurTime && this->date() == QDate::currentDate()) { 493 if (jumpToCurTime && this->date() == QDate::currentDate()) {
463 view->setContentsPos( 0, QTime::currentTime().hour() * view->rowHeight(0) ); //set listview to current hour 494 view->setContentsPos( 0, QTime::currentTime().hour() * view->rowHeight(0) ); //set listview to current hour
464 } else { 495 } else {
465 view->setContentsPos( 0, startTime * view->rowHeight(0) ); 496 view->setContentsPos( 0, startTime * view->rowHeight(0) );
@@ -669,154 +700,234 @@ void DateBookDayWidget::setEventText( QString& text ) {
669 text += "<b>" + tr("End") + "</b>: "; 700 text += "<b>" + tr("End") + "</b>: ";
670 text += TimeString::timeString( ev.event().end().time(), whichClock, FALSE ); 701 text += TimeString::timeString( ev.event().end().time(), whichClock, FALSE );
671 text += " - " + TimeString::longDateString( ev.endDate() ); 702 text += " - " + TimeString::longDateString( ev.endDate() );
672 } else { 703 } else {
673 text += "<b>" + tr("Time") + "</b>: "; 704 text += "<b>" + tr("Time") + "</b>: ";
674 text += TimeString::timeString( ev.start(), whichClock, FALSE ); 705 text += TimeString::timeString( ev.start(), whichClock, FALSE );
675 text += "<b>" + tr(" - ") + "</b>"; 706 text += "<b>" + tr(" - ") + "</b>";
676 text += TimeString::timeString( ev.end(), whichClock, FALSE ); 707 text += TimeString::timeString( ev.end(), whichClock, FALSE );
677 } 708 }
678} 709}
679 710
680DateBookDayWidget::~DateBookDayWidget() 711DateBookDayWidget::~DateBookDayWidget()
681{ 712{
682} 713}
683 714
684void DateBookDayWidget::paintEvent( QPaintEvent *e ) 715void DateBookDayWidget::paintEvent( QPaintEvent *e )
685{ 716{
686 QPainter p( this ); 717 QPainter p( this );
687 718
688 if (dateBook->getSelectedWidget() == this) { 719 if (dateBook->getSelectedWidget() == this) {
689 p.setBrush( QColor( 155, 240, 230 ) ); // selected item 720 p.setBrush( QColor( 155, 240, 230 ) ); // selected item
690 } else { 721 } else {
691 if (dateBook->date() == QDate::currentDate()) { 722 if (dateBook->date() == QDate::currentDate()) {
692 QTime curTime = QTime::currentTime(); 723 QTime curTime = QTime::currentTime();
693 if (ev.end() < curTime) { 724 if (ev.end() < curTime) {
694 p.setBrush( QColor( 180, 180, 180 ) ); // grey, inactive 725 p.setBrush( QColor( 180, 180, 180 ) ); // grey, inactive
695 } else { 726 } else {
696 //change color in dependence of the time till the event starts 727 //change color in dependence of the time till the event starts
697 int duration = curTime.secsTo(ev.start()); 728 int duration = curTime.secsTo(ev.start());
698 if (duration < 0) duration = 0; 729 if (duration < 0) duration = 0;
699 int colChange = duration*160/86400; //86400: secs per day, 160: max color shift 730 int colChange = duration*160/86400; //86400: secs per day, 160: max color shift
700 p.setBrush( QColor( 200-colChange, 200-colChange, 255 ) ); //blue 731 p.setBrush( QColor( 200-colChange, 200-colChange, 255 ) ); //blue
701 } 732 }
702 } else { 733 } else {
703 p.setBrush( QColor( 220, 220, 220 ) ); //light grey, inactive (not current date) 734 p.setBrush( QColor( 220, 220, 220 ) ); //light grey, inactive (not current date)
704 //perhaps make a distinction between future/past dates 735 //perhaps make a distinction between future/past dates
705 } 736 }
706 } 737 }
707 738
708 p.setPen( QColor(100, 100, 100) ); 739 p.setPen( QColor(100, 100, 100) );
709 p.drawRect(rect()); 740 p.drawRect(rect());
710 741
711 // p.drawRect(0,0, 5, height()); 742 // p.drawRect(0,0, 5, height());
712 743
713 int y = 0; 744 int y = 0;
714 int d = 0; 745 int d = 0;
715 746
716 if ( ev.event().hasAlarm() ) { 747 if ( ev.event().hasAlarm() ) {
717 p.drawPixmap( width() - 16, 0, Resource::loadPixmap( "bell" ) ); 748 p.drawPixmap( width() - 16, 0, Resource::loadPixmap( "bell" ) );
718 y = 20; 749 y = 20;
719 d = 20; 750 d = 20;
720 } 751 }
721 752
722 if ( ev.event().hasRepeat() ) { 753 if ( ev.event().hasRepeat() ) {
723 p.drawPixmap( width() - 16, y, Resource::loadPixmap( "repeat" ) ); 754 p.drawPixmap( width() - 16, y, Resource::loadPixmap( "repeat" ) );
724 d = 20; 755 d = 20;
725 y += 20; 756 y += 20;
726 } 757 }
727 758
728 QSimpleRichText rt( text, font() ); 759 QSimpleRichText rt( text, font() );
729 rt.setWidth( geom.width() - d - 6 ); 760 rt.setWidth( geom.width() - d - 6 );
730 rt.draw( &p, 7, 0, e->region(), colorGroup() ); 761 rt.draw( &p, 7, 0, e->region(), colorGroup() );
731} 762}
732 763
764/*
765 * we need to find the real start date for a uid
766 * we need to check from one day to another...
767 */
768QDate DateBookDay::findRealStart( int uid, const QDate& isIncluded , DateBookDB* db) {
769 QDate dt( isIncluded );
770 QDate fnd = dt;
771
772 bool doAgain = true;
773 do{
774 dt = dt.addDays( -1 );
775 QValueList<EffectiveEvent> events = db->getEffectiveEvents( dt, dt );
776 for (QValueList<EffectiveEvent>::Iterator it = events.begin(); it != events.end(); ++it ) {
777 EffectiveEvent ev = (*it);
778 if ( uid == ev.event().uid() && ev.start() != QTime(0, 0, 0 ) )
779 return ev.date();
780 }
781 }while (doAgain );
782
783 return fnd;
784}
785
733void DateBookDayWidget::mousePressEvent( QMouseEvent *e ) 786void DateBookDayWidget::mousePressEvent( QMouseEvent *e )
734{ 787{
735 DateBookDayWidget *item; 788 DateBookDayWidget *item;
736 789
737 item = dateBook->getSelectedWidget(); 790 item = dateBook->getSelectedWidget();
738 if (item) 791 if (item)
739 item->update(); 792 item->update();
740 793
741 dateBook->setSelectedWidget(this); 794 dateBook->setSelectedWidget(this);
742 update(); 795 update();
743 dateBook->repaint(); 796 dateBook->repaint();
744 797
745 QPopupMenu m; 798 QPopupMenu m;
746 m.insertItem( tr( "Edit" ), 1 ); 799 m.insertItem( tr( "Edit" ), 1 );
747 m.insertItem( tr( "Duplicate" ), 4 ); 800 m.insertItem( tr( "Duplicate" ), 4 );
748 m.insertItem( tr( "Delete" ), 2 ); 801 m.insertItem( tr( "Delete" ), 2 );
749 if(Ir::supported()) m.insertItem( tr( "Beam" ), 3 ); 802 if(Ir::supported()) m.insertItem( tr( "Beam" ), 3 );
803 if(Ir::supported() && ev.event().doRepeat() ) m.insertItem( tr( "Beam this occurence"), 5 );
750 int r = m.exec( e->globalPos() ); 804 int r = m.exec( e->globalPos() );
751 if ( r == 1 ) { 805 if ( r == 1 ) {
752 emit editMe( ev.event() ); 806 emit editMe( ev.event() );
753 } else if ( r == 2 ) { 807 } else if ( r == 2 ) {
754 emit deleteMe( ev.event() ); 808 emit deleteMe( ev.event() );
755 } else if ( r == 3 ) { 809 } else if ( r == 3 ) {
756 emit beamMe( ev.event() ); 810 emit beamMe( ev.event() );
757 } else if ( r == 4 ) { 811 } else if ( r == 4 ) {
758 emit duplicateMe( ev.event() ); 812 emit duplicateMe( ev.event() );
759 } 813 } else if ( r == 5 ) {
814 // create an Event and beam it...
815 /*
816 * Start with the easy stuff. If start and end date is the same we can just use
817 * the values of effective events
818 * If it is a multi day event we need to find the real start and end date...
819 */
820 if ( ev.event().start().date() == ev.event().end().date() ) {
821 Event event( ev.event() );
822
823 QDateTime dt( ev.date(), ev.start() );
824 event.setStart( dt );
825
826 dt.setTime( ev.end() );
827 event.setEnd( dt );
828 emit beamMe( event );
829 }else {
830 /*
831 * at least the the Times are right now
832 */
833 QDateTime start( ev.event().start() );
834 QDateTime end ( ev.event().end () );
835
836
837 /*
838 * ok we know the start date or we need to find it
839 */
840 if ( ev.start() != QTime( 0, 0, 0 ) ) {
841 start.setDate( ev.date() );
842 }else {
843 QDate dt = DateBookDay::findRealStart( ev.event().uid(), ev.date(), dateBook->db );
844 start.setDate( dt );
845 }
846
847
848 /*
849 * ok we know now the end date...
850 * else
851 * get to know the offset btw the real start and real end
852 * and then add it to the new start date...
853 */
854 if ( ev.end() != QTime(23, 59, 59 ) ) {
855 end.setDate( ev.date() );
856 }else{
857 int days = ev.event().start().date().daysTo( ev.event().end().date() );
858 end.setDate( start.date().addDays( days ) );
859 }
860
861
862
863 Event event( ev.event() );
864 event.setStart( start );
865 event.setEnd ( end );
866
867
868 emit beamMe( event );
869 }
870 }
760} 871}
761 872
762void DateBookDayWidget::setGeometry( const QRect &r ) 873void DateBookDayWidget::setGeometry( const QRect &r )
763{ 874{
764 geom = r; 875 geom = r;
765 setFixedSize( r.width()+1, r.height()+1 ); 876 setFixedSize( r.width()+1, r.height()+1 );
766 dateBook->dayView()->moveChild( this, r.x(), r.y()-1 ); 877 dateBook->dayView()->moveChild( this, r.x(), r.y()-1 );
767 show(); 878 show();
768} 879}
769 880
770 881
771//--------------------------------------------------------------------------------------------- 882//---------------------------------------------------------------------------------------------
772//--------------------------------------------------------------------------------------------- 883//---------------------------------------------------------------------------------------------
773 884
774 885
775DateBookDayTimeMarker::DateBookDayTimeMarker( DateBookDay *db ) 886DateBookDayTimeMarker::DateBookDayTimeMarker( DateBookDay *db )
776 : QWidget( db->dayView()->viewport() ), dateBook( db ) 887 : QWidget( db->dayView()->viewport() ), dateBook( db )
777{ 888{
778 setBackgroundMode( PaletteBase ); 889 setBackgroundMode( PaletteBase );
779} 890}
780 891
781DateBookDayTimeMarker::~DateBookDayTimeMarker() 892DateBookDayTimeMarker::~DateBookDayTimeMarker()
782{ 893{
783} 894}
784 895
785void DateBookDayTimeMarker::paintEvent( QPaintEvent */*e*/ ) 896void DateBookDayTimeMarker::paintEvent( QPaintEvent */*e*/ )
786{ 897{
787 QPainter p( this ); 898 QPainter p( this );
788 p.setBrush( QColor( 255, 0, 0 ) ); 899 p.setBrush( QColor( 255, 0, 0 ) );
789 900
790 QPen pen; 901 QPen pen;
791 pen.setStyle(NoPen); 902 pen.setStyle(NoPen);
792 903
793 p.setPen( pen ); 904 p.setPen( pen );
794 p.drawRect(rect()); 905 p.drawRect(rect());
795} 906}
796 907
797void DateBookDayTimeMarker::setTime( const QTime &t ) 908void DateBookDayTimeMarker::setTime( const QTime &t )
798{ 909{
799 int y = t.hour()*60+t.minute(); 910 int y = t.hour()*60+t.minute();
800 int rh = dateBook->dayView()->rowHeight(0); 911 int rh = dateBook->dayView()->rowHeight(0);
801 y = y*rh/60; 912 y = y*rh/60;
802 913
803 geom.setX( 0 ); 914 geom.setX( 0 );
804 915
805 int x = dateBook->dayView()->columnWidth(0)-1; 916 int x = dateBook->dayView()->columnWidth(0)-1;
806 geom.setWidth( x ); 917 geom.setWidth( x );
807 918
808 geom.setY( y ); 919 geom.setY( y );
809 geom.setHeight( 1 ); 920 geom.setHeight( 1 );
810 921
811 setGeometry( geom ); 922 setGeometry( geom );
812 923
813 time = t; 924 time = t;
814} 925}
815 926
816void DateBookDayTimeMarker::setGeometry( const QRect &r ) 927void DateBookDayTimeMarker::setGeometry( const QRect &r )
817{ 928{
818 geom = r; 929 geom = r;
819 setFixedSize( r.width()+1, r.height()+1 ); 930 setFixedSize( r.width()+1, r.height()+1 );
820 dateBook->dayView()->moveChild( this, r.x(), r.y()-1 ); 931 dateBook->dayView()->moveChild( this, r.x(), r.y()-1 );
821 show(); 932 show();
822} 933}
diff --git a/core/pim/datebook/datebookday.h b/core/pim/datebook/datebookday.h
index 961f60f..3898cbc 100644
--- a/core/pim/datebook/datebookday.h
+++ b/core/pim/datebook/datebookday.h
@@ -1,230 +1,236 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qtopia Environment. 4** This file is part of Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#ifndef DATEBOOKDAY_H 20#ifndef DATEBOOKDAY_H
21#define DATEBOOKDAY_H 21#define DATEBOOKDAY_H
22 22
23#include <qpe/event.h> 23#include <qpe/event.h>
24 24
25#include <qdatetime.h> 25#include <qdatetime.h>
26#include <qtable.h> 26#include <qtable.h>
27#include <qvbox.h> 27#include <qvbox.h>
28#include <qlist.h> 28#include <qlist.h>
29 29
30#include "datebook.h" 30#include "datebook.h"
31#include <qlineedit.h> 31#include <qlineedit.h>
32 32
33class DateBookDayHeader; 33class DateBookDayHeader;
34class DateBookDB; 34class DateBookDB;
35class DatebookdayAllday;
35class QDateTime; 36class QDateTime;
36class QMouseEvent; 37class QMouseEvent;
37class QPaintEvent; 38class QPaintEvent;
38class QResizeEvent; 39class QResizeEvent;
39 40
40class DateBookDayViewQuickLineEdit : public QLineEdit 41class DateBookDayViewQuickLineEdit : public QLineEdit
41{ 42{
42 Q_OBJECT 43 Q_OBJECT
43public: 44public:
44 DateBookDayViewQuickLineEdit(const QDateTime &start, const QDateTime &end,QWidget * parent, const char *name=0); 45 DateBookDayViewQuickLineEdit(const QDateTime &start, const QDateTime &end,QWidget * parent, const char *name=0);
45protected: 46protected:
46 Event quickEvent; 47 Event quickEvent;
47 int active; 48 int active;
48 void focusOutEvent( QFocusEvent *e ); 49 void focusOutEvent( QFocusEvent *e );
49protected slots: 50protected slots:
50 void slotReturnPressed(void); 51 void slotReturnPressed(void);
52 void finallyCallClose();
51signals: 53signals:
52 void insertEvent(const Event &e); 54 void insertEvent(const Event &e);
53}; 55};
54 56
55 57
56class DateBookDayView : public QTable 58class DateBookDayView : public QTable
57{ 59{
58 Q_OBJECT 60 Q_OBJECT
59public: 61public:
60 DateBookDayView( bool hourClock, QWidget *parent, const char *name ); 62 DateBookDayView( bool hourClock, QWidget *parent, const char *name );
61 bool whichClock() const; 63 bool whichClock() const;
62 64
63 void setRowStyle( int style ); 65 void setRowStyle( int style );
64 66
65public slots: 67public slots:
66 void moveUp(); 68 void moveUp();
67 void moveDown(); 69 void moveDown();
68 void slotDateChanged( int year, int month, int day ); 70 void slotDateChanged( int year, int month, int day );
69 71
70signals: 72signals:
71 void sigColWidthChanged(); 73 void sigColWidthChanged();
72 void sigCapturedKey( const QString &txt ); 74 void sigCapturedKey( const QString &txt );
73protected slots: 75protected slots:
74 void slotChangeClock( bool ); 76 void slotChangeClock( bool );
75protected: 77protected:
76 virtual void paintCell( QPainter *p, int row, int col, const QRect &cr, bool selected ); 78 virtual void paintCell( QPainter *p, int row, int col, const QRect &cr, bool selected );
77 virtual void paintFocus( QPainter *p, const QRect &cr ); 79 virtual void paintFocus( QPainter *p, const QRect &cr );
78 80
79 virtual void resizeEvent( QResizeEvent *e ); 81 virtual void resizeEvent( QResizeEvent *e );
80 void keyPressEvent( QKeyEvent *e ); 82 void keyPressEvent( QKeyEvent *e );
81 void contentsMouseReleaseEvent( QMouseEvent *e ); 83 void contentsMouseReleaseEvent( QMouseEvent *e );
82 void initHeader(); 84 void initHeader();
83private: 85private:
84 bool ampm; 86 bool ampm;
85 QDate currDate; 87 QDate currDate;
86 DateBookDayViewQuickLineEdit *quickLineEdit; 88 DateBookDayViewQuickLineEdit *quickLineEdit;
87}; 89};
88 90
89class DateBookDay; 91class DateBookDay;
90class DateBookDayWidget : public QWidget 92class DateBookDayWidget : public QWidget
91{ 93{
92 Q_OBJECT 94 Q_OBJECT
93 95
94public: 96public:
95 DateBookDayWidget( const EffectiveEvent &e, DateBookDay *db ); 97 DateBookDayWidget( const EffectiveEvent &e, DateBookDay *db );
96 ~DateBookDayWidget(); 98 ~DateBookDayWidget();
97 99
98 const QRect &geometry() { return geom; } 100 const QRect &geometry() { return geom; }
99 void setGeometry( const QRect &r ); 101 void setGeometry( const QRect &r );
100 102
101 const EffectiveEvent &event() const { return ev; } 103 const EffectiveEvent &event() const { return ev; }
102 104
103signals: 105signals:
104 void deleteMe( const Event &e ); 106 void deleteMe( const Event &e );
105 void duplicateMe( const Event &e ); 107 void duplicateMe( const Event &e );
106 void editMe( const Event &e ); 108 void editMe( const Event &e );
107 void beamMe( const Event &e ); 109 void beamMe( const Event &e );
108 110
109protected: 111protected:
110 void paintEvent( QPaintEvent *e ); 112 void paintEvent( QPaintEvent *e );
111 void mousePressEvent( QMouseEvent *e ); 113 void mousePressEvent( QMouseEvent *e );
112 114
113private: 115private:
114 /** 116 /**
115 * Sets the text for an all day Event 117 * Sets the text for an all day Event
116 * All day events have no time associated 118 * All day events have no time associated
117 */ 119 */
118 void setAllDayText( QString& text ); 120 void setAllDayText( QString& text );
119 121
120 /** 122 /**
121 * Sets the EventText 123 * Sets the EventText
122 * it got a start and an end Time 124 * it got a start and an end Time
123 */ 125 */
124 void setEventText( QString& text ); 126 void setEventText( QString& text );
125 const EffectiveEvent ev; 127 const EffectiveEvent ev;
126 DateBookDay *dateBook; 128 DateBookDay *dateBook;
127 QString text; 129 QString text;
128 QRect geom; 130 QRect geom;
129}; 131};
130 132
131//Marker for current time in the dayview 133//Marker for current time in the dayview
132class DateBookDayTimeMarker : public QWidget 134class DateBookDayTimeMarker : public QWidget
133{ 135{
134 Q_OBJECT 136 Q_OBJECT
135 137
136public: 138public:
137 DateBookDayTimeMarker( DateBookDay *db ); 139 DateBookDayTimeMarker( DateBookDay *db );
138 ~DateBookDayTimeMarker(); 140 ~DateBookDayTimeMarker();
139 141
140 const QRect &geometry() { return geom; } 142 const QRect &geometry() { return geom; }
141 void setGeometry( const QRect &r ); 143 void setGeometry( const QRect &r );
142 void setTime( const QTime &t ); 144 void setTime( const QTime &t );
143 145
144signals: 146signals:
145 147
146protected: 148protected:
147 void paintEvent( QPaintEvent *e ); 149 void paintEvent( QPaintEvent *e );
148 150
149private: 151private:
150 QRect geom; 152 QRect geom;
151 QTime time; 153 QTime time;
152 DateBookDay *dateBook; 154 DateBookDay *dateBook;
153}; 155};
154 156
155//reimplemented the compareItems function so that it sorts DayWidgets by geometry heights 157//reimplemented the compareItems function so that it sorts DayWidgets by geometry heights
156class WidgetListClass : public QList<DateBookDayWidget> 158class WidgetListClass : public QList<DateBookDayWidget>
157{ 159{
158 private: 160 private:
159 161
160 int compareItems( QCollection::Item s1, QCollection::Item s2 ) 162 int compareItems( QCollection::Item s1, QCollection::Item s2 )
161 { 163 {
162 //hmm, don't punish me for that ;) 164 //hmm, don't punish me for that ;)
163 if (reinterpret_cast<DateBookDayWidget*>(s1)->geometry().height() > reinterpret_cast<DateBookDayWidget*>(s2)->geometry().height()) 165 if (reinterpret_cast<DateBookDayWidget*>(s1)->geometry().height() > reinterpret_cast<DateBookDayWidget*>(s2)->geometry().height())
164 { 166 {
165 return -1; 167 return -1;
166 } else 168 } else
167 { 169 {
168 return 1; 170 return 1;
169 } 171 }
170 } 172 }
171 173
172 174
173}; 175};
174 176
175class DateBookDay : public QVBox 177class DateBookDay : public QVBox
176{ 178{
177 Q_OBJECT 179 Q_OBJECT
178 180
181 friend class DateBookDayWidget; // for beam this occurence and access to DateBookDB
179public: 182public:
180 DateBookDay( bool ampm, bool startOnMonday, DateBookDB *newDb, 183 DateBookDay( bool ampm, bool startOnMonday, DateBookDB *newDb,
181 QWidget *parent, const char *name ); 184 QWidget *parent, const char *name );
182 void selectedDates( QDateTime &start, QDateTime &end ); 185 void selectedDates( QDateTime &start, QDateTime &end );
183 QDate date() const; 186 QDate date() const;
184 DateBookDayView *dayView() const { return view; } 187 DateBookDayView *dayView() const { return view; }
185 void setStartViewTime( int startHere ); 188 void setStartViewTime( int startHere );
186 int startViewTime() const; 189 int startViewTime() const;
187 void setSelectedWidget( DateBookDayWidget * ); 190 void setSelectedWidget( DateBookDayWidget * );
188 DateBookDayWidget * getSelectedWidget( void ); 191 DateBookDayWidget * getSelectedWidget( void );
189 void setJumpToCurTime( bool bJump ); 192 void setJumpToCurTime( bool bJump );
190 void setRowStyle( int style ); 193 void setRowStyle( int style );
194 static QDate findRealStart( int uid, const QDate& isIncluded,
195 DateBookDB* );
191 196
192public slots: 197public slots:
193 void setDate( int y, int m, int d ); 198 void setDate( int y, int m, int d );
194 void setDate( QDate ); 199 void setDate( QDate );
195 void redraw(); 200 void redraw();
196 void slotWeekChanged( bool bStartOnMonday ); 201 void slotWeekChanged( bool bStartOnMonday );
197 void updateView();//updates TimeMarker and DayWidget-colors 202 void updateView();//updates TimeMarker and DayWidget-colors
198 203
199signals: 204signals:
200 void removeEvent( const Event& ); 205 void removeEvent( const Event& );
201 void editEvent( const Event& ); 206 void editEvent( const Event& );
202 void duplicateEvent( const Event& ); 207 void duplicateEvent( const Event& );
203 void beamEvent( const Event& ); 208 void beamEvent( const Event& );
204 void newEvent(); 209 void newEvent();
205 void sigNewEvent( const QString & ); 210 void sigNewEvent( const QString & );
206 211
207protected slots: 212protected slots:
208 void keyPressEvent(QKeyEvent *); 213 void keyPressEvent(QKeyEvent *);
209 214
210private slots: 215private slots:
211 void dateChanged( int y, int m, int d ); 216 void dateChanged( int y, int m, int d );
212 void slotColWidthChanged() { relayoutPage(); }; 217 void slotColWidthChanged() { relayoutPage(); };
213 218
214private: 219private:
215 void getEvents(); 220 void getEvents();
216 void relayoutPage( bool fromResize = false ); 221 void relayoutPage( bool fromResize = false );
217 DateBookDayWidget *intersects( const DateBookDayWidget *item, const QRect &geom ); 222 DateBookDayWidget *intersects( const DateBookDayWidget *item, const QRect &geom );
218 QDate currDate; 223 QDate currDate;
219 DateBookDayView *view; 224 DateBookDayView *view;
220 DateBookDayHeader *header; 225 DateBookDayHeader *header;
226 DatebookdayAllday *m_allDays;
221 DateBookDB *db; 227 DateBookDB *db;
222 WidgetListClass widgetList;//reimplemented QList for sorting widgets by height 228 WidgetListClass widgetList;//reimplemented QList for sorting widgets by height
223 int startTime; 229 int startTime;
224 bool jumpToCurTime;//should we jump to current time in dayview? 230 bool jumpToCurTime;//should we jump to current time in dayview?
225 int rowStyle; 231 int rowStyle;
226 DateBookDayWidget *selectedWidget; //actual selected widget (obviously) 232 DateBookDayWidget *selectedWidget; //actual selected widget (obviously)
227 DateBookDayTimeMarker *timeMarker;//marker for current time 233 DateBookDayTimeMarker *timeMarker;//marker for current time
228}; 234};
229 235
230#endif 236#endif
diff --git a/core/pim/datebook/datebookdayallday.cpp b/core/pim/datebook/datebookdayallday.cpp
new file mode 100644
index 0000000..985f31a
--- a/dev/null
+++ b/core/pim/datebook/datebookdayallday.cpp
@@ -0,0 +1,226 @@
1/****************************************************************************
2** GPL by Rajko Albrecht
3**
4**
5**
6**
7**
8****************************************************************************/
9#include "datebookdayallday.h"
10
11#include <qpushbutton.h>
12#include <qlayout.h>
13#include <qvariant.h>
14#include <qtooltip.h>
15#include <qwhatsthis.h>
16#include <qobjectlist.h>
17#include <qpe/event.h>
18#include <qpe/ir.h>
19#include <qpe/datebookdb.h>
20#include <qpe/resource.h>
21#include <qpopupmenu.h>
22#include <qtimer.h>
23#include <qregexp.h>
24#include <qdatetime.h>
25
26#include "datebookday.h"
27
28/*
29 * Constructs a DatebookdayAllday which is a child of 'parent', with the
30 * name 'name' and widget flags set to 'f'
31 */
32DatebookdayAllday::DatebookdayAllday(DateBookDB* db, QWidget* parent, const char* name, WFlags fl )
33 : QWidget( parent, name,fl ),item_count(0),dateBook(db)
34{
35 if ( !name )
36 setName( "DatebookdayAllday" );
37 setMinimumSize( QSize( 0, 0 ) );
38
39 datebookdayalldayLayout = new QVBoxLayout( this );
40 datebookdayalldayLayout->setSpacing( 0 );
41 datebookdayalldayLayout->setMargin( 0 );
42
43 lblDesc = new DatebookEventDesc(parent->parentWidget(),"");
44 lblDesc->setBackgroundColor(Qt::yellow);
45 lblDesc->hide();
46 subWidgets.setAutoDelete(true);
47}
48
49/*
50 * Destroys the object and frees any allocated resources
51 */
52DatebookdayAllday::~DatebookdayAllday()
53{
54 // no need to delete child widgets, Qt does it all for us
55}
56
57DatebookAlldayDisp* DatebookdayAllday::addEvent(const EffectiveEvent&ev)
58{
59 DatebookAlldayDisp * lb;
60 lb = new DatebookAlldayDisp(dateBook,ev,this,NULL);
61 datebookdayalldayLayout->addWidget(lb);
62 subWidgets.append(lb);
63
64 connect(lb,SIGNAL(displayMe(const Event &)),lblDesc,SLOT(disp_event(const Event&)));
65 ++item_count;
66
67 return lb;
68}
69
70void DatebookdayAllday::removeAllEvents()
71{
72 subWidgets.clear();
73 item_count = 0;
74}
75
76DatebookAlldayDisp::DatebookAlldayDisp(DateBookDB *db,const EffectiveEvent& ev,
77 QWidget* parent,const char* name,WFlags f)
78 : QLabel(parent,name,f),m_Ev(ev),dateBook(db)
79{
80 QString strDesc = m_Ev.description();
81 strDesc = strDesc.replace(QRegExp("<"),"&#60;");
82 setBackgroundColor(yellow);
83 setText(strDesc);
84 setFrameStyle(QFrame::Raised|QFrame::Panel);
85 QSize s = sizeHint();
86 setMaximumSize( QSize( 32767, s.height()-4 ) );
87 setMinimumSize( QSize( 0, s.height()-4 ) );
88}
89
90DatebookAlldayDisp::~DatebookAlldayDisp()
91{
92}
93
94void DatebookAlldayDisp::beam_single_event()
95{
96 // create an Event and beam it...
97 /*
98 * Start with the easy stuff. If start and end date is the same we can just use
99 * the values of effective m_Events
100 * If it is a multi day m_Event we need to find the real start and end date...
101 */
102 if ( m_Ev.event().start().date() == m_Ev.event().end().date() ) {
103 Event m_Event( m_Ev.event() );
104
105 QDateTime dt( m_Ev.date(), m_Ev.start() );
106 m_Event.setStart( dt );
107
108 dt.setTime( m_Ev.end() );
109 m_Event.setEnd( dt );
110 emit beamMe( m_Event );
111 }else {
112 /*
113 * at least the the Times are right now
114 */
115 QDateTime start( m_Ev.event().start() );
116 QDateTime end ( m_Ev.event().end () );
117
118 /*
119 * ok we know the start date or we need to find it
120 */
121 if ( m_Ev.start() != QTime( 0, 0, 0 ) ) {
122 start.setDate( m_Ev.date() );
123 }else {
124 QDate dt = DateBookDay::findRealStart( m_Ev.event().uid(), m_Ev.date(), dateBook );
125 start.setDate( dt );
126 }
127
128 /*
129 * ok we know now the end date...
130 * else
131 * get to know the offset btw the real start and real end
132 * and then add it to the new start date...
133 */
134 if ( m_Ev.end() != QTime(23, 59, 59 ) ) {
135 end.setDate( m_Ev.date() );
136 }else{
137 int days = m_Ev.event().start().date().daysTo( m_Ev.event().end().date() );
138 end.setDate( start.date().addDays( days ) );
139 }
140 Event m_Event( m_Ev.event() );
141 m_Event.setStart( start );
142 m_Event.setEnd ( end );
143 emit beamMe( m_Event );
144 }
145}
146
147void DatebookAlldayDisp::mousePressEvent(QMouseEvent*e)
148{
149 QColor b = backgroundColor();
150 setBackgroundColor(green);
151 update();
152 QPopupMenu m;
153 m.insertItem( DateBookDayWidget::tr( "Edit" ), 1 );
154 m.insertItem( DateBookDayWidget::tr( "Duplicate" ), 4 );
155 m.insertItem( DateBookDayWidget::tr( "Delete" ), 2 );
156 if(Ir::supported()) m.insertItem( DateBookDayWidget::tr( "Beam" ), 3 );
157 if(Ir::supported() && m_Ev.event().doRepeat() ) m.insertItem( DateBookDayWidget::tr( "Beam this occurence"), 5 );
158 m.insertItem( tr( "Info"),6);
159 int r = m.exec( e->globalPos() );
160 setBackgroundColor(b);
161 update();
162 switch (r) {
163 case 1:
164 emit editMe( m_Ev.event() );
165 break;
166 case 2:
167 emit deleteMe( m_Ev.event() );
168 break;
169 case 3:
170 emit beamMe( m_Ev.event() );
171 break;
172 case 4:
173 emit duplicateMe( m_Ev.event() );
174 break;
175 case 5:
176 beam_single_event();
177 break;
178 case 6:
179 emit displayMe( m_Ev.event() );
180 break;
181 default:
182 break;
183 }
184}
185
186DatebookEventDesc::DatebookEventDesc(QWidget*parent,const char*name)
187 :QLabel(parent,name)
188{
189 m_Timer=new QTimer(this);
190 connect(m_Timer,SIGNAL(timeout()),this,SLOT(hide()));
191 setFrameStyle(QFrame::Sunken|QFrame::Panel);
192 setTextFormat(RichText);
193}
194
195DatebookEventDesc::~DatebookEventDesc()
196{
197}
198
199void DatebookEventDesc::mousePressEvent(QMouseEvent*)
200{
201 hide();
202 if (m_Timer->isActive()) m_Timer->stop();
203}
204
205void DatebookEventDesc::disp_event(const Event&e)
206{
207 if (m_Timer->isActive()) m_Timer->stop();
208 QString text;
209 text = "<b><i>"+e.description()+"</i></b><br>";
210 if (e.notes().length()>0) {
211 text+="<b>"+e.notes()+"</b><br>";
212 }
213 if (e.location().length()>0) {
214 text+="<i>"+e.location()+"</i><br>";
215 }
216 text = text.replace(QRegExp("\n"),"<br>");
217 setText(text);
218 QSize s = sizeHint();
219 s+=QSize(10,10);
220 resize(s);
221 move( QMAX(0,(parentWidget()->width()-width()) / 2),
222 (parentWidget()->height()-height())/2 );
223 show();
224 m_Timer->start(2000,true);
225}
226
diff --git a/core/pim/datebook/datebookdayallday.h b/core/pim/datebook/datebookdayallday.h
new file mode 100644
index 0000000..c781785
--- a/dev/null
+++ b/core/pim/datebook/datebookdayallday.h
@@ -0,0 +1,80 @@
1#ifndef DATEBOOKDAYALLDAYBASE_H
2#define DATEBOOKDAYALLDAYBASE_H
3
4#include <qvariant.h>
5#include <qframe.h>
6#include <qlabel.h>
7#include <qlist.h>
8#include <qpe/event.h>
9
10class QVBoxLayout;
11class QHBoxLayout;
12class QGridLayout;
13class DatebookAlldayDisp;
14class DatebookEventDesc;
15class DateBookDB;
16
17class DatebookdayAllday : public QWidget
18{
19 Q_OBJECT
20
21public:
22 DatebookdayAllday(DateBookDB* db,
23 QWidget* parent = 0, const char* name = 0, WFlags fl = 0);
24 ~DatebookdayAllday();
25 DatebookAlldayDisp* addEvent(const EffectiveEvent&e);
26 const unsigned int items()const{return item_count;}
27
28public slots:
29 void removeAllEvents();
30
31protected:
32 QVBoxLayout* datebookdayalldayLayout;
33 DatebookEventDesc * lblDesc;
34 unsigned int item_count;
35 QList<DatebookAlldayDisp> subWidgets;
36 DateBookDB *dateBook;
37};
38
39class DatebookAlldayDisp : public QLabel
40{
41 Q_OBJECT
42
43public:
44 DatebookAlldayDisp(DateBookDB* db,const EffectiveEvent& e,
45 QWidget* parent=0,const char* name = 0, WFlags fl=0);
46 virtual ~DatebookAlldayDisp();
47
48signals:
49 void deleteMe( const Event &e );
50 void duplicateMe( const Event &e );
51 void editMe( const Event &e );
52 void beamMe( const Event &e );
53 void displayMe(const Event &e);
54
55public slots:
56
57protected:
58 EffectiveEvent m_Ev;
59 DateBookDB* dateBook;
60 void mousePressEvent( QMouseEvent *e );
61 void beam_single_event();
62};
63
64class DatebookEventDesc: public QLabel
65{
66 Q_OBJECT
67
68public:
69 DatebookEventDesc(QWidget* Parent=0,const char* name = 0);
70 virtual ~DatebookEventDesc();
71
72public slots:
73 void disp_event(const Event&e);
74
75protected:
76 void mousePressEvent(QMouseEvent*e);
77 QTimer* m_Timer;
78};
79
80#endif // DATEBOOKDAYALLDAYBASE_H
diff --git a/core/pim/datebook/datebooksettings.h b/core/pim/datebook/datebooksettings.h
index c3036e1..cf8a0ff 100644
--- a/core/pim/datebook/datebooksettings.h
+++ b/core/pim/datebook/datebooksettings.h
@@ -1,54 +1,55 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qtopia Environment. 4** This file is part of Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20 20
21#ifndef DATEBOOKSETTINGS_H 21#ifndef DATEBOOKSETTINGS_H
22#define DATEBOOKSETTINGS_H 22#define DATEBOOKSETTINGS_H
23#include "datebooksettingsbase.h" 23#include "datebooksettingsbase.h"
24#include <qpe/categoryselect.h> 24#include <qpe/categoryselect.h>
25 25
26class DateBookSettings : public DateBookSettingsBase 26class DateBookSettings : public DateBookSettingsBase
27{ 27{
28 Q_OBJECT
28public: 29public:
29 DateBookSettings( bool whichClock, QWidget *parent = 0, 30 DateBookSettings( bool whichClock, QWidget *parent = 0,
30 const char *name = 0, bool modal = TRUE, WFlags = 0 ); 31 const char *name = 0, bool modal = TRUE, WFlags = 0 );
31 ~DateBookSettings(); 32 ~DateBookSettings();
32 void setStartTime( int newStartViewTime ); 33 void setStartTime( int newStartViewTime );
33 int startTime() const; 34 int startTime() const;
34 void setAlarmPreset( bool bAlarm, int presetTime ); 35 void setAlarmPreset( bool bAlarm, int presetTime );
35 bool alarmPreset() const; 36 bool alarmPreset() const;
36 int presetTime() const; 37 int presetTime() const;
37 void setAlarmType( int alarmType ); 38 void setAlarmType( int alarmType );
38 int alarmType() const; 39 int alarmType() const;
39 40
40 void setJumpToCurTime( bool bJump ); 41 void setJumpToCurTime( bool bJump );
41 bool jumpToCurTime() const; 42 bool jumpToCurTime() const;
42 void setRowStyle( int style ); 43 void setRowStyle( int style );
43 int rowStyle() const; 44 int rowStyle() const;
44 45
45private slots: 46private slots:
46 void slot12Hour( int ); 47 void slot12Hour( int );
47 void slotChangeClock( bool ); 48 void slotChangeClock( bool );
48 49
49private: 50private:
50 void init(); 51 void init();
51 bool ampm; 52 bool ampm;
52 int oldtime; 53 int oldtime;
53}; 54};
54#endif 55#endif
diff --git a/core/pim/datebook/datebookweek.cpp b/core/pim/datebook/datebookweek.cpp
index 2ad7aa9..ab7e963 100644
--- a/core/pim/datebook/datebookweek.cpp
+++ b/core/pim/datebook/datebookweek.cpp
@@ -1,193 +1,179 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qtopia Environment. 4** This file is part of Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#include "datebookweek.h" 20#include "datebookweek.h"
21#include "datebookweekheaderimpl.h" 21#include "datebookweekheaderimpl.h"
22 22
23#include <qpe/calendar.h>
24#include <qpe/datebookdb.h> 23#include <qpe/datebookdb.h>
25#include <qpe/event.h>
26#include <qpe/qpeapplication.h> 24#include <qpe/qpeapplication.h>
27#include <qpe/timestring.h> 25#include <qpe/calendar.h>
28 26
29#include <qdatetime.h>
30#include <qheader.h> 27#include <qheader.h>
31#include <qlabel.h> 28#include <qlabel.h>
32#include <qlayout.h> 29#include <qlayout.h>
33#include <qpainter.h>
34#include <qpopupmenu.h>
35#include <qtimer.h> 30#include <qtimer.h>
36#include <qspinbox.h>
37#include <qstyle.h>
38 31
39//----------------------------------------------------------------- 32//-----------------------------------------------------------------
40 33
41 34
42DateBookWeekItem::DateBookWeekItem( const EffectiveEvent e ) 35DateBookWeekItem::DateBookWeekItem( const EffectiveEvent e )
43 : ev( e ) 36 : ev( e )
44{ 37{
45 // with the current implementation change the color for all day events 38 // with the current implementation change the color for all day events
46 if ( ev.event().type() == Event::AllDay && !ev.event().hasAlarm() ) { 39 if ( ev.event().type() == Event::AllDay && !ev.event().hasAlarm() ) {
47 c = Qt::green; 40 c = Qt::green;
48 } else { 41 } else {
49 c = ev.event().hasAlarm() ? Qt::red : Qt::blue; 42 c = ev.event().hasAlarm() ? Qt::red : Qt::blue;
50 } 43 }
51} 44}
52 45
53void DateBookWeekItem::setGeometry( int x, int y, int w, int h ) 46void DateBookWeekItem::setGeometry( int x, int y, int w, int h )
54{ 47{
55 r.setRect( x, y, w, h ); 48 r.setRect( x, y, w, h );
56} 49}
57 50
58 51
59//------------------=--------------------------------------------- 52//------------------=---------------------------------------------
60 53
61DateBookWeekView::DateBookWeekView( bool ap, bool startOnMonday, 54DateBookWeekView::DateBookWeekView( bool ap, bool startOnMonday,
62 QWidget *parent, const char *name ) 55 QWidget *parent, const char *name )
63 : QScrollView( parent, name ), ampm( ap ), bOnMonday( startOnMonday ), 56 : QScrollView( parent, name ), ampm( ap ), bOnMonday( startOnMonday ),
64 showingEvent( false ) 57 showingEvent( false )
65{ 58{
66 items.setAutoDelete( true ); 59 items.setAutoDelete( true );
67 60
68 viewport()->setBackgroundMode( PaletteBase ); 61 viewport()->setBackgroundMode( PaletteBase );
69 62
70 header = new QHeader( this ); 63 header = new QHeader( this );
71 header->addLabel( "" ); 64 header->addLabel( "" );
72 65
73 header->setMovingEnabled( false ); 66 header->setMovingEnabled( false );
74 header->setResizeEnabled( false ); 67 header->setResizeEnabled( false );
75 header->setClickEnabled( false, 0 ); 68 header->setClickEnabled( false, 0 );
76 initNames(); 69 initNames();
77 70
78 71
79 connect( header, SIGNAL(clicked(int)), this, SIGNAL(showDay(int)) ); 72 connect( header, SIGNAL(clicked(int)), this, SIGNAL(showDay(int)) );
80 73
81 QObject::connect(qApp, SIGNAL(clockChanged(bool)), 74 QObject::connect(qApp, SIGNAL(clockChanged(bool)),
82 this, SLOT(slotChangeClock(bool))); 75 this, SLOT(slotChangeClock(bool)));
83 76
84 QFontMetrics fm( font() ); 77 QFontMetrics fm( font() );
85 rowHeight = fm.height()+2; 78 rowHeight = fm.height()+2;
86 79
87 resizeContents( width(), 24*rowHeight ); 80 resizeContents( width(), 24*rowHeight );
88} 81}
89 82
90void DateBookWeekView::initNames() 83void DateBookWeekView::initNames()
91{ 84{
85#warning Please review this ! (eilers)
86
87 // Ok, I am Mr. Pedantic, but shouldn't we count until 6 instead of 7, if bOnMonday is false ? (eilers)
88
92 static bool bFirst = true; 89 static bool bFirst = true;
93 if ( bFirst ) { 90 if ( bFirst ) {
94 if ( bOnMonday ) { 91 if ( bOnMonday ) {
95 header->addLabel( tr("Mo", "Monday" ) ); 92 for ( int i = 1; i<=7; i++ ) {
96 header->addLabel( tr("Tu", "Tuesday") ); 93 header->addLabel( Calendar::nameOfDay( i ) );
97 header->addLabel( tr("We", "Wednesday" ) ); 94 }
98 header->addLabel( tr("Th", "Thursday" ) ); 95
99 header->addLabel( tr("Fr", "Friday" ) );
100 header->addLabel( tr("Sa", "Saturday" ) );
101 header->addLabel( tr("Su", "Sunday" ) );
102 } else { 96 } else {
103 header->addLabel( tr("Su", "Sunday" ) ); 97 header->addLabel( Calendar::nameOfDay( 7 ) );
104 header->addLabel( tr("Mo", "Monday") ); 98 for ( int i = 1; i<7; i++ ) {
105 header->addLabel( tr("Tu", "Tuesday") ); 99 header->addLabel( Calendar::nameOfDay( i ) );
106 header->addLabel( tr("We", "Wednesday" ) ); 100 }
107 header->addLabel( tr("Th", "Thursday" ) ); 101 }
108 header->addLabel( tr("Fr", "Friday" ) );
109 header->addLabel( tr("Sa", "Saturday" ) );
110 }
111 bFirst = false; 102 bFirst = false;
112 } else { 103 } else {
113 // we are change things... 104 // we are change things...
114 if ( bOnMonday ) { 105 if ( bOnMonday ) {
115 header->setLabel( 1, tr("Mo", "Monday") ); 106 for ( int i = 1; i<=7; i++ ) {
116 header->setLabel( 2, tr("Tu", "Tuesday") ); 107 header->setLabel( i, Calendar::nameOfDay( i ) );
117 header->setLabel( 3, tr("We", "Wednesday" ) ); 108 }
118 header->setLabel( 4, tr("Th", "Thursday" ) ); 109
119 header->setLabel( 5, tr("Fr", "Friday" ) );
120 header->setLabel( 6, tr("Sa", "Saturday" ) );
121 header->setLabel( 7, tr("Su", "Sunday" ) );
122 } else { 110 } else {
123 header->setLabel( 1, tr("Su", "Sunday" ) ); 111 header->setLabel( 1, Calendar::nameOfDay( 7 ) );
124 header->setLabel( 2, tr("Mo", "Monday") ); 112 for ( int i = 1; i<7; i++ ) {
125 header->setLabel( 3, tr("Tu", "Tuesday") ); 113 header->setLabel( i+1, Calendar::nameOfDay( i ) );
126 header->setLabel( 4, tr("We", "Wednesday" ) ); 114 }
127 header->setLabel( 5, tr("Th", "Thursday" ) ); 115
128 header->setLabel( 6, tr("Fr", "Friday" ) );
129 header->setLabel( 7, tr("Sa", "Saturday" ) );
130 } 116 }
131 } 117 }
132} 118}
133 119
134 120
135 121
136void DateBookWeekView::showEvents( QValueList<EffectiveEvent> &ev ) 122void DateBookWeekView::showEvents( QValueList<EffectiveEvent> &ev )
137{ 123{
138 items.clear(); 124 items.clear();
139 QValueListIterator<EffectiveEvent> it; 125 QValueListIterator<EffectiveEvent> it;
140 for ( it = ev.begin(); it != ev.end(); ++it ) { 126 for ( it = ev.begin(); it != ev.end(); ++it ) {
141 DateBookWeekItem *i = new DateBookWeekItem( *it ); 127 DateBookWeekItem *i = new DateBookWeekItem( *it );
142 if(!((i->event().end().hour()==0) && (i->event().end().minute()==0) && (i->event().startDate()!=i->event().date()))) {// Skip events ending at 00:00 starting at another day. 128 if(!((i->event().end().hour()==0) && (i->event().end().minute()==0) && (i->event().startDate()!=i->event().date()))) {// Skip events ending at 00:00 starting at another day.
143 positionItem( i ); 129 positionItem( i );
144 items.append( i ); 130 items.append( i );
145 } 131 }
146 } 132 }
147 viewport()->update(); 133 viewport()->update();
148} 134}
149 135
150void DateBookWeekView::moveToHour( int h ) 136void DateBookWeekView::moveToHour( int h )
151{ 137{
152 int offset = h*rowHeight; 138 int offset = h*rowHeight;
153 setContentsPos( 0, offset ); 139 setContentsPos( 0, offset );
154} 140}
155 141
156void DateBookWeekView::keyPressEvent( QKeyEvent *e ) 142void DateBookWeekView::keyPressEvent( QKeyEvent *e )
157{ 143{
158 e->ignore(); 144 e->ignore();
159} 145}
160 146
161void DateBookWeekView::slotChangeClock( bool c ) 147void DateBookWeekView::slotChangeClock( bool c )
162{ 148{
163 ampm = c; 149 ampm = c;
164 viewport()->update(); 150 viewport()->update();
165} 151}
166 152
167static inline int db_round30min( int m ) 153static inline int db_round30min( int m )
168{ 154{
169 if ( m < 15 ) 155 if ( m < 15 )
170 m = 0; 156 m = 0;
171 else if ( m < 45 ) 157 else if ( m < 45 )
172 m = 1; 158 m = 1;
173 else 159 else
174 m = 2; 160 m = 2;
175 161
176 return m; 162 return m;
177} 163}
178 164
179void DateBookWeekView::alterDay( int day ) 165void DateBookWeekView::alterDay( int day )
180{ 166{
181 if ( !bOnMonday ) { 167 if ( !bOnMonday ) {
182 day--; 168 day--;
183 } 169 }
184 emit showDay( day ); 170 emit showDay( day );
185} 171}
186 172
187void DateBookWeekView::positionItem( DateBookWeekItem *i ) 173void DateBookWeekView::positionItem( DateBookWeekItem *i )
188{ 174{
189 const int Width = 8; 175 const int Width = 8;
190 const EffectiveEvent ev = i->event(); 176 const EffectiveEvent ev = i->event();
191 177
192 // 30 minute intervals 178 // 30 minute intervals
193 int y = ev.start().hour() * 2; 179 int y = ev.start().hour() * 2;
@@ -341,129 +327,130 @@ void DateBookWeekView::setStartOfWeek( bool bStartOnMonday )
341{ 327{
342 bOnMonday = bStartOnMonday; 328 bOnMonday = bStartOnMonday;
343 initNames(); 329 initNames();
344} 330}
345 331
346//------------------------------------------------------------------- 332//-------------------------------------------------------------------
347 333
348DateBookWeek::DateBookWeek( bool ap, bool startOnMonday, DateBookDB *newDB, 334DateBookWeek::DateBookWeek( bool ap, bool startOnMonday, DateBookDB *newDB,
349 QWidget *parent, const char *name ) 335 QWidget *parent, const char *name )
350 : QWidget( parent, name ), 336 : QWidget( parent, name ),
351 db( newDB ), 337 db( newDB ),
352 startTime( 0 ), 338 startTime( 0 ),
353 ampm( ap ), 339 ampm( ap ),
354 bStartOnMonday( startOnMonday ) 340 bStartOnMonday( startOnMonday )
355{ 341{
356 setFocusPolicy(StrongFocus); 342 setFocusPolicy(StrongFocus);
357 QVBoxLayout *vb = new QVBoxLayout( this ); 343 QVBoxLayout *vb = new QVBoxLayout( this );
358 header = new DateBookWeekHeader( bStartOnMonday, this ); 344 header = new DateBookWeekHeader( bStartOnMonday, this );
359 view = new DateBookWeekView( ampm, startOnMonday, this ); 345 view = new DateBookWeekView( ampm, startOnMonday, this );
360 vb->addWidget( header ); 346 vb->addWidget( header );
361 vb->addWidget( view ); 347 vb->addWidget( view );
362 348
363 lblDesc = new QLabel( this, "event label" ); 349 lblDesc = new QLabel( this, "event label" );
364 lblDesc->setFrameStyle( QFrame::Plain | QFrame::Box ); 350 lblDesc->setFrameStyle( QFrame::Plain | QFrame::Box );
365 lblDesc->setBackgroundColor( yellow ); 351 lblDesc->setBackgroundColor( yellow );
366 lblDesc->hide(); 352 lblDesc->hide();
367 353
368 tHide = new QTimer( this ); 354 tHide = new QTimer( this );
369 355
370 connect( view, SIGNAL( showDay( int ) ), this, SLOT( showDay( int ) ) ); 356 connect( view, SIGNAL( showDay( int ) ), this, SLOT( showDay( int ) ) );
371 connect( view, SIGNAL(signalShowEvent(const EffectiveEvent&)), this, SLOT(slotShowEvent(const EffectiveEvent&)) ); 357 connect( view, SIGNAL(signalShowEvent(const EffectiveEvent&)), this, SLOT(slotShowEvent(const EffectiveEvent&)) );
372 connect( view, SIGNAL(signalHideEvent()), this, SLOT(slotHideEvent()) ); 358 connect( view, SIGNAL(signalHideEvent()), this, SLOT(slotHideEvent()) );
373 connect( header, SIGNAL( dateChanged( QDate &) ), this, SLOT( dateChanged( QDate &) ) ); 359 connect( header, SIGNAL( dateChanged( QDate &) ), this, SLOT( dateChanged( QDate &) ) );
374 connect( tHide, SIGNAL( timeout() ), lblDesc, SLOT( hide() ) ); 360 connect( tHide, SIGNAL( timeout() ), lblDesc, SLOT( hide() ) );
375 connect( qApp, SIGNAL(weekChanged(bool)), this, SLOT(slotWeekChanged(bool)) ); 361 connect( qApp, SIGNAL(weekChanged(bool)), this, SLOT(slotWeekChanged(bool)) );
376 connect( qApp, SIGNAL(clockChanged(bool)), this, SLOT(slotClockChanged(bool))); 362 connect( qApp, SIGNAL(clockChanged(bool)), this, SLOT(slotClockChanged(bool)));
377 setDate(QDate::currentDate()); 363 setDate(QDate::currentDate());
378} 364}
379 365
380void DateBookWeek::keyPressEvent(QKeyEvent *e) 366void DateBookWeek::keyPressEvent(QKeyEvent *e)
381{ 367{
382 switch(e->key()) { 368 switch(e->key()) {
383 case Key_Up: 369 case Key_Up:
384 view->scrollBy(0, -20); 370 view->scrollBy(0, -20);
385 break; 371 break;
386 case Key_Down: 372 case Key_Down:
387 view->scrollBy(0, 20); 373 view->scrollBy(0, 20);
388 break; 374 break;
389 case Key_Left: 375 case Key_Left:
390 setDate(date().addDays(-7)); 376 setDate(date().addDays(-7));
391 break; 377 break;
392 case Key_Right: 378 case Key_Right:
393 setDate(date().addDays(7)); 379 setDate(date().addDays(7));
394 break; 380 break;
395 default: 381 default:
396 e->ignore(); 382 e->ignore();
397 } 383 }
398} 384}
399 385
400void DateBookWeek::showDay( int day ) 386void DateBookWeek::showDay( int day )
401{ 387{
402 QDate d=bdate; 388 QDate d=bdate;
403 389
404 // Calculate offset to first day of week. 390 // Calculate offset to first day of week.
405 int dayoffset=d.dayOfWeek(); 391 int dayoffset=d.dayOfWeek() % 7;
392
406 if(bStartOnMonday) dayoffset--; 393 if(bStartOnMonday) dayoffset--;
407 394
408 day--; 395 day--;
409 d=d.addDays(day-dayoffset); 396 d=d.addDays(day-dayoffset);
410 emit showDate( d.year(), d.month(), d.day() ); 397 emit showDate( d.year(), d.month(), d.day() );
411} 398}
412 399
413void DateBookWeek::setDate( int y, int m, int d ) 400void DateBookWeek::setDate( int y, int m, int d )
414{ 401{
415 setDate(QDate(y, m, d)); 402 setDate(QDate(y, m, d));
416} 403}
417 404
418void DateBookWeek::setDate(QDate newdate) 405void DateBookWeek::setDate(QDate newdate)
419{ 406{
420 bdate=newdate; 407 bdate=newdate;
421 dow = newdate.dayOfWeek(); 408 dow = newdate.dayOfWeek();
422 header->setDate( newdate ); 409 header->setDate( newdate );
423} 410}
424 411
425void DateBookWeek::dateChanged( QDate &newdate ) 412void DateBookWeek::dateChanged( QDate &newdate )
426{ 413{
427 bdate=newdate; 414 bdate=newdate;
428 getEvents(); 415 getEvents();
429} 416}
430 417
431QDate DateBookWeek::date() const 418QDate DateBookWeek::date() const
432{ 419{
433 return bdate; 420 return bdate;
434} 421}
435 422
436void DateBookWeek::getEvents() 423void DateBookWeek::getEvents()
437{ 424{
438 QDate startWeek = weekDate(); 425 QDate startWeek = weekDate();
439 426
440 QDate endWeek = startWeek.addDays( 6 ); 427 QDate endWeek = startWeek.addDays( 6 );
441 QValueList<EffectiveEvent> eventList = db->getEffectiveEvents(startWeek, endWeek); 428 QValueList<EffectiveEvent> eventList = db->getEffectiveEvents(startWeek, endWeek);
442 view->showEvents( eventList ); 429 view->showEvents( eventList );
443 view->moveToHour( startTime ); 430 view->moveToHour( startTime );
444} 431}
445 432
446void DateBookWeek::generateAllDayTooltext( QString& text ) { 433void DateBookWeek::generateAllDayTooltext( QString& text ) {
447 text += "<b>" + tr("This is an all day event.") + "</b><br>"; 434 text += "<b>" + tr("This is an all day event.") + "</b><br>";
448} 435}
449 436
450void DateBookWeek::generateNormalTooltext( QString& str, const EffectiveEvent &ev ) { 437void DateBookWeek::generateNormalTooltext( QString& str, const EffectiveEvent &ev ) {
451 str += "<b>" + QObject::tr("Start") + "</b>: "; 438 str += "<b>" + QObject::tr("Start") + "</b>: ";
452 str += TimeString::timeString( ev.event().start().time(), ampm, FALSE ); 439 str += TimeString::timeString( ev.event().start().time(), ampm, FALSE );
453 if( ev.startDate()!=ev.endDate() ) { 440 if( ev.startDate()!=ev.endDate() ) {
454 str += " <i>" + TimeString::longDateString( ev.startDate() )+"</i>"; 441 str += " <i>" + TimeString::longDateString( ev.startDate() )+"</i>";
455 } 442 }
456 str += "<br>"; 443 str += "<br>";
457 str += "<b>" + QObject::tr("End") + "</b>: "; 444 str += "<b>" + QObject::tr("End") + "</b>: ";
458 str += TimeString::timeString( ev.event().end().time(), ampm, FALSE ); 445 str += TimeString::timeString( ev.event().end().time(), ampm, FALSE );
459 if( ev.startDate()!=ev.endDate() ) { 446 if( ev.startDate()!=ev.endDate() ) {
460 str += " <i>" + TimeString::longDateString( ev.endDate() ) + "</i>"; 447 str += " <i>" + TimeString::longDateString( ev.endDate() ) + "</i>";
461 } 448 }
462} 449}
463 450
464void DateBookWeek::slotShowEvent( const EffectiveEvent &ev ) 451void DateBookWeek::slotShowEvent( const EffectiveEvent &ev )
465{ 452{
466 if ( tHide->isActive() ) 453 if ( tHide->isActive() )
467 tHide->stop(); 454 tHide->stop();
468 455
469 // why would someone use "<"? Oh well, fix it up... 456 // why would someone use "<"? Oh well, fix it up...
@@ -514,128 +501,130 @@ void DateBookWeek::slotShowEvent( const EffectiveEvent &ev )
514 501
515 str += "<br><br>" + strNote; 502 str += "<br><br>" + strNote;
516 503
517 lblDesc->setText( str ); 504 lblDesc->setText( str );
518 lblDesc->resize( lblDesc->sizeHint() ); 505 lblDesc->resize( lblDesc->sizeHint() );
519 // move the label so it is "centerd" horizontally... 506 // move the label so it is "centerd" horizontally...
520 lblDesc->move( QMAX(0,(width() - lblDesc->width()) / 2), 0 ); 507 lblDesc->move( QMAX(0,(width() - lblDesc->width()) / 2), 0 );
521 lblDesc->show(); 508 lblDesc->show();
522} 509}
523 510
524void DateBookWeek::slotHideEvent() 511void DateBookWeek::slotHideEvent()
525{ 512{
526 tHide->start( 2000, true ); 513 tHide->start( 2000, true );
527} 514}
528 515
529void DateBookWeek::setStartViewTime( int startHere ) 516void DateBookWeek::setStartViewTime( int startHere )
530{ 517{
531 startTime = startHere; 518 startTime = startHere;
532 view->moveToHour( startTime ); 519 view->moveToHour( startTime );
533} 520}
534 521
535int DateBookWeek::startViewTime() const 522int DateBookWeek::startViewTime() const
536{ 523{
537 return startTime; 524 return startTime;
538} 525}
539 526
540void DateBookWeek::redraw() 527void DateBookWeek::redraw()
541{ 528{
542 getEvents(); 529 getEvents();
543} 530}
544 531
545void DateBookWeek::slotYearChanged( int y ) 532void DateBookWeek::slotYearChanged( int y )
546{ 533{
547 int totWeek; 534 int totWeek;
548 QDate d( y, 12, 31 ); 535 QDate d( y, 12, 31 );
549 int throwAway; 536 int throwAway;
550 calcWeek( d, totWeek, throwAway, bStartOnMonday ); 537 calcWeek( d, totWeek, throwAway, bStartOnMonday );
551 while ( totWeek == 1 ) { 538 while ( totWeek == 1 ) {
552 d = d.addDays( -1 ); 539 d = d.addDays( -1 );
553 calcWeek( d, totWeek, throwAway, bStartOnMonday ); 540 calcWeek( d, totWeek, throwAway, bStartOnMonday );
554 } 541 }
555} 542}
556 543
557void DateBookWeek::slotWeekChanged( bool onMonday ) 544void DateBookWeek::slotWeekChanged( bool onMonday )
558{ 545{
559 bStartOnMonday = onMonday; 546 bStartOnMonday = onMonday;
560 view->setStartOfWeek( bStartOnMonday ); 547 view->setStartOfWeek( bStartOnMonday );
561 header->setStartOfWeek( bStartOnMonday ); 548 header->setStartOfWeek( bStartOnMonday );
562 redraw(); 549 redraw();
563} 550}
564 551
565void DateBookWeek::slotClockChanged( bool ap ) 552void DateBookWeek::slotClockChanged( bool ap )
566{ 553{
567 ampm = ap; 554 ampm = ap;
568} 555}
569 556
570// return the date at the beginning of the week... 557// return the date at the beginning of the week...
571QDate DateBookWeek::weekDate() const 558QDate DateBookWeek::weekDate() const
572{ 559{
573 QDate d=bdate; 560 QDate d=bdate;
574 561
575 // Calculate offset to first day of week. 562 // Calculate offset to first day of week.
576 int dayoffset=d.dayOfWeek(); 563 int dayoffset=d.dayOfWeek();
577 if(bStartOnMonday) dayoffset--; 564 if(bStartOnMonday) dayoffset--;
565 else if( dayoffset == 7 )
566 dayoffset = 0;
578 567
579 return d.addDays(-dayoffset); 568 return d.addDays(-dayoffset);
580} 569}
581 570
582// this used to only be needed by datebook.cpp, but now we need it inside 571// this used to only be needed by datebook.cpp, but now we need it inside
583// week view since 572// week view since
584// we need to be able to figure out our total number of weeks on the fly... 573// we need to be able to figure out our total number of weeks on the fly...
585// this is probably the best place to put it.. 574// this is probably the best place to put it..
586 575
587// For Weeks that start on Monday... (EASY!) 576// For Weeks that start on Monday... (EASY!)
588// At the moment we will use ISO 8601 method for computing 577// At the moment we will use ISO 8601 method for computing
589// the week. Granted, other countries use other methods, 578// the week. Granted, other countries use other methods,
590// bet we aren't doing any Locale stuff at the moment. So, 579// bet we aren't doing any Locale stuff at the moment. So,
591// this should pass. This Algorithim is public domain and 580// this should pass. This Algorithim is public domain and
592// available at: 581// available at:
593// http://personal.ecu.edu/mccartyr/ISOwdALG.txt 582// http://personal.ecu.edu/mccartyr/ISOwdALG.txt
594// the week number is return, and the year number is returned in year 583// the week number is return, and the year number is returned in year
595// for Instance 2001/12/31 is actually the first week in 2002. 584// for Instance 2001/12/31 is actually the first week in 2002.
596// There is a more mathematical definition, but I will implement it when 585// There is a more mathematical definition, but I will implement it when
597// we are pass our deadline. 586// we are pass our deadline.
598 587
599// For Weeks that start on Sunday... (ahh... home rolled) 588// For Weeks that start on Sunday... (ahh... home rolled)
600// okay, if Jan 1 is on Friday or Saturday, 589// okay, if Jan 1 is on Friday or Saturday,
601// it will go to the pervious 590// it will go to the pervious
602// week... 591// week...
603 592
604bool calcWeek( const QDate &d, int &week, int &year, 593bool calcWeek( const QDate &d, int &week, int &year,
605 bool startOnMonday ) 594 bool startOnMonday )
606{ 595{
607 int weekNumber; 596 int weekNumber;
608 int yearNumber; 597 int yearNumber;
609 598
610 // remove a pesky warning, (Optimizations on g++) 599 // remove a pesky warning, (Optimizations on g++)
611 weekNumber = -1; 600 weekNumber = -1;
612 int jan1WeekDay = QDate(d.year(), 1, 1).dayOfWeek(); 601 int jan1WeekDay = QDate(d.year(), 1, 1).dayOfWeek();
613 int dayOfWeek = d.dayOfWeek(); 602 int dayOfWeek = d.dayOfWeek();
614 603
615 if ( !d.isValid() ) 604 if ( !d.isValid() )
616 return false; 605 return false;
617 606
618 if ( startOnMonday ) { 607 if ( startOnMonday ) {
619 // find the Jan1Weekday; 608 // find the Jan1Weekday;
620 if ( d.dayOfYear() <= ( 8 - jan1WeekDay) && jan1WeekDay > 4 ) { 609 if ( d.dayOfYear() <= ( 8 - jan1WeekDay) && jan1WeekDay > 4 ) {
621 yearNumber = d.year() - 1; 610 yearNumber = d.year() - 1;
622 if ( jan1WeekDay == 5 || ( jan1WeekDay == 6 && QDate::leapYear(yearNumber) ) ) 611 if ( jan1WeekDay == 5 || ( jan1WeekDay == 6 && QDate::leapYear(yearNumber) ) )
623 weekNumber = 53; 612 weekNumber = 53;
624 else 613 else
625 weekNumber = 52; 614 weekNumber = 52;
626 } else 615 } else
627 yearNumber = d.year(); 616 yearNumber = d.year();
628 if ( yearNumber == d.year() ) { 617 if ( yearNumber == d.year() ) {
629 int totalDays = 365; 618 int totalDays = 365;
630 if ( QDate::leapYear(yearNumber) ) 619 if ( QDate::leapYear(yearNumber) )
631 totalDays++; 620 totalDays++;
632 if ( ((totalDays - d.dayOfYear()) < (4 - dayOfWeek) ) 621 if ( ((totalDays - d.dayOfYear()) < (4 - dayOfWeek) )
633 || (jan1WeekDay == 7) && (totalDays - d.dayOfYear()) < 3) { 622 || (jan1WeekDay == 7) && (totalDays - d.dayOfYear()) < 3) {
634 yearNumber++; 623 yearNumber++;
635 weekNumber = 1; 624 weekNumber = 1;
636 } 625 }
637 } 626 }
638 if ( yearNumber == d.year() ) { 627 if ( yearNumber == d.year() ) {
639 int j = d.dayOfYear() + (7 - dayOfWeek) + ( jan1WeekDay - 1 ); 628 int j = d.dayOfYear() + (7 - dayOfWeek) + ( jan1WeekDay - 1 );
640 weekNumber = j / 7; 629 weekNumber = j / 7;
641 if ( jan1WeekDay > 4 ) 630 if ( jan1WeekDay > 4 )
diff --git a/core/pim/datebook/datebookweekheaderimpl.cpp b/core/pim/datebook/datebookweekheaderimpl.cpp
index ff7626f..770410e 100644
--- a/core/pim/datebook/datebookweekheaderimpl.cpp
+++ b/core/pim/datebook/datebookweekheaderimpl.cpp
@@ -9,107 +9,115 @@
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#include "datebookweekheaderimpl.h" 20#include "datebookweekheaderimpl.h"
21#include "datebookweekheader.h" 21#include "datebookweekheader.h"
22#include "datebookweek.h" 22#include "datebookweek.h"
23#include <qlabel.h> 23#include <qlabel.h>
24#include <qspinbox.h> 24#include <qspinbox.h>
25#include <qdatetime.h> 25#include <qdatetime.h>
26#include <qpe/resource.h> 26#include <qpe/resource.h>
27#include <qpe/datebookmonth.h> 27#include <qpe/datebookmonth.h>
28 28
29#include <qtoolbutton.h> 29#include <qtoolbutton.h>
30 30
31/* 31/*
32 * Constructs a DateBookWeekHeader which is a child of 'parent', with the 32 * Constructs a DateBookWeekHeader which is a child of 'parent', with the
33 * name 'name' and widget flags set to 'f' 33 * name 'name' and widget flags set to 'f'
34 */ 34 */
35DateBookWeekHeader::DateBookWeekHeader( bool startOnMonday, QWidget* parent, const char* name, WFlags fl ) 35DateBookWeekHeader::DateBookWeekHeader( bool startOnMonday, QWidget* parent, const char* name, WFlags fl )
36 : DateBookWeekHeaderBase( parent, name, fl ), 36 : DateBookWeekHeaderBase( parent, name, fl ),
37 bStartOnMonday( startOnMonday ) 37 bStartOnMonday( startOnMonday )
38{ 38{
39 setBackgroundMode( PaletteButton ); 39 setBackgroundMode( PaletteButton );
40 labelDate->setBackgroundMode( PaletteButton ); 40 labelDate->setBackgroundMode( PaletteButton );
41 backmonth->setPixmap( Resource::loadPixmap("fastback") ); 41 backmonth->setPixmap( Resource::loadPixmap("fastback") );
42 backweek->setPixmap( Resource::loadPixmap("back") ); 42 backweek->setPixmap( Resource::loadPixmap("back") );
43 forwardweek->setPixmap( Resource::loadPixmap("forward") ); 43 forwardweek->setPixmap( Resource::loadPixmap("forward") );
44 forwardmonth->setPixmap( Resource::loadPixmap("fastforward") ); 44 forwardmonth->setPixmap( Resource::loadPixmap("fastforward") );
45} 45}
46 46
47/* 47/*
48 * Destroys the object and frees any allocated resources 48 * Destroys the object and frees any allocated resources
49 */ 49 */
50DateBookWeekHeader::~DateBookWeekHeader() 50DateBookWeekHeader::~DateBookWeekHeader()
51{ 51{
52 // no need to delete child widgets, Qt does it all for us 52 // no need to delete child widgets, Qt does it all for us
53} 53}
54 54
55void DateBookWeekHeader::pickDate() 55void DateBookWeekHeader::pickDate()
56{ 56{
57 static QPopupMenu *m1 = 0; 57 static QPopupMenu *m1 = 0;
58 static DateBookMonth *picker = 0; 58 static DateBookMonth *picker = 0;
59 if ( !m1 ) { 59 if ( !m1 ) {
60 m1 = new QPopupMenu( this ); 60 m1 = new QPopupMenu( this );
61 picker = new DateBookMonth( m1, 0, TRUE ); 61 picker = new DateBookMonth( m1, 0, TRUE );
62 m1->insertItem( picker ); 62 m1->insertItem( picker );
63 connect( picker, SIGNAL( dateClicked( int, int, int ) ), this, SLOT( setDate( int, int, int ) ) ); 63 connect( picker, SIGNAL( dateClicked( int, int, int ) ), this, SLOT( setDate( int, int, int ) ) );
64 // connect( m1, SIGNAL( aboutToHide() ), this, SLOT( gotHide() ) ); 64 // connect( m1, SIGNAL( aboutToHide() ), this, SLOT( gotHide() ) );
65 } 65 }
66 picker->setDate( date.year(), date.month(), date.day() ); 66 picker->setDate( date.year(), date.month(), date.day() );
67 m1->popup(mapToGlobal(labelDate->pos()+QPoint(0,labelDate->height()))); 67 m1->popup(mapToGlobal(labelDate->pos()+QPoint(0,labelDate->height())));
68 picker->setFocus(); 68 picker->setFocus();
69} 69}
70 70
71void DateBookWeekHeader::nextMonth() 71void DateBookWeekHeader::nextMonth()
72{ 72{
73 qWarning("nextMonth() " );
73 setDate(date.addDays(28)); 74 setDate(date.addDays(28));
74} 75}
75void DateBookWeekHeader::prevMonth() 76void DateBookWeekHeader::prevMonth()
76{ 77{
78 qWarning("prevMonth() " );
77 setDate(date.addDays(-28)); 79 setDate(date.addDays(-28));
78} 80}
79void DateBookWeekHeader::nextWeek() 81void DateBookWeekHeader::nextWeek()
80{ 82{
83 qWarning("nextWeek() " );
81 setDate(date.addDays(7)); 84 setDate(date.addDays(7));
82} 85}
83void DateBookWeekHeader::prevWeek() 86void DateBookWeekHeader::prevWeek()
84{ 87{
88 qWarning("prevWeek() ");
85 setDate(date.addDays(-7)); 89 setDate(date.addDays(-7));
86} 90}
87 91
88void DateBookWeekHeader::setDate( int y, int m, int d ) 92void DateBookWeekHeader::setDate( int y, int m, int d )
89{ 93{
90 setDate(QDate(y,m,d)); 94 setDate(QDate(y,m,d));
91} 95}
92 96
93void DateBookWeekHeader::setDate(const QDate &d) { 97void DateBookWeekHeader::setDate(const QDate &d) {
94 int year,week,dayofweek; 98 int year,week,dayofweek;
95 date=d; 99 date=d;
96 dayofweek=d.dayOfWeek(); 100 dayofweek=d.dayOfWeek();
97 if(bStartOnMonday) dayofweek--; 101 if(bStartOnMonday)
102 dayofweek--;
103 else if( dayofweek == 7 )
104 /* we already have the right day -7 would lead to the current week..*/
105 dayofweek = 0;
106
98 date=date.addDays(-dayofweek); 107 date=date.addDays(-dayofweek);
99
100 calcWeek(date,week,year,bStartOnMonday); 108 calcWeek(date,week,year,bStartOnMonday);
101 QDate start=date; 109 QDate start=date;
102 QDate stop=start.addDays(6); 110 QDate stop=start.addDays(6);
103 labelDate->setText( QString::number(start.day()) + "." + 111 labelDate->setText( QString::number(start.day()) + "." +
104 start.monthName(start.month()) + "-" + 112 start.monthName(start.month()) + "-" +
105 QString::number(stop.day()) + "." + 113 QString::number(stop.day()) + "." +
106 start.monthName(stop.month()) +" ("+ 114 start.monthName(stop.month()) +" ("+
107 tr("w")+":"+QString::number( week ) +")"); 115 tr("w")+":"+QString::number( week ) +")");
108 emit dateChanged(date); 116 emit dateChanged(date);
109} 117}
110 118
111void DateBookWeekHeader::setStartOfWeek( bool onMonday ) 119void DateBookWeekHeader::setStartOfWeek( bool onMonday )
112{ 120{
113 bStartOnMonday = onMonday; 121 bStartOnMonday = onMonday;
114 setDate( date ); 122 setDate( date );
115} 123}
diff --git a/core/pim/datebook/datebookweeklst.cpp b/core/pim/datebook/datebookweeklst.cpp
index 7817042..aad1f3a 100644
--- a/core/pim/datebook/datebookweeklst.cpp
+++ b/core/pim/datebook/datebookweeklst.cpp
@@ -1,303 +1,309 @@
1#include "datebookweeklst.h" 1#include "datebookweeklst.h"
2 2
3#include "datebookweekheaderimpl.h" 3#include "datebookweekheaderimpl.h"
4 4
5#include "datebook.h" 5#include "datebook.h"
6 6
7#include <qpe/calendar.h> 7#include <qpe/calendar.h>
8#include <qpe/datebookdb.h> 8#include <qpe/datebookdb.h>
9#include <qpe/event.h> 9#include <qpe/event.h>
10#include <qpe/qpeapplication.h> 10#include <qpe/qpeapplication.h>
11#include <qpe/timestring.h> 11#include <qpe/timestring.h>
12#include <qpe/datebookmonth.h> 12#include <qpe/datebookmonth.h>
13#include <qpe/config.h> 13#include <qpe/config.h>
14#include <qpe/resource.h> 14#include <qpe/resource.h>
15 15
16#include <qdatetime.h> 16#include <qdatetime.h>
17#include <qheader.h> 17#include <qheader.h>
18#include <qlabel.h> 18#include <qlabel.h>
19#include <qlayout.h> 19#include <qlayout.h>
20#include <qpainter.h> 20#include <qpainter.h>
21#include <qpopupmenu.h> 21#include <qpopupmenu.h>
22#include <qtimer.h> 22#include <qtimer.h>
23#include <qstyle.h> 23#include <qstyle.h>
24#include <qtoolbutton.h> 24#include <qtoolbutton.h>
25#include <qvbox.h> 25#include <qvbox.h>
26#include <qsizepolicy.h> 26#include <qsizepolicy.h>
27#include <qabstractlayout.h> 27#include <qabstractlayout.h>
28#include <qtl.h> 28#include <qtl.h>
29 29
30bool calcWeek(const QDate &d, int &week, int &year,bool startOnMonday = false); 30bool calcWeek(const QDate &d, int &week, int &year,bool startOnMonday = false);
31 31
32DateBookWeekLstHeader::DateBookWeekLstHeader(bool onM, QWidget* parent, const char* name, WFlags fl) 32DateBookWeekLstHeader::DateBookWeekLstHeader(bool onM, QWidget* parent, const char* name, WFlags fl)
33 : DateBookWeekLstHeaderBase(parent, name, fl) 33 : DateBookWeekLstHeaderBase(parent, name, fl)
34{ 34{
35 setBackgroundMode( PaletteButton ); 35 setBackgroundMode( PaletteButton );
36 labelDate->setBackgroundMode( PaletteButton ); 36 labelDate->setBackgroundMode( PaletteButton );
37 forwardweek->setBackgroundMode( PaletteButton ); 37 forwardweek->setBackgroundMode( PaletteButton );
38 forwardweek->setPixmap( Resource::loadPixmap("forward") ); 38 forwardweek->setPixmap( Resource::loadPixmap("forward") );
39 forwardmonth->setBackgroundMode( PaletteButton ); 39 forwardmonth->setBackgroundMode( PaletteButton );
40 forwardmonth->setPixmap( Resource::loadPixmap("fastforward") ); 40 forwardmonth->setPixmap( Resource::loadPixmap("fastforward") );
41 backweek->setBackgroundMode( PaletteButton ); 41 backweek->setBackgroundMode( PaletteButton );
42 backweek->setPixmap( Resource::loadPixmap("back") ); 42 backweek->setPixmap( Resource::loadPixmap("back") );
43 backmonth->setBackgroundMode( PaletteButton ); 43 backmonth->setBackgroundMode( PaletteButton );
44 backmonth->setPixmap( Resource::loadPixmap("fastback") ); 44 backmonth->setPixmap( Resource::loadPixmap("fastback") );
45 DateBookWeekLstHeaderBaseLayout->setSpacing(0); 45 DateBookWeekLstHeaderBaseLayout->setSpacing(0);
46 DateBookWeekLstHeaderBaseLayout->setMargin(0); 46 DateBookWeekLstHeaderBaseLayout->setMargin(0);
47 //setSizePolicy(QSizePolicy(QSizePolicy::Fixed,QSizePolicy::Expanding)); 47 //setSizePolicy(QSizePolicy(QSizePolicy::Fixed,QSizePolicy::Expanding));
48 setSizePolicy(QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed)); 48 setSizePolicy(QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed));
49 49
50 connect(backmonth, SIGNAL(clicked()), this, SLOT(prevMonth())); 50 connect(backmonth, SIGNAL(clicked()), this, SLOT(prevMonth()));
51 connect(backweek, SIGNAL(clicked()), this, SLOT(prevWeek())); 51 connect(backweek, SIGNAL(clicked()), this, SLOT(prevWeek()));
52 connect(forwardweek, SIGNAL(clicked()), this, SLOT(nextWeek())); 52 connect(forwardweek, SIGNAL(clicked()), this, SLOT(nextWeek()));
53 connect(forwardmonth, SIGNAL(clicked()), this, SLOT(nextMonth())); 53 connect(forwardmonth, SIGNAL(clicked()), this, SLOT(nextMonth()));
54 connect(labelDate, SIGNAL(clicked()), this, SLOT(pickDate())); 54 connect(labelDate, SIGNAL(clicked()), this, SLOT(pickDate()));
55 connect(dbl, SIGNAL(toggled(bool)), this, SIGNAL(setDbl(bool))); 55 connect(dbl, SIGNAL(toggled(bool)), this, SIGNAL(setDbl(bool)));
56 bStartOnMonday=onM; 56 bStartOnMonday=onM;
57} 57}
58DateBookWeekLstHeader::~DateBookWeekLstHeader(){} 58DateBookWeekLstHeader::~DateBookWeekLstHeader(){}
59 59
60void DateBookWeekLstHeader::setDate(const QDate &d) { 60void DateBookWeekLstHeader::setDate(const QDate &d) {
61 int year,week,dayofweek; 61 int year,week,dayofweek;
62 date=d; 62 date=d;
63 dayofweek=d.dayOfWeek(); 63 dayofweek=d.dayOfWeek();
64 if(bStartOnMonday) dayofweek--; 64 if(bStartOnMonday)
65 dayofweek--;
66 else if( dayofweek == 7 )
67 /* we already have the right day -7 would lead to the same week */
68 dayofweek = 0;
69
65 date=date.addDays(-dayofweek); 70 date=date.addDays(-dayofweek);
66 71
67 calcWeek(date,week,year,bStartOnMonday); 72 calcWeek(date,week,year,bStartOnMonday);
68 QDate start=date; 73 QDate start=date;
69 QDate stop=start.addDays(6); 74 QDate stop=start.addDays(6);
70 labelDate->setText( QString::number(start.day()) + "." + 75 labelDate->setText( QString::number(start.day()) + "." +
71 start.monthName(start.month()) + "-" + 76 start.monthName(start.month()) + "-" +
72 QString::number(stop.day()) + "." + 77 QString::number(stop.day()) + "." +
73 start.monthName(stop.month()) +" ("+ 78 start.monthName(stop.month()) +" ("+
74 tr("w")+":"+QString::number( week ) +")"); 79 tr("w")+":"+QString::number( week ) +")");
75 emit dateChanged(date); 80 emit dateChanged(date);
76} 81}
77 82
78void DateBookWeekLstHeader::pickDate() { 83void DateBookWeekLstHeader::pickDate() {
79 static QPopupMenu *m1 = 0; 84 static QPopupMenu *m1 = 0;
80 static DateBookMonth *picker = 0; 85 static DateBookMonth *picker = 0;
81 if ( !m1 ) { 86 if ( !m1 ) {
82 m1 = new QPopupMenu( this ); 87 m1 = new QPopupMenu( this );
83 picker = new DateBookMonth( m1, 0, TRUE ); 88 picker = new DateBookMonth( m1, 0, TRUE );
84 m1->insertItem( picker ); 89 m1->insertItem( picker );
85 connect( picker, SIGNAL( dateClicked( int, int, int ) ),this, SLOT( setDate( int, int, int ) ) ); 90 connect( picker, SIGNAL( dateClicked( int, int, int ) ),this, SLOT( setDate( int, int, int ) ) );
86 //connect( m1, SIGNAL( aboutToHide() ), 91 //connect( m1, SIGNAL( aboutToHide() ),
87 //this, SLOT( gotHide() ) ); 92 //this, SLOT( gotHide() ) );
88 } 93 }
89 picker->setDate( date.year(), date.month(), date.day() ); 94 picker->setDate( date.year(), date.month(), date.day() );
90 m1->popup(mapToGlobal(labelDate->pos()+QPoint(0,labelDate->height()))); 95 m1->popup(mapToGlobal(labelDate->pos()+QPoint(0,labelDate->height())));
91 picker->setFocus(); 96 picker->setFocus();
92} 97}
93void DateBookWeekLstHeader::setDate(int y, int m, int d) { 98void DateBookWeekLstHeader::setDate(int y, int m, int d) {
94 setDate(QDate(y,m,d)); 99 setDate(QDate(y,m,d));
95} 100}
96 101
97void DateBookWeekLstHeader::nextWeek() { 102void DateBookWeekLstHeader::nextWeek() {
98 setDate(date.addDays(7)); 103 setDate(date.addDays(7));
99} 104}
100void DateBookWeekLstHeader::prevWeek() { 105void DateBookWeekLstHeader::prevWeek() {
101 setDate(date.addDays(-7)); 106 setDate(date.addDays(-7));
102} 107}
103void DateBookWeekLstHeader::nextMonth() 108void DateBookWeekLstHeader::nextMonth()
104{ 109{
105 setDate(date.addDays(28)); 110 setDate(date.addDays(28));
106} 111}
107void DateBookWeekLstHeader::prevMonth() 112void DateBookWeekLstHeader::prevMonth()
108{ 113{
109 setDate(date.addDays(-28)); 114 setDate(date.addDays(-28));
110} 115}
111 116
112DateBookWeekLstDayHdr::DateBookWeekLstDayHdr(const QDate &d, bool /* onM */, 117DateBookWeekLstDayHdr::DateBookWeekLstDayHdr(const QDate &d, bool /* onM */,
113 QWidget* parent, 118 QWidget* parent,
114 const char* name, 119 const char* name,
115 WFlags fl ) 120 WFlags fl )
116 : DateBookWeekLstDayHdrBase(parent, name, fl) { 121 : DateBookWeekLstDayHdrBase(parent, name, fl) {
117 122
118 date=d; 123 date=d;
119 124
120 static const char *wdays={"MTWTFSSM"}; 125 static const QString wdays=tr("MTWTFSSM", "Week days");
121 char day=wdays[d.dayOfWeek()-1]; 126 char day=wdays[d.dayOfWeek()-1];
122 127
123 label->setText( QString(QObject::tr(QString(QChar(day)))) + " " +QString::number(d.day()) ); 128 label->setText( QString(QObject::tr(QString(QChar(day)))) + " " +QString::number(d.day()) );
124 add->setText("+"); 129 add->setText("+");
125 130
126 if (d == QDate::currentDate()) { 131 if (d == QDate::currentDate()) {
127 QPalette pal=label->palette(); 132 QPalette pal=label->palette();
128 pal.setColor(QColorGroup::Foreground, QColor(0,0,255)); 133 pal.setColor(QColorGroup::Foreground, QColor(0,0,255));
129 label->setPalette(pal); 134 label->setPalette(pal);
130 135
131 /* 136 /*
132 QFont f=label->font(); 137 QFont f=label->font();
133 f.setItalic(true); 138 f.setItalic(true);
134 label->setFont(f); 139 label->setFont(f);
135 label->setPalette(QPalette(QColor(0,0,255),label->backgroundColor())); 140 label->setPalette(QPalette(QColor(0,0,255),label->backgroundColor()));
136 */ 141 */
137 } else if (d.dayOfWeek() == 7) { // FIXME: Match any holiday 142 } else if (d.dayOfWeek() == 7) { // FIXME: Match any holiday
138 QPalette pal=label->palette(); 143 QPalette pal=label->palette();
139 pal.setColor(QColorGroup::Foreground, QColor(255,0,0)); 144 pal.setColor(QColorGroup::Foreground, QColor(255,0,0));
140 label->setPalette(pal); 145 label->setPalette(pal);
141 } 146 }
142 147
143 connect (label, SIGNAL(clicked()), this, SLOT(showDay())); 148 connect (label, SIGNAL(clicked()), this, SLOT(showDay()));
144 connect (add, SIGNAL(clicked()), this, SLOT(newEvent())); 149 connect (add, SIGNAL(clicked()), this, SLOT(newEvent()));
145} 150}
146 151
147void DateBookWeekLstDayHdr::showDay() { 152void DateBookWeekLstDayHdr::showDay() {
148 emit showDate(date.year(), date.month(), date.day()); 153 emit showDate(date.year(), date.month(), date.day());
149} 154}
150 155
151void DateBookWeekLstDayHdr::newEvent() { 156void DateBookWeekLstDayHdr::newEvent() {
152 QDateTime start, stop; 157 QDateTime start, stop;
153 start=stop=date; 158 start=stop=date;
154 start.setTime(QTime(10,0)); 159 start.setTime(QTime(10,0));
155 stop.setTime(QTime(12,0)); 160 stop.setTime(QTime(12,0));
156 161
157 emit addEvent(start,stop,"",0); 162 emit addEvent(start,stop,"",0);
158} 163}
159DateBookWeekLstEvent::DateBookWeekLstEvent(const EffectiveEvent &ev, 164DateBookWeekLstEvent::DateBookWeekLstEvent(const EffectiveEvent &ev,
160 int weeklistviewconfig, 165 int weeklistviewconfig,
161 QWidget* parent, 166 QWidget* parent,
162 const char* name, 167 const char* name,
163 WFlags fl ) : OClickableLabel(parent,name,fl), event(ev) 168 WFlags fl ) : OClickableLabel(parent,name,fl), event(ev)
164{ 169{
165 // old values... lastday = "__|__", middle=" |---", Firstday="00:00", 170 // old values... lastday = "__|__", middle=" |---", Firstday="00:00",
166 QString s,start,middle,end,day; 171 QString s,start,middle,end,day;
167 172
168 qDebug("weeklistviewconfig=%d",weeklistviewconfig); 173 qDebug("weeklistviewconfig=%d",weeklistviewconfig);
169 if(weeklistviewconfig==NONE) {// No times displayed. 174 if(weeklistviewconfig==NONE) {// No times displayed.
170 // start.sprintf("%.2d:%.2d-",ev.start().hour(),ev.start().minute()); 175 // start.sprintf("%.2d:%.2d-",ev.start().hour(),ev.start().minute());
171 // middle.sprintf("<--->"); 176 // middle.sprintf("<--->");
172 // end.sprintf("-%.2d:%.2d",ev.end().hour(),ev.end().minute()); 177 // end.sprintf("-%.2d:%.2d",ev.end().hour(),ev.end().minute());
173 // day.sprintf("%.2d:%.2d-%.2d:%.2d",ev.start().hour(),ev.start().minute(),ev.end().hour(),ev.end().minute()); 178 // day.sprintf("%.2d:%.2d-%.2d:%.2d",ev.start().hour(),ev.start().minute(),ev.end().hour(),ev.end().minute());
174 } else if(weeklistviewconfig==NORMAL) {// "Normal", only display start time. 179 } else if(weeklistviewconfig==NORMAL) {// "Normal", only display start time.
175 start.sprintf("%.2d:%.2d",ev.start().hour(),ev.start().minute()); 180 start.sprintf("%.2d:%.2d",ev.start().hour(),ev.start().minute());
176 middle.sprintf(" |---"); 181 middle.sprintf(" |---");
177 end.sprintf("__|__"); 182 end.sprintf("__|__");
178 day.sprintf("%.2d:%.2d",ev.start().hour(),ev.start().minute()); 183 day.sprintf("%.2d:%.2d",ev.start().hour(),ev.start().minute());
179 } else if(weeklistviewconfig==EXTENDED) { // Extended mode, display start and end times. 184 } else if(weeklistviewconfig==EXTENDED) { // Extended mode, display start and end times.
180 start.sprintf("%.2d:%.2d-",ev.start().hour(),ev.start().minute()); 185 start.sprintf("%.2d:%.2d-",ev.start().hour(),ev.start().minute());
181 middle.sprintf("<--->"); 186 middle.sprintf("<--->");
182 end.sprintf("-%.2d:%.2d",ev.end().hour(),ev.end().minute()); 187 end.sprintf("-%.2d:%.2d",ev.end().hour(),ev.end().minute());
183 day.sprintf("%.2d:%.2d-%.2d:%.2d",ev.start().hour(),ev.start().minute(),ev.end().hour(),ev.end().minute()); 188 day.sprintf("%.2d:%.2d-%.2d:%.2d",ev.start().hour(),ev.start().minute(),ev.end().hour(),ev.end().minute());
184 } 189 }
185 190
186 if(ev.event().type() == Event::Normal) { 191 if(ev.event().type() == Event::Normal) {
187 if(ev.startDate()==ev.date() && ev.endDate()==ev.date()) {// day event. 192 if(ev.startDate()==ev.date() && ev.endDate()==ev.date()) {// day event.
188 s=day; 193 s=day;
189 } else if(ev.startDate()==ev.date()) {// start event. 194 } else if(ev.startDate()==ev.date()) {// start event.
190 s=start; 195 s=start;
191 } else if(ev.endDate()==ev.date()) { // end event. 196 } else if(ev.endDate()==ev.date()) { // end event.
192 s=end; 197 s=end;
193 } else {// middle day. 198 } else {// middle day.
194 s=middle; 199 s=middle;
195 } 200 }
196 } else { 201 } else {
197 s=""; 202 s="";
198 } 203 }
199 setText(QString(s) + " " + ev.description()); 204 setText(QString(s) + " " + ev.description());
200 connect(this, SIGNAL(clicked()), this, SLOT(editMe())); 205 connect(this, SIGNAL(clicked()), this, SLOT(editMe()));
201 setAlignment( int( QLabel::WordBreak | QLabel::AlignLeft ) ); 206 setAlignment( int( QLabel::WordBreak | QLabel::AlignLeft ) );
202} 207}
203void DateBookWeekLstEvent::editMe() { 208void DateBookWeekLstEvent::editMe() {
204 emit editEvent(event.event()); 209 emit editEvent(event.event());
205} 210}
206 211
207 212
208DateBookWeekLstView::DateBookWeekLstView(QValueList<EffectiveEvent> &ev, 213DateBookWeekLstView::DateBookWeekLstView(QValueList<EffectiveEvent> &ev,
209 const QDate &d, bool onM, 214 const QDate &d, bool onM,
210 QWidget* parent, 215 QWidget* parent,
211 const char* name, WFlags fl) 216 const char* name, WFlags fl)
212 : QWidget( parent, name, fl ) 217 : QWidget( parent, name, fl )
213{ 218{
214 Config config("DateBook"); 219 Config config("DateBook");
215 config.setGroup("Main"); 220 config.setGroup("Main");
216 int weeklistviewconfig=config.readNumEntry("weeklistviewconfig", NORMAL); 221 int weeklistviewconfig=config.readNumEntry("weeklistviewconfig", NORMAL);
217 qDebug("Read weeklistviewconfig: %d",weeklistviewconfig); 222 qDebug("Read weeklistviewconfig: %d",weeklistviewconfig);
218 223
219 bStartOnMonday=onM; 224 bStartOnMonday=onM;
220 setPalette(white); 225 setPalette(white);
221 setSizePolicy(QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding)); 226 setSizePolicy(QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding));
222 227
223 QVBoxLayout *layout = new QVBoxLayout( this ); 228 QVBoxLayout *layout = new QVBoxLayout( this );
224 229
225 qBubbleSort(ev); 230 qBubbleSort(ev);
226 QValueListIterator<EffectiveEvent> it; 231 QValueListIterator<EffectiveEvent> it;
227 it=ev.begin(); 232 it=ev.begin();
228 233
229 int dayOrder[7]; 234 int dayOrder[7];
230 if (bStartOnMonday) { 235 if (bStartOnMonday) {
231 for (int d=0; d<7; d++) dayOrder[d]=d+1; 236 for (int d=0; d<7; d++) dayOrder[d]=d+1;
232 } else { 237 } else {
233 for (int d=0; d<7; d++) dayOrder[d]=d; 238 for (int d=0; d<7; d++) dayOrder[d]=d;
234 dayOrder[0]=7; 239 dayOrder[0]=7;
235 } 240 }
236 241
237 // Calculate offset to first day of week. 242 // Calculate offset to first day of week.
238 int dayoffset=d.dayOfWeek(); 243 int dayoffset=d.dayOfWeek();
239 if(bStartOnMonday) dayoffset--; 244 if(bStartOnMonday) dayoffset--;
245 else if( dayoffset == 7 ) dayoffset = 0;
240 246
241 for (int i=0; i<7; i++) { 247 for (int i=0; i<7; i++) {
242 // Header 248 // Header
243 DateBookWeekLstDayHdr *hdr=new DateBookWeekLstDayHdr(d.addDays(i-dayoffset), bStartOnMonday,this); 249 DateBookWeekLstDayHdr *hdr=new DateBookWeekLstDayHdr(d.addDays(i-dayoffset), bStartOnMonday,this);
244 connect(hdr, SIGNAL(showDate(int,int,int)), this, SIGNAL(showDate(int,int,int))); 250 connect(hdr, SIGNAL(showDate(int,int,int)), this, SIGNAL(showDate(int,int,int)));
245 connect(hdr, SIGNAL(addEvent(const QDateTime &, const QDateTime &, const QString &, const QString &)), 251 connect(hdr, SIGNAL(addEvent(const QDateTime &, const QDateTime &, const QString &, const QString &)),
246 this, SIGNAL(addEvent(const QDateTime &, const QDateTime &, const QString &, const QString &))); 252 this, SIGNAL(addEvent(const QDateTime &, const QDateTime &, const QString &, const QString &)));
247 layout->addWidget(hdr); 253 layout->addWidget(hdr);
248 254
249 // Events 255 // Events
250 while ( (*it).date().dayOfWeek() == dayOrder[i] && it!=ev.end() ) { 256 while ( (*it).date().dayOfWeek() == dayOrder[i] && it!=ev.end() ) {
251 if(!(((*it).end().hour()==0) && ((*it).end().minute()==0) && ((*it).startDate()!=(*it).date()))) {// Skip events ending at 00:00 starting at another day. 257 if(!(((*it).end().hour()==0) && ((*it).end().minute()==0) && ((*it).startDate()!=(*it).date()))) {// Skip events ending at 00:00 starting at another day.
252 DateBookWeekLstEvent *l=new DateBookWeekLstEvent(*it,weeklistviewconfig,this); 258 DateBookWeekLstEvent *l=new DateBookWeekLstEvent(*it,weeklistviewconfig,this);
253 layout->addWidget(l); 259 layout->addWidget(l);
254 connect (l, SIGNAL(editEvent(const Event &)), this, SIGNAL(editEvent(const Event &))); 260 connect (l, SIGNAL(editEvent(const Event &)), this, SIGNAL(editEvent(const Event &)));
255 } 261 }
256 it++; 262 it++;
257 } 263 }
258 layout->addItem(new QSpacerItem(1,1, QSizePolicy::Minimum, QSizePolicy::Expanding)); 264 layout->addItem(new QSpacerItem(1,1, QSizePolicy::Minimum, QSizePolicy::Expanding));
259 } 265 }
260} 266}
261DateBookWeekLstView::~DateBookWeekLstView(){} 267DateBookWeekLstView::~DateBookWeekLstView(){}
262void DateBookWeekLstView::keyPressEvent(QKeyEvent *e) {e->ignore();} 268void DateBookWeekLstView::keyPressEvent(QKeyEvent *e) {e->ignore();}
263 269
264DateBookWeekLstDblView::DateBookWeekLstDblView(QValueList<EffectiveEvent> &ev1, 270DateBookWeekLstDblView::DateBookWeekLstDblView(QValueList<EffectiveEvent> &ev1,
265 QValueList<EffectiveEvent> &ev2, 271 QValueList<EffectiveEvent> &ev2,
266 QDate &d, bool onM, 272 QDate &d, bool onM,
267 QWidget* parent, 273 QWidget* parent,
268 const char* name, WFlags fl) 274 const char* name, WFlags fl)
269 : QWidget( parent, name, fl ) 275 : QWidget( parent, name, fl )
270{ 276{
271 QHBoxLayout *layout = new QHBoxLayout( this ); 277 QHBoxLayout *layout = new QHBoxLayout( this );
272 278
273 DateBookWeekLstView *w=new DateBookWeekLstView(ev1,d,onM,this); 279 DateBookWeekLstView *w=new DateBookWeekLstView(ev1,d,onM,this);
274 layout->addWidget(w); 280 layout->addWidget(w);
275 connect (w, SIGNAL(editEvent(const Event &)), this, SIGNAL(editEvent(const Event &))); 281 connect (w, SIGNAL(editEvent(const Event &)), this, SIGNAL(editEvent(const Event &)));
276 connect (w, SIGNAL(showDate(int,int,int)), this, SIGNAL(showDate(int,int,int))); 282 connect (w, SIGNAL(showDate(int,int,int)), this, SIGNAL(showDate(int,int,int)));
277 connect (w, SIGNAL(addEvent(const QDateTime &, const QDateTime &, const QString &,const QString &)), 283 connect (w, SIGNAL(addEvent(const QDateTime &, const QDateTime &, const QString &,const QString &)),
278 this, SIGNAL(addEvent(const QDateTime &, const QDateTime &, const QString &, const QString &))); 284 this, SIGNAL(addEvent(const QDateTime &, const QDateTime &, const QString &, const QString &)));
279 285
280 286
281 w=new DateBookWeekLstView(ev2,d.addDays(7),onM,this); 287 w=new DateBookWeekLstView(ev2,d.addDays(7),onM,this);
282 layout->addWidget(w); 288 layout->addWidget(w);
283 connect (w, SIGNAL(editEvent(const Event &)), this, SIGNAL(editEvent(const Event &))); 289 connect (w, SIGNAL(editEvent(const Event &)), this, SIGNAL(editEvent(const Event &)));
284 connect (w, SIGNAL(showDate(int,int,int)), this, SIGNAL(showDate(int,int,int))); 290 connect (w, SIGNAL(showDate(int,int,int)), this, SIGNAL(showDate(int,int,int)));
285 connect (w, SIGNAL(addEvent(const QDateTime &, const QDateTime &, const QString &, const QString &)), 291 connect (w, SIGNAL(addEvent(const QDateTime &, const QDateTime &, const QString &, const QString &)),
286 this, SIGNAL(addEvent(const QDateTime &, const QDateTime &, const QString &, const QString &))); 292 this, SIGNAL(addEvent(const QDateTime &, const QDateTime &, const QString &, const QString &)));
287} 293}
288 294
289DateBookWeekLst::DateBookWeekLst( bool ap, bool onM, DateBookDB *newDB, 295DateBookWeekLst::DateBookWeekLst( bool ap, bool onM, DateBookDB *newDB,
290 QWidget *parent, 296 QWidget *parent,
291 const char *name ) 297 const char *name )
292 : QWidget( parent, name ), 298 : QWidget( parent, name ),
293 db( newDB ), 299 db( newDB ),
294 startTime( 0 ), 300 startTime( 0 ),
295 ampm( ap ), 301 ampm( ap ),
296 bStartOnMonday(onM) 302 bStartOnMonday(onM)
297{ 303{
298 setFocusPolicy(StrongFocus); 304 setFocusPolicy(StrongFocus);
299 layout = new QVBoxLayout( this ); 305 layout = new QVBoxLayout( this );
300 layout->setMargin(0); 306 layout->setMargin(0);
301 307
302 header=new DateBookWeekLstHeader(onM, this); 308 header=new DateBookWeekLstHeader(onM, this);
303 layout->addWidget( header ); 309 layout->addWidget( header );
diff --git a/core/pim/datebook/dateentryimpl.cpp b/core/pim/datebook/dateentryimpl.cpp
index 13d2ce2..d9e5225 100644
--- a/core/pim/datebook/dateentryimpl.cpp
+++ b/core/pim/datebook/dateentryimpl.cpp
@@ -341,128 +341,130 @@ void DateEntry::startDateChanged( int y, int m, int d )
341 buttonStart->setText( TimeString::shortDate( startDate ) ); 341 buttonStart->setText( TimeString::shortDate( startDate ) );
342 342
343 // our pickers must be reset... 343 // our pickers must be reset...
344 startPicker->setDate( y, m, d ); 344 startPicker->setDate( y, m, d );
345 endPicker->setDate( y, m, d ); 345 endPicker->setDate( y, m, d );
346} 346}
347 347
348/* 348/*
349 * public slot 349 * public slot
350 */ 350 */
351void DateEntry::startTimeEdited( const QString &s ) 351void DateEntry::startTimeEdited( const QString &s )
352{ 352{
353 startTimeChanged(parseTime(s,ampm)); 353 startTimeChanged(parseTime(s,ampm));
354 updateTimeEdit(false,true); 354 updateTimeEdit(false,true);
355 timePickerStart->setHour(startTime.hour()); 355 timePickerStart->setHour(startTime.hour());
356 timePickerStart->setMinute(startTime.minute()); 356 timePickerStart->setMinute(startTime.minute());
357} 357}
358 358
359void DateEntry::startTimeChanged( const QTime &t ) 359void DateEntry::startTimeChanged( const QTime &t )
360{ 360{
361 int duration=startTime.secsTo(endTime); 361 int duration=startTime.secsTo(endTime);
362 startTime = t; 362 startTime = t;
363 endTime=t.addSecs(duration); 363 endTime=t.addSecs(duration);
364} 364}
365void DateEntry::startTimePicked( const QTime &t ) { 365void DateEntry::startTimePicked( const QTime &t ) {
366 if(m_showStart ){ 366 if(m_showStart ){
367 startTimeChanged(t); 367 startTimeChanged(t);
368 updateTimeEdit(true,true); 368 updateTimeEdit(true,true);
369 }else{ 369 }else{
370 endTimeChanged(t); 370 endTimeChanged(t);
371 updateTimeEdit(false, true ); 371 updateTimeEdit(false, true );
372 } 372 }
373} 373}
374 374
375/* 375/*
376 * public slot 376 * public slot
377 */ 377 */
378void DateEntry::typeChanged( const QString &s ) 378void DateEntry::typeChanged( const QString &s )
379{ 379{
380 bool b = s != "All Day"; 380 bool b = s != "All Day";
381 buttonStart->setEnabled( b ); 381 buttonStart->setEnabled( b );
382 comboStart->setEnabled( b ); 382 comboStart->setEnabled( b );
383 comboEnd->setEnabled( b ); 383 comboEnd->setEnabled( b );
384} 384}
385 385
386void DateEntry::slotRepeat() 386void DateEntry::slotRepeat()
387{ 387{
388 // Work around for compiler Bug.. 388 // Work around for compiler Bug..
389 RepeatEntry *e; 389 RepeatEntry *e;
390 390
391 // it is better in my opinion to just grab this from the mother, 391 // it is better in my opinion to just grab this from the mother,
392 // since, this dialog doesn't need to keep track of it... 392 // since, this dialog doesn't need to keep track of it...
393 if ( rp.type != Event::NoRepeat ) 393 if ( rp.type != Event::NoRepeat )
394 e = new RepeatEntry( startWeekOnMonday, rp, startDate, this); 394 e = new RepeatEntry( startWeekOnMonday, rp, startDate, this);
395 else 395 else
396 e = new RepeatEntry( startWeekOnMonday, startDate, this ); 396 e = new RepeatEntry( startWeekOnMonday, startDate, this );
397 397
398#if defined(Q_WS_QWS) || defined(_WS_QWS_) 398#if defined(Q_WS_QWS) || defined(_WS_QWS_)
399 e->showMaximized(); 399 e->showMaximized();
400#endif 400#endif
401 if ( e->exec() ) { 401 if ( e->exec() ) {
402 rp = e->repeatPattern(); 402 rp = e->repeatPattern();
403 setRepeatLabel(); 403 setRepeatLabel();
404 } 404 }
405 // deleting sounds like a nice idea...
406 delete e;
405} 407}
406 408
407void DateEntry::slotChangeStartOfWeek( bool onMonday ) 409void DateEntry::slotChangeStartOfWeek( bool onMonday )
408{ 410{
409 startWeekOnMonday = onMonday; 411 startWeekOnMonday = onMonday;
410} 412}
411 413
412Event DateEntry::event() 414Event DateEntry::event()
413{ 415{
414 Event ev; 416 Event ev;
415 Event::SoundTypeChoice st; 417 Event::SoundTypeChoice st;
416 ev.setDescription( comboDescription->currentText() ); 418 ev.setDescription( comboDescription->currentText() );
417 ev.setLocation( comboLocation->currentText() ); 419 ev.setLocation( comboLocation->currentText() );
418 ev.setCategories( comboCategory->currentCategories() ); 420 ev.setCategories( comboCategory->currentCategories() );
419 ev.setType( checkAllDay->isChecked() ? Event::AllDay : Event::Normal ); 421 ev.setType( checkAllDay->isChecked() ? Event::AllDay : Event::Normal );
420 if ( startDate > endDate ) { 422 if ( startDate > endDate ) {
421 QDate tmp = endDate; 423 QDate tmp = endDate;
422 endDate = startDate; 424 endDate = startDate;
423 startDate = tmp; 425 startDate = tmp;
424 } 426 }
425 427
426 // This is now done in the changed slots 428 // This is now done in the changed slots
427 // startTime = parseTime( comboStart->text(), ampm ); 429 // startTime = parseTime( comboStart->text(), ampm );
428 //endTime = parseTime( comboEnd->text(), ampm ); 430 //endTime = parseTime( comboEnd->text(), ampm );
429 431
430 if ( startTime > endTime && endDate == startDate ) { 432 if ( startTime > endTime && endDate == startDate ) {
431 QTime tmp = endTime; 433 QTime tmp = endTime;
432 endTime = startTime; 434 endTime = startTime;
433 startTime = tmp; 435 startTime = tmp;
434 } 436 }
435 // don't set the time if theres no need too 437 // don't set the time if theres no need too
436 if ( ev.type() == Event::AllDay ) { 438 if ( ev.type() == Event::AllDay ) {
437 startTime.setHMS( 0, 0, 0 ); 439 startTime.setHMS( 0, 0, 0 );
438 endTime.setHMS( 23, 59, 59 ); 440 endTime.setHMS( 23, 59, 59 );
439 } 441 }
440 442
441 // adjust start and end times based on timezone 443 // adjust start and end times based on timezone
442 QDateTime start( startDate, startTime ); 444 QDateTime start( startDate, startTime );
443 QDateTime end( endDate, endTime ); 445 QDateTime end( endDate, endTime );
444 time_t start_utc, end_utc; 446 time_t start_utc, end_utc;
445 447
446// qDebug( "tz: %s", timezone->currentZone().latin1() ); 448// qDebug( "tz: %s", timezone->currentZone().latin1() );
447 449
448 // get real timezone 450 // get real timezone
449 QString realTZ; 451 QString realTZ;
450 realTZ = QString::fromLocal8Bit( getenv("TZ") ); 452 realTZ = QString::fromLocal8Bit( getenv("TZ") );
451 453
452 // set timezone 454 // set timezone
453 if ( setenv( "TZ", timezone->currentZone(), true ) != 0 ) 455 if ( setenv( "TZ", timezone->currentZone(), true ) != 0 )
454 qWarning( "There was a problem setting the timezone." ); 456 qWarning( "There was a problem setting the timezone." );
455 457
456 // convert to UTC based on selected TZ (calling tzset internally) 458 // convert to UTC based on selected TZ (calling tzset internally)
457 start_utc = TimeConversion::toUTC( start ); 459 start_utc = TimeConversion::toUTC( start );
458 end_utc = TimeConversion::toUTC( end ); 460 end_utc = TimeConversion::toUTC( end );
459 461
460 // done playing around... put it all back 462 // done playing around... put it all back
461 unsetenv( "TZ" ); 463 unsetenv( "TZ" );
462 if ( !realTZ.isNull() ) 464 if ( !realTZ.isNull() )
463 if ( setenv( "TZ", realTZ, true ) != 0 ) 465 if ( setenv( "TZ", realTZ, true ) != 0 )
464 qWarning( "There was a problem setting the timezone." ); 466 qWarning( "There was a problem setting the timezone." );
465 467
466 // convert UTC to local time (calling tzset internally) 468 // convert UTC to local time (calling tzset internally)
467 ev.setStart( TimeConversion::fromUTC( start_utc ) ); 469 ev.setStart( TimeConversion::fromUTC( start_utc ) );
468 ev.setEnd( TimeConversion::fromUTC( end_utc ) ); 470 ev.setEnd( TimeConversion::fromUTC( end_utc ) );
diff --git a/core/pim/datebook/opie-datebook.control b/core/pim/datebook/opie-datebook.control
index 1a28448..fe5a086 100644
--- a/core/pim/datebook/opie-datebook.control
+++ b/core/pim/datebook/opie-datebook.control
@@ -1,11 +1,11 @@
1Package: opie-datebook 1Package: opie-datebook
2Files: bin/datebook apps/1Pim/datebook.desktop pics/datebook 2Files: bin/datebook apps/1Pim/datebook.desktop
3Priority: optional 3Priority: optional
4Section: opie/applications 4Section: opie/applications
5Conflicts: qpe-tkccalendar 5Conflicts: qpe-tkccalendar
6Maintainer: Warwick Allison <warwick@trolltech.com> 6Maintainer: Warwick Allison <warwick@trolltech.com>
7Architecture: arm 7Architecture: arm
8Version: $QPE_VERSION-$SUB_VERSION 8Depends: task-opie-minimal, libopie1, opie-pics
9Depends: task-opie-minimal, libopie1
10Description: A datebook/appointment manager 9Description: A datebook/appointment manager
11 A datebook/appointment manager for the Opie environment. 10 A datebook/appointment manager for the Opie environment.
11Version: $QPE_VERSION$EXTRAVERSION
diff --git a/core/pim/datebook/repeatentry.cpp b/core/pim/datebook/repeatentry.cpp
index 5637c4d..b1a162d 100644
--- a/core/pim/datebook/repeatentry.cpp
+++ b/core/pim/datebook/repeatentry.cpp
@@ -1,140 +1,162 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qtopia Environment. 4** This file is part of Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20 20
21#include "repeatentry.h" 21#include "repeatentry.h"
22 22
23#include <qpe/datebookmonth.h> 23#include <qpe/datebookmonth.h>
24#include <qpe/qpeapplication.h> 24#include <qpe/qpeapplication.h>
25#include <qpe/timestring.h> 25#include <qpe/timestring.h>
26 26
27#include <qbuttongroup.h> 27#include <qbuttongroup.h>
28#include <qlabel.h> 28#include <qlabel.h>
29#include <qpopupmenu.h> 29#include <qpopupmenu.h>
30#include <qspinbox.h> 30#include <qspinbox.h>
31#include <qtoolbutton.h> 31#include <qtoolbutton.h>
32 32
33#include <time.h> 33#include <time.h>
34 34
35// Global Templates for use in setting up the repeat label... 35// Global Templates for use in setting up the repeat label...
36const QString strDayTemplate = QObject::tr("Every"); 36// the problem is these strings get initialized before QPEApplication can install the translator -zecke
37const QString strYearTemplate = QObject::tr("%1 %2 every "); 37namespace {
38const QString strMonthDateTemplate = QObject::tr("The %1 every "); 38QString strDayTemplate;
39const QString strMonthDayTemplate = QObject::tr("The %1 %1 of every"); 39QString strYearTemplate;
40const QString strWeekTemplate = QObject::tr("Every "); 40QString strMonthDateTemplate;
41const QString dayLabel[] = { QObject::tr("Monday"), 41QString strMonthDayTemplate;
42 QObject::tr("Tuesday"), 42QString strWeekTemplate;
43 QObject::tr("Wednesday"), 43QString dayLabel[7];
44 QObject::tr("Thursday"), 44}
45 QObject::tr("Friday"),
46 QObject::tr("Saturday"),
47 QObject::tr("Sunday") };
48 45
46/*
47 * static linkage to not polute the symbol table...
48 * The problem is that const and static linkage are resolved prior to installing a translator
49 * leading to that the above strings are translted but to the original we delay the init of these strings...
50 * -zecke
51 */
52static void fillStrings() {
53 strDayTemplate = QObject::tr("Every");
54 strYearTemplate = QObject::tr("%1 %2 every ");
55 strMonthDateTemplate = QObject::tr("The %1 every ");
56 strMonthDayTemplate = QObject::tr("The %1 %1 of every");
57 strWeekTemplate = QObject::tr("Every ");
58 dayLabel[0] = QObject::tr("Monday");
59 dayLabel[1] = QObject::tr("Tuesday");
60 dayLabel[2] = QObject::tr("Wednesday");
61 dayLabel[3] = QObject::tr("Thursday");
62 dayLabel[4] = QObject::tr("Friday");
63 dayLabel[5] = QObject::tr("Saturday");
64 dayLabel[6] = QObject::tr("Sunday");
65}
49 66
50 static QString numberPlacing( int x );// return the proper word format for 67 static QString numberPlacing( int x );// return the proper word format for
51 // x (1st, 2nd, etc) 68 // x (1st, 2nd, etc)
52static int week( const QDate &dt ); // what week in the month is dt? 69static int week( const QDate &dt ); // what week in the month is dt?
53 70
54RepeatEntry::RepeatEntry( bool startOnMonday, 71RepeatEntry::RepeatEntry( bool startOnMonday,
55 const QDate &newStart, QWidget *parent, 72 const QDate &newStart, QWidget *parent,
56 const char *name, bool modal, WFlags fl ) 73 const char *name, bool modal, WFlags fl )
57 : RepeatEntryBase( parent, name, modal, fl ), 74 : RepeatEntryBase( parent, name, modal, fl ),
58 start( newStart ), 75 start( newStart ),
59 currInterval( NONE ), 76 currInterval( NONE ),
60 startWeekOnMonday( startOnMonday ) 77 startWeekOnMonday( startOnMonday )
61{ 78{
79 if (strDayTemplate.isEmpty() )
80 fillStrings();
81
62 init(); 82 init();
63 fraType->setButton( currInterval ); 83 fraType->setButton( currInterval );
64 chkNoEnd->setChecked( TRUE ); 84 chkNoEnd->setChecked( TRUE );
65 setupNone(); 85 setupNone();
66} 86}
67 87
68RepeatEntry::RepeatEntry( bool startOnMonday, const Event::RepeatPattern &rp, 88RepeatEntry::RepeatEntry( bool startOnMonday, const Event::RepeatPattern &rp,
69 const QDate &startDate, 89 const QDate &startDate,
70 QWidget *parent, const char *name, bool modal, 90 QWidget *parent, const char *name, bool modal,
71 WFlags fl ) 91 WFlags fl )
72 : RepeatEntryBase( parent, name, modal, fl ), 92 : RepeatEntryBase( parent, name, modal, fl ),
73 start( startDate ), 93 start( startDate ),
74 end( rp.endDate() ), 94 end( rp.endDate() ),
75 startWeekOnMonday( startOnMonday ) 95 startWeekOnMonday( startOnMonday )
76{ 96{
97 if (strDayTemplate.isEmpty() )
98 fillStrings();
77 // do some stuff with the repeat pattern 99 // do some stuff with the repeat pattern
78 init(); 100 init();
79 switch ( rp.type ) { 101 switch ( rp.type ) {
80 default: 102 default:
81 case Event::NoRepeat: 103 case Event::NoRepeat:
82 currInterval = NONE; 104 currInterval = NONE;
83 setupNone(); 105 setupNone();
84 break; 106 break;
85 case Event::Daily: 107 case Event::Daily:
86 currInterval = DAY; 108 currInterval = DAY;
87 setupDaily(); 109 setupDaily();
88 break; 110 break;
89 case Event::Weekly: 111 case Event::Weekly:
90 currInterval = WEEK; 112 currInterval = WEEK;
91 setupWeekly(); 113 setupWeekly();
92 int day, buttons; 114 int day, buttons;
93 for ( day = 0x01, buttons = 0; buttons < 7; 115 for ( day = 0x01, buttons = 0; buttons < 7;
94 day = day << 1, buttons++ ) { 116 day = day << 1, buttons++ ) {
95 if ( rp.days & day ) { 117 if ( rp.days & day ) {
96 if ( startWeekOnMonday ) 118 if ( startWeekOnMonday )
97 fraExtra->setButton( buttons ); 119 fraExtra->setButton( buttons );
98 else { 120 else {
99 if ( buttons == 7 ) 121 if ( buttons == 7 )
100 fraExtra->setButton( 0 ); 122 fraExtra->setButton( 0 );
101 else 123 else
102 fraExtra->setButton( buttons + 1 ); 124 fraExtra->setButton( buttons + 1 );
103 } 125 }
104 } 126 }
105 } 127 }
106 slotWeekLabel(); 128 slotWeekLabel();
107 break; 129 break;
108 case Event::MonthlyDay: 130 case Event::MonthlyDay:
109 currInterval = MONTH; 131 currInterval = MONTH;
110 setupMonthly(); 132 setupMonthly();
111 fraExtra->setButton( 0 ); 133 fraExtra->setButton( 0 );
112 slotMonthLabel( 0 ); 134 slotMonthLabel( 0 );
113 break; 135 break;
114 case Event::MonthlyDate: 136 case Event::MonthlyDate:
115 currInterval = MONTH; 137 currInterval = MONTH;
116 setupMonthly(); 138 setupMonthly();
117 fraExtra->setButton( 1 ); 139 fraExtra->setButton( 1 );
118 slotMonthLabel( 1 ); 140 slotMonthLabel( 1 );
119 break; 141 break;
120 case Event::Yearly: 142 case Event::Yearly:
121 currInterval = YEAR; 143 currInterval = YEAR;
122 setupYearly(); 144 setupYearly();
123 break; 145 break;
124 } 146 }
125 fraType->setButton( currInterval ); 147 fraType->setButton( currInterval );
126 spinFreq->setValue( rp.frequency ); 148 spinFreq->setValue( rp.frequency );
127 if ( !rp.hasEndDate ) { 149 if ( !rp.hasEndDate ) {
128 cmdEnd->setText( RepeatEntryBase::tr("No End Date") ); 150 cmdEnd->setText( RepeatEntryBase::tr("No End Date") );
129 chkNoEnd->setChecked( TRUE ); 151 chkNoEnd->setChecked( TRUE );
130 } else 152 } else
131 cmdEnd->setText( TimeString::shortDate( end ) ); 153 cmdEnd->setText( TimeString::shortDate( end ) );
132} 154}
133 155
134RepeatEntry::~RepeatEntry() 156RepeatEntry::~RepeatEntry()
135{ 157{
136} 158}
137 159
138Event::RepeatPattern RepeatEntry::repeatPattern() 160Event::RepeatPattern RepeatEntry::repeatPattern()
139{ 161{
140 QListIterator<QToolButton> it( listRTypeButtons ); 162 QListIterator<QToolButton> it( listRTypeButtons );
@@ -345,223 +367,223 @@ void RepeatEntry::init()
345 this, SLOT(endDateChanged(int, int, int)) ); 367 this, SLOT(endDateChanged(int, int, int)) );
346 QObject::connect( qApp, SIGNAL(weekChanged(bool)), 368 QObject::connect( qApp, SIGNAL(weekChanged(bool)),
347 this, SLOT(slotChangeStartOfWeek(bool)) ); 369 this, SLOT(slotChangeStartOfWeek(bool)) );
348 370
349 listRTypeButtons.setAutoDelete( TRUE ); 371 listRTypeButtons.setAutoDelete( TRUE );
350 listRTypeButtons.append( cmdNone ); 372 listRTypeButtons.append( cmdNone );
351 listRTypeButtons.append( cmdDay ); 373 listRTypeButtons.append( cmdDay );
352 listRTypeButtons.append( cmdWeek ); 374 listRTypeButtons.append( cmdWeek );
353 listRTypeButtons.append( cmdMonth ); 375 listRTypeButtons.append( cmdMonth );
354 listRTypeButtons.append( cmdYear ); 376 listRTypeButtons.append( cmdYear );
355 377
356 listExtra.setAutoDelete( TRUE ); 378 listExtra.setAutoDelete( TRUE );
357 listExtra.append( cmdExtra1 ); 379 listExtra.append( cmdExtra1 );
358 listExtra.append( cmdExtra2 ); 380 listExtra.append( cmdExtra2 );
359 listExtra.append( cmdExtra3 ); 381 listExtra.append( cmdExtra3 );
360 listExtra.append( cmdExtra4 ); 382 listExtra.append( cmdExtra4 );
361 listExtra.append( cmdExtra5 ); 383 listExtra.append( cmdExtra5 );
362 listExtra.append( cmdExtra6 ); 384 listExtra.append( cmdExtra6 );
363 listExtra.append( cmdExtra7 ); 385 listExtra.append( cmdExtra7 );
364} 386}
365 387
366void RepeatEntry::slotNoEnd( bool unused ) 388void RepeatEntry::slotNoEnd( bool unused )
367{ 389{
368 // if the item was toggled, then go ahead and set it to the maximum date 390 // if the item was toggled, then go ahead and set it to the maximum date
369 if ( unused ) { 391 if ( unused ) {
370 end.setYMD( 3000, 12, 31 ); 392 end.setYMD( 3000, 12, 31 );
371 cmdEnd->setText( RepeatEntryBase::tr("No End Date") ); 393 cmdEnd->setText( RepeatEntryBase::tr("No End Date") );
372 } else { 394 } else {
373 end = start; 395 end = start;
374 cmdEnd->setText( TimeString::shortDate(end) ); 396 cmdEnd->setText( TimeString::shortDate(end) );
375 } 397 }
376} 398}
377 399
378void RepeatEntry::endDateChanged( int y, int m, int d ) 400void RepeatEntry::endDateChanged( int y, int m, int d )
379{ 401{
380 end.setYMD( y, m, d ); 402 end.setYMD( y, m, d );
381 if ( end < start ) 403 if ( end < start )
382 end = start; 404 end = start;
383 cmdEnd->setText( TimeString::shortDate( end ) ); 405 cmdEnd->setText( TimeString::shortDate( end ) );
384 repeatPicker->setDate( end.year(), end.month(), end.day() ); 406 repeatPicker->setDate( end.year(), end.month(), end.day() );
385} 407}
386 408
387void RepeatEntry::setupRepeatLabel( const QString &s ) 409void RepeatEntry::setupRepeatLabel( const QString &s )
388{ 410{
389 lblVar1->setText( s ); 411 lblVar1->setText( s );
390} 412}
391 413
392void RepeatEntry::setupRepeatLabel( int x ) 414void RepeatEntry::setupRepeatLabel( int x )
393{ 415{
394 // change the spelling based on the value of x 416 // change the spelling based on the value of x
395 QString strVar2; 417 QString strVar2;
396 418
397 if ( x > 1 ) 419 if ( x > 1 )
398 lblVar1->show(); 420 lblVar1->show();
399 else 421 else
400 lblVar1->hide(); 422 lblVar1->hide();
401 423
402 switch ( currInterval ) { 424 switch ( currInterval ) {
403 case NONE: 425 case NONE:
404 break; 426 break;
405 case DAY: 427 case DAY:
406 if ( x > 1 ) 428 if ( x > 1 )
407 strVar2 = tr( "days" ); 429 strVar2 = tr( "days" );
408 else 430 else
409 strVar2 = tr( "day" ); 431 strVar2 = tr( "day" );
410 break; 432 break;
411 case WEEK: 433 case WEEK:
412 if ( x > 1 ) 434 if ( x > 1 )
413 strVar2 = tr( "weeks" ); 435 strVar2 = tr( "weeks" );
414 else 436 else
415 strVar2 = tr( "week" ); 437 strVar2 = tr( "week" );
416 break; 438 break;
417 case MONTH: 439 case MONTH:
418 if ( x > 1 ) 440 if ( x > 1 )
419 strVar2 = RepeatEntryBase::tr( "months" ); 441 strVar2 = RepeatEntryBase::tr( "months" );
420 else 442 else
421 strVar2 = tr( "month" ); 443 strVar2 = tr( "month" );
422 break; 444 break;
423 case YEAR: 445 case YEAR:
424 if ( x > 1 ) 446 if ( x > 1 )
425 strVar2 = RepeatEntryBase::tr( "years" ); 447 strVar2 = RepeatEntryBase::tr( "years" );
426 else 448 else
427 strVar2 = tr( "year" ); 449 strVar2 = tr( "year" );
428 break; 450 break;
429 } 451 }
430 if ( !strVar2.isNull() ) 452 if ( !strVar2.isNull() )
431 lblVar2->setText( strVar2 ); 453 lblVar2->setText( strVar2 );
432} 454}
433 455
434void RepeatEntry::showRepeatStuff() 456void RepeatEntry::showRepeatStuff()
435{ 457{
436 cmdEnd->show(); 458 cmdEnd->show();
437 chkNoEnd->show(); 459 chkNoEnd->show();
438 lblFreq->show(); 460 lblFreq->show();
439 lblEvery->show(); 461 lblEvery->show();
440 lblFreq->show(); 462 lblFreq->show();
441 spinFreq->show(); 463 spinFreq->show();
442 lblEnd->show(); 464 lblEnd->show();
443 lblRepeat->setText( RepeatEntryBase::tr("Every") ); 465 lblRepeat->setText( RepeatEntryBase::tr("Every") );
444} 466}
445 467
446void RepeatEntry::slotWeekLabel() 468void RepeatEntry::slotWeekLabel()
447{ 469{
448 QString str; 470 QString str;
449 QListIterator<QToolButton> it( listExtra ); 471 QListIterator<QToolButton> it( listExtra );
450 unsigned int i; 472 unsigned int i;
451 unsigned int keepMe; 473 unsigned int keepMe;
452 bool bNeedCarriage = FALSE; 474 bool bNeedCarriage = FALSE;
453 // don't do something we'll regret!!! 475 // don't do something we'll regret!!!
454 if ( currInterval != WEEK ) 476 if ( currInterval != WEEK )
455 return; 477 return;
456 478
457 if ( startWeekOnMonday ) 479 if ( startWeekOnMonday )
458 keepMe = start.dayOfWeek() - 1; 480 keepMe = start.dayOfWeek() - 1;
459 else 481 else
460 keepMe = start.dayOfWeek() % 7; 482 keepMe = start.dayOfWeek() % 7;
461 483
462 QStringList list; 484 QStringList list;
463 for ( i = 0; *it; ++it, i++ ) { 485 for ( i = 0; *it; ++it, i++ ) {
464 // a crazy check, if you are repeating weekly, the current day 486 // a crazy check, if you are repeating weekly, the current day
465 // must be selected!!! 487 // must be selected!!!
466 if ( i == keepMe && !( (*it)->isOn() ) ) 488 if ( i == keepMe && !( (*it)->isOn() ) )
467 (*it)->setOn( TRUE ); 489 (*it)->setOn( TRUE );
468 if ( (*it)->isOn() ) { 490 if ( (*it)->isOn() ) {
469 if ( startWeekOnMonday ) 491 if ( startWeekOnMonday )
470 list.append( dayLabel[i] ); 492 list.append( dayLabel[i] );
471 else { 493 else {
472 if ( i == 0 ) 494 if ( i == 0 )
473 list.append( dayLabel[6] ); 495 list.append( dayLabel[6] );
474 else 496 else
475 list.append( dayLabel[i - 1] ); 497 list.append( dayLabel[i - 1] );
476 } 498 }
477 } 499 }
478 } 500 }
479 QStringList::Iterator itStr; 501 QStringList::Iterator itStr;
480 for ( i = 0, itStr = list.begin(); itStr != list.end(); ++itStr, i++ ) { 502 for ( i = 0, itStr = list.begin(); itStr != list.end(); ++itStr, i++ ) {
481 if ( i == 3 ) 503 if ( i == 3 )
482 bNeedCarriage = TRUE; 504 bNeedCarriage = TRUE;
483 else 505 else
484 bNeedCarriage = FALSE; 506 bNeedCarriage = FALSE;
485 if ( str.isNull() ) 507 if ( str.isNull() )
486 str = *itStr; 508 str = *itStr;
487 else if ( i == list.count() - 1 ) { 509 else if ( i == list.count() - 1 ) {
488 if ( i < 2 ) 510 if ( i < 2 )
489 str += tr(" and ") + *itStr; 511 str += tr(" and ") + *itStr;
490 else { 512 else {
491 if ( bNeedCarriage ) 513 if ( bNeedCarriage )
492 str += tr( ",\nand " ) + *itStr; 514 str += tr( ",\nand " ) + *itStr;
493 else 515 else
494 str += tr( ", and " ) + *itStr; 516 str += tr( ", and " ) + *itStr;
495 } 517 }
496 } else { 518 } else {
497 if ( bNeedCarriage ) 519 if ( bNeedCarriage )
498 str += ",\n" + *itStr; 520 str += ",\n" + *itStr;
499 else 521 else
500 str += ", " + *itStr; 522 str += ", " + *itStr;
501 } 523 }
502 } 524 }
503 str = str.prepend( "on " ); 525 str = str.prepend( tr("on ") );
504 lblWeekVar->setText( str ); 526 lblWeekVar->setText( str );
505} 527}
506 528
507void RepeatEntry::slotMonthLabel( int type ) 529void RepeatEntry::slotMonthLabel( int type )
508{ 530{
509 QString str; 531 QString str;
510 if ( currInterval != MONTH || type > 1 ) 532 if ( currInterval != MONTH || type > 1 )
511 return; 533 return;
512 if ( type == 1 ) 534 if ( type == 1 )
513 str = strMonthDateTemplate.arg( numberPlacing(start.day()) ); 535 str = strMonthDateTemplate.arg( numberPlacing(start.day()) );
514 else 536 else
515 str = strMonthDayTemplate.arg( numberPlacing(week(start))) 537 str = strMonthDayTemplate.arg( numberPlacing(week(start)))
516 .arg( dayLabel[start.dayOfWeek() - 1] ); 538 .arg( dayLabel[start.dayOfWeek() - 1] );
517 lblRepeat->setText( str ); 539 lblRepeat->setText( str );
518} 540}
519 541
520void RepeatEntry::slotChangeStartOfWeek( bool onMonday ) 542void RepeatEntry::slotChangeStartOfWeek( bool onMonday )
521{ 543{
522 startWeekOnMonday = onMonday; 544 startWeekOnMonday = onMonday;
523 // we need to make this unintrusive as possible... 545 // we need to make this unintrusive as possible...
524 int saveSpin = spinFreq->value(); 546 int saveSpin = spinFreq->value();
525 char days = 0; 547 char days = 0;
526 int day; 548 int day;
527 QListIterator<QToolButton> itExtra( listExtra ); 549 QListIterator<QToolButton> itExtra( listExtra );
528 for ( day = 1; *itExtra; ++itExtra, day = day << 1 ) { 550 for ( day = 1; *itExtra; ++itExtra, day = day << 1 ) {
529 if ( (*itExtra)->isOn() ) { 551 if ( (*itExtra)->isOn() ) {
530 if ( !startWeekOnMonday ) 552 if ( !startWeekOnMonday )
531 days |= day; 553 days |= day;
532 else { 554 else {
533 if ( day == 1 ) 555 if ( day == 1 )
534 days |= Event::SUN; 556 days |= Event::SUN;
535 else 557 else
536 days |= day >> 1; 558 days |= day >> 1;
537 } 559 }
538 } 560 }
539 } 561 }
540 setupWeekly(); 562 setupWeekly();
541 spinFreq->setValue( saveSpin ); 563 spinFreq->setValue( saveSpin );
542 int buttons; 564 int buttons;
543 for ( day = 0x01, buttons = 0; buttons < 7; 565 for ( day = 0x01, buttons = 0; buttons < 7;
544 day = day << 1, buttons++ ) { 566 day = day << 1, buttons++ ) {
545 if ( days & day ) { 567 if ( days & day ) {
546 if ( startWeekOnMonday ) 568 if ( startWeekOnMonday )
547 fraExtra->setButton( buttons ); 569 fraExtra->setButton( buttons );
548 else { 570 else {
549 if ( buttons == 7 ) 571 if ( buttons == 7 )
550 fraExtra->setButton( 0 ); 572 fraExtra->setButton( 0 );
551 else 573 else
552 fraExtra->setButton( buttons + 1 ); 574 fraExtra->setButton( buttons + 1 );
553 } 575 }
554 } 576 }
555 } 577 }
556 slotWeekLabel(); 578 slotWeekLabel();
557} 579}
558 580
559static int week( const QDate &start ) 581static int week( const QDate &start )
560{ 582{
561 // figure out the week... 583 // figure out the week...
562 int stop = start.day(), 584 int stop = start.day(),
563 sentinel = start.dayOfWeek(), 585 sentinel = start.dayOfWeek(),
564 dayOfWeek = QDate( start.year(), start.month(), 1 ).dayOfWeek(), 586 dayOfWeek = QDate( start.year(), start.month(), 1 ).dayOfWeek(),
565 week = 1, 587 week = 1,
566 i; 588 i;
567 for ( i = 1; i < stop; i++ ) { 589 for ( i = 1; i < stop; i++ ) {