author | zautrix <zautrix> | 2004-11-08 08:05:08 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2004-11-08 08:05:08 (UTC) |
commit | 4481ce9842b3820087b24a8bfce2c194974aae73 (patch) (side-by-side diff) | |
tree | 70da30be2b8cd4b6934c1a51c08a9d83aa93d8b6 | |
parent | 90e33436f6d1c502a5620760ac6592b9881ee4ab (diff) | |
download | kdepimpi-4481ce9842b3820087b24a8bfce2c194974aae73.zip kdepimpi-4481ce9842b3820087b24a8bfce2c194974aae73.tar.gz kdepimpi-4481ce9842b3820087b24a8bfce2c194974aae73.tar.bz2 |
some small fixes
-rw-r--r-- | bin/kdepim/kaddressbook/germantranslation.txt | 4 | ||||
-rw-r--r-- | korganizer/koeditordetails.cpp | 8 | ||||
-rw-r--r-- | libkcal/incidencebase.cpp | 13 | ||||
-rw-r--r-- | libkcal/incidencebase.h | 2 |
4 files changed, 21 insertions, 6 deletions
diff --git a/bin/kdepim/kaddressbook/germantranslation.txt b/bin/kdepim/kaddressbook/germantranslation.txt index 75df50f..85ca87d 100644 --- a/bin/kdepim/kaddressbook/germantranslation.txt +++ b/bin/kdepim/kaddressbook/germantranslation.txt @@ -256,217 +256,217 @@ { "Password to enable\naccess from remote:","Passwort um entfernten\nZugriff zuzulassen:" },
{ "Automatically start\nat application startup","Starte automatisch\nbeim Programmstart" },
{ "Automatically sync\nwith KDE-Desktop","Automatischer Sync\nmit dem KDE-Desktop" },
{ "Enter port for Pi-Sync","Port Nummer für Pi-Sync" },
{ "Disable Pi-Sync","Schalte Pi-Sync aus" },
{ "Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!","Wollen Sie wirklich\nmit allen selektierten\nProfilen \"Multi-Syncen\"?\nDas Syncen dauert einige Zeit -\nalle Profile werden zweimal gesynct!" },
{ "KDE-Pim Sync","KDE-Pim Sync" },
{ "Multiple profiles","Multi-Sync Profile" },
{ "Device: ","Gerät: " },
{ "Multiple sync started.","Multi-Sync gestartet." },
{ "Nothing synced! No profiles defined for multisync!","Nichts gesynct! Keine Profile\nselektiert für Multi-Sync" },
{ "KDE-Pim sync config","KDE-Pim Sync Konfig" },
{ "Insert kind of connection,e.g.:\n","Füge Art der Verbindung ein, z.B.:\n" },
{ "Recommended: Leave empty!\n(Such that model can\nbe auto detected)\nOr insert name of model:\n","Empfohlen: Leer lassen!\n(So dass das Modell\nautomatisch\erkannt\nwerden kann)\nOder füge Model Name ein:\n" },
{ "KO/Pi config error","KO/Pi Konfig. Fehler" },
{ "Local device name undefined!\nPlease define device name!","Name dieses Gerätes undefiniert!\nBitte Namen angeben!" },
{ "Edit Address Book Filters","Editiere Addressbuch Filter" },
{ "&Add...","Hinzufügen..." },
{ "&Edit...","B&earbeiten..." },
{ "&Remove","Entfe&rne" },
{ "Modify View: ","Ansicht ändern: " },
{ "Fields","Felder" },
{ "Select Fields to Display","Wähle anzuzeigende Felder" },
{ "All","Alles" },
{ "Frequent","Frequent" },
{ "Address","Adresse" },
{ "Email","E-Mail" },
{ "Personal","Persönl." },
{ "Organization","Organisation" },
{ "Custom","Benutzerdefiniert" },
{ "&Selected\nfields:","&Selectierte\nFelder:" },
{ "Formatted Name","Format. Name" },
{ "Additional Names","Mittelname" },
{ "Honorific Prefixes","Namen Prefix" },
{ "Honorific Suffixes","Namen Suffix" },
{ "Nick Name","Sptitzname" },
{ "Birthday","Geburtstag" },
{ "Home Address Street","Privat Adresse Strasse" },
{ "Home Address Locality","Privat Adresse Stadt" },
{ "Home Address Region","Privat Adresse Bundesland" },
{ "Home Address Postal Code","Privat Adresse PLZ" },
{ "Home Address Country","Privat Adresse Land" },
{ "Home Address Label","Privat Adresse Label" },
{ "Business Address Street","Büro Adresse Strasse" },
{ "Business Address Locality","Büro Adresse Stadt" },
{ "Business Address Region","Büro Adresse Bundesland" },
{ "Business Address Postal Code","Büro Adresse PLZ" },
{ "Business Address Country","Büro Adresse Land" },
{ "Business Address Label","Büro Adresse Label" },
{ "Home Phone","Privat Telefon" },
{ "Business Phone","Büro Telefon" },
{ "Mobile Phone","Handy" },
{ "Home Fax","Privat Fax" },
{ "Business Fax","Büro Fax" },
{ "Car Phone","Autotelefon" },
{ "ISDN","ISDN" },
{ "Pager","Pager" },
{ "Mail Client","Mail Client" },
{ "Title","Titel" },
{ "Role","Rolle" },
{ "Note","Notiz" },
{ "URL","URL" },
{ "Resource","Resource" },
{ "SIP","SIP" },
{ "Default Filter","Default Filter" },
{ "The default filter will be activated whenever this view is displayed. This feature allows you to configure views that only interact with certain types of information based on the filter. Once the view is activated, the filter can be changed at anytime.","#The default filter will be activated whenever this view is displayed. This feature allows you to configure views that only interact with certain types of information based on the filter. Once the view is activated, the filter can be changed at anytime." },
{ "No default filter","Kein default Filter" },
{ "Use last active filter","Nutze letzen aktiven Filter" },
{ "Use filter:","Nutze Filter:" },
{ "Look & Feel","Look & Feel" },
{ "Row Separator","Reihen Separator" },
{ "Alternating backgrounds","Abwechselnder Hintergrund" },
{ "Single line","Einzelne Zeile" },
{ "Enable background image:","Hintergrundbild:" },
{ "Enable contact tooltips","Contact Tooltips" },
{ "&Enable custom Colors","Benutzerdef. Farben" },
{ "&Colors","Farben" },
{ "If custom colors are enabled, you may choose the colors for the view below. Otherwise colors from your current KDE color scheme are used.","#If custom colors are enabled, you may choose the colors for the view below. Otherwise colors from your current KDE color scheme are used." },
{ "Double click or press RETURN on a item to select a color for the related strings in the view.","#Double click or press RETURN on a item to select a color for the related strings in the view." },
{ "&Enable custom fonts","B&enutzerdefinierte Schriften" },
{ "&Text font:","Textschriftart:" },
{ "&Header font:","Titelschriftart:" },
{ "If custom fonts are enabled, you may choose which fonts to use for this view below. Otherwise the default KDE font will be used, in bold style for the header and normal style for the data.","#If custom fonts are enabled, you may choose which fonts to use for this view below. Otherwise the default KDE font will be used, in bold style for the header and normal style for the data." },
{ "&Fonts","Schri&ften" },
{ "Background Color","Hintergrundfarbe" },
{ "Text Color","Textfarbe" },
{ "Header Background Color","Titel Hintergrundfarbe" },
{ "Header Text Color","Titel Farbe" },
{ "Highlight Color","Auswahlfarbe" },
{ "Highlighted Text Color","Auswahltextfarbe" },
{ "Alternating Background Color","Abwechselnder Hintergrundfarbe" },
{ "Postal","Post" },
{ "Dr.","Dr." },
{ "Miss","Frl." },
{ "Mr.","Herr" },
{ "Mrs.","Frau" },
-{ "Ms.","Frau" },
+{ "Ms.","Fr." },
{ "Prof.","Prof." },
{ "I","I" },
{ "II","II" },
{ "III","III" },
{ "Jr.","Jr." },
{ "Sr.","Sr." },
{ "Name:","Name:" },
{ "Documents","Dokumente" },
{ "Files","Dateien" },
{ "All Files","Alle Dateien" },
{ "Name","Name" },
{ "Size","Größe" },
{ "Date","Datum" },
{ "Mime Type","Mime Typ" },
{ "Geo Data Input","Geo Dateneingabe" },
{ "Sexagesimal","Sexagesimal" },
{ "North","Nord" },
{ "South","Süd" },
{ "East","Ost" },
{ "West","West" },
{ "Undefined","Unbestimmt" },
{ "Edit Address","Bearbeite Adresse" },
{ "Street:","Strasse:" },
-{ "Post office box:","PLZ:" },
+{ "Post office box:","Postfach:" },
{ "Locality:","Stadt:" },
{ "Region:","Region:" },
{ "Postal code:","PLZ:" },
{ "Country:","Staat:" },
{ "This is the preferred address","Dies ist die bevorzugte Adresse" },
{ "New...","Neu..." },
{ "Change Type","Ändere Art" },
{ "Edit Address Type","Ändere Address Art" },
{ "Address Types","Address Art" },
{ "Domestic","Inland" },
{ "International","International" },
{ "Parcel","Paket" },
{ "Edit Contact Name","Ändere Kontakt Name" },
{ "Honorific prefixes:","Namensprefixes:" },
{ "Given name:","Vorname:" },
{ "Additional names:","Mittelnamen:" },
{ "Family names:","Nachname:" },
{ "Honorific suffixes:","Namenssuffixe:" },
{ "Parse name automatically","Setze Namen automatisch" },
{ "Edit Phone Numbers","Bearbeite Telefonnummern" },
{ "Number","Nummer" },
{ "Type","Typ" },
{ "Edit Phone Number","Bearbeite Telefonnummer" },
{ "Number:","Nummer:" },
{ "This is the preferred phone number","Dies ist die bevorzugte Telefonnummer" },
{ "Types","Typen" },
{ "Messenger","Messenger" },
{ "Other","Anderes" },
{ "Video","Video" },
{ "Mailbox","Mailbox" },
{ "Modem","Modem" },
{ "Car","Auto" },
{ "PCS","PCS" },
{ "Category","Kategorie" },
{ "Select Categories","Wähle Kategorien" },
{ " &Deselect All "," &Deselektiere alle " },
{ " &Edit Categories "," B&earbeite Kategorien " },
{ "&OK","&OK" },
{ "&Cancel","Abbre&chen" },
{ "Configure","Konfiguriere" },
{ "Default","Voreinstellungen" },
{ "Addressbook","Adressbuch" },
{ "Details view font","Schriftart Detailansicht" },
{ "phone:123","phone:123" },
{ "Search only after <return> key pressed","Suche nur nach <return> Taste" },
{ "Honor KDE single click","Benutze KDE Einzelklick" },
{ "Automatic name parsing for new addressees","Automa. Name Parsen für neue Einträge" },
{ "Display List and Details at once (restart)","Zeige Liste und Details zusammen(neustart)" },
{ "Ask for quit when closing Ka/Pi","Vor Beenden von Ka/Pi nachfragen" },
{ "General","Algemein" },
{ "Extensions (restart)","Extensions (restart)" },
{ "Description","Beschreibungen" },
{ "Extensions","Extensions" },
{ "Prefixes","Prefixe" },
{ "Inclusions","Inclusions" },
{ "Suffixes","Suffixe" },
{ "Default formatted name:","Default format. Name:" },
{ "Empty","Leer" },
{ "Simple Name","Einfacher Name" },
{ "Full Name","Voller Name" },
{ "Reverse Name","Namen umdrehen" },
{ "Contact","Kontakt" },
{ "Global","Allgemein" },
{ "Phone","Telefon" },
{ "SMS","SMS" },
{ "Language:(needs restart)","Sprache:(Neustart)" },
{ "English","English" },
{ "German","Deutsch" },
{ "French","Französisch" },
{ "Italian","Italienisch" },
{ "User defined (usertranslation.txt)","Benutzerdef. (usertranslation.txt)" },
{ "Time Format(nr):","Zeit Format(nr):" },
{ "24:00","24:00" },
{ "12:00am","12:00am" },
{ "Week starts on Sunday","Woche beginnt Sonntags" },
{ "Locale","Locale" },
{ "Date Format:","Datums Format:" },
{ "24.03.2004 (%d.%m.%Y|%A %d %B %Y)","24.03.2004 (%d.%m.%Y|%A %d %B %Y)" },
{ "03.24.2004 (%m.%d.%Y|%A %B %d %Y)","03.24.2004 (%m.%d.%Y|%A %B %d %Y)" },
{ "2004-03-24 (%Y-%m-%d|%A %Y %B %d)","2004-03-24 (%Y-%m-%d|%A %Y %B %d)" },
{ "User defined","Benutzerdefiniert" },
{ "User long date:","Format langes Datum:" },
{ "User short date:","Format kurzes Datum:" },
{ "Daylight start:","Sommerzeit Beginn:" },
{ "Daylight end:","Sommerzeit Ende:" },
{ "Actual start and end is the\nsunday before this date.","Tatsächlicher Beginn/Ende ist der\nSonntag vor diesem Datum!" },
{ "Monday 19 April 2004: %A %d %B %Y","Monday 19 April 2004: %A %d %B %Y" },
{ "Mon 19.04.04: %a %d.%m.%y","Mon 19.04.04: %a %d.%m.%y" },
{ "Mon, 19.Apr.04: %a, %d.%b.%y","Mon, 19.Apr.04: %a, %d.%b.%y" },
{ "Date Format","Datums Format" },
{ "Timezone:","Zeitzone:" },
{ "The year in the date is ignored.","Das Jahr vom Datum wird ignoriert." },
{ "Timezone has daylight saving","Zeitzone hat Sommerzeit" },
{ "Add 30 min to selected Timezone","Addiere 30 min zur Zeitzone" },
{ "Used Mail Client","Benutzter Mail Client" },
{ "Channel:","Channel:" },
diff --git a/korganizer/koeditordetails.cpp b/korganizer/koeditordetails.cpp index 2e1ae6e..66f6977 100644 --- a/korganizer/koeditordetails.cpp +++ b/korganizer/koeditordetails.cpp @@ -206,195 +206,201 @@ KOEditorDetails::KOEditorDetails (int spacing,QWidget* parent,const char* name) connect(ExternalAppHandler::instance(), SIGNAL(receivedNameEmailUidListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&)), this, SLOT(insertAttendees(const QString&, const QStringList&, const QStringList&, const QStringList&))); #endif } KOEditorDetails::~KOEditorDetails() { } void KOEditorDetails::removeAttendee() { AttendeeListItem *aItem = (AttendeeListItem *)mListView->selectedItem(); if (!aItem) return; Attendee *delA = new Attendee(aItem->data()->name(),aItem->data()->email(), aItem->data()->RSVP(),aItem->data()->status(),aItem->data()->role(), aItem->data()->uid()); mdelAttendees.append(delA); delete aItem; updateAttendeeInput(); } void KOEditorDetails::openAddressBook() { #ifndef KORG_NOKABC #ifdef DESKTOP_VERSION KABC::Addressee::List list = KABC::AddresseeDialog::getAddressees(this); uint i=0; for (i=0; i < list.count(); i++) { insertAttendee( new Attendee( list[i].realName(), list[i].preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,list[i].uid()) ); } #else bool res = ExternalAppHandler::instance()->requestNameEmailUidListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/); // the result should now arrive through method insertAttendees #endif #if 0 KABC::Addressee a = KABC::AddresseeDialog::getAddressee(this); if (!a.isEmpty()) { insertAttendee( new Attendee( a.realName(), a.preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,a.uid()) ); } #endif #endif } void KOEditorDetails::addNewAttendee() { #if 0 // this is cool. If they didn't enter an email address, // try to look it up in the address book and fill it in for them. if (QString(mEmailEdit->text()).stripWhiteSpace().isEmpty()) { KabAPI addrBook; QString name; std::list<AddressBook::Entry> entries; name = mNameEdit->text(); if (addrBook.init() == AddressBook::NoError) { if (addrBook.getEntryByName(name, entries, 1) == AddressBook::NoError) { kdDebug() << "positive match" << endl; // take first email address if (!entries.front().emails.isEmpty() && entries.front().emails.first().length()>0) mEmailEdit->setText(entries.front().emails.first()); } } } #endif Attendee *a = new Attendee(i18n("(EmptyName)"),i18n("(EmptyEmail)")); insertAttendee(a); } //the map includes name/email pairs, that comes from Ka/Pi void KOEditorDetails::insertAttendees(const QString& uid,const QStringList& nameList,const QStringList& emailList,const QStringList& uidList) { if (uid == this->name()) { for ( int i = 0; i < nameList.count(); i++) { QString _name = nameList[i]; QString _email = emailList[i]; QString _uid = uidList[i]; Attendee *a = new Attendee(_name,_email,false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant, _uid); insertAttendee(a); } } } - void KOEditorDetails::insertAttendee(Attendee *a) { + AttendeeListItem *first = (AttendeeListItem*) mListView->firstChild(); + while (first) { + if ( first->data()->name() == a->name() && first->data()->email() == a->email() ) + return; + first = (AttendeeListItem*) first->nextSibling(); + } + AttendeeListItem *item = new AttendeeListItem(a,mListView); mListView->setSelected( item, true ); } void KOEditorDetails::setDefaults() { mRsvpButton->setChecked(true); mListView->clear(); mdelAttendees.clear(); clearAttendeeInput(); mOrganizerLabel->setText(i18n("Organizer: %1").arg(KOPrefs::instance()->email())); mNameEdit->setText(""); mUidEdit->setText(""); mEmailEdit->setText(""); mRoleCombo->setCurrentItem( 0 ); mStatusCombo->setCurrentItem( 0 ); } void KOEditorDetails::readEvent(Incidence *event) { setDefaults(); //mListView->clear(); //mdelAttendees.clear(); QPtrList<Attendee> tmpAList = event->attendees(); Attendee *a; for (a = tmpAList.first(); a; a = tmpAList.next()) insertAttendee(new Attendee(*a)); mListView->setSelected( mListView->firstChild(), true ); mOrganizerLabel->setText(i18n("Organizer: %1").arg(event->organizer())); } void KOEditorDetails::writeEvent(Incidence *event) { event->clearAttendees(); QListViewItem *item; AttendeeListItem *a; for (item = mListView->firstChild(); item; item = item->nextSibling()) { a = (AttendeeListItem *)item; event->addAttendee(new Attendee(*(a->data()))); } event->setOrganizer(KOPrefs::instance()->email()); } void KOEditorDetails::cancelAttendeeEvent(Incidence *event) { event->clearAttendees(); Attendee * att; for (att=mdelAttendees.first();att;att=mdelAttendees.next()) { event->addAttendee(new Attendee(*att)); } mdelAttendees.clear(); } bool KOEditorDetails::validateInput() { return true; } void KOEditorDetails::updateAttendeeInput() { QListViewItem *item = mListView->selectedItem(); AttendeeListItem *aItem = static_cast<AttendeeListItem *>( item ); if (aItem) { fillAttendeeInput( aItem ); } else { clearAttendeeInput(); } } void KOEditorDetails::clearAttendeeInput() { mNameEdit->setText(""); mUidEdit->setText(""); mEmailEdit->setText(""); mRoleCombo->setCurrentItem(0); mStatusCombo->setCurrentItem(0); mRsvpButton->setChecked(true); setEnabledAttendeeInput( false ); } void KOEditorDetails::fillAttendeeInput( AttendeeListItem *aItem ) { Attendee *a = aItem->data(); mDisableItemUpdate = true; mNameEdit->setText(a->name()); mUidEdit->setText(a->uid()); mEmailEdit->setText(a->email()); mRoleCombo->setCurrentItem(a->role()); mStatusCombo->setCurrentItem(a->status()); mRsvpButton->setChecked(a->RSVP()); mDisableItemUpdate = false; diff --git a/libkcal/incidencebase.cpp b/libkcal/incidencebase.cpp index 9aa517c..7525a4a 100644 --- a/libkcal/incidencebase.cpp +++ b/libkcal/incidencebase.cpp @@ -120,200 +120,209 @@ bool KCal::operator==( const IncidenceBase& i1, const IncidenceBase& i2 ) QDateTime IncidenceBase::getEvenTime( QDateTime dt ) { QTime t = dt.time(); dt.setTime( QTime (t.hour (), t.minute (), t.second () ) ); return dt; } void IncidenceBase::setUid(const QString &uid) { mUid = uid; updated(); } QString IncidenceBase::uid() const { return mUid; } void IncidenceBase::setLastModified(const QDateTime &lm) { // DON'T! updated() because we call this from // Calendar::updateEvent(). mLastModified = getEvenTime(lm); //qDebug("IncidenceBase::setLastModified %s ",lm.toString().latin1()); } QDateTime IncidenceBase::lastModified() const { return mLastModified; } void IncidenceBase::setOrganizer(const QString &o) { // we don't check for readonly here, because it is // possible that by setting the organizer we are changing // the event's readonly status... mOrganizer = o; if (mOrganizer.left(7).upper() == "MAILTO:") mOrganizer = mOrganizer.remove(0,7); updated(); } QString IncidenceBase::organizer() const { return mOrganizer; } void IncidenceBase::setReadOnly( bool readOnly ) { mReadOnly = readOnly; } void IncidenceBase::setDtStart(const QDateTime &dtStart) { // if (mReadOnly) return; mDtStart = getEvenTime(dtStart); updated(); } QDateTime IncidenceBase::dtStart() const { return mDtStart; } QString IncidenceBase::dtStartTimeStr() const { return KGlobal::locale()->formatTime(dtStart().time()); } QString IncidenceBase::dtStartDateStr(bool shortfmt) const { return KGlobal::locale()->formatDate(dtStart().date(),shortfmt); } QString IncidenceBase::dtStartStr(bool shortfmt) const { return KGlobal::locale()->formatDateTime(dtStart(), shortfmt); } bool IncidenceBase::doesFloat() const { return mFloats; } void IncidenceBase::setFloats(bool f) { if (mReadOnly) return; mFloats = f; updated(); } -void IncidenceBase::addAttendee(Attendee *a, bool doupdate) +bool IncidenceBase::addAttendee(Attendee *a, bool doupdate) { - if (mReadOnly) return; + if (mReadOnly) return false; if (a->name().left(7).upper() == "MAILTO:") a->setName(a->name().remove(0,7)); + QPtrListIterator<Attendee> qli(mAttendees); + + qli.toFirst(); + while (qli) { + if (*qli.current() == *a) + return false; + ++qli; + } mAttendees.append(a); if (doupdate) updated(); + return true; } #if 0 void IncidenceBase::removeAttendee(Attendee *a) { if (mReadOnly) return; mAttendees.removeRef(a); updated(); } void IncidenceBase::removeAttendee(const char *n) { Attendee *a; if (mReadOnly) return; for (a = mAttendees.first(); a; a = mAttendees.next()) if (a->getName() == n) { mAttendees.remove(); break; } } #endif void IncidenceBase::clearAttendees() { if (mReadOnly) return; mAttendees.clear(); } #if 0 Attendee *IncidenceBase::getAttendee(const char *n) const { QPtrListIterator<Attendee> qli(mAttendees); qli.toFirst(); while (qli) { if (qli.current()->getName() == n) return qli.current(); ++qli; } return 0L; } #endif Attendee *IncidenceBase::attendeeByMail(const QString &email) { QPtrListIterator<Attendee> qli(mAttendees); qli.toFirst(); while (qli) { if (qli.current()->email().lower() == email.lower()) return qli.current(); ++qli; } return 0L; } Attendee *IncidenceBase::attendeeByMails(const QStringList &emails, const QString& email) { QPtrListIterator<Attendee> qli(mAttendees); QStringList mails = emails; if (!email.isEmpty()) { mails.append(email); } qli.toFirst(); while (qli) { for ( QStringList::Iterator it = mails.begin(); it != mails.end(); ++it ) { if (qli.current()->email().lower() == (*it).lower()) return qli.current(); } ++qli; } return 0L; } void IncidenceBase::setDuration(int seconds) { mDuration = seconds; setHasDuration(true); } int IncidenceBase::duration() const { return mDuration; } void IncidenceBase::setHasDuration(bool b) { mHasDuration = b; } bool IncidenceBase::hasDuration() const { return mHasDuration; diff --git a/libkcal/incidencebase.h b/libkcal/incidencebase.h index e02d03a..f9a6558 100644 --- a/libkcal/incidencebase.h +++ b/libkcal/incidencebase.h @@ -7,166 +7,166 @@ License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef KCAL_INCIDENCEBASE_H #define KCAL_INCIDENCEBASE_H // // Incidence - base class of calendaring components // #include <qdatetime.h> #include <qstringlist.h> #include <qvaluelist.h> #include <qptrlist.h> #include "customproperties.h" #include "attendee.h" namespace KCal { typedef QValueList<QDate> DateList; /** This class provides the base class common to all calendar components. */ class IncidenceBase : public CustomProperties { public: class Observer { public: virtual void incidenceUpdated( IncidenceBase * ) = 0; }; IncidenceBase(); IncidenceBase(const IncidenceBase &); virtual ~IncidenceBase(); virtual QCString type() const = 0; /** Set the unique id for the event */ void setUid(const QString &); /** Return the unique id for the event */ QString uid() const; /** Sets the time the incidence was last modified. */ void setLastModified(const QDateTime &lm); /** Return the time the incidence was last modified. */ QDateTime lastModified() const; /** sets the organizer for the event */ void setOrganizer(const QString &o); QString organizer() const; /** Set readonly status. */ virtual void setReadOnly( bool ); /** Return if the object is read-only. */ bool isReadOnly() const { return mReadOnly; } /** for setting the event's starting date/time with a QDateTime. */ virtual void setDtStart(const QDateTime &dtStart); /** returns an event's starting date/time as a QDateTime. */ QDateTime dtStart() const; /** returns an event's starting time as a string formatted according to the users locale settings */ QString dtStartTimeStr() const; /** returns an event's starting date as a string formatted according to the users locale settings */ QString dtStartDateStr(bool shortfmt=true) const; /** returns an event's starting date and time as a string formatted according to the users locale settings */ QString dtStartStr(bool shortfmt=true) const; virtual void setDuration(int seconds); int duration() const; void setHasDuration(bool); bool hasDuration() const; /** Return true or false depending on whether the incidence "floats," * i.e. has a date but no time attached to it. */ bool doesFloat() const; /** Set whether the incidence floats, i.e. has a date but no time attached to it. */ void setFloats(bool f); /** Add Attendee to this incidence. IncidenceBase takes ownership of the Attendee object. */ - void addAttendee(Attendee *a, bool doupdate=true ); + bool addAttendee(Attendee *a, bool doupdate=true ); // void removeAttendee(Attendee *a); // void removeAttendee(const char *n); /** Remove all Attendees. */ void clearAttendees(); /** Return list of attendees. */ QPtrList<Attendee> attendees() const { return mAttendees; }; /** Return number of attendees. */ int attendeeCount() const { return mAttendees.count(); }; /** Return the Attendee with this email */ Attendee* attendeeByMail(const QString &); /** Return first Attendee with one of this emails */ Attendee* attendeeByMails(const QStringList &, const QString& email = QString::null); /** pilot syncronization states */ enum { SYNCNONE = 0, SYNCMOD = 1, SYNCDEL = 3 }; /** Set synchronisation satus. */ void setSyncStatus(int stat); /** Return synchronisation status. */ int syncStatus() const; /** Set Pilot Id. */ void setPilotId(int id); /** Return Pilot Id. */ int pilotId() const; void setTempSyncStat(int id); int tempSyncStat() const; void setIDStr( const QString & ); QString IDStr() const; void setID( const QString &, const QString & ); QString getID( const QString & ); void setCsum( const QString &, const QString & ); QString getCsum( const QString & ); void removeID(const QString &); void registerObserver( Observer * ); void unRegisterObserver( Observer * ); void updated(); protected: bool mReadOnly; QDateTime getEvenTime( QDateTime ); private: // base components QDateTime mDtStart; QString mOrganizer; QString mUid; QDateTime mLastModified; QPtrList<Attendee> mAttendees; bool mFloats; int mDuration; bool mHasDuration; QString mExternalId; int mTempSyncStat; // PILOT SYNCHRONIZATION STUFF int mPilotId; // unique id for pilot sync int mSyncStatus; // status (for sync) QPtrList<Observer> mObservers; }; bool operator==( const IncidenceBase&, const IncidenceBase& ); } #endif |