summaryrefslogtreecommitdiffstats
path: root/tderesources/birthdays
diff options
context:
space:
mode:
Diffstat (limited to 'tderesources/birthdays')
-rw-r--r--tderesources/birthdays/CMakeLists.txt46
-rw-r--r--tderesources/birthdays/Makefile.am24
-rw-r--r--tderesources/birthdays/kabc.desktop61
-rw-r--r--tderesources/birthdays/resourcekabc.cpp528
-rw-r--r--tderesources/birthdays/resourcekabc.h185
-rw-r--r--tderesources/birthdays/resourcekabcconfig.cpp135
-rw-r--r--tderesources/birthdays/resourcekabcconfig.h68
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