summaryrefslogtreecommitdiffstats
path: root/kalarm/recurrenceedit.h
diff options
context:
space:
mode:
Diffstat (limited to 'kalarm/recurrenceedit.h')
-rw-r--r--kalarm/recurrenceedit.h191
1 files changed, 191 insertions, 0 deletions
diff --git a/kalarm/recurrenceedit.h b/kalarm/recurrenceedit.h
new file mode 100644
index 000000000..f366978db
--- /dev/null
+++ b/kalarm/recurrenceedit.h
@@ -0,0 +1,191 @@
+/*
+ * recurrenceedit.h - widget to edit the event's recurrence definition
+ * Program: kalarm
+ * Copyright © 2002-2005,2008 by David Jarvie <djarvie@kde.org>
+ *
+ * Based originally on KOrganizer module koeditorrecurrence.h,
+ * Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef RECURRENCEEDIT_H
+#define RECURRENCEEDIT_H
+
+#include <qframe.h>
+#include <qdatetime.h>
+#include <qvaluelist.h>
+
+#include "datetime.h"
+class QWidgetStack;
+class QGroupBox;
+class QLabel;
+class QListBox;
+class QButton;
+class QPushButton;
+class QBoxLayout;
+class SpinBox;
+class CheckBox;
+class RadioButton;
+class DateEdit;
+class TimeEdit;
+class ButtonGroup;
+class RepetitionButton;
+class KAEvent;
+class Rule;
+class NoRule;
+class SubDailyRule;
+class DailyRule;
+class WeeklyRule;
+class MonthlyRule;
+class YearlyRule;
+
+
+class RecurrenceEdit : public QFrame
+{
+ Q_OBJECT
+ public:
+ // Don't alter the order of these recurrence types
+ enum RepeatType { INVALID_RECUR = -1, NO_RECUR, AT_LOGIN, SUBDAILY, DAILY, WEEKLY, MONTHLY, ANNUAL };
+
+ RecurrenceEdit(bool readOnly, QWidget* parent, const char* name = 0);
+ virtual ~RecurrenceEdit() { }
+
+ /** Set widgets to default values */
+ void setDefaults(const QDateTime& from);
+ /** Initialise according to a specified event */
+ void set(const KAEvent&, bool keepDuration);
+ /** Write recurrence settings into an event */
+ void updateEvent(KAEvent&, bool adjustStart);
+ QWidget* checkData(const QDateTime& startDateTime, QString& errorMessage) const;
+ RepeatType repeatType() const { return mRuleButtonType; }
+ bool isTimedRepeatType() const { return mRuleButtonType >= SUBDAILY; }
+ int subRepeatCount(int* subRepeatInterval = 0) const;
+ void setSubRepetition(int reminderMinutes, bool dateOnly);
+ void setStartDate(const QDate&, const QDate& today);
+ void setDefaultEndDate(const QDate&);
+ void setEndDateTime(const DateTime&);
+ DateTime endDateTime() const;
+ bool stateChanged() const;
+ void activateSubRepetition();
+
+ static QString i18n_Norecur(); // text of 'No recurrence' selection, lower case
+ static QString i18n_NoRecur(); // text of 'No Recurrence' selection, initial capitals
+ static QString i18n_AtLogin(); // text of 'At Login' selection
+ static QString i18n_l_Atlogin(); // text of 'At &login' selection, with 'L' shortcut
+ static QString i18n_HourlyMinutely(); // text of 'Hourly/Minutely'
+ static QString i18n_u_HourlyMinutely(); // text of 'Ho&urly/Minutely' selection, with 'U' shortcut
+ static QString i18n_Daily(); // text of 'Daily' selection
+ static QString i18n_d_Daily(); // text of '&Daily' selection, with 'D' shortcut
+ static QString i18n_Weekly(); // text of 'Weekly' selection
+ static QString i18n_w_Weekly(); // text of '&Weekly' selection, with 'W' shortcut
+ static QString i18n_Monthly(); // text of 'Monthly' selection
+ static QString i18n_m_Monthly(); // text of '&Monthly' selection, with 'M' shortcut
+ static QString i18n_Yearly(); // text of 'Yearly' selection
+ static QString i18n_y_Yearly(); // text of '&Yearly' selection, with 'Y' shortcut
+
+ public slots:
+ void setDateTime(const QDateTime& start) { mCurrStartDateTime = start; }
+
+ signals:
+ void shown();
+ void typeChanged(int recurType); // returns a RepeatType value
+ void frequencyChanged();
+ void repeatNeedsInitialisation();
+
+ protected:
+ virtual void showEvent(QShowEvent*);
+
+ private slots:
+ void periodClicked(int);
+ void rangeTypeClicked();
+ void repeatCountChanged(int value);
+ void slotAnyTimeToggled(bool);
+ void addException();
+ void changeException();
+ void deleteException();
+ void enableExceptionButtons();
+
+ private:
+ void setRuleDefaults(const QDate& start);
+ void saveState();
+
+ // Main rule box and choices
+ QWidgetStack* mRuleStack;
+ Rule* mRule; // current rule widget, or 0 if NoRule
+ NoRule* mNoRule;
+ SubDailyRule* mSubDailyRule;
+ DailyRule* mDailyRule;
+ WeeklyRule* mWeeklyRule;
+ MonthlyRule* mMonthlyRule;
+ YearlyRule* mYearlyRule;
+
+ ButtonGroup* mRuleButtonGroup;
+ RadioButton* mNoneButton;
+ RadioButton* mAtLoginButton;
+ RadioButton* mSubDailyButton;
+ RadioButton* mDailyButton;
+ RadioButton* mWeeklyButton;
+ RadioButton* mMonthlyButton;
+ RadioButton* mYearlyButton;
+ int mNoneButtonId;
+ int mAtLoginButtonId;
+ int mSubDailyButtonId;
+ int mDailyButtonId;
+ int mWeeklyButtonId;
+ int mMonthlyButtonId;
+ int mYearlyButtonId;
+ RepeatType mRuleButtonType;
+ bool mDailyShown; // daily rule has been displayed at some time or other
+ bool mWeeklyShown; // weekly rule has been displayed at some time or other
+ bool mMonthlyShown; // monthly rule has been displayed at some time or other
+ bool mYearlyShown; // yearly rule has been displayed at some time or other
+
+ // Range
+ ButtonGroup* mRangeButtonGroup;
+ RadioButton* mNoEndDateButton;
+ RadioButton* mRepeatCountButton;
+ SpinBox* mRepeatCountEntry;
+ QLabel* mRepeatCountLabel;
+ RadioButton* mEndDateButton;
+ DateEdit* mEndDateEdit;
+ TimeEdit* mEndTimeEdit;
+ CheckBox* mEndAnyTimeCheckBox;
+
+ // Exceptions
+ QGroupBox* mExceptionGroup;
+ QListBox* mExceptionDateList;
+ DateEdit* mExceptionDateEdit;
+ QPushButton* mChangeExceptionButton;
+ QPushButton* mDeleteExceptionButton;
+ QValueList<QDate> mExceptionDates;
+
+ // Current start date and time
+ QDateTime mCurrStartDateTime;
+ RepetitionButton* mSubRepetition;
+ bool mNoEmitTypeChanged; // suppress typeChanged() signal
+ bool mReadOnly;
+
+ // Initial state of non-rule controls
+ QButton* mSavedRuleButton; // which rule button was selected
+ QButton* mSavedRangeButton; // which range button was selected
+ int mSavedRecurCount; // recurrence repeat count
+ DateTime mSavedEndDateTime; // end date/time
+ QValueList<QDate> mSavedExceptionDates; // exception dates
+ int mSavedRepeatInterval; // sub-repetition interval (via mSubRepetition button)
+ int mSavedRepeatCount; // sub-repetition count (via mSubRepetition button)
+};
+
+#endif // RECURRENCEEDIT_H