00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include <qtooltip.h>
00025 #include <qfiledialog.h>
00026 #include <qlayout.h>
00027 #include <qvbox.h>
00028 #include <qbuttongroup.h>
00029 #include <qvgroupbox.h>
00030 #include <qwidgetstack.h>
00031 #include <qdatetime.h>
00032 #include <qlistbox.h>
00033
00034 #include <kglobal.h>
00035 #include <klocale.h>
00036 #include <kiconloader.h>
00037 #include <kdebug.h>
00038 #include <knumvalidator.h>
00039
00040 #include <libkcal/event.h>
00041
00042 #include <libkdepim/kdateedit.h>
00043
00044 #include "koprefs.h"
00045
00046 #include "koeditorrecurrence.h"
00047 #include "koeditorrecurrence.moc"
00048
00049
00050 KOEditorRecurrence::KOEditorRecurrence(int spacing,QWidget* parent,
00051 const char* name) :
00052 QWidget( parent, name, 0 )
00053 {
00054 mSpacing = spacing;
00055
00056 mEnabled = false;
00057
00058 initMain();
00059 initExceptions();
00060
00061 initLayout();
00062 }
00063
00064 KOEditorRecurrence::~KOEditorRecurrence()
00065 {
00066 }
00067
00068 void KOEditorRecurrence::initLayout()
00069 {
00070 QGridLayout *layoutTop = new QGridLayout(this,1,1);
00071 layoutTop->setSpacing(mSpacing);
00072
00073 layoutTop->addMultiCellWidget(timeGroupBox,0,0,0,1);
00074 layoutTop->addMultiCellWidget(ruleGroupBox,1,1,0,1);
00075 layoutTop->addWidget(rangeGroupBox,2,0);
00076 layoutTop->addWidget(exceptionGroupBox,2,1);
00077 layoutTop->setColStretch(1,1);
00078 }
00079
00080 void KOEditorRecurrence::initMain()
00081 {
00082
00083 timeGroupBox = new QGroupBox( 1,QGroupBox::Horizontal,
00084 i18n("Appointment Time "),this, "User_2" );
00085
00086 QFrame *timeFrame = new QFrame(timeGroupBox,"timeFrame");
00087 QBoxLayout *layoutTimeFrame = new QHBoxLayout(timeFrame);
00088 layoutTimeFrame->setSpacing(mSpacing);
00089
00090 dateTimeLabel = new QLabel(timeFrame);
00091 layoutTimeFrame->addWidget(dateTimeLabel);
00092
00093
00094
00095
00096
00097
00098 ruleGroupBox = new QGroupBox( 1,QGroupBox::Horizontal,
00099 i18n("Recurrence Rule"),this,
00100 "ruleGroupBox" );
00101
00102 ruleFrame = new QFrame(ruleGroupBox,"ruleFrame");
00103 QBoxLayout *layoutRuleFrame = new QVBoxLayout(ruleFrame);
00104
00105 ruleButtonGroup = new QButtonGroup(1,Horizontal,ruleFrame);
00106 ruleButtonGroup->setFrameStyle(QFrame::NoFrame);
00107 dailyButton = new QRadioButton(i18n("Daily"), ruleButtonGroup);
00108 weeklyButton = new QRadioButton(i18n("Weekly"), ruleButtonGroup);
00109 monthlyButton = new QRadioButton(i18n("Monthly"), ruleButtonGroup);
00110 yearlyButton = new QRadioButton(i18n("Yearly"), ruleButtonGroup);
00111
00112 ruleSepFrame = new QFrame(ruleFrame);
00113 ruleSepFrame->setFrameStyle(QFrame::VLine|QFrame::Sunken);
00114
00115 initDaily();
00116 initWeekly();
00117 initMonthly();
00118 initYearly();
00119
00120 ruleStack = new QWidgetStack(ruleFrame);
00121 ruleStack->addWidget(dailyFrame,0);
00122 ruleStack->addWidget(weeklyFrame,1);
00123 ruleStack->addWidget(monthlyFrame,2);
00124 ruleStack->addWidget(yearlyFrame,3);
00125
00126 QBoxLayout *layoutRule = new QHBoxLayout;
00127 layoutRuleFrame->addLayout(layoutRule);
00128 layoutRule->addWidget(ruleButtonGroup);
00129 layoutRule->addWidget(ruleSepFrame);
00130 layoutRule->addStretch(1);
00131 layoutRule->addWidget(ruleStack);
00132 layoutRule->addStretch(1);
00133
00134 advancedRuleButton = new QCheckBox(i18n("Enable Advanced Rule:"),
00135 ruleFrame);
00136 advancedRuleButton->setEnabled(false);
00137
00138 advancedRuleEdit = new QLineEdit(ruleFrame);
00139 advancedRuleEdit->setText( "" );
00140 advancedRuleEdit->setMaxLength( 32767 );
00141 advancedRuleEdit->setEnabled(false);
00142
00143
00144 advancedRuleButton->hide();
00145 advancedRuleEdit->hide();
00146
00147 QBoxLayout *layoutAdvancedRule = new QHBoxLayout;
00148 layoutRuleFrame->addLayout(layoutAdvancedRule);
00149 layoutAdvancedRule->addWidget(advancedRuleButton);
00150 layoutAdvancedRule->addWidget(advancedRuleEdit);
00151
00152 connect(dailyButton, SIGNAL(toggled(bool)),
00153 this, SLOT(showDaily(bool)));
00154 connect(weeklyButton, SIGNAL(toggled(bool)),
00155 this, SLOT(showWeekly(bool)));
00156 connect(monthlyButton, SIGNAL(toggled(bool)),
00157 this, SLOT(showMonthly(bool)));
00158 connect(yearlyButton, SIGNAL(toggled(bool)),
00159 this, SLOT(showYearly(bool)));
00160
00161
00162
00163 rangeGroupBox = new QGroupBox( 1,QGroupBox::Horizontal,
00164 i18n("Recurrence Range"),this,
00165 "rangeGroupBox" );
00166
00167 rangeButtonGroup = new QButtonGroup( rangeGroupBox,"rangeButtonGroup");
00168 rangeButtonGroup->setFrameStyle(QFrame::NoFrame);
00169
00170
00171 startDateLabel = new QLabel(i18n("Begin on:"), rangeButtonGroup);
00172
00173 noEndDateButton = new QRadioButton(i18n("No ending date"), rangeButtonGroup);
00174 endDurationButton = new QRadioButton(i18n("End after"), rangeButtonGroup);
00175 endDurationEdit = new QLineEdit(rangeButtonGroup);
00176 endDurationEdit->setValidator(new KIntValidator(0,9999,endDurationEdit));
00177 endDurationLabel = new QLabel(i18n("occurrence(s)"), rangeButtonGroup);
00178 endDateButton = new QRadioButton(i18n("End by:"), rangeButtonGroup);
00179 endDateEdit = new KDateEdit(rangeButtonGroup);
00180
00181
00182 QBoxLayout *layoutRange = new QVBoxLayout(rangeButtonGroup,5);
00183
00184
00185
00186
00187
00188
00189 layoutRange->addWidget(startDateLabel);
00190
00191 layoutRange->addWidget(noEndDateButton);
00192
00193 QBoxLayout *layoutEndDuration = new QHBoxLayout;
00194 layoutRange->addLayout(layoutEndDuration);
00195 layoutEndDuration->addWidget(endDurationButton);
00196 layoutEndDuration->addWidget(endDurationEdit);
00197 layoutEndDuration->addWidget(endDurationLabel);
00198
00199 QBoxLayout *layoutEndDate = new QHBoxLayout;
00200 layoutRange->addLayout(layoutEndDate);
00201 layoutEndDate->addWidget(endDateButton);
00202 layoutEndDate->addWidget(endDateEdit,AlignLeft);
00203
00204 layoutRange->addStretch(1);
00205
00206 connect(noEndDateButton, SIGNAL(toggled(bool)),
00207 this, SLOT(disableRange(bool)));
00208 connect(endDurationButton, SIGNAL(toggled(bool)),
00209 this, SLOT(enableDurationRange(bool)));
00210 connect(endDateButton, SIGNAL(toggled(bool)),
00211 this, SLOT(enableDateRange(bool)));
00212 }
00213
00214 void KOEditorRecurrence::showDaily(bool on)
00215 {
00216 if (on) ruleStack->raiseWidget(dailyFrame);
00217 }
00218
00219 void KOEditorRecurrence::showWeekly(bool on)
00220 {
00221 if (on) ruleStack->raiseWidget(weeklyFrame);
00222 }
00223
00224 void KOEditorRecurrence::showMonthly(bool on)
00225 {
00226 if (on) ruleStack->raiseWidget(monthlyFrame);
00227 }
00228
00229 void KOEditorRecurrence::showYearly(bool on)
00230 {
00231 if (on) ruleStack->raiseWidget(yearlyFrame);
00232 }
00233
00234 void KOEditorRecurrence::disableRange(bool on)
00235 {
00236 if (on) {
00237 endDateEdit->setEnabled(false);
00238 endDurationEdit->setEnabled(false);
00239 endDurationLabel->setEnabled(false);
00240 return;
00241 }
00242 }
00243
00244 void KOEditorRecurrence::enableDurationRange(bool on)
00245 {
00246 if (on) {
00247 endDurationEdit->setEnabled(true);
00248 endDurationLabel->setEnabled(true);
00249 endDateEdit->setEnabled(false);
00250 return;
00251 }
00252 }
00253
00254 void KOEditorRecurrence::enableDateRange(bool on)
00255 {
00256 if (on) {
00257 endDateEdit->setEnabled(true);
00258 endDurationEdit->setEnabled(false);
00259 endDurationLabel->setEnabled(false);
00260 return;
00261 }
00262 }
00263
00264 void KOEditorRecurrence::initDaily()
00265 {
00266 dailyFrame = new QFrame(ruleFrame);
00267 dailyFrame->setFrameStyle(QFrame::NoFrame);
00268
00269 everyNDays = new QLabel(i18n("Recur every"), dailyFrame);
00270
00271 nDaysEntry = new QLineEdit(dailyFrame);
00272 nDaysEntry->setValidator(new KIntValidator(0,999,nDaysEntry));
00273 nDaysEntry->setText( "1" );
00274 nDaysEntry->setMaxLength( 3 );
00275
00276 nDaysLabel = new QLabel(i18n("day(s)"), dailyFrame);
00277
00278 QBoxLayout *layoutDaily = new QHBoxLayout(dailyFrame,10);
00279 layoutDaily->addWidget(everyNDays);
00280 layoutDaily->addWidget(nDaysEntry);
00281 layoutDaily->addWidget(nDaysLabel);
00282 }
00283
00284 void KOEditorRecurrence::initWeekly()
00285 {
00286 weeklyFrame = new QFrame(ruleFrame);
00287 weeklyFrame->setFrameStyle(QFrame::NoFrame);
00288
00289 everyNWeeks = new QLabel(i18n("Recur every"), weeklyFrame);
00290
00291 nWeeksEntry = new QLineEdit(weeklyFrame);
00292 nWeeksEntry->setValidator(new KIntValidator(0,99,nWeeksEntry));
00293 nWeeksEntry->setText("1");
00294 nWeeksEntry->setMaxLength(2);
00295
00296 nWeeksLabel = new QLabel(i18n("week(s) on:"), weeklyFrame);
00297
00298 sundayBox = new QCheckBox(i18n("Sun"), weeklyFrame);
00299 mondayBox = new QCheckBox(i18n("Mon"), weeklyFrame);
00300 tuesdayBox = new QCheckBox(i18n("Tue"), weeklyFrame);
00301 wednesdayBox = new QCheckBox(i18n("Wed"), weeklyFrame);
00302 thursdayBox = new QCheckBox(i18n("Thu"), weeklyFrame);
00303 fridayBox = new QCheckBox(i18n("Fri"), weeklyFrame);
00304 saturdayBox = new QCheckBox(i18n("Sat"), weeklyFrame);
00305
00306 QBoxLayout *layoutWeekly = new QVBoxLayout(weeklyFrame,10);
00307
00308 QBoxLayout *layoutEveryN = new QHBoxLayout;
00309 layoutWeekly->addLayout(layoutEveryN);
00310 layoutEveryN->addWidget(everyNWeeks);
00311 layoutEveryN->addWidget(nWeeksEntry);
00312 layoutEveryN->addWidget(nWeeksLabel);
00313
00314 QBoxLayout *layoutDays = new QHBoxLayout;
00315 layoutWeekly->addLayout(layoutDays);
00316 layoutDays->addWidget(sundayBox);
00317 layoutDays->addWidget(mondayBox);
00318 layoutDays->addWidget(tuesdayBox);
00319 layoutDays->addWidget(wednesdayBox);
00320 layoutDays->addWidget(thursdayBox);
00321 layoutDays->addWidget(fridayBox);
00322 layoutDays->addWidget(saturdayBox);
00323 }
00324
00325 void KOEditorRecurrence::initMonthly()
00326 {
00327 monthlyFrame = new QVBox(ruleFrame);
00328 monthlyFrame->setFrameStyle(QFrame::NoFrame);
00329
00330
00331 monthlyButtonGroup = new QButtonGroup(monthlyFrame);
00332 monthlyButtonGroup->setFrameStyle(QFrame::NoFrame);
00333
00334 onNthDay = new QRadioButton(i18n("Recur on the"), monthlyButtonGroup);
00335 nthDayEntry = new QComboBox(false, monthlyButtonGroup);
00336 nthDayLabel = new QLabel(i18n("day"), monthlyButtonGroup);
00337
00338 onNthTypeOfDay = new QRadioButton(i18n("Recur on the"), monthlyButtonGroup);
00339 nthNumberEntry = new QComboBox(false, monthlyButtonGroup);
00340 nthTypeOfDayEntry = new QComboBox(false, monthlyButtonGroup);
00341
00342 monthCommonLabel = new QLabel(i18n("every"), monthlyButtonGroup);
00343 nMonthsEntry = new QLineEdit(monthlyButtonGroup);
00344 nMonthsEntry->setValidator(new KIntValidator(0,999,nMonthsEntry));
00345 nMonthsEntry->setText("1");
00346 nMonthsLabel = new QLabel(i18n("month(s)"), monthlyButtonGroup);
00347
00348 nthDayEntry->setSizeLimit( 7 );
00349 nthDayEntry->insertItem( i18n("1st") );
00350 nthDayEntry->insertItem( i18n("2nd") );
00351 nthDayEntry->insertItem( i18n("3rd") );
00352 nthDayEntry->insertItem( i18n("4th") );
00353 nthDayEntry->insertItem( i18n("5th") );
00354 nthDayEntry->insertItem( i18n("6th") );
00355 nthDayEntry->insertItem( i18n("7th") );
00356 nthDayEntry->insertItem( i18n("8th") );
00357 nthDayEntry->insertItem( i18n("9th") );
00358 nthDayEntry->insertItem( i18n("10th") );
00359 nthDayEntry->insertItem( i18n("11th") );
00360 nthDayEntry->insertItem( i18n("12th") );
00361 nthDayEntry->insertItem( i18n("13th") );
00362 nthDayEntry->insertItem( i18n("14th") );
00363 nthDayEntry->insertItem( i18n("15th") );
00364 nthDayEntry->insertItem( i18n("16th") );
00365 nthDayEntry->insertItem( i18n("17th") );
00366 nthDayEntry->insertItem( i18n("18th") );
00367 nthDayEntry->insertItem( i18n("19th") );
00368 nthDayEntry->insertItem( i18n("20th") );
00369 nthDayEntry->insertItem( i18n("21st") );
00370 nthDayEntry->insertItem( i18n("22nd") );
00371 nthDayEntry->insertItem( i18n("23rd") );
00372 nthDayEntry->insertItem( i18n("24th") );
00373 nthDayEntry->insertItem( i18n("25th") );
00374 nthDayEntry->insertItem( i18n("26th") );
00375 nthDayEntry->insertItem( i18n("27th") );
00376 nthDayEntry->insertItem( i18n("28th") );
00377 nthDayEntry->insertItem( i18n("29th") );
00378 nthDayEntry->insertItem( i18n("30th") );
00379 nthDayEntry->insertItem( i18n("31st") );
00380
00381 nthNumberEntry->insertItem( i18n("1st") );
00382 nthNumberEntry->insertItem( i18n("2nd") );
00383 nthNumberEntry->insertItem( i18n("3rd") );
00384 nthNumberEntry->insertItem( i18n("4th") );
00385 nthNumberEntry->insertItem( i18n("5th") );
00386
00387 nthTypeOfDayEntry->insertItem( i18n("Monday") );
00388 nthTypeOfDayEntry->insertItem( i18n("Tuesday") );
00389 nthTypeOfDayEntry->insertItem( i18n("Wednesday") );
00390 nthTypeOfDayEntry->insertItem( i18n("Thursday") );
00391 nthTypeOfDayEntry->insertItem( i18n("Friday") );
00392 nthTypeOfDayEntry->insertItem( i18n("Saturday") );
00393 nthTypeOfDayEntry->insertItem( i18n("Sunday") );
00394 nthTypeOfDayEntry->adjustSize();
00395
00396
00397 QGridLayout *layoutMonthly = new QGridLayout(monthlyButtonGroup,1,1,0,10);
00398
00399 layoutMonthly->addWidget(onNthDay,0,0);
00400 layoutMonthly->addWidget(nthDayEntry,0,1);
00401 layoutMonthly->addWidget(nthDayLabel,0,2);
00402
00403 layoutMonthly->addWidget(onNthTypeOfDay,1,0);
00404 layoutMonthly->addWidget(nthNumberEntry,1,1);
00405 layoutMonthly->addWidget(nthTypeOfDayEntry,1,2);
00406
00407 layoutMonthly->addMultiCellWidget(monthCommonLabel,0,1,3,3);
00408 layoutMonthly->addMultiCellWidget(nMonthsEntry,0,1,4,4);
00409 layoutMonthly->addMultiCellWidget(nMonthsLabel,0,1,5,5);
00410 }
00411
00412 void KOEditorRecurrence::initYearly()
00413 {
00414 yearlyFrame = new QVBox(ruleFrame);
00415 yearlyFrame->setFrameStyle(QFrame::NoFrame);
00416
00417 yearlyButtonGroup = new QButtonGroup(yearlyFrame);
00418 yearlyButtonGroup->setFrameStyle(QFrame::NoFrame);
00419
00420 yearMonthButton = new QRadioButton(i18n("Recur in the month of"),
00421 yearlyButtonGroup);
00422 yearMonthComboBox = new QComboBox(yearlyButtonGroup);
00423
00424 yearDayButton = new QRadioButton(i18n("Recur on this day"),
00425 yearlyButtonGroup);
00426
00427 yearCommonLabel = new QLabel(i18n("every"), yearlyButtonGroup);
00428 nYearsEntry = new QLineEdit(yearlyButtonGroup);
00429 nYearsEntry->setValidator(new KIntValidator(0,999,nYearsEntry));
00430 nYearsEntry->setMaxLength(3);
00431 nYearsEntry->setText("1");
00432 yearsLabel = new QLabel(i18n("year(s)"), yearlyButtonGroup);
00433
00434 yearMonthComboBox->insertItem(i18n("January"));
00435 yearMonthComboBox->insertItem(i18n("February"));
00436 yearMonthComboBox->insertItem(i18n("March"));
00437 yearMonthComboBox->insertItem(i18n("April"));
00438 yearMonthComboBox->insertItem(i18n("May"));
00439 yearMonthComboBox->insertItem(i18n("June"));
00440 yearMonthComboBox->insertItem(i18n("July"));
00441 yearMonthComboBox->insertItem(i18n("August"));
00442 yearMonthComboBox->insertItem(i18n("September"));
00443 yearMonthComboBox->insertItem(i18n("October"));
00444 yearMonthComboBox->insertItem(i18n("November"));
00445 yearMonthComboBox->insertItem(i18n("December"));
00446
00447
00448
00449
00450 QGridLayout *layoutYearly = new QGridLayout(yearlyButtonGroup,1,1,0,10);
00451
00452 layoutYearly->addWidget(yearMonthButton,0,0);
00453 layoutYearly->addWidget(yearMonthComboBox,0,1);
00454
00455 layoutYearly->addWidget(yearDayButton,1,0);
00456
00457 layoutYearly->addMultiCellWidget(yearCommonLabel,0,1,3,3);
00458 layoutYearly->addMultiCellWidget(nYearsEntry,0,1,4,4);
00459 layoutYearly->addMultiCellWidget(yearsLabel,0,1,5,5);
00460 }
00461
00462 void KOEditorRecurrence::initExceptions()
00463 {
00464
00465
00466
00467 exceptionGroupBox = new QGroupBox(1,QGroupBox::Horizontal,i18n("Exceptions"),
00468 this,"execeptionGroupBox");
00469
00470 QFrame *exceptionFrame = new QFrame(exceptionGroupBox,"timeFrame");
00471
00472 exceptionDateEdit = new KDateEdit(exceptionFrame);
00473 addExceptionButton = new QPushButton(i18n("Add"), exceptionFrame);
00474 changeExceptionButton = new QPushButton(i18n("Change"), exceptionFrame);
00475 deleteExceptionButton = new QPushButton(i18n("Delete"), exceptionFrame);
00476 exceptionList = new QListBox(exceptionFrame);
00477
00478 QGridLayout *layoutExceptionFrame = new QGridLayout(exceptionFrame,1,1,0,5);
00479 layoutExceptionFrame->addWidget(exceptionDateEdit,0,0);
00480 layoutExceptionFrame->addWidget(addExceptionButton,1,0);
00481 layoutExceptionFrame->addWidget(changeExceptionButton,2,0);
00482 layoutExceptionFrame->addWidget(deleteExceptionButton,3,0);
00483 layoutExceptionFrame->addMultiCellWidget(exceptionList,0,4,1,1);
00484 layoutExceptionFrame->setRowStretch(4,1);
00485 layoutExceptionFrame->setColStretch(1,3);
00486
00487 connect(addExceptionButton, SIGNAL(clicked()),
00488 this, SLOT(addException()));
00489 connect(changeExceptionButton, SIGNAL(clicked()),
00490 this, SLOT(changeException()));
00491 connect(deleteExceptionButton, SIGNAL(clicked()),
00492 this, SLOT(deleteException()));
00493 }
00494
00495 void KOEditorRecurrence::setEnabled(bool enabled)
00496 {
00497
00498
00499 mEnabled = enabled;
00500
00501
00502
00503
00504
00505
00506
00507
00508
00509
00510
00511
00512
00513
00514
00515
00516
00517
00518
00519
00520
00521
00522
00523
00524
00525
00526
00527
00528
00529
00530
00531
00532
00533
00534
00535
00536
00537 }
00538
00539 void KOEditorRecurrence::addException()
00540 {
00541 QDate tmpDate = exceptionDateEdit->date();
00542 QString date=KGlobal::locale()->formatDate(tmpDate);
00543 if(!exceptionList->findItem(date))
00544 {
00545 exceptionList->insertItem(date);
00546 mExceptionDates.append(tmpDate);
00547 }
00548 }
00549
00550 void KOEditorRecurrence::changeException()
00551 {
00552 int pos = exceptionList->currentItem();
00553 if (pos < 0) return;
00554
00555 QDate tmpDate = exceptionDateEdit->date();
00556 mExceptionDates[pos] = tmpDate;
00557 exceptionList->changeItem(KGlobal::locale()->formatDate(tmpDate),pos);
00558 }
00559
00560 void KOEditorRecurrence::deleteException()
00561 {
00562 int pos = exceptionList->currentItem();
00563 if (pos < 0) return;
00564
00565 mExceptionDates.remove( mExceptionDates.at(pos) );
00566 exceptionList->removeItem(pos);
00567 }
00568
00569 void KOEditorRecurrence::unsetAllCheckboxes()
00570 {
00571 dailyButton->setChecked(false);
00572 weeklyButton->setChecked(false);
00573 monthlyButton->setChecked(false);
00574 yearlyButton->setChecked(false);
00575
00576 onNthDay->setChecked(false);
00577 onNthTypeOfDay->setChecked(false);
00578 yearMonthButton->setChecked(false);
00579 yearDayButton->setChecked(false);
00580
00581 mondayBox->setChecked(false);
00582 tuesdayBox->setChecked(false);
00583 wednesdayBox->setChecked(false);
00584 thursdayBox->setChecked(false);
00585 fridayBox->setChecked(false);
00586 saturdayBox->setChecked(false);
00587 sundayBox->setChecked(false);
00588
00589 endDateButton->setChecked(false);
00590 noEndDateButton->setChecked(false);
00591 endDurationButton->setChecked(false);
00592 }
00593
00594
00595 void KOEditorRecurrence::checkDay(int day)
00596 {
00597 switch (day) {
00598 case 1:
00599 mondayBox->setChecked(true);
00600 break;
00601 case 2:
00602 tuesdayBox->setChecked(true);
00603 break;
00604 case 3:
00605 wednesdayBox->setChecked(true);
00606 break;
00607 case 4:
00608 thursdayBox->setChecked(true);
00609 break;
00610 case 5:
00611 fridayBox->setChecked(true);
00612 break;
00613 case 6:
00614 saturdayBox->setChecked(true);
00615 break;
00616 case 7:
00617 sundayBox->setChecked(true);
00618 break;
00619 }
00620 }
00621
00622 void KOEditorRecurrence::getCheckedDays(QBitArray &rDays)
00623 {
00624 rDays.fill(false);
00625 if (mondayBox->isChecked())
00626 rDays.setBit(0, 1);
00627 if (tuesdayBox->isChecked())
00628 rDays.setBit(1, 1);
00629 if (wednesdayBox->isChecked())
00630 rDays.setBit(2, 1);
00631 if (thursdayBox->isChecked())
00632 rDays.setBit(3, 1);
00633 if (fridayBox->isChecked())
00634 rDays.setBit(4, 1);
00635 if (saturdayBox->isChecked())
00636 rDays.setBit(5, 1);
00637 if (sundayBox->isChecked())
00638 rDays.setBit(6, 1);
00639 }
00640
00641 void KOEditorRecurrence::setCheckedDays(QBitArray &rDays)
00642 {
00643 if (rDays.testBit(0))
00644 mondayBox->setChecked(true);
00645 if (rDays.testBit(1))
00646 tuesdayBox->setChecked(true);
00647 if (rDays.testBit(2))
00648 wednesdayBox->setChecked(true);
00649 if (rDays.testBit(3))
00650 thursdayBox->setChecked(true);
00651 if (rDays.testBit(4))
00652 fridayBox->setChecked(true);
00653 if (rDays.testBit(5))
00654 saturdayBox->setChecked(true);
00655 if (rDays.testBit(6))
00656 sundayBox->setChecked(true);
00657 }
00658
00659
00660 void KOEditorRecurrence::setDateTimes(QDateTime start,QDateTime end)
00661 {
00662
00663
00664 currStartDateTime = start;
00665 currEndDateTime = end;
00666
00667 startDateLabel->setText(i18n("Begins on: %1")
00668 .arg(KGlobal::locale()->formatDate(start.date())));
00669 }
00670
00671
00672 void KOEditorRecurrence::setDefaults(QDateTime from, QDateTime to,bool)
00673 {
00674
00675 unsetAllCheckboxes();
00676
00677 setDateTimes(from,to);
00678
00679 startDateLabel->setText(i18n("Begins on: %1")
00680 .arg(KGlobal::locale()->formatDate(from.date())));
00681
00682 noEndDateButton->setChecked(true);
00683 weeklyButton->setChecked(true);
00684
00685 nDaysEntry->setText("1");
00686 nWeeksEntry->setText("1");
00687
00688 checkDay(from.date().dayOfWeek());
00689 onNthDay->setChecked(true);
00690 nthDayEntry->setCurrentItem(from.date().day()-1);
00691 nMonthsEntry->setText("1");
00692 yearDayButton->setChecked(true);
00693 nYearsEntry->setText("1");
00694 }
00695
00696 void KOEditorRecurrence::readEvent(Event *event)
00697 {
00698 QBitArray rDays;
00699 QPtrList<Recurrence::rMonthPos> rmp;
00700 QPtrList<int> rmd;
00701 int i;
00702 int month;
00703
00704 setDateTimes(event->dtStart(),event->dtEnd());
00705
00706
00707 unsetAllCheckboxes();
00708 switch (event->recurrence()->doesRecur()) {
00709 case Recurrence::rNone:
00710 break;
00711 case Recurrence::rDaily:
00712 dailyButton->setChecked(true);
00713 nDaysEntry->setText(QString::number(event->recurrence()->frequency()));
00714 break;
00715 case Recurrence::rWeekly:
00716 weeklyButton->setChecked(true);
00717 nWeeksEntry->setText(QString::number(event->recurrence()->frequency()));
00718
00719 rDays = event->recurrence()->days();
00720 setCheckedDays(rDays);
00721 break;
00722 case Recurrence::rMonthlyPos:
00723
00724
00725
00726 monthlyButton->setChecked(true);
00727 onNthTypeOfDay->setChecked(true);
00728 rmp = event->recurrence()->monthPositions();
00729 if (rmp.first()->negative)
00730 i = 5 - rmp.first()->rPos - 1;
00731 else
00732 i = rmp.first()->rPos - 1;
00733 nthNumberEntry->setCurrentItem(i);
00734 i = 0;
00735 while (!rmp.first()->rDays.testBit(i))
00736 ++i;
00737 nthTypeOfDayEntry->setCurrentItem(i);
00738 nMonthsEntry->setText(QString::number(event->recurrence()->frequency()));
00739 break;
00740 case Recurrence::rMonthlyDay:
00741 monthlyButton->setChecked(true);
00742 onNthDay->setChecked(true);
00743 rmd = event->recurrence()->monthDays();
00744 i = *rmd.first() - 1;
00745 nthDayEntry->setCurrentItem(i);
00746 nMonthsEntry->setText(QString::number(event->recurrence()->frequency()));
00747 break;
00748 case Recurrence::rYearlyMonth:
00749 case Recurrence::rYearlyDay:
00750 yearlyButton->setChecked( true );
00751 rmd = event->recurrence()->yearNums();
00752 month = *rmd.first();
00753 if ( month == event->dtStart().date().month() ) {
00754 yearDayButton->setChecked( true );
00755 } else {
00756 yearMonthButton->setChecked( true );
00757 yearMonthComboBox->setCurrentItem( month - 1 );
00758 }
00759 nYearsEntry->setText(QString::number(event->recurrence()->frequency()));
00760 break;
00761 default:
00762 break;
00763 }
00764
00765 startDateLabel->setText(i18n("Begins on: %1")
00766 .arg(KGlobal::locale()->formatDate(event->dtStart().date())));
00767
00768 if (event->recurrence()->doesRecur()) {
00769
00770
00771 if (event->recurrence()->duration() == -1)
00772 noEndDateButton->setChecked(true);
00773 else if (event->recurrence()->duration() == 0) {
00774 endDateButton->setChecked(true);
00775 endDateEdit->setDate(event->recurrence()->endDate());
00776 } else {
00777 endDurationButton->setChecked(true);
00778 endDurationEdit->setText(QString::number(event->recurrence()->duration()));
00779 }
00780 } else {
00781
00782
00783 noEndDateButton->setChecked(true);
00784 weeklyButton->setChecked(true);
00785 nDaysEntry->setText("1");
00786 nWeeksEntry->setText("1");
00787 checkDay(currStartDateTime.date().dayOfWeek());
00788 onNthDay->setChecked(true);
00789 nthDayEntry->setCurrentItem(currStartDateTime.date().day()-1);
00790 nMonthsEntry->setText("1");
00791 yearDayButton->setChecked(true);
00792 nYearsEntry->setText("1");
00793 }
00794
00795 exceptionDateEdit->setDate(QDate::currentDate());
00796
00797 exceptionList->clear();
00798 mExceptionDates.clear();
00799 DateList exDates = event->exDates();
00800 DateList::ConstIterator dit;
00801 for (dit = exDates.begin(); dit != exDates.end(); ++dit ) {
00802 exceptionList->insertItem(KGlobal::locale()->formatDate(*dit));
00803 mExceptionDates.append(*dit);
00804 }
00805 }
00806
00807 void KOEditorRecurrence::writeEvent(Event *event)
00808 {
00809
00810
00811 if (mEnabled) {
00812 int rDuration;
00813 QDate rEndDate;
00814 QString tmpStr;
00815
00816
00817 event->recurrence()->unsetRecurs();
00818
00819
00820
00821 if (noEndDateButton->isChecked()) {
00822 rDuration = -1;
00823 } else if (endDurationButton->isChecked()) {
00824 tmpStr = endDurationEdit->text();
00825 rDuration = tmpStr.toInt();
00826 } else {
00827 rDuration = 0;
00828 rEndDate = endDateEdit->date();
00829 }
00830
00831
00832 if (dailyButton->isChecked()) {
00833 int rFreq;
00834
00835 tmpStr = nDaysEntry->text();
00836 rFreq = tmpStr.toInt();
00837 if (rFreq < 1) rFreq = 1;
00838 if (rDuration != 0)
00839 event->recurrence()->setDaily(rFreq, rDuration);
00840 else
00841 event->recurrence()->setDaily(rFreq, rEndDate);
00842
00843 } else if (weeklyButton->isChecked()) {
00844 int rFreq;
00845 QBitArray rDays(7);
00846
00847 tmpStr = nWeeksEntry->text();
00848 rFreq = tmpStr.toInt();
00849 if (rFreq < 1) rFreq = 1;
00850
00851 getCheckedDays(rDays);
00852
00853 if (rDuration != 0)
00854 event->recurrence()->setWeekly(rFreq, rDays, rDuration);
00855 else
00856 event->recurrence()->setWeekly(rFreq, rDays, rEndDate);
00857 } else if (monthlyButton->isChecked()) {
00858 if (onNthTypeOfDay->isChecked()) {
00859
00860 int rFreq, rPos;
00861 QBitArray rDays(7);
00862
00863 tmpStr = nMonthsEntry->text();
00864 rFreq = tmpStr.toInt();
00865 if (rFreq < 1) rFreq = 1;
00866 rDays.fill(false);
00867 rPos = nthNumberEntry->currentItem() + 1;
00868 rDays.setBit(nthTypeOfDayEntry->currentItem());
00869 if (rDuration != 0)
00870 event->recurrence()->setMonthly(Recurrence::rMonthlyPos, rFreq, rDuration);
00871 else
00872 event->recurrence()->setMonthly(Recurrence::rMonthlyPos, rFreq, rEndDate);
00873 event->recurrence()->addMonthlyPos(rPos, rDays);
00874 } else {
00875
00876 int rFreq;
00877 short rDay;
00878
00879 tmpStr = nMonthsEntry->text();
00880 rFreq = tmpStr.toInt();
00881 if (rFreq < 1) rFreq = 1;
00882
00883 rDay = nthDayEntry->currentItem() + 1;
00884
00885 if (rDuration != 0)
00886 event->recurrence()->setMonthly(Recurrence::rMonthlyDay, rFreq, rDuration);
00887 else
00888 event->recurrence()->setMonthly(Recurrence::rMonthlyDay, rFreq, rEndDate);
00889 event->recurrence()->addMonthlyDay(rDay);
00890 }
00891 } else if (yearlyButton->isChecked()) {
00892 int rFreq = nYearsEntry->text().toInt();
00893 if (rFreq < 1) rFreq = 1;
00894
00895 int rMonth;
00896 if ( yearMonthButton->isChecked() ) {
00897 rMonth = yearMonthComboBox->currentItem() + 1;
00898 } else {
00899 rMonth = event->dtStart().date().month();
00900 }
00901 if ( rDuration != 0 ) {
00902 event->recurrence()->setYearly( Recurrence::rYearlyMonth, rFreq,
00903 rDuration );
00904 } else {
00905 event->recurrence()->setYearly( Recurrence::rYearlyMonth, rFreq,
00906 rEndDate );
00907 }
00908
00909 event->recurrence()->addYearlyNum( rMonth );
00910 }
00911 } else {
00912 event->recurrence()->unsetRecurs();
00913 }
00914
00915 event->setExDates(mExceptionDates);
00916 }
00917
00918
00919 #if 0
00920 QDate *KOEditorRecurrence::dateFromText(QString text)
00921 {
00922 QString tmpStr = text;
00923 tmpStr.remove(0,4);
00924 QString name = tmpStr.left(3);
00925
00926 int y, m, d;
00927
00928 name = name.upper();
00929
00930 y = tmpStr.right(4).toInt();
00931 d = tmpStr.mid(4,2).toInt();
00932 if (name == "JAN")
00933 m = 1;
00934 else if (name == "FEB")
00935 m = 2;
00936 else if (name == "MAR")
00937 m = 3;
00938 else if (name == "APR")
00939 m = 4;
00940 else if (name == "MAY")
00941 m = 5;
00942 else if (name == "JUN")
00943 m = 6;
00944 else if (name == "JUL")
00945 m = 7;
00946 else if (name == "AUG")
00947 m = 8;
00948 else if (name == "SEP")
00949 m = 9;
00950 else if (name == "OCT")
00951 m = 10;
00952 else if (name == "NOV")
00953 m = 11;
00954 else if (name == "DEC")
00955 m = 12;
00956 else
00957
00958 m = 0;
00959
00960 return new QDate(y,m,d);
00961 }
00962 #endif
00963
00964 void KOEditorRecurrence::setDateTimeStr(const QString &str)
00965 {
00966 dateTimeLabel->setText(str);
00967 }
00968
00969 bool KOEditorRecurrence::validateInput()
00970 {
00971
00972
00973 return true;
00974 }