00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "recurrenceactions.h"
00024
00025 #include "ui_recurrenceactionsscopewidget.h"
00026
00027 #include <KDialog>
00028 #include <KLocale>
00029 #include <KMessageBox>
00030
00031 #include <QPointer>
00032
00033 #include <boost/shared_ptr.hpp>
00034
00035 using namespace KCalUtils;
00036 using namespace KCalUtils::RecurrenceActions;
00037 using namespace KCalCore;
00038
00039 class ScopeWidget : public QWidget
00040 {
00041 public:
00042 ScopeWidget( int availableChoices, const KDateTime &dateTime, QWidget *parent )
00043 : QWidget( parent ), mAvailableChoices( availableChoices )
00044 {
00045 mUi.setupUi( this );
00046
00047 if ( ( mAvailableChoices & PastOccurrences ) == 0 ) {
00048 mUi.checkBoxPast->hide();
00049 } else {
00050 mUi.checkBoxPast->setText( i18nc( "@option:check calendar items before a certain date",
00051 "Items before %1",
00052 KGlobal::locale()->formatDateTime( dateTime ) ) );
00053 }
00054 if ( ( mAvailableChoices & SelectedOccurrence ) == 0 ) {
00055 mUi.checkBoxSelected->hide();
00056 } else {
00057 mUi.checkBoxSelected->setText( i18nc( "@option:check currently selected calendar item",
00058 "Selected item" ) );
00059 }
00060 if ( ( mAvailableChoices & FutureOccurrences ) == 0 ) {
00061 mUi.checkBoxFuture->hide();
00062 } else {
00063 mUi.checkBoxFuture->setText( i18nc( "@option:check calendar items after a certain date",
00064 "Items after %1",
00065 KGlobal::locale()->formatDateTime( dateTime ) ) );
00066 }
00067 }
00068
00069 void setMessage( const QString &message );
00070 void setIcon( const QIcon &icon );
00071
00072 void setCheckedChoices( int choices );
00073 int checkedChoices() const;
00074
00075 private:
00076 const int mAvailableChoices;
00077 Ui_RecurrenceActionsScopeWidget mUi;
00078 };
00079
00080 void ScopeWidget::setMessage( const QString &message )
00081 {
00082 mUi.messageLabel->setText( message );
00083 }
00084
00085 void ScopeWidget::setIcon( const QIcon &icon )
00086 {
00087 QStyleOption option;
00088 option.initFrom( this );
00089 mUi.iconLabel->setPixmap(
00090 icon.pixmap( style()->pixelMetric( QStyle::PM_MessageBoxIconSize, &option, this ) ) );
00091 }
00092
00093 void ScopeWidget::setCheckedChoices( int choices )
00094 {
00095
00096 choices &= mAvailableChoices;
00097
00098 mUi.checkBoxPast->setChecked( ( choices & PastOccurrences ) != 0 );
00099 mUi.checkBoxSelected->setChecked( ( choices & SelectedOccurrence ) != 0 );
00100 mUi.checkBoxFuture->setChecked( ( choices & FutureOccurrences ) != 0 );
00101 }
00102
00103 int ScopeWidget::checkedChoices() const
00104 {
00105 int result = NoOccurrence;
00106
00107 if ( mUi.checkBoxPast->isChecked() ) {
00108 result |= PastOccurrences;
00109 }
00110 if ( mUi.checkBoxSelected->isChecked() ) {
00111 result |= SelectedOccurrence;
00112 }
00113 if ( mUi.checkBoxFuture->isChecked() ) {
00114 result |= FutureOccurrences;
00115 }
00116
00117 return result;
00118 }
00119
00120 int RecurrenceActions::availableOccurrences( const Incidence::Ptr &incidence,
00121 const KDateTime &selectedOccurrence )
00122 {
00123 int result = NoOccurrence;
00124
00125 if ( incidence->recurrence()->recursOn( selectedOccurrence.date(),
00126 selectedOccurrence.timeSpec() ) ) {
00127 result |= SelectedOccurrence;
00128 }
00129
00130 if ( incidence->recurrence()->getPreviousDateTime( selectedOccurrence ).isValid() ) {
00131 result |= PastOccurrences;
00132 }
00133
00134 if ( incidence->recurrence()->getNextDateTime( selectedOccurrence ).isValid() ) {
00135 result |= FutureOccurrences;
00136 }
00137
00138 return result;
00139 }
00140
00141 int RecurrenceActions::questionMultipleChoice( const KDateTime &selectedOccurrence,
00142 const QString &message, const QString &caption,
00143 const KGuiItem &action, int availableChoices,
00144 int preselectedChoices, QWidget *parent )
00145 {
00146 QPointer<KDialog> dialog = new KDialog( parent );
00147 dialog->setCaption( caption );
00148 dialog->setButtons( KDialog::Ok | KDialog::Cancel );
00149 dialog->setDefaultButton( KDialog::Ok );
00150 dialog->setButtonGuiItem( KDialog::Ok, action );
00151
00152 ScopeWidget *widget = new ScopeWidget( availableChoices, selectedOccurrence, dialog );
00153 dialog->setMainWidget( widget );
00154
00155 widget->setMessage( message );
00156 widget->setIcon( widget->style()->standardIcon( QStyle::SP_MessageBoxQuestion ) );
00157 widget->setCheckedChoices( preselectedChoices );
00158
00159 const int result = dialog->exec();
00160 if ( dialog )
00161 dialog->deleteLater();
00162
00163 if ( result == QDialog::Rejected ) {
00164 return NoOccurrence;
00165 }
00166
00167 return widget->checkedChoices();
00168 }
00169
00170 int RecurrenceActions::questionSelectedAllCancel( const QString &message, const QString &caption,
00171 const KGuiItem &actionSelected,
00172 const KGuiItem &actionAll, QWidget *parent )
00173 {
00174 KDialog *dialog = new KDialog( parent );
00175 dialog->setCaption( caption );
00176 dialog->setButtons( KDialog::Yes | KDialog::Ok | KDialog::Cancel );
00177 dialog->setObjectName( "RecurrenceActions::questionSelectedAllCancel" );
00178 dialog->setDefaultButton( KDialog::Yes );
00179 dialog->setButtonGuiItem( KDialog::Yes, actionSelected );
00180 dialog->setButtonGuiItem( KDialog::Ok, actionAll );
00181
00182 bool checkboxResult = false;
00183 int result = KMessageBox::createKMessageBox(
00184 dialog,
00185 QMessageBox::Question,
00186 message,
00187 QStringList(),
00188 QString(),
00189 &checkboxResult,
00190 KMessageBox::Notify );
00191
00192 switch (result) {
00193 case KDialog::Yes:
00194 return SelectedOccurrence;
00195 case QDialog::Accepted:
00196
00197 return AllOccurrences;
00198 default:
00199 return NoOccurrence;
00200 }
00201
00202 return NoOccurrence;
00203 }
00204
00205 int RecurrenceActions::questionSelectedFutureAllCancel( const QString &message,
00206 const QString &caption,
00207 const KGuiItem &actionSelected,
00208 const KGuiItem &actionFuture,
00209 const KGuiItem &actionAll,
00210 QWidget *parent )
00211 {
00212 KDialog *dialog = new KDialog( parent );
00213 dialog->setCaption( caption );
00214 dialog->setButtons( KDialog::Yes | KDialog::No | KDialog::Ok | KDialog::Cancel );
00215 dialog->setObjectName( "RecurrenceActions::questionSelectedFutureAllCancel" );
00216 dialog->setDefaultButton( KDialog::Yes );
00217 dialog->setButtonGuiItem( KDialog::Yes, actionSelected );
00218 dialog->setButtonGuiItem( KDialog::No, actionFuture );
00219 dialog->setButtonGuiItem( KDialog::Ok, actionAll );
00220
00221 bool checkboxResult = false;
00222 int result = KMessageBox::createKMessageBox(
00223 dialog,
00224 QMessageBox::Question,
00225 message,
00226 QStringList(),
00227 QString(),
00228 &checkboxResult,
00229 KMessageBox::Notify );
00230
00231 switch (result) {
00232 case KDialog::Yes:
00233 return SelectedOccurrence;
00234 case KDialog::No:
00235 return FutureOccurrences;
00236 case QDialog::Accepted:
00237 return AllOccurrences;
00238 default:
00239 return NoOccurrence;
00240 }
00241
00242 return NoOccurrence;
00243 }
00244
00245