20#include "kptcalendar.h"
21#include "kptduration.h"
22#include "kptdatetime.h"
23#include "kptproject.h"
35CalendarDay::CalendarDay()
38 m_workingIntervals() {
41 m_workingIntervals.setAutoDelete(
true);
44CalendarDay::CalendarDay(
int state)
47 m_workingIntervals() {
50 m_workingIntervals.setAutoDelete(
true);
53CalendarDay::CalendarDay(TQDate date,
int state)
56 m_workingIntervals() {
59 m_workingIntervals.setAutoDelete(
true);
62CalendarDay::CalendarDay(CalendarDay *day)
63 : m_workingIntervals() {
66 m_workingIntervals.setAutoDelete(
true);
70CalendarDay::~CalendarDay() {
74const CalendarDay &CalendarDay::copy(
const CalendarDay &day) {
77 m_state = day.state();
78 m_workingIntervals.clear();
79 TQPtrListIterator<TQPair<TQTime, TQTime> > it = day.workingIntervals();
80 for(; it.current(); ++it) {
81 m_workingIntervals.append(
new TQPair<TQTime, TQTime>(it.current()->first, it.current()->second));
86bool CalendarDay::load(TQDomElement &element) {
89 m_state = TQString(element.attribute(
"state",
"-1")).toInt(&ok);
93 TQString s = element.attribute(
"date");
95 m_date = TQDate::fromString(s, TQt::ISODate);
96 if (!m_date.isValid())
97 m_date = TQDate::fromString(s);
100 TQDomNodeList list = element.childNodes();
101 for (
unsigned int i=0; i<list.count(); ++i) {
102 if (list.item(i).isElement()) {
103 TQDomElement e = list.item(i).toElement();
104 if (e.tagName() ==
"interval") {
106 TQString st = e.attribute(
"start");
107 TQString en = e.attribute(
"end");
108 if (st !=
"" && en !=
"") {
109 TQTime start = TQTime::fromString(st);
110 TQTime end = TQTime::fromString(en);
111 addInterval(
new TQPair<TQTime, TQTime>(start,end));
119void CalendarDay::save(TQDomElement &element)
const {
121 if (m_state == Map::None)
123 if (m_date.isValid()) {
124 element.setAttribute(
"date", m_date.toString(TQt::ISODate));
126 element.setAttribute(
"state", m_state);
127 if (m_workingIntervals.count() == 0)
130 TQPtrListIterator<TQPair<TQTime, TQTime> > it = m_workingIntervals;
131 for (; it.current(); ++it) {
132 TQDomElement me = element.ownerDocument().createElement(
"interval");
133 element.appendChild(me);
134 me.setAttribute(
"end", it.current()->second.toString());
135 me.setAttribute(
"start", it.current()->first.toString());
139void CalendarDay::addInterval(TQPair<TQTime, TQTime> *interval) {
140 m_workingIntervals.append(interval);
143TQTime CalendarDay::startOfDay()
const {
145 if (!m_workingIntervals.isEmpty()) {
146 TQPtrListIterator<TQPair<TQTime, TQTime> > it = m_workingIntervals;
147 t = it.current()->first;
148 for (++it; it.current(); ++it) {
149 if (t > it.current()->first)
150 t = it.current()->first;
156TQTime CalendarDay::endOfDay()
const {
158 if (!m_workingIntervals.isEmpty()) {
159 TQPtrListIterator<TQPair<TQTime, TQTime> > it = m_workingIntervals;
160 t = it.current()->second;
161 for (++it; it.current(); ++it) {
162 if (t > it.current()->second)
163 t = it.current()->second;
169bool CalendarDay::operator==(
const CalendarDay *day)
const {
170 return operator==(*day);
172bool CalendarDay::operator==(
const CalendarDay &day)
const {
174 if (m_date.isValid() && day.date().isValid()) {
175 if (m_date != day.date()) {
179 }
else if (m_date.isValid() != day.date().isValid()) {
183 if (m_state != day.state()) {
187 if (m_workingIntervals.count() != day.workingIntervals().count()) {
191 TQPtrListIterator<TQPair<TQTime, TQTime> > it = m_workingIntervals;
192 TQPtrListIterator<TQPair<TQTime, TQTime> > dit = day.workingIntervals();
193 for (; it.current(); ++it) {
195 TQPair<TQTime, TQTime> *a = it.current();
196 for (dit.toFirst(); dit.current(); ++dit) {
197 TQPair<TQTime, TQTime> *b = dit.current();
198 if (a->first == b->first && a->second == b->second) {
210bool CalendarDay::operator!=(
const CalendarDay *day)
const {
211 return operator!=(*day);
213bool CalendarDay::operator!=(
const CalendarDay &day)
const {
214 return !operator==(day);
217Duration CalendarDay::effort(
const TQTime &start,
const TQTime &end) {
220 if (m_state != Map::Working) {
224 TQPtrListIterator<TQPair<TQTime, TQTime> > it = m_workingIntervals;
225 for (; it.current(); ++it) {
227 if (end > it.current()->first && start < it.current()->second) {
228 DateTime dtStart(TQDate::currentDate(), start);
229 if (start < it.current()->first) {
230 dtStart.setTime(it.current()->first);
232 DateTime dtEnd(TQDate::currentDate(), end);
233 if (end > it.current()->second) {
234 dtEnd.setTime(it.current()->second);
236 eff += dtEnd - dtStart;
244TQPair<TQTime, TQTime> CalendarDay::interval(
const TQTime &start,
const TQTime &end)
const {
247 if (m_state == Map::Working) {
248 TQPtrListIterator<TQPair<TQTime, TQTime> > it = m_workingIntervals;
249 for (; it.current(); ++it) {
250 if (start < it.current()->second && end > it.current()->first) {
251 t1 = start > it.current()->first ? start : it.current()->first;
252 t2 = end < it.current()->second ? end : it.current()->second;
254 return TQPair<TQTime, TQTime>(t1, t2);
259 return TQPair<TQTime, TQTime>(t1, t2);
262bool CalendarDay::hasInterval()
const {
263 return m_state == Map::Working && m_workingIntervals.count() > 0;
266bool CalendarDay::hasInterval(
const TQTime &start,
const TQTime &end)
const {
268 if (m_state != Map::Working) {
271 TQPtrListIterator<TQPair<TQTime, TQTime> > it = m_workingIntervals;
272 for (; it.current(); ++it) {
273 if (start < it.current()->second && end > it.current()->first) {
281Duration CalendarDay::duration()
const {
283 TQPtrListIterator<TQPair<TQTime, TQTime> > it = m_workingIntervals;
284 for (; it.current(); ++it) {
285 DateTime start(TQDate::currentDate(), it.current()->first);
286 DateTime end(TQDate::currentDate(), it.current()->second);
293CalendarWeekdays::CalendarWeekdays()
298 for (
int i=0; i < 7; ++i) {
299 m_weekdays.append(
new CalendarDay());
301 m_weekdays.setAutoDelete(
false);
305CalendarWeekdays::CalendarWeekdays(CalendarWeekdays *weekdays)
312CalendarWeekdays::~CalendarWeekdays() {
313 m_weekdays.setAutoDelete(
true);
317const CalendarWeekdays &CalendarWeekdays::copy(
const CalendarWeekdays &weekdays) {
319 m_weekdays.setAutoDelete(
true);
321 m_weekdays.setAutoDelete(
false);
322 TQPtrListIterator<CalendarDay> it = weekdays.weekdays();
323 for (; it.current(); ++it) {
324 m_weekdays.append(
new CalendarDay(it.current()));
329bool CalendarWeekdays::load(TQDomElement &element) {
332 int dayNo = TQString(element.attribute(
"day",
"-1")).toInt(&ok);
333 if (dayNo < 0 || dayNo > 6) {
334 kdError()<<k_funcinfo<<
"Illegal weekday: "<<dayNo<<endl;
337 CalendarDay *day = m_weekdays.at(dayNo);
339 day =
new CalendarDay();
340 if (!day->load(element))
341 day->setState(Map::None);
345void CalendarWeekdays::save(TQDomElement &element)
const {
347 TQPtrListIterator<CalendarDay> it = m_weekdays;
348 for (
int i=0; it.current(); ++it) {
349 TQDomElement me = element.ownerDocument().createElement(
"weekday");
350 element.appendChild(me);
351 me.setAttribute(
"day", i++);
352 it.current()->save(me);
356IntMap CalendarWeekdays::map() {
358 for (
unsigned int i=0; i < m_weekdays.count(); ++i) {
359 if (m_weekdays.at(i)->state() > 0)
360 days.insert(i+1, m_weekdays.at(i)->state());
365int CalendarWeekdays::state(
const TQDate &date)
const {
366 return state(date.dayOfWeek()-1);
369int CalendarWeekdays::state(
int weekday)
const {
370 CalendarDay *day =
const_cast<CalendarWeekdays*
>(
this)->m_weekdays.at(weekday);
371 return day ? day->state() : Map::None;
374void CalendarWeekdays::setState(
int weekday,
int state) {
375 CalendarDay *day = m_weekdays.at(weekday);
378 day->setState(state);
381const TQPtrList<TQPair<TQTime, TQTime> > &CalendarWeekdays::intervals(
int weekday)
const {
382 CalendarDay *day =
const_cast<CalendarWeekdays*
>(
this)->m_weekdays.at(weekday);
384 return day->workingIntervals();
387void CalendarWeekdays::setIntervals(
int weekday, TQPtrList<TQPair<TQTime, TQTime> >intervals) {
388 CalendarDay *day = m_weekdays.at(weekday);
390 day->setIntervals(intervals);
393void CalendarWeekdays::clearIntervals(
int weekday) {
394 CalendarDay *day = m_weekdays.at(weekday);
396 day->clearIntervals();
399bool CalendarWeekdays::operator==(
const CalendarWeekdays *wd)
const {
400 if (m_weekdays.count() != wd->weekdays().count())
402 for (
unsigned int i=0; i < m_weekdays.count(); ++i) {
404 CalendarDay *day1 =
const_cast<CalendarWeekdays*
>(
this)->m_weekdays.at(i);
405 CalendarDay *day2 =
const_cast<TQPtrList<CalendarDay>&
>(wd->weekdays()).at(i);
411bool CalendarWeekdays::operator!=(
const CalendarWeekdays *wd)
const {
412 if (m_weekdays.count() != wd->weekdays().count())
414 for (
unsigned int i=0; i < m_weekdays.count(); ++i) {
416 CalendarDay *day1 =
const_cast<CalendarWeekdays*
>(
this)->m_weekdays.at(i);
417 CalendarDay *day2 =
const_cast<TQPtrList<CalendarDay>&
>(wd->weekdays()).at(i);
424Duration CalendarWeekdays::effort(
const TQDate &date,
const TQTime &start,
const TQTime &end) {
426 CalendarDay *day = weekday(date.dayOfWeek()-1);
427 if (day && day->state() == Map::Working) {
428 return day->effort(start, end);
430 return Duration::zeroDuration;
433TQPair<TQTime, TQTime> CalendarWeekdays::interval(
const TQDate date,
const TQTime &start,
const TQTime &end)
const {
435 CalendarDay *day = weekday(date.dayOfWeek()-1);
436 if (day && day->state() == Map::Working) {
437 if (day->hasInterval(start, end)) {
438 return day->interval(start, end);
441 return TQPair<TQTime, TQTime>(TQTime(), TQTime());
444bool CalendarWeekdays::hasInterval(
const TQDate date,
const TQTime &start,
const TQTime &end)
const {
446 CalendarDay *day = weekday(date.dayOfWeek()-1);
447 return day && day->hasInterval(start, end);
450bool CalendarWeekdays::hasInterval()
const {
452 TQPtrListIterator<CalendarDay> it = m_weekdays;
453 for (; it.current(); ++it) {
454 if (it.current()->hasInterval())
460CalendarDay *CalendarWeekdays::weekday(
int day)
const {
461 TQPtrListIterator<CalendarDay> it = m_weekdays;
462 for (
int i=0; it.current(); ++it, ++i) {
469Duration CalendarWeekdays::duration()
const {
471 TQPtrListIterator<CalendarDay> it = m_weekdays;
472 for (; it.current(); ++it) {
473 dur += it.current()->duration();
478Duration CalendarWeekdays::duration(
int _weekday)
const {
479 CalendarDay *day = weekday(_weekday);
481 return day->duration();
485TQTime CalendarWeekdays::startOfDay(
int _weekday)
const {
486 CalendarDay *day = weekday(_weekday);
488 return day->startOfDay();
492TQTime CalendarWeekdays::endOfDay(
int _weekday)
const {
493 CalendarDay *day = weekday(_weekday);
495 return day->endOfDay();
510Calendar::Calendar(TQString name, Calendar *parent)
520Calendar::~Calendar() {
525Calendar::Calendar(Calendar *calendar)
528 m_days.setAutoDelete(
true);
532const Calendar &Calendar::copy(Calendar &calendar) {
533 m_name = calendar.name();
534 m_parent = calendar.parent();
535 m_deleted = calendar.isDeleted();
536 m_id = calendar.id();
538 TQPtrListIterator<CalendarDay> it = calendar.days();
539 for (; it.current(); ++it) {
540 m_days.append(
new CalendarDay(it.current()));
542 m_weekdays =
new CalendarWeekdays(calendar.weekdays());
546void Calendar::init() {
547 m_days.setAutoDelete(
true);
548 m_weekdays =
new CalendarWeekdays();
551void Calendar::setProject(Project *project) {
556void Calendar::setDeleted(
bool yes) {
564bool Calendar::setId(TQString
id) {
567 kdError()<<k_funcinfo<<
"id is empty"<<endl;
571 Calendar *c = findCalendar();
573 kdDebug()<<k_funcinfo<<
"My id found, remove it"<<endl;
577 kdError()<<k_funcinfo<<
"My id '"<<m_id<<
"' already used for different node: "<<c->name()<<endl;
579 if (findCalendar(
id)) {
580 kdError()<<k_funcinfo<<
"id '"<<
id<<
"' is already used for different node: "<<findCalendar(
id)->name()<<endl;
590void Calendar::generateId() {
591 if (!m_id.isEmpty()) {
594 for (
int i=0; i<32000 ; ++i) {
595 m_id = m_id.setNum(i);
596 if (!findCalendar()) {
604bool Calendar::load(TQDomElement &element) {
607 setId(element.attribute(
"id"));
608 m_parentId = element.attribute(
"parent");
609 m_name = element.attribute(
"name",
"");
612 TQDomNodeList list = element.childNodes();
613 for (
unsigned int i=0; i<list.count(); ++i) {
614 if (list.item(i).isElement()) {
615 TQDomElement e = list.item(i).toElement();
616 if (e.tagName() ==
"weekday") {
617 if (!m_weekdays->load(e))
620 if (e.tagName() ==
"day") {
621 CalendarDay *day =
new CalendarDay();
623 if (!day->date().isValid()) {
625 kdError()<<k_funcinfo<<m_name<<
": Failed to load calendarDay - Invalid date"<<endl;
627 CalendarDay *d = findDay(day->date());
631 kdWarning()<<k_funcinfo<<m_name<<
" Load calendarDay - Date already exists"<<endl;
637 kdError()<<k_funcinfo<<
"Failed to load calendarDay"<<endl;
646void Calendar::save(TQDomElement &element)
const {
651 TQDomElement me = element.ownerDocument().createElement(
"calendar");
652 element.appendChild(me);
653 if (m_parent && !m_parent->isDeleted())
654 me.setAttribute(
"parent", m_parent->id());
655 me.setAttribute(
"name", m_name);
656 me.setAttribute(
"id", m_id);
657 m_weekdays->save(me);
658 TQPtrListIterator<CalendarDay> it = m_days;
659 for (; it.current(); ++it) {
660 TQDomElement e = me.ownerDocument().createElement(
"day");
662 it.current()->save(e);
667CalendarDay *Calendar::findDay(
const TQDate &date,
bool skipNone)
const {
669 TQPtrListIterator<CalendarDay> it = m_days;
670 for (; it.current(); ++it) {
671 if (it.current()->date() == date) {
672 if (skipNone && it.current()->state() == Map::None) {
682bool Calendar::hasParent(
Calendar *cal) {
688 return m_parent->hasParent(cal);
691Duration Calendar::effort(
const TQDate &date,
const TQTime &start,
const TQTime &end)
const {
694 return Duration::zeroDuration;
696 TQTime _start = start;
703 CalendarDay *day = findDay(date,
true);
705 if (day->state() == Map::Working) {
706 return day->effort(_start, _end);
707 }
else if (day->state() == Map::NonWorking) {
708 return Duration::zeroDuration;
710 kdError()<<k_funcinfo<<
"Invalid state: "<<day->state()<<endl;
711 return Duration::zeroDuration;
716 if (m_weekdays->state(date) == Map::Working) {
717 return m_weekdays->effort(date, _start, _end);
719 if (m_weekdays->state(date) == Map::NonWorking) {
720 return Duration::zeroDuration;
723 if (m_parent && !m_parent->isDeleted()) {
724 return m_parent->effort(date, start, end);
727 return project()->defaultCalendar()->effort(date, start, end);
733 if (!start.isValid() || !end.isValid() || end <= start) {
736 TQDate date = start.date();
737 TQTime startTime = start.time();
738 TQTime endTime = end.time();
739 if (end.date() > date) {
740 endTime.setHMS(23, 59, 59, 999);
742 eff = effort(date, startTime, endTime);
744 for (date = date.addDays(1); date <= end.date(); date = date.addDays(1)) {
745 if (date < end.date())
746 eff += effort(date, TQTime(), endTime);
748 eff += effort(date, TQTime(), end.time());
756TQPair<TQTime, TQTime> Calendar::firstInterval(
const TQDate &date,
const TQTime &startTime,
const TQTime &endTime)
const {
757 CalendarDay *day = findDay(date,
true);
759 return day->interval(startTime, endTime);
762 if (m_weekdays->state(date) == Map::Working) {
763 return m_weekdays->interval(date, startTime, endTime);
765 if (m_weekdays->state(date) == Map::NonWorking) {
766 return TQPair<TQTime, TQTime>(TQTime(), TQTime());
769 if (m_parent && !m_parent->isDeleted()) {
770 return m_parent->firstInterval(date, startTime, endTime);
772 return project()->defaultCalendar()->firstInterval(date, startTime, endTime);
775TQPair<DateTime, DateTime> Calendar::firstInterval(
const DateTime &start,
const DateTime &end)
const {
777 if (!start.isValid()) {
778 kdWarning()<<k_funcinfo<<
"Invalid start time"<<endl;
781 if (!end.isValid()) {
782 kdWarning()<<k_funcinfo<<
"Invalid end time"<<endl;
787 TQDate date = start.date();
789 for (; date <= end.date(); date = date.addDays(1)) {
790 if (date < end.date())
791 endTime = TQTime(23, 59, 59, 999);
793 endTime = end.time();
794 if (date > start.date())
795 startTime = TQTime();
797 startTime = start.time();
799 TQPair<TQTime, TQTime> res = firstInterval(date, startTime, endTime);
800 if (res.first < res.second) {
801 return TQPair<DateTime, DateTime>(
DateTime(date,res.first),
DateTime(date, res.second));
809bool Calendar::hasInterval(
const TQDate &date,
const TQTime &startTime,
const TQTime &endTime)
const {
810 CalendarDay *day = findDay(date,
true);
813 return day->hasInterval(startTime, endTime);
816 if (m_weekdays->state(date) == Map::Working) {
817 return m_weekdays->hasInterval(date, startTime, endTime);
818 }
else if (m_weekdays->state(date) == Map::NonWorking) {
822 if (m_parent && !m_parent->isDeleted()) {
823 return m_parent->hasInterval(date, startTime, endTime);
825 return project()->defaultCalendar()->hasInterval(date, startTime, endTime);
830 if (!start.isValid() || !end.isValid() || end <= start) {
837 TQDate date = start.date();
838 for (; date <= end.date(); date = date.addDays(1)) {
839 if (date < end.date())
840 endTime = TQTime(23, 59, 59, 999);
842 endTime = end.time();
843 if (date > start.date())
844 startTime = TQTime();
846 startTime = start.time();
848 if (hasInterval(date, startTime, endTime))
856 if (!time.isValid() || !limit.isValid() || time >= limit) {
857 kdError()<<k_funcinfo<<
"Invalid input: "<<(time.isValid()?
"":
"(time invalid) ")<<(limit.isValid()?
"":
"(limit invalid) ")<<(time>limit?
"":
"(time>=limit)")<<endl;
860 if (!hasInterval(time, limit)) {
863 DateTime t = firstInterval(time, limit).first;
870 if (!time.isValid() || !limit.isValid() || time <= limit) {
871 kdError()<<k_funcinfo<<
"Invalid input: "<<(time.isValid()?
"":
"(time invalid) ")<<(limit.isValid()?
"":
"(limit invalid) ")<<(time>limit?
"":
"(time<=limit)")<<endl;
877 t = TQDateTime(t.addDays(-1));
882 while (!res.isValid() && t >= limit) {
884 DateTime r = firstInterval(t, lmt).second;
887 while(r.isValid() && r < lmt) {
888 r = firstInterval(r, lmt).second;
893 if (!res.isValid()) {
898 t = TQDateTime(t.addDays(-1));
910Calendar *Calendar::findCalendar(
const TQString &
id)
const {
911 return (m_project ? m_project->findCalendar(
id) : 0);
914bool Calendar::removeId(
const TQString &
id) {
915 return (m_project ? m_project->removeCalendarId(
id) : false);
918void Calendar::insertId(
const TQString &
id){
920 m_project->insertCalendarId(
id,
this);
924StandardWorktime::StandardWorktime() {
928StandardWorktime::StandardWorktime(StandardWorktime *worktime) {
930 m_year = worktime->durationYear();
931 m_month = worktime->durationMonth();
932 m_week = worktime->durationWeek();
933 m_day = worktime->durationDay();
934 m_calendar =
new Calendar(*(worktime->calendar()));
940StandardWorktime::~StandardWorktime() {
944void StandardWorktime::init() {
946 m_year = Duration(0, 1760, 0);
947 m_month = Duration(0, 176, 0);
948 m_week = Duration(0, 40, 0);
949 m_day = Duration(0, 8, 0);
950 m_calendar =
new Calendar;
951 m_calendar->setName(i18n(
"Base"));
952 TQPair<TQTime, TQTime> t = TQPair<TQTime, TQTime>(TQTime(8,0,0), TQTime(16,0,0));
953 for (
int i=0; i < 5; ++i) {
954 m_calendar->weekday(i)->addInterval(t);
955 m_calendar->weekday(i)->setState(Map::Working);
957 m_calendar->weekday(5)->setState(Map::NonWorking);
958 m_calendar->weekday(6)->setState(Map::NonWorking);
961bool StandardWorktime::load(TQDomElement &element) {
963 m_year = Duration::fromString(element.attribute(
"year"), Duration::Format_Hour);
964 m_month = Duration::fromString(element.attribute(
"month"), Duration::Format_Hour);
965 m_week = Duration::fromString(element.attribute(
"week"), Duration::Format_Hour);
966 m_day = Duration::fromString(element.attribute(
"day"), Duration::Format_Hour);
968 TQDomNodeList list = element.childNodes();
969 for (
unsigned int i=0; i<list.count(); ++i) {
970 if (list.item(i).isElement()) {
971 TQDomElement e = list.item(i).toElement();
972 if (e.tagName() ==
"calendar") {
974 m_calendar =
new Calendar;
982void StandardWorktime::save(TQDomElement &element)
const {
984 TQDomElement me = element.ownerDocument().createElement(
"standard-worktime");
985 element.appendChild(me);
986 me.setAttribute(
"year", m_year.toString(Duration::Format_Hour));
987 me.setAttribute(
"month", m_month.toString(Duration::Format_Hour));
988 me.setAttribute(
"week", m_week.toString(Duration::Format_Hour));
989 me.setAttribute(
"day", m_day.toString(Duration::Format_Hour));
991 m_calendar->save(me);
995void CalendarDay::printDebug(TQCString indent) {
996 TQString s[] = {
"None",
"Non-working",
"Working"};
997 kdDebug()<<indent<<
" "<<m_date.toString()<<
" = "<<s[m_state]<<endl;
998 if (m_state == Map::Working) {
1000 TQPtrListIterator<TQPair<TQTime, TQTime> > it = m_workingIntervals;
1001 for (; it.current(); ++it) {
1002 kdDebug()<<indent<<
" Interval: "<<it.current()->first<<
" to "<<it.current()->second<<endl;
1007void CalendarWeekdays::printDebug(TQCString indent) {
1008 kdDebug()<<indent<<
"Weekdays ------"<<endl;
1009 TQPtrListIterator<CalendarDay> it = m_weekdays;
1010 for (
char c=
'0'; it.current(); ++it) {
1011 it.current()->printDebug(indent +
" Day " + c++ +
": ");
1015void Calendar::printDebug(TQCString indent) {
1016 kdDebug()<<indent<<
"Calendar "<<m_id<<
": '"<<m_name<<
"' Deleted="<<m_deleted<<endl;
1017 kdDebug()<<indent<<
" Parent: "<<(m_parent ? m_parent->name() :
"No parent")<<endl;
1018 m_weekdays->printDebug(indent +
" ");
1019 kdDebug()<<indent<<
" Days --------"<<endl;
1020 TQPtrListIterator<CalendarDay> it = m_days;
1021 for (; it.current(); ++it) {
1022 it.current()->printDebug(indent +
" ");
1026void StandardWorktime::printDebug(TQCString indent) {
1027 kdDebug()<<indent<<
"StandardWorktime "<<endl;
1028 kdDebug()<<indent<<
"Year: "<<m_year.toString()<<endl;
1029 kdDebug()<<indent<<
"Month: "<<m_month.toString()<<endl;
1030 kdDebug()<<indent<<
"Week: "<<m_week.toString()<<endl;
1031 kdDebug()<<indent<<
"Day: "<<m_day.toString()<<endl;
Calendar defines the working and nonworking days and hours.
DateTime is a TQDateTime which knows about Duration.
The duration class can be used to store a timespan in a convenient format.