F:/KPlato/koffice/kplato/kptcalendar.h

Aller à la documentation de ce fichier.
00001 /* This file is part of the KDE project
00002    Copyright (C) 2003 - 2006 Dag Andersen <danders@get2net.dk>
00003 
00004    This library is free software; you can redistribute it and/or
00005    modify it under the terms of the GNU Library General Public
00006    License as published by the Free Software Foundation; 
00007    version 2 of the License.
00008 
00009    This library is distributed in the hope that it will be useful,
00010    but WITHOUT ANY WARRANTY; without even the implied warranty of
00011    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012    Library General Public License for more details.
00013 
00014    You should have received a copy of the GNU Library General Public License
00015    along with this library; see the file COPYING.LIB.  If not, write to
00016    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00017  * Boston, MA 02110-1301, USA.
00018 */
00019 
00020 #ifndef KPTCALENDAR_H
00021 #define KPTCALENDAR_H
00022 
00023 #include "kptmap.h"
00024 #include "kptduration.h"
00025 
00026 #include <qdatetime.h>
00027 #include <QPair>
00028 #include <QList>
00029 
00030 class QDomElement;
00031 class QDateTime;
00032 class QTime;
00033 class QDate;
00034 class QString;
00035 
00036 namespace KPlato
00037 {
00038 
00039 class DateTime;
00040 class Project;
00041 
00042 typedef QPair<QTime, QTime> TimeInterval;
00043 typedef QPair<DateTime, DateTime> DateTimeInterval;
00044         
00045 class CalendarDay {
00046 
00047 public:
00048     CalendarDay();
00049     CalendarDay(int state);
00050     CalendarDay(QDate date, int state=0);
00051     CalendarDay(CalendarDay *day);
00052     ~CalendarDay();
00053 
00054     bool load(QDomElement &element);
00055     void save(QDomElement &element) const;
00056 
00057     const QList<TimeInterval*> &workingIntervals() const { return m_workingIntervals; }
00058     void addInterval(TimeInterval *interval);
00059     void addInterval(TimeInterval interval) { addInterval(new TimeInterval(interval)); }
00060     void clearIntervals() { m_workingIntervals.clear(); }
00061     void setIntervals(QList<TimeInterval*> intervals) { 
00062         m_workingIntervals.clear();
00063         m_workingIntervals = intervals;
00064     }
00065     
00066     QTime startOfDay() const;
00067     QTime endOfDay() const;
00068     
00069     QDate date() const { return m_date; }
00070     void setDate(QDate date) { m_date = date; }
00071     int state() const { return m_state; }
00072     void setState(int state) { m_state = state; }
00073 
00074     bool operator==(const CalendarDay *day) const;
00075     bool operator==(const CalendarDay &day) const;
00076     bool operator!=(const CalendarDay *day) const;
00077     bool operator!=(const CalendarDay &day) const;
00078 
00083     Duration effort(const QTime &start, const QTime &end);
00084 
00090     TimeInterval interval(const QTime &start, const QTime &end) const;
00091     
00092     bool hasInterval() const;
00093 
00098     bool hasInterval(const QTime &start, const QTime &end) const;
00099     
00100     Duration duration() const;
00101     
00102     const CalendarDay &copy(const CalendarDay &day);
00103 
00104 private:
00105     QDate m_date; //NOTE: inValid if used for weekdays
00106     int m_state;
00107     QList<TimeInterval*> m_workingIntervals;
00108 
00109 #ifndef NDEBUG
00110 public:
00111     void printDebug(QString indent="");
00112 #endif
00113 };
00114 
00115 class CalendarWeekdays {
00116 
00117 public:
00118     CalendarWeekdays();
00119     CalendarWeekdays(CalendarWeekdays *weekdays);
00120     ~CalendarWeekdays();
00121 
00122     bool load(QDomElement &element);
00123     void save(QDomElement &element) const;
00124 
00125     void addWeekday(CalendarDay *day) { m_weekdays.append(day); }
00126     const QList<CalendarDay*> &weekdays() const { return m_weekdays; }
00132     CalendarDay *weekday(int day) const;
00133     CalendarDay *weekday(const QDate &date) const { return weekday(date.dayOfWeek()-1); }
00134     CalendarDay *replace(int weekday, CalendarDay *day) {
00135         CalendarDay *d = m_weekdays.at(weekday);
00136         m_weekdays.replace(weekday, day);
00137         return d;
00138     }
00139     IntMap map();
00140     
00141     void setWeekday(IntMap::iterator it, int state) { m_weekdays.at(it.key())->setState(state); }
00142 
00143     int state(const QDate &date) const;
00144     int state(int weekday) const;
00145     void setState(int weekday, int state);
00146     
00147     const QList<TimeInterval*> &intervals(int weekday) const;
00148     void setIntervals(int weekday, QList<TimeInterval*>intervals);
00149     void clearIntervals(int weekday);
00150     
00151     bool operator==(const CalendarWeekdays *weekdays) const;
00152     bool operator!=(const CalendarWeekdays *weekdays) const;
00153 
00154     Duration effort(const QDate &date, const QTime &start, const QTime &end);
00155     
00162     TimeInterval interval(const QDate date, const QTime &start, const QTime &end) const;
00167     bool hasInterval(const QDate date, const QTime &start, const QTime &end) const;
00168     bool hasInterval() const;
00169 
00170     Duration duration() const;
00171     Duration duration(int weekday) const;
00172 
00174     QTime startOfDay(int weekday) const;
00176     QTime endOfDay(int weekday) const;
00177 
00178     const CalendarWeekdays &copy(const CalendarWeekdays &weekdays);
00179 
00180 private:
00181     QList<CalendarDay*> m_weekdays;
00182     double m_workHours;
00183 
00184 #ifndef NDEBUG
00185 public:
00186     void printDebug(QString indent="");
00187 #endif
00188 };
00189 
00207 class Calendar {
00208 
00209 public:
00210     Calendar();
00211     Calendar(QString name, Calendar *parent=0);
00212     Calendar(Calendar *calendar);
00213     ~Calendar();
00214 
00215     QString name() const { return m_name; }
00216     void setName(QString name) { m_name = name; }
00217 
00218     Calendar *parent() const { return m_parent; }
00219     void setParent(Calendar *parent) { m_parent = parent; }
00220     
00221     Project *project() const { return m_project; }
00222     void setProject(Project *project);
00223 
00224     bool isDeleted() const { return m_deleted; }
00225     void setDeleted(bool yes);
00226 
00227     QString id() const { return m_id; }
00228     bool setId(QString id);
00229     void generateId();
00230     
00231     bool load(QDomElement &element);
00232     void save(QDomElement &element) const;
00233 
00238     CalendarDay *findDay(const QDate &date, bool skipUndefined=false) const;
00239     void addDay(CalendarDay *day) { m_days.insert(0, day); }
00240     void deleteDay(CalendarDay *day) {
00241         int i = m_days.indexOf(day);
00242         if (i != -1) {
00243             m_days.removeAt(i);
00244         }
00245         delete day;
00246     }
00247         
00248     CalendarDay *takeDay(CalendarDay *day) {
00249         int i = m_days.indexOf(day);
00250         if (i != -1)
00251             m_days.removeAt(i);
00252         return day;
00253     }
00254     const QList<CalendarDay*> &days() const { return m_days; }
00255     
00260     int parentDayState(const QDate &date) const;
00261     
00262     IntMap weekdaysMap() { return m_weekdays->map(); }
00263     void setWeekday(IntMap::iterator it, int state) { m_weekdays->setWeekday(it, state); }
00264     CalendarWeekdays *weekdays() { return m_weekdays; }
00265     CalendarDay *weekday(int day) const { return m_weekdays->weekday(day); }
00266 
00267     QString parentId() const { return m_parentId; }
00268     void setParentId(QString id) { m_parentId = id; }
00269 
00270     bool hasParent(Calendar *cal);
00271 
00276     Duration effort(const QDate &date, const QTime &start, const QTime &end) const;
00281     Duration effort(const DateTime &start, const DateTime &end) const;
00282 
00289     DateTimeInterval firstInterval(const DateTime &start, const DateTime &end) const;
00290     
00297     TimeInterval firstInterval(const QDate &date, const QTime &start, const QTime &end) const;
00298     
00303     bool hasInterval(const DateTime &start, const DateTime &end) const;
00304         
00309     bool hasInterval(const QDate &date, const QTime &start, const QTime &end) const;
00310         
00315     DateTime firstAvailableAfter(const DateTime &time, const DateTime &limit);
00320     DateTime firstAvailableBefore(const DateTime &time, const DateTime &limit);
00321 
00322     Calendar *findCalendar() const { return findCalendar(m_id); }
00323     Calendar *findCalendar(const QString &id) const;
00324     bool removeId() { return removeId(m_id); }
00325     bool removeId(const QString &id);
00326     void insertId(const QString &id);
00327 
00328 protected:
00329     const Calendar &copy(Calendar &calendar);
00330     void init();
00331     
00332 private:
00333     QString m_name;
00334     Calendar *m_parent;
00335     Project *m_project;
00336     bool m_deleted;
00337     QString m_id;
00338     QString m_parentId;
00339 
00340     QList<CalendarDay*> m_days;
00341     CalendarWeekdays *m_weekdays;
00342 
00343 #ifndef NDEBUG
00344 public:
00345     void printDebug(QString indent="");
00346 #endif
00347 };
00348 
00349 class StandardWorktime
00350 {
00351 public:
00352     StandardWorktime();
00353     StandardWorktime(StandardWorktime* worktime);
00354     ~StandardWorktime();
00355     
00357     Duration durationYear() const { return m_year; }
00359     double year() const { return m_year.toDouble(Duration::Unit_h); }
00361     void setYear(const Duration year) { m_year = year; }
00363     void setYear(double hours) { m_year = Duration((qint64)(hours*60.0*60.0)); }
00364     
00366     Duration durationMonth() const { return m_month; }
00368     double month() const  { return m_month.toDouble(Duration::Unit_h); }
00370     void setMonth(const Duration month) { m_month = month; }
00372     void setMonth(double hours) { m_month = Duration((qint64)(hours*60.0*60.0)); }
00373     
00375     Duration durationWeek() const { return m_week; }
00377     double week() const { return m_week.toDouble(Duration::Unit_h); }
00379     void setWeek(const Duration week) { m_week = week; }
00381     void setWeek(double hours) { m_week = Duration((qint64)(hours*60.0*60.0)); }
00382     
00384     Duration durationDay() const { return m_day; }
00386     double day() const { return m_day.toDouble(Duration::Unit_h); }
00388     void setDay(const Duration day) { m_day = day; }
00390     void setDay(double hours) { m_day = Duration((qint64)(hours*60.0*60.0)); }
00391     
00392     bool load(QDomElement &element);
00393     void save(QDomElement &element) const;
00394 
00395     Calendar *calendar() const { return m_calendar; }
00396     
00397 protected:
00398     void init();
00399     
00400 private:
00401     Duration m_year;
00402     Duration m_month;
00403     Duration m_week;
00404     Duration m_day;
00405     
00406     Calendar *m_calendar;
00407     
00408 #ifndef NDEBUG
00409 public:
00410     void printDebug(QString indent="");
00411 #endif
00412 };
00413 
00414 }  //KPlato namespace
00415 
00416 #endif

Généré le Wed Nov 22 23:40:55 2006 pour KPlato par  doxygen 1.5.1-p1