📄 repeatentry.cpp
字号:
: strEndWeekDay1) .arg( TimeString::localDayOfWeek( mEvent.start().date(), TIMESTRING_LENGTH ) ); QRadioButton *r1 = new QRadioButton(strDate, monthGroup); r1 = new QRadioButton(strWeekDay, monthGroup); r1 = new QRadioButton(strEndWeekDay, monthGroup); subStack->addWidget(monthGroup, 2); layout->addWidget(subStack); //QSpacerItem *si = new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding); //layout->addItem(si); // and last but not least, the label.. later. //QFrame#ifndef QTOPIA_PHONE QFrame *fr = new QFrame(this); fr->setMinimumSize(QSize(40, 50)); fr->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Expanding)); fr->setFrameStyle(QFrame::Box | QFrame::Sunken); subLayout = new QVBoxLayout(fr); subLayout->setSpacing(1); subLayout->setMargin(5); descLabel = new RichLabel(fr); descLabel->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Expanding)); subLayout->addWidget(descLabel); layout->addWidget(fr);#endif // pretend we just changed repeat types. setRepeatType(currentID(typeSelector));#ifdef QTOPIA_DESKTOP QHBoxLayout *hb = new QHBoxLayout(layout); QSpacerItem *s = new QSpacerItem(10,1); QPushButton *okBtn = new QPushButton(tr("OK"), this); QPushButton *cancelBtn = new QPushButton(tr("Cancel"), this); hb->addItem(s); hb->addWidget(okBtn); hb->addWidget(cancelBtn); connect(okBtn, SIGNAL(clicked()), this, SLOT(accept())); connect(cancelBtn, SIGNAL(clicked()), this, SLOT(reject()));#endif // Connection time. connect(typeSelector, SIGNAL(clicked(int)), this, SLOT(setRepeatType(int))); connect(freqSelector, SIGNAL(valueChanged(int)), this, SLOT(setFrequency(int))); connect(weekGroup, SIGNAL(dayToggled(int,bool)), this, SLOT(setRepeatOnWeekDay(int,bool))); connect(monthGroup, SIGNAL(clicked(int)), this, SLOT(setSubRepeatType(int)));#ifndef QTOPIA_PHONE resize(100,100);#endif}RepeatEntry::~RepeatEntry(){}QString RepeatEntry::trSmallOrdinal(int n) const{ if ( n == 1 ) return tr("first","eg. first Friday of month"); else if ( n == 2 ) return tr("second"); else if ( n == 3 ) return tr("third"); else if ( n == 4 ) return tr("fourth"); else if ( n == 5 ) return tr("fifth"); else return QString::number(n);}void RepeatEntry::refreshLabels(){ QString type; switch (mEvent.repeatType()) { case PimEvent::NoRepeat:#ifndef QTOPIA_PHONE descLabel->setText(tr("Don't repeat."));#endif break; case PimEvent::Daily:#ifndef QTOPIA_PHONE if (mEvent.frequency() == 1) descLabel->setText(tr("Repeat every day.")); else descLabel->setText(tr("Repeat every %1 days.").arg(mEvent.frequency()));#endif type = tr("Every %1 day(s)"); break; case PimEvent::Weekly: { type = tr("Every %1 week(s)");#ifndef QTOPIA_PHONE // first work out how many items in the list of weeks int i; int count = 0; int dow = mEvent.start().date().dayOfWeek(); int firstday = dow; int lastday = dow; for (i = 0; i < 7; i++) { if (mEvent.repeatOnWeekDay(dow)) { count++; lastday = dow; } dow++; if (dow > 7) dow = 1; } // pick a string QString buf; if (mEvent.frequency() == 1) { switch(count) { default: case 1: buf = tr("Repeat every week on %1.", "e.g. %1 = Monday" ); break; case 2: buf = tr("Repeat every week on %1 and %2.", "e.g. %1 = Monday, %2 = Wednesday..." ); break; case 3: buf = tr("Repeat every week on %1, %2 and %3.", "e.g. %1 = Monday, %2 = Wednesday..." ); break; case 4: buf = tr("Repeat every week on %1, %2, %3 and %4.", "e.g. %1 = Monday, %2 = Wednesday..." ); break; case 5: buf = tr("Repeat every week on %1, %2, %3, %4 and %5.", "e.g. %1 = Monday, %2 = Wednesday..." ); break; case 6: buf = tr("Repeat every week on %1, %2, %3, %4, %5 and %6.", "e.g. %1 = Monday, %2 = Wednesday..." ); break; case 7: buf = tr("Repeat every day."); break; } } else { switch(count) { default: case 1: buf = tr("Repeat every %1 weeks on %2.", "e.g. %1 = 3, %2 = Monday" ); break; case 2: buf = tr("Repeat every %1 weeks on %2 and %3.", "e.g. %1 = 3, %2 = Monday, %3 = Wednesday..." ); break; case 3: buf = tr("Repeat every %1 weeks on %2, %3 and %4.", "e.g. %1 = 3, %2 = Monday, %3 = Wednesday..." ); break; case 4: buf = tr("Repeat every %1 weeks on %2, %3, %4 and %5.", "e.g. %1 = 3, %2 = Monday, %3 = Wednesday..." ); break; case 5: buf = tr("Repeat every %1 weeks on %2, %3, %4, %5 and %6.", "e.g. %1 = 3, %2 = Monday, %3 = Wednesday..." ); break; case 6: buf = tr("Repeat every %1 weeks on %2, %3, %4, %5, %6 and %7.", "e.g. %1 = 3, %2 = Monday, %3 = Wednesday..." ); break; case 7: // more complex.... buf = tr("Repeat every %1 weeks from %2 to %3.", "e.g. %1 = 3, %2 = Monday, %3 = Sunday. " "Describes an event that occurs each day of the " "week for a full week, starting on %2 and ending on %3, every %1 weeks." ); break; } buf = buf.arg(mEvent.frequency()); if (count == 7) { // fill in aditional days now. buf = buf.arg( TimeString::localDayOfWeek(firstday, TimeString::Long ) ); buf = buf.arg( TimeString::localDayOfWeek(lastday, TimeString::Long ) ); } } if (count != 7) { dow = mEvent.start().date().dayOfWeek(); for (i = 0; i < 7; i++) { if (mEvent.repeatOnWeekDay(dow)) buf = buf.arg( TimeString::localDayOfWeek(dow, TimeString::Long ) ); dow++; if (dow > 7) dow = 1; } } descLabel->setText(buf);#endif } break; case PimEvent::MonthlyDate:#ifndef QTOPIA_PHONE if (mEvent.frequency() == 1) descLabel->setText( tr("Repeat every month on day %1 of the month.","eg. %1 = 3") .arg(mEvent.start().date().day()) ); else descLabel->setText( tr("Repeat every %1 months on day %2 of the month.", "eg. %1 = 4, %2 = 3rd") .arg(mEvent.frequency()) .arg(mEvent.start().date().day()) );#endif type = tr("Every %1 month(s)"); break; case PimEvent::MonthlyDay:#ifndef QTOPIA_PHONE if (mEvent.frequency() == 1) descLabel->setText(tr("Repeat every month on the %1 %2 of the month.", "eg. %1 %2 = 2nd Friday") .arg(trSmallOrdinal( Calendar::weekInMonth(mEvent.start().date()))) .arg(TimeString::localDayOfWeek(mEvent.start().date(), TimeString::Long)) ); else descLabel->setText(tr("Repeat every %1 months on the %2 %3 of the month.", "eg. %1 = 4, %2 %3 = 2nd Friday") .arg(mEvent.frequency()) .arg(trSmallOrdinal( Calendar::weekInMonth(mEvent.start().date()))) .arg(TimeString::localDayOfWeek(mEvent.start().date(), TimeString::Long)) );#endif type = tr("Every %1 month(s)"); break; case PimEvent::MonthlyEndDay: {#ifndef QTOPIA_PHONE int fromEndOfWeek = mEvent.start().date().daysInMonth() - mEvent.start().date().day(); fromEndOfWeek = fromEndOfWeek > 0 ? fromEndOfWeek / 7 + 1 : 1; if (mEvent.frequency() == 1) { if (fromEndOfWeek == 1) { descLabel->setText( tr("Repeat every month on the last %1 of the month.","eg. %1 = Friday") .arg(TimeString::localDayOfWeek(mEvent.start().date(), TimeString::Long)) ); } else { descLabel->setText( tr("Repeat every month on %1 last %2 of the month.", "eg. %1 = 2nd, %2 = Friday") .arg( trSmallOrdinal(fromEndOfWeek) ) .arg(TimeString::localDayOfWeek(mEvent.start().date(), TimeString::Long)) ); } } else { if (fromEndOfWeek == 1) { descLabel->setText( tr("Repeat every %2 months on the last %1 of the month.","eg. %1 = Friday, %2 = 4") .arg(TimeString::localDayOfWeek(mEvent.start().date(), TimeString::Long)) .arg(mEvent.frequency()) ); } else { descLabel->setText( tr("Repeat every %3 months on %1 last %2 of the month.", "eg. %1 = 2nd, %2 = Friday, %3 = 4") .arg( trSmallOrdinal(fromEndOfWeek) ) .arg(TimeString::localDayOfWeek(mEvent.start().date(), TimeString::Long)) .arg(mEvent.frequency()) ); } }#endif type = tr("Every %1 month(s)"); } break; case PimEvent::Yearly:#ifndef QTOPIA_PHONE if (mEvent.frequency() == 1) descLabel->setText(tr("Repeat every year.")); else descLabel->setText(tr("Repeat every %1 years.").arg(mEvent.frequency()));#endif type = tr("Every %1 year(s)"); break; default:#ifndef QTOPIA_PHONE descLabel->setText("Bug <2316>"); // No tr#endif break; } int spinbox = type.find("%1"); everyLabel->setText(type.left(spinbox)); typeLabel->setText(type.mid(spinbox+2));}PimEvent RepeatEntry::event() const{ return mEvent;}void RepeatEntry::setRepeatType(int t){ int i; switch (t) { case 0: mEvent.setRepeatType(PimEvent::Daily); fStack->raiseWidget(1); subStack->raiseWidget(0); break; case 1: mEvent.setRepeatType(PimEvent::Weekly); fStack->raiseWidget(1); subStack->raiseWidget(1); for(i = 1; i <= 7; i++) weekGroup->toggleDay(i, mEvent.repeatOnWeekDay(i)); break; case 2: // because has sub type, check if we are initializing by // if we are already in this tab. if not, then go the default. switch (mEvent.repeatType()) { case PimEvent::MonthlyDate: ((QRadioButton *)monthGroup->find(0))->setChecked(TRUE); break; case PimEvent::MonthlyDay: ((QRadioButton *)monthGroup->find(1))->setChecked(TRUE); break; case PimEvent::MonthlyEndDay: ((QRadioButton *)monthGroup->find(2))->setChecked(TRUE); break; default: ((QRadioButton *)monthGroup->find(0))->setChecked(TRUE); mEvent.setRepeatType(PimEvent::MonthlyDate); break; } fStack->raiseWidget(1); subStack->raiseWidget(2); break; case 3: mEvent.setRepeatType(PimEvent::Yearly); fStack->raiseWidget(1); subStack->raiseWidget(0); break; } refreshLabels();}void RepeatEntry::setSubRepeatType(int t){ if (currentID(typeSelector) == 2) { switch (t) { case 0: mEvent.setRepeatType(PimEvent::MonthlyDate); break; case 1: mEvent.setRepeatType(PimEvent::MonthlyDay); break; default: mEvent.setRepeatType(PimEvent::MonthlyEndDay); break; } } refreshLabels();}void RepeatEntry::setFrequency(int f){ mEvent.setFrequency(f); refreshLabels();}void RepeatEntry::setRepeatOnWeekDay(int d, bool b){ mEvent.setRepeatOnWeekDay(d, b); refreshLabels();}void RepeatEntry::setStartOnMonday(bool b){ weekGroup->setStartOnMonday(b);}void RepeatEntry::keyPressEvent( QKeyEvent *e ){ //qDebug( "key %d (up %d, down %d)", e->key(), Key_Up, Key_Down );#ifdef QTOPIA_PHONE switch ( e->key() ) { case Key_Left: nextButton( (QWidget**)typeBtn, 4, TRUE ); break; case Key_Right: nextButton( (QWidget**)typeBtn, 4 ); break; default: QDialog::keyPressEvent( e ); break; }#else QDialog::keyPressEvent( e );#endif}#include "repeatentry.moc"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -