00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
#ifndef _KOEDITORRECURRENCE_H
00024
#define _KOEDITORRECURRENCE_H
00025
00026
#include <qdatetime.h>
00027
#include <qwidget.h>
00028
#include <qbitarray.h>
00029
00030
#include <kdialogbase.h>
00031
00032
#include <libkcal/incidencebase.h>
00033
00034
class QWidgetStack;
00035
class QSpinBox;
00036
class QRadioButton;
00037
class QGroupBox;
00038
class QCheckBox;
00039
00040
class KDateEdit;
00041
namespace KCal {
00042
class Incidence;
00043 }
00044
using namespace KCal;
00045
00046
class RecurBase :
public QWidget
00047 {
00048
public:
00049 RecurBase(
QWidget *parent = 0,
const char *name = 0 );
00050
00051
void setFrequency(
int );
00052
int frequency();
00053
00054
00055
void setDateTimes(
QDateTime ,
QDateTime ) {}
00056
00057
QWidget *frequencyEdit();
00058
00059
protected:
00060
static QComboBox *createWeekCountCombo(
QWidget *parent=0,
const char *name=0 );
00061
static QComboBox *createWeekdayCombo(
QWidget *parent=0,
const char *name=0 );
00062
static QComboBox *createMonthNameCombo(
QWidget *parent=0,
const char *name=0 );
00063
QBoxLayout *createFrequencySpinBar(
QWidget *parent,
QLayout *layout,
00064
QString everyText,
QString unitText );
00065
00066
private:
00067
QSpinBox *mFrequencyEdit;
00068 };
00069
00070
class RecurDaily :
public RecurBase
00071 {
00072
public:
00073 RecurDaily(
QWidget *parent = 0,
const char *name = 0 );
00074 };
00075
00076
class RecurWeekly :
public RecurBase
00077 {
00078
public:
00079 RecurWeekly(
QWidget *parent = 0,
const char *name = 0 );
00080
00081
void setDays(
const QBitArray & );
00082
QBitArray days();
00083
00084
private:
00085
QCheckBox *mDayBoxes[7];
00086 };
00087
00088
class RecurMonthly :
public RecurBase
00089 {
00090
public:
00091 RecurMonthly(
QWidget *parent = 0,
const char *name = 0 );
00092
00093
void setByDay(
int day );
00094
void setByPos(
int count,
int weekday );
00095
00096
bool byDay();
00097
bool byPos();
00098
00099
int day();
00100
00101
int count();
00102
int weekday();
00103
00104
private:
00105
QRadioButton *mByDayRadio;
00106
QComboBox *mByDayCombo;
00107
00108
QRadioButton *mByPosRadio;
00109
QComboBox *mByPosCountCombo;
00110
QComboBox *mByPosWeekdayCombo;
00111 };
00112
00113
class RecurYearly :
public RecurBase
00114 {
00115
public:
00116
enum YearlyType { byDay, byPos, byMonth };
00117
00118 RecurYearly(
QWidget *parent = 0,
const char *name = 0 );
00119
00120
void setByDay(
int day );
00121
void setByPos(
int count,
int weekday,
int month );
00122
void setByMonth(
int day,
int month );
00123
00124 YearlyType getType();
00125
00126
int day();
00127
int posCount();
00128
int posWeekday();
00129
int posMonth();
00130
int monthDay();
00131
int month();
00132
00133
private:
00134
QRadioButton *mByMonthRadio;
00135
QRadioButton *mByPosRadio;
00136
QRadioButton *mByDayRadio;
00137
00138
QSpinBox *mByMonthSpin;
00139
QComboBox *mByMonthCombo;
00140
00141
QComboBox *mByPosDayCombo;
00142
QComboBox *mByPosWeekdayCombo;
00143
QComboBox *mByPosMonthCombo;
00144
00145
QSpinBox *mByDaySpin;
00146 };
00147
00148
class RecurrenceChooser :
public QWidget
00149 {
00150 Q_OBJECT
00151
public:
00152 RecurrenceChooser(
QWidget *parent = 0,
const char *name = 0 );
00153
00154
enum { Daily, Weekly, Monthly, Yearly };
00155
00156
void setType(
int );
00157
int type();
00158
00159 signals:
00160
void chosen(
int );
00161
00162
protected slots:
00163
void emitChoice();
00164
00165
private:
00166
QComboBox *mTypeCombo;
00167
00168
QRadioButton *mDailyButton;
00169
QRadioButton *mWeeklyButton;
00170
QRadioButton *mMonthlyButton;
00171
QRadioButton *mYearlyButton;
00172 };
00173
00174
class ExceptionsBase
00175 {
00176
public:
00177
virtual void setDates(
const DateList & ) = 0;
00178
virtual DateList dates() = 0;
00179 };
00180
00181
class ExceptionsWidget :
public QWidget,
public ExceptionsBase
00182 {
00183 Q_OBJECT
00184
public:
00185 ExceptionsWidget(
QWidget *parent = 0,
const char *name = 0 );
00186
00187
void setDates(
const DateList & );
00188 DateList dates();
00189
00190
protected slots:
00191
void addException();
00192
void changeException();
00193
void deleteException();
00194
00195
private:
00196 KDateEdit *mExceptionDateEdit;
00197
QListBox *mExceptionList;
00198 DateList mExceptionDates;
00199 };
00200
00201
class ExceptionsDialog :
public KDialogBase,
public ExceptionsBase
00202 {
00203
public:
00204 ExceptionsDialog(
QWidget *parent,
const char *name = 0 );
00205
00206
void setDates(
const DateList & );
00207 DateList dates();
00208
00209
private:
00210 ExceptionsWidget *mExceptions;
00211 };
00212
00213
class RecurrenceRangeBase
00214 {
00215
public:
00216
virtual void setDefaults(
const QDateTime &from ) = 0;
00217
00218
virtual void setDuration(
int ) = 0;
00219
virtual int duration() = 0;
00220
00221
virtual void setEndDate(
const QDate & ) = 0;
00222
virtual QDate endDate() = 0;
00223
00224
virtual void setDateTimes(
const QDateTime &start,
00225
const QDateTime &end =
QDateTime() ) = 0;
00226 };
00227
00228
class RecurrenceRangeWidget :
public QWidget,
public RecurrenceRangeBase
00229 {
00230 Q_OBJECT
00231
public:
00232 RecurrenceRangeWidget(
QWidget *parent = 0,
const char *name = 0 );
00233
00234
void setDefaults(
const QDateTime &from );
00235
00236
void setDuration(
int );
00237
int duration();
00238
00239
void setEndDate(
const QDate & );
00240
QDate endDate();
00241
00242
void setDateTimes(
const QDateTime &start,
00243
const QDateTime &end =
QDateTime() );
00244
00245
protected slots:
00246
void showCurrentRange();
00247
00248
private:
00249
QGroupBox *mRangeGroupBox;
00250
QLabel *mStartDateLabel;
00251
QRadioButton *mNoEndDateButton;
00252
QRadioButton *mEndDurationButton;
00253
QSpinBox *mEndDurationEdit;
00254
QRadioButton *mEndDateButton;
00255 KDateEdit *mEndDateEdit;
00256 };
00257
00258
class RecurrenceRangeDialog :
public KDialogBase,
public RecurrenceRangeBase
00259 {
00260
public:
00261 RecurrenceRangeDialog(
QWidget *parent = 0,
const char *name = 0 );
00262
00263
void setDefaults(
const QDateTime &from );
00264
00265
void setDuration(
int );
00266
int duration();
00267
00268
void setEndDate(
const QDate & );
00269
QDate endDate();
00270
00271
void setDateTimes(
const QDateTime &start,
00272
const QDateTime &end =
QDateTime() );
00273
00274
private:
00275 RecurrenceRangeWidget *mRecurrenceRangeWidget;
00276 };
00277
00278
class KOEditorRecurrence :
public QWidget
00279 {
00280 Q_OBJECT
00281
public:
00282 KOEditorRecurrence (
QWidget *parent = 0,
const char *name = 0 );
00283
virtual ~KOEditorRecurrence();
00284
00285
enum { Daily, Weekly, Monthly, Yearly };
00286
00288
void setDefaults(
QDateTime from,
QDateTime to,
bool allday );
00290
void readIncidence( Incidence * );
00292
void writeIncidence( Incidence * );
00293
00295
bool validateInput();
00296
00297
public slots:
00298
void setRecurrenceEnabled(
bool );
00299
void setDateTimes(
QDateTime start,
QDateTime end );
00300
void setDateTimeStr(
const QString & );
00301
00302 signals:
00303
void dateTimesChanged(
QDateTime start,
QDateTime end );
00304
00305
protected slots:
00306
void showCurrentRule(
int );
00307
void showExceptionsDialog();
00308
void showRecurrenceRangeDialog();
00309
00310
private:
00311
QCheckBox *mEnabledCheck;
00312
00313
QGroupBox *mTimeGroupBox;
00314
QLabel *mDateTimeLabel;
00315
00316
QGroupBox *mRuleBox;
00317
QWidgetStack *mRuleStack;
00318 RecurrenceChooser *mRecurrenceChooser;
00319
00320 RecurDaily *mDaily;
00321 RecurWeekly *mWeekly;
00322 RecurMonthly *mMonthly;
00323 RecurYearly *mYearly;
00324
00325 RecurrenceRangeBase *mRecurrenceRange;
00326 RecurrenceRangeWidget *mRecurrenceRangeWidget;
00327 RecurrenceRangeDialog *mRecurrenceRangeDialog;
00328
QPushButton *mRecurrenceRangeButton;
00329
00330 ExceptionsBase *mExceptions;
00331 ExceptionsDialog *mExceptionsDialog;
00332 ExceptionsWidget *mExceptionsWidget;
00333
QPushButton *mExceptionsButton;
00334
00335
QDateTime mEventStartDt;
00336 };
00337
00338
#endif