diff options
Diffstat (limited to 'kpilot/lib/pilotDateEntry.cc')
-rw-r--r-- | kpilot/lib/pilotDateEntry.cc | 478 |
1 files changed, 0 insertions, 478 deletions
diff --git a/kpilot/lib/pilotDateEntry.cc b/kpilot/lib/pilotDateEntry.cc deleted file mode 100644 index d7844b897..000000000 --- a/kpilot/lib/pilotDateEntry.cc +++ /dev/null @@ -1,478 +0,0 @@ -/* KPilot -** -** Copyright (C) 1998-2001 by Dan Pilone -** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com> -** -** This is a C++ wrapper for the Pilot's datebook structures. -*/ - -/* -** This program is free software; you can redistribute it and/or modify -** it under the terms of the GNU Lesser General Public License as published by -** the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. -** -** You should have received a copy of the GNU Lesser General Public License -** along with this program in a file called COPYING; if not, write to -** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -** MA 02110-1301, USA. -*/ - -/* -** Bug reports and questions can be sent to kde-pim@kde.org -*/ - -#include "options.h" - -#include <stdlib.h> - -#include <tqdatetime.h> -#include <tqnamespace.h> -#include <tqregexp.h> - -#include <kglobal.h> - -#include "pilotDateEntry.h" - -static const char *default_date_category_names[] = { - "Unfiled", - "Business", - "Personal", - 0L -} ; - -void PilotDateInfo::resetToDefault() -{ - FUNCTIONSETUP; - // Reset to all 0s - memset(&fInfo,0,sizeof(fInfo)); - // Fill up default categories - for (unsigned int i=0; (i<4) && default_date_category_names[i]; ++i) - { - strncpy(fInfo.category.name[i],default_date_category_names[i],sizeof(fInfo.category.name[0])); - } - - fInfo.startOfWeek = 0; - -} - - -PilotDateEntry::PilotDateEntry():PilotRecordBase() -{ - ::memset(&fAppointmentInfo, 0, sizeof(struct Appointment)); -} - -/* initialize the entry from another one. If rec==NULL, this constructor does the same as PilotDateEntry() -*/ -PilotDateEntry::PilotDateEntry(PilotRecord * rec) : - PilotRecordBase(rec) -{ - ::memset(&fAppointmentInfo, 0, sizeof(fAppointmentInfo)); - if (rec) - { - // Construct a fake pi_buffer for unpack_Appointment. - // No ownership changes occur here. - pi_buffer_t b = { (unsigned char *) rec->data(), rec->size(), rec->size() } ; - unpack_Appointment(&fAppointmentInfo, &b, datebook_v1); - } - return; - -} - -void PilotDateEntry::_copyExceptions(const PilotDateEntry & e) -{ - if (e.fAppointmentInfo.exceptions > 0) - { - size_t blocksize = e.fAppointmentInfo.exceptions * - sizeof(struct tm); - - fAppointmentInfo.exception = (struct tm *)::malloc(blocksize); - - if (fAppointmentInfo.exception) - { - fAppointmentInfo.exceptions = - e.fAppointmentInfo.exceptions; - ::memcpy(fAppointmentInfo.exception, - e.fAppointmentInfo.exception, blocksize); - } - else - { - WARNINGKPILOT << "malloc() failed, exceptions not copied" << endl; - fAppointmentInfo.exceptions = 0; - } - } - else - { - fAppointmentInfo.exceptions = 0; - fAppointmentInfo.exception = 0L; - } -} - - -PilotDateEntry::PilotDateEntry(const PilotDateEntry & e) : - PilotRecordBase(e) -{ - ::memcpy(&fAppointmentInfo, &e.fAppointmentInfo, - sizeof(struct Appointment)); - // See operator = for explanation - fAppointmentInfo.exception = 0L; - fAppointmentInfo.description = 0L; - fAppointmentInfo.note = 0L; - - _copyExceptions(e); - setDescriptionP(e.fAppointmentInfo.description); - setNoteP(e.fAppointmentInfo.note); -} - - -PilotDateEntry & PilotDateEntry::operator = (const PilotDateEntry & e) -{ - if (this != &e) // Pointer equality! - { - KPILOT_FREE(fAppointmentInfo.exception); - KPILOT_FREE(fAppointmentInfo.description); - KPILOT_FREE(fAppointmentInfo.note); - ::memcpy(&fAppointmentInfo, &e.fAppointmentInfo, - sizeof(fAppointmentInfo)); - - // The original pointers were already freed; since we're now - // got the pointers from the new structure and we're going - // to use the standard set functions make sure that - // we don't free() the copies-of-pointers from e, which - // would be disastrous. - // - // - fAppointmentInfo.exception = 0L; - fAppointmentInfo.description = 0L; - fAppointmentInfo.note = 0L; - - _copyExceptions(e); - setDescriptionP(e.fAppointmentInfo.description); - setNoteP(e.fAppointmentInfo.note); - } - - return *this; -} // end of assignment operator - - -TQString PilotDateEntry::getTextRepresentation(Qt::TextFormat richText) -{ - TQString text, tmp; - TQString par = (richText==Qt::RichText) ?CSL1("<p>"):TQString::null; - TQString ps = (richText==Qt::RichText) ?CSL1("</p>"):CSL1("\n"); - TQString br = (richText==Qt::RichText) ?CSL1("<br/>"):CSL1("\n"); - - // title + name - text += par; - tmp=richText?CSL1("<b><big>%1</big></b>"):CSL1("%1"); - text += tmp.arg(rtExpand(getDescription(), richText)); - text += ps; - - TQDateTime dt(readTm(getEventStart())); - TQString startDate(dt.toString(Qt::LocalDate)); - text+=par; - text+=i18n("Start date: %1").arg(startDate); - text+=ps; - - if (isEvent()) - { - text+=par; - text+=i18n("Whole-day event"); - text+=ps; - } - else - { - dt=readTm(getEventEnd()); - TQString endDate(dt.toString(Qt::LocalDate)); - text+=par; - text+=i18n("End date: %1").arg(endDate); - text+=ps; - } - - if ( isAlarmEnabled() ) - { - text+=par; - tmp=i18n("%1 is the duration, %2 is the time unit", "Alarm: %1 %2 before event starts"). - arg(getAdvance()); - switch (getAdvanceUnits()) - { - case advMinutes: tmp=tmp.arg(i18n("minutes")); break; - case advHours: tmp=tmp.arg(i18n("hours")); break; - case advDays: tmp=tmp.arg(i18n("days")); break; - default: tmp=tmp.arg(TQString::null); break;; - } - text+=tmp; - text+=ps; - } - - if (getRepeatType() != repeatNone) - { - text+=par; - tmp=i18n("Recurrence: every %1 %2"); - int freq = getRepeatFrequency(); - tmp=tmp.arg(freq); - - switch(getRepeatType()) - { - case repeatDaily: tmp=tmp.arg(i18n("day(s)")); break; - case repeatWeekly: tmp=tmp.arg(i18n("week(s)")); break; - case repeatMonthlyByDay: - case repeatMonthlyByDate: tmp=tmp.arg(i18n("month(s)")); break; - case repeatYearly: tmp=tmp.arg(i18n("year(s)")); break; - default: tmp=tmp.arg(TQString::null); break; - } - text+=tmp; - text+=br; - - bool repeatsForever = getRepeatForever(); - if (repeatsForever) - { - text+=i18n("Repeats indefinitely"); - } - else - { - dt = readTm(getRepeatEnd()).date(); - text+=i18n("Until %1").arg(dt.toString(Qt::LocalDate)); - } - text+=br; - - if (getRepeatType()==repeatMonthlyByDay) text+=i18n("Repeating on the i-th day of week j")+br; - if (getRepeatType()==repeatMonthlyByDate) text+=i18n("Repeating on the n-th day of the month")+br; - // TODO: show the dayArray when repeating weekly - /*TQBitArray dayArray(7); - if (getRepeatType()==repeatWeekly) text+=i18n("Repeat day flags: %1").arg(getRepeatDays - const int *days = dateEntry->getRepeatDays(); - // Rotate the days of the week, since day numbers on the Pilot and - // in vCal / Events are different. - if (days[0]) dayArray.setBit(6); - for (int i = 1; i < 7; i++) - { - if (days[i]) dayArray.setBit(i-1); - }*/ - text+=ps; - } - - if (getExceptionCount()>0 ) - { - text+=par; - text+=i18n("Exceptions:")+br; - for (int i = 0; i < getExceptionCount(); i++) - { - TQDate exdt=readTm(getExceptions()[i]).date(); - text+=exdt.toString(Qt::LocalDate); - text+=br; - } - text+=ps; - } - - if (!getNote().isEmpty()) - { - text += richText?CSL1("<hr/>"):CSL1("-------------------------\n"); - text+=par; - text+=richText?i18n("<b><em>Note:</em></b><br>"):i18n("Note:\n"); - text+=rtExpand(getNote(), richText); - text+=ps; - } - - return text; -} - -TQDateTime PilotDateEntry::dtStart() const -{ - FUNCTIONSETUP; - return readTm( getEventStart() ); -} - -TQDateTime PilotDateEntry::dtEnd() const -{ - FUNCTIONSETUP; - return readTm( getEventEnd() ); -} - -TQDateTime PilotDateEntry::dtRepeatEnd() const -{ - FUNCTIONSETUP; - return readTm( getRepeatEnd() ); -} - -unsigned int PilotDateEntry::alarmLeadTime() const -{ - FUNCTIONSETUP; - if (!isAlarmEnabled()) return 0; - - int adv = getAdvance(); - if ( adv < 0 ) - { - return 0; // Not possible to enter on the pilot - } - unsigned int t = adv; - int u = getAdvanceUnits(); - - - switch(u) - { - case advMinutes : t *= 60; break; - case advHours : t *= 3600; break; - case advDays : t *= 3600 * 24; break; - default: t = 0; - } - - return t; -} - -PilotRecord *PilotDateEntry::pack() const -{ - int i; - - pi_buffer_t *b = pi_buffer_new( sizeof(fAppointmentInfo) ); - i = pack_Appointment(const_cast<Appointment_t *>(&fAppointmentInfo), b, datebook_v1); - if (i<0) - { - // Generic error from the pack_*() functions. - return 0; - } - - // pack_Appointment sets b->used - return new PilotRecord( b, this ); -} - -/* setExceptions sets a new set of exceptions. Note that - PilotDateEntry assumes ownership of the array and will - delete the old one. */ -void PilotDateEntry::setExceptions(struct tm *e) { - if (fAppointmentInfo.exception != e) - { - KPILOT_FREE(fAppointmentInfo.exception); - } - fAppointmentInfo.exception=e; -} - - -void PilotDateEntry::setDescriptionP(const char *desc, int l) -{ - FUNCTIONSETUP; - KPILOT_FREE(fAppointmentInfo.description); - - if (desc && *desc) - { - if (-1 == l) l=::strlen(desc); - fAppointmentInfo.description = - (char *) ::malloc(l + 1); - if (fAppointmentInfo.description) - { - strlcpy(fAppointmentInfo.description, desc, l+1); - } - else - { - WARNINGKPILOT << "malloc() failed, description not set" << endl; - } - } - else - { - fAppointmentInfo.description = 0L; - } -} - -void PilotDateEntry::setNoteP(const char *note, int l) -{ - FUNCTIONSETUP; - KPILOT_FREE(fAppointmentInfo.note); - - if (note && *note) - { - if (-1 == l) l=::strlen(note); - fAppointmentInfo.note = (char *)::malloc(l + 1); - if (fAppointmentInfo.note) - { - strlcpy(fAppointmentInfo.note, note,l+1); - } - else - { - WARNINGKPILOT << "malloc() failed, note not set" << endl; - } - } - else - { - fAppointmentInfo.note = 0L; - } -} - -void PilotDateEntry::setNote(const TQString &s) -{ - TQCString t = Pilot::toPilot(s); - setNoteP( t.data(),t.length() ); -} - -void PilotDateEntry::setLocation(const TQString &s) -{ - TQString note = Pilot::fromPilot(getNoteP()); - TQRegExp rxp = TQRegExp("^[Ll]ocation:[^\n]+\n"); - - // per TQString docs, this covers null and 0 length - if( s.isEmpty() ) - { - note.replace(rxp,""); - } - else - { - TQString location = "Location: " + s + "\n"; - int pos = note.find(rxp); - - if(pos >= 0) - { - note.replace( rxp, location ); - } - else - { - note = location + note; - setNote( note ); - } - } -} - -TQString PilotDateEntry::getLocation() const -{ - // Read the complete note here and not the filtered - // one from PilotDateEntry::getNote(); - TQString note = Pilot::fromPilot(getNoteP()); - TQRegExp rxp = TQRegExp("^[Ll]ocation:[^\n]+\n"); - int pos = note.find(rxp, 0); - - if(pos >= 0) - { - TQString location = rxp.capturedTexts().first(); - rxp = TQRegExp("^[Ll]ocation:[\\s|\t]*"); - location.replace(rxp,""); - location.replace("\n", ""); - return location; - } - else - { - return ""; - } -} - -void PilotDateEntry::setDescription(const TQString &s) -{ - TQCString t = Pilot::toPilot(s); - setDescriptionP( t.data(),t.length() ); -} - -TQString PilotDateEntry::getNote() const -{ - TQString note = Pilot::fromPilot(getNoteP()); - TQRegExp rxp = TQRegExp("^[Ll]ocation:[^\n]+\n"); - note.replace(rxp, "" ); - return note; -} - -TQString PilotDateEntry::getDescription() const -{ - return Pilot::fromPilot(getDescriptionP()); -} - |