diff options
Diffstat (limited to 'tderesources/birthdays')
-rw-r--r-- | tderesources/birthdays/CMakeLists.txt | 46 | ||||
-rw-r--r-- | tderesources/birthdays/Makefile.am | 24 | ||||
-rw-r--r-- | tderesources/birthdays/kabc.desktop | 61 | ||||
-rw-r--r-- | tderesources/birthdays/resourcekabc.cpp | 528 | ||||
-rw-r--r-- | tderesources/birthdays/resourcekabc.h | 185 | ||||
-rw-r--r-- | tderesources/birthdays/resourcekabcconfig.cpp | 135 | ||||
-rw-r--r-- | tderesources/birthdays/resourcekabcconfig.h | 68 |
7 files changed, 1047 insertions, 0 deletions
diff --git a/tderesources/birthdays/CMakeLists.txt b/tderesources/birthdays/CMakeLists.txt new file mode 100644 index 000000000..bdde602b0 --- /dev/null +++ b/tderesources/birthdays/CMakeLists.txt @@ -0,0 +1,46 @@ +################################################# +# +# (C) 2010-2011 Serghei Amelian +# serghei (DOT) amelian (AT) gmail.com +# +# Improvements and feedback are welcome +# +# This file is released under GPL >= 2 +# +################################################# + +include_directories( + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_BINARY_DIR}/kaddressbook/common + ${CMAKE_SOURCE_DIR} + ${CMAKE_SOURCE_DIR}/kaddressbook/common + ${CMAKE_SOURCE_DIR}/libtdepim + ${TDE_INCLUDE_DIR} + ${TQT_INCLUDE_DIRS} +) + +link_directories( + ${TQT_LIBRARY_DIRS} +) + + +##### headers ################################### + +install( FILES + resourcekabc.h resourcekabcconfig.h + DESTINATION ${INCLUDE_INSTALL_DIR}/libkcal ) + + +##### other data ################################ + +install( FILES kabc.desktop DESTINATION ${SERVICES_INSTALL_DIR}/tderesources/kcal ) + + +##### kcal_kabc (module) ####################### + +tde_add_kpart( kcal_kabc AUTOMOC + SOURCES + resourcekabc.cpp resourcekabcconfig.cpp + LINK kabcommon-static tdepim-shared + DESTINATION ${PLUGIN_INSTALL_DIR} +) diff --git a/tderesources/birthdays/Makefile.am b/tderesources/birthdays/Makefile.am new file mode 100644 index 000000000..6a5830052 --- /dev/null +++ b/tderesources/birthdays/Makefile.am @@ -0,0 +1,24 @@ +INCLUDES = -I$(top_srcdir) -I$(top_builddir) \ + -I$(top_builddir)/kaddressbook/common \ + -I$(top_srcdir)/kaddressbook/common \ + $(all_includes) + +kde_module_LTLIBRARIES = kcal_kabc.la + +kcal_kabc_la_SOURCES = resourcekabc.cpp resourcekabcconfig.cpp +kcal_kabc_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN) +kcal_kabc_la_LIBADD = $(top_builddir)/libkcal/libkcal.la \ + $(top_builddir)/kaddressbook/common/libkabcommon.la + +libkcalincludedir = $(includedir)/libkcal +libkcalinclude_HEADERS = resourcekabc.h resourcekabcconfig.h + +servicedir = $(kde_servicesdir)/tderesources/kcal +service_DATA = kabc.desktop + +METASOURCES = AUTO + +messages: rc.cpp + $(XGETTEXT) *.cpp -o $(podir)/kres_birthday.pot + +resourcekabcconfig.lo: ../../kaddressbook/common/kabprefs_base.h diff --git a/tderesources/birthdays/kabc.desktop b/tderesources/birthdays/kabc.desktop new file mode 100644 index 000000000..8fadcb2b9 --- /dev/null +++ b/tderesources/birthdays/kabc.desktop @@ -0,0 +1,61 @@ +[Desktop Entry] +Name=Birthdays From KAddressBook +Name[af]=Verjaarsdae uit KAddressBook +Name[ar]=تواريخ الميلد من KAddressBook +Name[be]=Дні нараджэння з K Адраснай кнігі +Name[bg]=Рождени дни от адресника +Name[br]=Deizioù-ha-bloazioù eus KAddressBook +Name[bs]=Rođendani iz KAddressBook adresara +Name[ca]=Aniversaris des de KAddressBook +Name[cs]=Narozeniny z Knihy adres +Name[cy]=Penblwyddi o KLlyfrCyfeiriadau +Name[da]=Fødselsdage fra KAddressBook +Name[de]=Geburtstage aus dem Adressbuch +Name[el]=Γενέθλια από το KAddressBook +Name[eo]=Naskiĝdatoj de KAdresaro +Name[es]=Cumpleaños desde KAddressBook +Name[et]=Sünnipäevad TDE aadressiraamatust +Name[eu]=Urtebetetzeak KAddressBook-etik +Name[fa]=تولدها از KAddressBook +Name[fi]=Syntymäpäivät TDE:n osoitekirjasta +Name[fr]=Dates de naissance de KAddressBook +Name[fy]=Jierddagen út KAddressBook +Name[ga]=Breithlaethanta ó KAddressBook +Name[gl]=Cumpreanos de KAddressBook +Name[he]=ימי הולדת מתוך KAddressBook +Name[hi]=के-एड्रेस-बुक से जन्मतिथि +Name[hu]=Születésnapok a KAddressBookból +Name[is]=Afmælisdagar úr KAddressBook +Name[it]=Compleanni da KAddessBook +Name[ja]=アドレス帳の誕生日 +Name[kk]=KAddressBook-тағы туған күндер +Name[km]=ថ្ងៃខួបកំណើតពី KAddressBook +Name[lt]=Gimtadieniai iš KAddressBook +Name[mk]=Родендени од КАдресар +Name[ms]=Tarikh Lahir dari KAddressBook +Name[nb]=Bursdagsimport fra KAddressbook +Name[nds]=Geboortsdaag ut KAdressbook +Name[ne]=केडीई ठेगाना पुस्तिकामा भएका जन्मदिन +Name[nl]=Verjaardagen uit KAddressBook +Name[nn]=Fødselsdagar frå TDE-adresseboka +Name[pl]=Urodziny z Książki adresowej +Name[pt]=Aniversários do KAddressBook +Name[pt_BR]=Datas de Nascimento do KAddressBook +Name[ro]=Date de naştere din KAddressBook +Name[ru]=Дни рождения из адресной книги TDE +Name[sk]=Dátumy narodenia z adresára TDE +Name[sl]=Rojstni dnevi iz Adresarja +Name[sr]=Рођендани из KAddressBook-а +Name[sr@Latn]=Rođendani iz KAddressBook-a +Name[sv]=Födelsedagar från adressboken +Name[ta]=கேமுகவரிபுத்தகத்தில் இருந்து பிறந்ததேதிகள் +Name[tg]=Рӯзҳои таваллуд аз китоби адресии TDE +Name[tr]=TDE Adres Defterinden Doğum Günleri +Name[uk]=Дні народження з KAddressBook +Name[zh_CN]=KAddressBook 中的生日 +Name[zh_TW]=自 KaddressBook 匯入生日 +X-TDE-Library=kcal_kabc +Type=Service +ServiceTypes=KResources/Plugin +X-TDE-ResourceFamily=calendar +X-TDE-ResourceType=birthdays diff --git a/tderesources/birthdays/resourcekabc.cpp b/tderesources/birthdays/resourcekabc.cpp new file mode 100644 index 000000000..f3b191e1d --- /dev/null +++ b/tderesources/birthdays/resourcekabc.cpp @@ -0,0 +1,528 @@ +/* + This file is part of libkcal. + + Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + 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., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#include <typeinfo> +#include <stdlib.h> + +#include <tqdatetime.h> +#include <tqstring.h> +#include <tqptrlist.h> + +#include <klocale.h> +#include <kdebug.h> +#include <kurl.h> +#include <kio/job.h> +#include <kstandarddirs.h> + +#include <kabc/stdaddressbook.h> +#include <kabc/locknull.h> + +#include "libkcal/vcaldrag.h" +#include "libkcal/vcalformat.h" +#include "libkcal/icalformat.h" +#include "libkcal/exceptions.h" +#include "libkcal/incidence.h" +#include "libkcal/event.h" +#include "libkcal/todo.h" +#include "libkcal/journal.h" +#include "libkcal/filestorage.h" +#include "libkcal/alarm.h" + +#include <libemailfunctions/email.h> + +#include <tderesources/configwidget.h> + +#include "resourcekabcconfig.h" + +#include "resourcekabc.h" + +using namespace KCal; + +extern "C" +{ + void *init_kcal_kabc() + { + TDEGlobal::locale()->insertCatalogue( "kres_birthday" ); + TDEGlobal::locale()->insertCatalogue( "libkcal" ); + return new KRES::PluginFactory<ResourceKABC,ResourceKABCConfig>(); + } +} + +ResourceKABC::ResourceKABC( const TDEConfig* config ) + : ResourceCalendar( config ), mCalendar( TQString::fromLatin1( "UTC" ) ), + mAlarmDays( 0 ), mAlarm( true ), mUseCategories( false ) +{ + if ( config ) { + readConfig( config ); + } else { + setResourceName( i18n( "Birthdays" ) ); + } + + init(); +} + +ResourceKABC::ResourceKABC() + : ResourceCalendar( 0 ), mCalendar( TQString::fromLatin1( "UTC" ) ), + mAlarmDays( 0 ), mAlarm( true ), mUseCategories( false ) +{ + init(); +} + +ResourceKABC::~ResourceKABC() +{ + delete mLock; +} + +void ResourceKABC::init() +{ + setType( "birthdays" ); + + setReadOnly( true ); + + mLock = new KABC::LockNull( false ); + + mAddressbook = 0; +} + +void ResourceKABC::readConfig( const TDEConfig *config ) +{ + mAlarmDays = config->readNumEntry( "AlarmDays", 0 ); + mAlarm = config->readBoolEntry( "Alarm", true ); + mCategories = config->readListEntry( "Categories" ); + mUseCategories = config->readBoolEntry( "UseCategories", false ); +} + +void ResourceKABC::writeConfig( TDEConfig *config ) +{ + ResourceCalendar::writeConfig( config ); + config->writeEntry( "AlarmDays", mAlarmDays ); + config->writeEntry( "Alarm", mAlarm ); + config->writeEntry( "Categories", mCategories ); + config->writeEntry( "UseCategories", mUseCategories ); +} + + +bool ResourceKABC::doOpen() +{ + kdDebug(5800) << "ResourceKABC::doOpen()" << endl; + + mAddressbook = KABC::StdAddressBook::self( true ); + connect( mAddressbook, TQT_SIGNAL(addressBookChanged(AddressBook*)), TQT_SLOT( reload() ) ); + + return true; +} + +bool ResourceKABC::doLoad() +{ + kdDebug(5800) << "ResourceKABC::load()" << endl; + + mCalendar.close(); + + // import from kabc + TQString summary; + TQStringList::ConstIterator strIt; + const TQStringList::ConstIterator endStrIt = mCategories.end(); + KABC::Addressee::List anniversaries; + KABC::Addressee::List::Iterator addrIt; + + KABC::AddressBook::Iterator it; + const KABC::AddressBook::Iterator endIt = mAddressbook->end(); + for ( it = mAddressbook->begin(); it != endIt; ++it ) { + + if ( mUseCategories ) { + bool hasCategory = false; + TQStringList categories = (*it).categories(); + for ( strIt = mCategories.begin(); strIt != endStrIt; ++strIt ) + if ( categories.contains( *strIt ) ) { + hasCategory = true; + break; + } + + if ( !hasCategory ) + continue; + } + + TQDate birthdate = (*it).birthday().date(); + TQString name_1, email_1, uid_1; + if ( birthdate.isValid() ) { + kdDebug(5800) << "found a birthday " << TQString(birthdate.toString()) << endl; + + name_1 = (*it).nickName(); + email_1 = (*it).fullEmail(); + uid_1 = (*it).uid(); + if (name_1.isEmpty()) name_1 = (*it).realName(); + summary = i18n("%1's birthday").arg( name_1 ); + + + Event *ev = new Event(); + ev->setUid( uid_1+"_KABC_Birthday"); + + ev->setDtStart(birthdate); + ev->setDtEnd(birthdate); + ev->setHasEndDate(true); + ev->setFloats(true); + ev->setTransparency( Event::Transparent ); + + ev->setCustomProperty("KABC", "BIRTHDAY", "YES"); + ev->setCustomProperty("KABC", "UID-1", uid_1 ); + ev->setCustomProperty("KABC", "NAME-1", name_1 ); + ev->setCustomProperty("KABC", "EMAIL-1", email_1 ); + kdDebug(5800) << "ResourceKABC::doLoad: uid:" << uid_1 << " name: " << name_1 + << " email: " << email_1 << endl; + ev->setSummary(summary); + + // Set the recurrence + Recurrence *vRecurrence = ev->recurrence(); + vRecurrence->setStartDate( birthdate ); + vRecurrence->setYearly( 1 ); + if ( birthdate.month()==2 && birthdate.day()==29 ) { + vRecurrence->addYearlyDay( 60 ); + } + + ev->clearAlarms(); + + if ( mAlarm ) { + // Set the alarm + Alarm* vAlarm = ev->newAlarm(); + vAlarm->setText(summary); + vAlarm->setTime(birthdate); + // 24 hours before. duration is in seconds. + vAlarm->setStartOffset( -86400 * mAlarmDays ); + vAlarm->setEnabled(true); + } + + // insert category + ev->setCategories(i18n("Birthday")); + + ev->setReadOnly( true ); + mCalendar.addEvent(ev); + kdDebug(5800) << "imported " << TQString(birthdate.toString()) << endl; + } + + TQString anniversary_string = (*it).custom( "KADDRESSBOOK", "X-Anniversary" ); + if (anniversary_string.isEmpty() ) + continue; + TQDateTime anniversary = TQDate::fromString( anniversary_string, Qt::ISODate ); + if ( !anniversary.isValid() ) + continue; + + TQString name = (*it).custom( "KADDRESSBOOK", "X-SpousesName" ); + if ( name.isEmpty() ) + anniversaries.append( *it ); + else { + bool found = false; + for ( addrIt = anniversaries.begin(); addrIt != anniversaries.end(); ++addrIt ) { + if ( name == (*addrIt).realName() ) { + TQDate spouseAnniversary = + TQDate::fromString( (*addrIt).custom( "KADDRESSBOOK", "X-Anniversary" ), Qt::ISODate ); + if ( anniversary == TQDateTime(spouseAnniversary) ) { + found = true; + break; + + } + } + } + + if ( !found ) + anniversaries.append( *it ); + } + } + + for ( addrIt = anniversaries.begin(); addrIt != anniversaries.end(); ++addrIt ) { + TQDate anniversary = TQDate::fromString( (*addrIt).custom( "KADDRESSBOOK", "X-Anniversary" ), Qt::ISODate ); + kdDebug(5800) << "found a anniversary " << TQString(anniversary.toString()) << endl; + TQString name; + TQString name_1 = (*addrIt).nickName(); + TQString uid_1 = (*addrIt).uid(); + TQString email_1 = (*addrIt).fullEmail(); + if ( name_1.isEmpty() ) + name_1 = (*addrIt).realName(); + + + TQString spouseName = (*addrIt).custom( "KADDRESSBOOK", "X-SpousesName" ); + TQString name_2,email_2,uid_2; + if ( !spouseName.isEmpty() ) { + TQString tname, temail; + KPIM::getNameAndMail( spouseName, tname, temail ); + tname = KPIM::quoteNameIfNecessary( tname ); + if ( ( tname[0] == '"' ) && ( tname[tname.length() - 1] == '"' ) ) { + tname.remove( 0, 1 ); + tname.truncate( tname.length() - 1 ); + } + KABC::Addressee spouse; + spouse.setNameFromString( tname ); + name_2 = spouse.nickName(); + uid_2 = spouse.uid(); + email_2 = spouse.fullEmail(); + if ( name_2.isEmpty() ) { + name_2 = spouse.realName(); + } + summary = i18n("insert names of both spouses", + "%1's & %2's anniversary").arg( name_1 ).arg( name_2 ); + } else { + summary = i18n("only one spouse in addressbook, insert the name", + "%1's anniversary").arg( name_1 ); + } + + Event *ev = new Event(); + ev->setUid( uid_1+"_KABC_Anniversary" ); + + ev->setDtStart(anniversary); + ev->setDtEnd(anniversary); + ev->setHasEndDate(true); + ev->setFloats(true); + + ev->setSummary(summary); + + ev->setCustomProperty( "KABC", "BIRTHDAY", "YES" ); + + ev->setCustomProperty( "KABC", "UID-1", uid_1 ); + ev->setCustomProperty( "KABC", "NAME-1", name_1 ); + ev->setCustomProperty( "KABC", "EMAIL-1", email_1 ); + ev->setCustomProperty( "KABC", "ANNIVERSARY", "YES" ); + if ( !spouseName.isEmpty() ) { + ev->setCustomProperty("KABC", "UID-2", uid_2 ); + ev->setCustomProperty("KABC", "NAME-2", spouseName ); + ev->setCustomProperty("KABC", "EMAIL-2", email_2 ); + } + // Set the recurrence + Recurrence *vRecurrence = ev->recurrence(); + vRecurrence->setStartDate( anniversary ); + vRecurrence->setYearly( 1 ); + if ( anniversary.month()==2 && anniversary.day()==29 ) { + vRecurrence->addYearlyDay( 60 ); + } + + ev->clearAlarms(); + + if ( mAlarm ) { + // Set the alarm + Alarm* vAlarm = ev->newAlarm(); + vAlarm->setText(summary); + vAlarm->setTime(anniversary); + // 24 hours before. duration is in seconds. + vAlarm->setStartOffset( -86400 * mAlarmDays ); + vAlarm->setEnabled(true); + } + + // insert category + ev->setCategories(i18n("Anniversary")); + + ev->setReadOnly( true ); + mCalendar.addEvent(ev); + kdDebug(5800) << "imported " << TQString(anniversary.toString()) << endl; + } + + return true; +} + +void ResourceKABC::setAlarm( bool a ) +{ + mAlarm = a; +} + +bool ResourceKABC::alarm() +{ + return mAlarm; +} + +void ResourceKABC::setAlarmDays( int ad ) +{ + mAlarmDays = ad; +} + +int ResourceKABC::alarmDays() +{ + return mAlarmDays; +} + +void ResourceKABC::setCategories( const TQStringList &categories ) +{ + mCategories = categories; +} + +TQStringList ResourceKABC::categories() const +{ + return mCategories; +} + +void ResourceKABC::setUseCategories( bool useCategories ) +{ + mUseCategories = useCategories; +} + +bool ResourceKABC::useCategories() const +{ + return mUseCategories; +} + +bool ResourceKABC::doSave() +{ + // is always read only! + return true; +} + +bool ResourceKABC::isSaving() +{ + return false; +} + +KABC::Lock *ResourceKABC::lock() +{ + return mLock; +} + + +bool ResourceKABC::addEvent( Event * ) +{ + return false; +} + +bool ResourceKABC::addEvent( Event *, const TQString & ) +{ + return false; +} + +bool ResourceKABC::deleteEvent( Event * ) +{ + return false; +} + + +Event *ResourceKABC::event( const TQString &uid ) +{ + return mCalendar.event( uid ); +} + +Event::List ResourceKABC::rawEventsForDate( const TQDate &date, + EventSortField sortField, + SortDirection sortDirection ) +{ + return mCalendar.rawEventsForDate( date, sortField, sortDirection ); +} + +Event::List ResourceKABC::rawEvents( const TQDate &start, const TQDate &end, + bool inclusive ) +{ + return mCalendar.rawEvents( start, end, inclusive ); +} + +Event::List ResourceKABC::rawEventsForDate(const TQDateTime &qdt) +{ + return mCalendar.rawEventsForDate( qdt.date() ); +} + +Event::List ResourceKABC::rawEvents( EventSortField sortField, SortDirection sortDirection ) +{ + return mCalendar.rawEvents( sortField, sortDirection ); +} + +bool ResourceKABC::addTodo( Todo * ) +{ + return false; +} + +bool ResourceKABC::addTodo( Todo *, const TQString & ) +{ + return false; +} + +bool ResourceKABC::deleteTodo( Todo * ) +{ + return false; +} + + +Todo::List ResourceKABC::rawTodos( TodoSortField sortField, SortDirection sortDirection ) +{ + return mCalendar.rawTodos( sortField, sortDirection ); +} + +Todo *ResourceKABC::todo( const TQString &uid ) +{ + return mCalendar.todo( uid ); +} + +Todo::List ResourceKABC::rawTodosForDate( const TQDate &date ) +{ + return mCalendar.rawTodosForDate( date ); +} + + +bool ResourceKABC::addJournal( Journal * ) +{ + return false; +} + +bool ResourceKABC::addJournal( Journal *, const TQString & ) +{ + return false; +} + +bool ResourceKABC::deleteJournal( Journal * ) +{ + return false; +} + +Journal *ResourceKABC::journal(const TQString &uid) +{ + return mCalendar.journal( uid ); +} + +Journal::List ResourceKABC::rawJournals( JournalSortField sortField, SortDirection sortDirection ) +{ + return mCalendar.rawJournals( sortField, sortDirection ); +} + +Journal::List ResourceKABC::rawJournalsForDate( const TQDate &date ) +{ + return mCalendar.rawJournalsForDate( date ); +} + +Alarm::List ResourceKABC::alarmsTo( const TQDateTime &to ) +{ + return mCalendar.alarmsTo( to ); +} + +Alarm::List ResourceKABC::alarms( const TQDateTime &from, const TQDateTime &to ) +{ +// kdDebug(5800) << "ResourceKABC::alarms(" << from.toString() << " - " << to.toString() << ")\n"; + + return mCalendar.alarms( from, to ); +} + +void ResourceKABC::dump() const +{ + ResourceCalendar::dump(); +} + +void ResourceKABC::reload() +{ + load(); + emit resourceChanged( this ); +} + +void ResourceKABC::setTimeZoneId( const TQString& tzid ) +{ + mCalendar.setTimeZoneId( tzid ); +} + +#include "resourcekabc.moc" diff --git a/tderesources/birthdays/resourcekabc.h b/tderesources/birthdays/resourcekabc.h new file mode 100644 index 000000000..169a02946 --- /dev/null +++ b/tderesources/birthdays/resourcekabc.h @@ -0,0 +1,185 @@ +/* + This file is part of libkcal. + + Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + 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., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ +#ifndef KCAL_RESOURCEKABC_H +#define KCAL_RESOURCEKABC_H + +#include <tqptrlist.h> +#include <tqstring.h> +#include <tqdatetime.h> + +#include <kconfig.h> + +#include "libkcal/incidence.h" +#include "libkcal/calendarlocal.h" +#include <kabc/addressbook.h> + +#include "libkcal/resourcecalendar.h" + +#include "libtdepim/tdepimmacros.h" + +namespace TDEIO { +class FileCopyJob; +class Job; +} + +namespace KCal { + +/** + Resource providing birthdays and anniversaries as events. +*/ +class KDE_EXPORT ResourceKABC : public ResourceCalendar +{ + Q_OBJECT + + + friend class ResourceKABCConfig; + + public: + ResourceKABC( const TDEConfig * ); + ResourceKABC( ); + virtual ~ResourceKABC(); + + void readConfig( const TDEConfig *config ); + void writeConfig( TDEConfig* config ); + + void setAlarm( bool ); + bool alarm(); + + void setAlarmDays( int ); + int alarmDays(); + + void setCategories( const TQStringList &categories ); + TQStringList categories() const; + + void setUseCategories( bool useCategories ); + bool useCategories() const; + + bool isSaving(); + + KABC::Lock *lock(); + + /** Add Event to calendar. */ + KDE_DEPRECATED bool addEvent(Event *event); + bool addEvent( Event *event, const TQString &subresource ); + /** deletes an event from this calendar. */ + bool deleteEvent(Event *); + + /** + Retrieves an event on the basis of the unique string ID. + */ + Event *event(const TQString &UniqueStr); + /** + Return unfiltered list of all events in calendar. + */ + Event::List rawEvents( EventSortField sortField = EventSortUnsorted, SortDirection sortDirection = SortDirectionAscending ); + /** + Builds and then returns a list of all events that match for the + date specified. useful for dayView, etc. etc. + */ + Event::List rawEventsForDate( const TQDate &date, EventSortField sortField = EventSortUnsorted, SortDirection sortDirection = SortDirectionAscending ); + /** + Get unfiltered events for date \a qdt. + */ + Event::List rawEventsForDate( const TQDateTime &qdt ); + /** + Get unfiltered events in a range of dates. If inclusive is set to true, + only events are returned, which are completely included in the range. + */ + Event::List rawEvents( const TQDate &start, const TQDate &end, + bool inclusive = false ); + + /** + Add a todo to the todolist. + */ + KDE_DEPRECATED bool addTodo( Todo *todo ); + bool addTodo( Todo *todo, const TQString &subresource ); + /** + Remove a todo from the todolist. + */ + bool deleteTodo( Todo * ); + /** + Searches todolist for an event with this unique string identifier, + returns a pointer or null. + */ + Todo *todo( const TQString &uid ); + /** + Return list of all todos. + */ + Todo::List rawTodos( TodoSortField sortField = TodoSortUnsorted, SortDirection sortDirection = SortDirectionAscending ); + /** + Returns list of todos due on the specified date. + */ + Todo::List rawTodosForDate( const TQDate &date ); + /** Add a Journal entry to calendar */ + KDE_DEPRECATED bool addJournal( Journal *journal ); + bool addJournal( Journal *journal, const TQString &subresource ); + + /** Remove journal from the calendar. */ + bool deleteJournal( Journal * ); + /** Return Journal with given UID */ + virtual Journal *journal(const TQString &uid); + /** + Return list of all journals. + */ + Journal::List rawJournals( JournalSortField sortField = JournalSortUnsorted, SortDirection sortDirection = SortDirectionAscending ); + /** + Returns list of journals for the given date. + */ + Journal::List rawJournalsForDate( const TQDate &date ); + + /** Return all alarms, which ocur in the given time interval. */ + Alarm::List alarms( const TQDateTime &from, const TQDateTime &to ); + + /** Return all alarms, which ocur before given date. */ + Alarm::List alarmsTo( const TQDateTime &to ); + + void dump() const; + + void setTimeZoneId( const TQString &timeZoneId ); + + protected: + bool doOpen(); + bool doLoad(); + bool doSave(); + + private slots: + void reload(); + + private: + void init(); + + CalendarLocal mCalendar; + + int mAlarmDays; + bool mAlarm; + TQStringList mCategories; + bool mUseCategories; + KABC::AddressBook *mAddressbook; + + KABC::Lock *mLock; + + class Private; + Private *d; +}; + +} + +#endif diff --git a/tderesources/birthdays/resourcekabcconfig.cpp b/tderesources/birthdays/resourcekabcconfig.cpp new file mode 100644 index 000000000..2f7671dc7 --- /dev/null +++ b/tderesources/birthdays/resourcekabcconfig.cpp @@ -0,0 +1,135 @@ +/* + This file is part of libkcal. + + Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + 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., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#include <typeinfo> + +#include <tqheader.h> +#include <tqlayout.h> + +#include <kabprefs.h> +#include <kdebug.h> +#include <klocale.h> + +#include "resourcekabc.h" +#include "resourcekabcconfig.h" + +using namespace KCal; + +ResourceKABCConfig::ResourceKABCConfig( TQWidget* parent, const char* name ) + : KRES::ConfigWidget( parent, name ) +{ + TQGridLayout *topLayout = new TQGridLayout( this, 5, 1, 11, 6 ); + + mAlarm = new TQCheckBox(i18n("Set reminder"), this); + topLayout->addWidget(mAlarm, 0, 0); + TQBoxLayout *alarmLayout = new TQHBoxLayout(topLayout); + + mALabel = new TQLabel(i18n("Reminder before (in days):"), this); + alarmLayout->addWidget(mALabel); + mAlarmTimeEdit = new KRestrictedLine(this, "alarmTimeEdit", "1234567890"); + mAlarmTimeEdit->setText("0"); + alarmLayout->addWidget(mAlarmTimeEdit); + + TQFrame *line = new TQFrame( this ); + line->setFrameStyle( TQFrame::Sunken | TQFrame::HLine ); + topLayout->addMultiCellWidget( line, 2, 2, 0, 1 ); + + mUseCategories = new TQCheckBox( i18n( "Filter by categories" ), this ); + topLayout->addMultiCellWidget( mUseCategories, 3, 3, 0, 1 ); + + mCategoryView = new KListView( this ); + mCategoryView->addColumn( "" ); + mCategoryView->header()->hide(); + mCategoryView->setEnabled( false ); + topLayout->addMultiCellWidget( mCategoryView, 4, 4, 0, 1 ); + + connect( mUseCategories, TQT_SIGNAL( toggled( bool ) ), + mCategoryView, TQT_SLOT( setEnabled( bool ) ) ); + + mAlarmTimeEdit->setDisabled(true); + mALabel->setDisabled(true); + + connect(mAlarm, TQT_SIGNAL(clicked()), TQT_SLOT(alarmClicked())); + + setReadOnly( true ); + + KABPrefs *prefs = KABPrefs::instance(); + const TQStringList categories = prefs->customCategories(); + TQStringList::ConstIterator it; + for ( it = categories.begin(); it != categories.end(); ++it ) + new TQCheckListItem( mCategoryView, *it, TQCheckListItem::CheckBox ); +} + +void ResourceKABCConfig::loadSettings( KRES::Resource *resource ) +{ + ResourceKABC *res = static_cast<ResourceKABC *>( resource ); + if ( res ) { + mAlarm->setChecked( res->alarm() ); + TQString days; + mAlarmTimeEdit->setText( days.setNum(res->alarmDays()) ); + + mAlarmTimeEdit->setEnabled( res->alarm() ); + mALabel->setEnabled( res->alarm() ); + + const TQStringList categories = res->categories(); + TQListViewItemIterator it( mCategoryView ); + while ( it.current() ) { + if ( categories.contains( it.current()->text( 0 ) ) ) { + TQCheckListItem *item = static_cast<TQCheckListItem*>( it.current() ); + item->setOn( true ); + } + ++it; + } + + mUseCategories->setChecked( res->useCategories() ); + } else { + kdDebug(5700) << "ERROR: ResourceKABCConfig::loadSettings(): no ResourceKABC, cast failed" << endl; + } +} + +void ResourceKABCConfig::saveSettings( KRES::Resource *resource ) +{ + ResourceKABC *res = static_cast<ResourceKABC *>( resource ); + if ( res ) { + res->setAlarm( mAlarm->isChecked() ); + res->setAlarmDays( mAlarmTimeEdit->text().toInt() ); + setReadOnly( true ); + + TQStringList categories; + TQListViewItemIterator it( mCategoryView, TQListViewItemIterator::Checked ); + while ( it.current() ) { + categories.append( it.current()->text( 0 ) ); + ++it; + } + res->setCategories( categories ); + res->setUseCategories( mUseCategories->isChecked() ); + } else { + kdDebug(5700) << "ERROR: ResourceKABCConfig::saveSettings(): no ResourceKABC, cast failed" << endl; + } +} + +void ResourceKABCConfig::alarmClicked() +{ + mAlarmTimeEdit->setDisabled(!mAlarm->isChecked()); + mALabel->setDisabled(!mAlarm->isChecked()); +} + +#include "resourcekabcconfig.moc" diff --git a/tderesources/birthdays/resourcekabcconfig.h b/tderesources/birthdays/resourcekabcconfig.h new file mode 100644 index 000000000..ff6178b70 --- /dev/null +++ b/tderesources/birthdays/resourcekabcconfig.h @@ -0,0 +1,68 @@ +/* + This file is part of libkcal. + + Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> + Copyright (c) 2002 Jan-Pascal van Best <janpascal@vanbest.org> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + 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., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef KCAL_RESOURCEKABCCONFIG_H +#define KCAL_RESOURCEKABCCONFIG_H + +#include <tqcheckbox.h> +#include <tqlabel.h> + +#include <klistview.h> +#include <krestrictedline.h> +#include <tderesources/resource.h> +#include <tderesources/configwidget.h> + +namespace KCal { + +/** + Configuration widget for birtday/anniversaries resource. + + @see ResourceKABC +*/ +class ResourceKABCConfig : public KRES::ConfigWidget +{ + Q_OBJECT + + public: + ResourceKABCConfig( TQWidget* parent = 0, const char* name = 0 ); + + public slots: + virtual void loadSettings( KRES::Resource *resource); + virtual void saveSettings( KRES::Resource *resource ); + + private slots: + void alarmClicked(); + + private: + TQCheckBox *mAlarm; + KRestrictedLine *mAlarmTimeEdit; + TQLabel *mALabel; + TQCheckBox *mUseCategories; + KListView *mCategoryView; + + class Private; + Private *d; +}; + +} + +#endif |