summaryrefslogtreecommitdiffstats
path: root/kaddressbook/common
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commit460c52653ab0dcca6f19a4f492ed2c5e4e963ab0 (patch)
tree67208f7c145782a7e90b123b982ca78d88cc2c87 /kaddressbook/common
downloadtdepim-460c52653ab0dcca6f19a4f492ed2c5e4e963ab0.tar.gz
tdepim-460c52653ab0dcca6f19a4f492ed2c5e4e963ab0.zip
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdepim@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kaddressbook/common')
-rw-r--r--kaddressbook/common/Makefile.am12
-rw-r--r--kaddressbook/common/filter.cpp219
-rw-r--r--kaddressbook/common/filter.h160
-rw-r--r--kaddressbook/common/kabprefs.cpp82
-rw-r--r--kaddressbook/common/kabprefs.h86
-rw-r--r--kaddressbook/common/kabprefs_base.kcfgc11
-rw-r--r--kaddressbook/common/kaddressbook.kcfg93
-rw-r--r--kaddressbook/common/locationmap.cpp96
-rw-r--r--kaddressbook/common/locationmap.h51
9 files changed, 810 insertions, 0 deletions
diff --git a/kaddressbook/common/Makefile.am b/kaddressbook/common/Makefile.am
new file mode 100644
index 000000000..63a0951d8
--- /dev/null
+++ b/kaddressbook/common/Makefile.am
@@ -0,0 +1,12 @@
+INCLUDES= -I$(top_srcdir)/kaddressbook/interfaces \
+ -I$(top_srcdir) \
+ $(all_includes)
+
+METASOURCES = AUTO
+
+noinst_LTLIBRARIES = libkabcommon.la
+libkabcommon_la_SOURCES = kabprefs.cpp kabprefs_base.kcfgc locationmap.cpp filter.cpp
+libkabcommon_la_LDFLAGS = $(all_libraries) $(KDE_RPATH) -no-undefined
+libkabcommon_la_LIBADD = $(top_builddir)/kaddressbook/interfaces/libkabinterfaces.la \
+ $(top_builddir)/libkdepim/libkdepim.la
+noinst_HEADERS = filter.h kabprefs.h
diff --git a/kaddressbook/common/filter.cpp b/kaddressbook/common/filter.cpp
new file mode 100644
index 000000000..ccac46ef8
--- /dev/null
+++ b/kaddressbook/common/filter.cpp
@@ -0,0 +1,219 @@
+/*
+ This file is part of KAddressBook.
+ Copyright (c) 2002 Mike Pilone <mpilone@slac.com>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, permission is given to link this program
+ with any edition of Qt, and distribute the resulting executable,
+ without including the source code for Qt in the source distribution.
+*/
+
+#include <kconfig.h>
+#include <kdebug.h>
+
+#include "kabprefs.h"
+
+#include "filter.h"
+
+Filter::Filter()
+ : mName( QString::null ), mMatchRule( Matching ), mEnabled( true ),
+ mInternal( false ), mIsEmpty( true )
+{
+}
+
+Filter::Filter( const QString &name )
+ : mName( name ), mMatchRule( Matching ), mEnabled( true ),
+ mInternal( false ), mIsEmpty( false )
+{
+}
+
+Filter::~Filter()
+{
+}
+
+void Filter::setName( const QString &name )
+{
+ mName = name;
+
+ mIsEmpty = false;
+}
+
+const QString &Filter::name() const
+{
+ return mName;
+}
+
+bool Filter::isInternal() const
+{
+ return mInternal;
+}
+
+void Filter::apply( KABC::Addressee::List &addresseeList )
+{
+ KABC::Addressee::List::Iterator iter;
+ for ( iter = addresseeList.begin(); iter != addresseeList.end(); ) {
+ if ( filterAddressee( *iter ) )
+ ++iter;
+ else
+ iter = addresseeList.erase( iter );
+ }
+}
+
+bool Filter::filterAddressee( const KABC::Addressee &a ) const
+{
+ QStringList::ConstIterator iter;
+ iter = mCategoryList.begin();
+ // empty filter always matches
+
+ if ( iter == mCategoryList.end() ) {
+ if ( mMatchRule == Matching )
+ return true;
+ else {
+ if ( a.categories().empty() )
+ return true;
+ else
+ return false;
+ }
+ }
+
+ for ( ; iter != mCategoryList.end(); ++iter ) {
+ if ( a.hasCategory( *iter ) )
+ return ( mMatchRule == Matching );
+ }
+
+ return !( mMatchRule == Matching );
+}
+
+void Filter::setEnabled( bool on )
+{
+ mEnabled = on;
+
+ mIsEmpty = false;
+}
+
+bool Filter::isEnabled() const
+{
+ return mEnabled;
+}
+
+void Filter::setCategories( const QStringList &list )
+{
+ mCategoryList = list;
+
+ mIsEmpty = false;
+}
+
+const QStringList &Filter::categories() const
+{
+ return mCategoryList;
+}
+
+void Filter::save( KConfig *config )
+{
+ config->writeEntry( "Name", mName );
+ config->writeEntry( "Enabled", mEnabled );
+ config->writeEntry( "Categories", mCategoryList );
+ config->writeEntry( "MatchRule", (int)mMatchRule );
+}
+
+void Filter::restore( KConfig *config )
+{
+ mName = config->readEntry( "Name", "<internal error>" );
+ mEnabled = config->readBoolEntry( "Enabled", true );
+ mCategoryList = config->readListEntry( "Categories" );
+ mMatchRule = (MatchRule)config->readNumEntry( "MatchRule", Matching );
+
+ mIsEmpty = false;
+}
+
+void Filter::save( KConfig *config, const QString &baseGroup, Filter::List &list )
+{
+ {
+ KConfigGroupSaver s( config, baseGroup );
+
+ // remove the old filters
+ uint count = config->readNumEntry( "Count" );
+ for ( uint i = 0; i < count; ++i )
+ config->deleteGroup( QString( "%1_%2" ).arg( baseGroup ).arg( i ) );
+
+ }
+
+ int index = 0;
+ Filter::List::Iterator iter;
+ for ( iter = list.begin(); iter != list.end(); ++iter ) {
+ if ( !(*iter).mInternal ) {
+ KConfigGroupSaver s( config, QString( "%1_%2" ).arg( baseGroup )
+ .arg( index ) );
+ (*iter).save( config );
+ index++;
+ }
+ }
+
+ KConfigGroupSaver s( config, baseGroup );
+ config->writeEntry( "Count", index );
+}
+
+Filter::List Filter::restore( KConfig *config, const QString &baseGroup )
+{
+ Filter::List list;
+ int count = 0;
+ Filter f;
+
+ {
+ KConfigGroupSaver s( config, baseGroup );
+ count = config->readNumEntry( "Count", 0 );
+ }
+
+ for ( int i = 0; i < count; i++ ) {
+ {
+ KConfigGroupSaver s( config, QString( "%1_%2" ).arg( baseGroup ).arg( i ) );
+ f.restore( config );
+ }
+
+ list.append( f );
+ }
+
+ const QStringList cats = KABPrefs::instance()->customCategories();
+ for ( QStringList::ConstIterator it = cats.begin(); it != cats.end(); ++it ) {
+ Filter filter;
+ filter.mName = *it;
+ filter.mEnabled = true;
+ filter.mCategoryList = *it;
+ filter.mMatchRule = Matching;
+ filter.mInternal = true;
+ filter.mIsEmpty = false;
+ list.append( filter );
+ }
+
+ return list;
+}
+
+void Filter::setMatchRule( MatchRule rule )
+{
+ mMatchRule = rule;
+
+ mIsEmpty = false;
+}
+
+Filter::MatchRule Filter::matchRule() const
+{
+ return mMatchRule;
+}
+
+bool Filter::isEmpty() const
+{
+ return mIsEmpty;
+}
diff --git a/kaddressbook/common/filter.h b/kaddressbook/common/filter.h
new file mode 100644
index 000000000..9251c5c17
--- /dev/null
+++ b/kaddressbook/common/filter.h
@@ -0,0 +1,160 @@
+/*
+ This file is part of KAddressBook.
+ Copyright (c) 2002 Mike Pilone <mpilone@slac.com>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, permission is given to link this program
+ with any edition of Qt, and distribute the resulting executable,
+ without including the source code for Qt in the source distribution.
+*/
+
+#ifndef FILTER_H
+#define FILTER_H
+
+#include <qstring.h>
+#include <qstringlist.h>
+#include <qvaluelist.h>
+
+#include <kabc/addressee.h>
+#include <kconfig.h>
+
+/**
+ Filter for AddressBook related objects (Addressees)
+
+ @todo This class should be switched to use shared data.
+ */
+class Filter
+{
+ public:
+ typedef QValueList<Filter> List;
+
+ enum MatchRule { Matching = 0, NotMatching = 1 };
+
+ Filter();
+ Filter( const QString& name );
+ ~Filter();
+
+ /**
+ Set the name of the filter.
+ */
+ void setName( const QString &name );
+
+ /**
+ @return The name of the filter.
+ */
+ const QString &name() const;
+
+ /**
+ @return Whether the filter is an internal one.
+ */
+ bool isInternal() const;
+
+ /**
+ Apply the filter to the addressee list. All addressees not passing
+ the filter criterias will be removed from the list.
+
+ If the MatchRule is NotMatch, then all the addressees matching the
+ filter will be removed from the list.
+ */
+ void apply( KABC::Addressee::List &addresseeList );
+
+ /**
+ Apply the filter to the addressee.
+
+ @return True if the addressee passes the criteria, false otherwise.
+ The return values are opposite if the MatchRule is NotMatch.
+ */
+ bool filterAddressee( const KABC::Addressee &a ) const;
+
+ /**
+ Enable or disable the filter
+ */
+ void setEnabled( bool on );
+
+ /**
+ @return True if this filter is enabled, false otherwise.
+ */
+ bool isEnabled() const;
+
+ /**
+ Set the list of categories. This list is used to filter addressees.
+ */
+ void setCategories( const QStringList &list );
+
+ /**
+ @return The list of categories.
+ */
+ const QStringList &categories() const;
+
+ /**
+ Saves the filter to the config file. The group should already be set.
+ */
+ void save( KConfig *config );
+
+ /**
+ Loads the filter from the config file. The group should already be set.
+ */
+ void restore( KConfig *config );
+
+ /**
+ Saves a list of filters to the config file.
+
+ @param config The config file to use
+ @param baseGroup The base groupname to use. The number of filters
+ will be written to this group, then a _1, _2, etc
+ will be append for each filter saved.
+ @param list The list of filters to be saved.
+ */
+ static void save( KConfig *config, const QString &baseGroup, Filter::List &list );
+
+ /**
+ Restores a list of filters from a config file.
+
+ @param config The config file to read from.
+ @param baseGroup The base group name to be used to find the filters
+
+ @return The list of filters.
+ */
+ static Filter::List restore( KConfig *config, const QString &baseGroup );
+
+ /**
+ Sets the filter rule. If the rule is Filter::Matching (default),
+ then the filter will return true on items that match the filter.
+ If the rule is Filter::NotMatching, then the filter will return
+ true on items that do not match the filter.
+ */
+ void setMatchRule( MatchRule rule );
+
+ /**
+ @return The current match rule.
+ */
+ MatchRule matchRule() const;
+
+ /**
+ @return true if the category list is empty.
+ */
+ bool isEmpty() const;
+
+ private:
+ QString mName;
+ QStringList mCategoryList;
+ MatchRule mMatchRule;
+ bool mEnabled;
+ bool mInternal;
+ bool mIsEmpty;
+};
+
+#endif
diff --git a/kaddressbook/common/kabprefs.cpp b/kaddressbook/common/kabprefs.cpp
new file mode 100644
index 000000000..e8402d562
--- /dev/null
+++ b/kaddressbook/common/kabprefs.cpp
@@ -0,0 +1,82 @@
+/*
+ This file is part of KAddressBook.
+ Copyright (c) 2002 Mike Pilone <mpilone@slac.com>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, permission is given to link this program
+ with any edition of Qt, and distribute the resulting executable,
+ without including the source code for Qt in the source distribution.
+*/
+
+#include <kconfig.h>
+#include <klocale.h>
+#include <kstaticdeleter.h>
+
+#include "kabprefs.h"
+
+KABPrefs *KABPrefs::mInstance = 0;
+static KStaticDeleter<KABPrefs> staticDeleter;
+
+KABPrefs::KABPrefs()
+ : KABPrefsBase()
+{
+ KConfigSkeleton::setCurrentGroup( "General" );
+
+ QStringList defaultMap;
+ defaultMap << "http://maps.google.com/maps?f=q&hl=%1&q=%n,%l,%s";
+ addItemString( "LocationMapURL", mLocationMapURL, defaultMap[ 0 ] );
+ addItemStringList( "LocationMapURLs", mLocationMapURLs, defaultMap );
+}
+
+KABPrefs::~KABPrefs()
+{
+}
+
+KABPrefs *KABPrefs::instance()
+{
+ if ( !mInstance ) {
+ staticDeleter.setObject( mInstance, new KABPrefs() );
+ mInstance->readConfig();
+ }
+
+ return mInstance;
+}
+
+void KABPrefs::setCategoryDefaults()
+{
+ mCustomCategories.clear();
+ mCustomCategories << i18n( "Business" ) << i18n( "Family" ) << i18n( "School" )
+ << i18n( "Customer" ) << i18n( "Friend" );
+}
+
+void KABPrefs::usrReadConfig()
+{
+ config()->setGroup( "General" );
+ mCustomCategories = config()->readListEntry( "Custom Categories" );
+ if ( mCustomCategories.isEmpty() )
+ setCategoryDefaults();
+
+ KPimPrefs::usrReadConfig();
+}
+
+
+void KABPrefs::usrWriteConfig()
+{
+ config()->setGroup( "General" );
+ config()->writeEntry( "Custom Categories", mCustomCategories );
+
+ KPimPrefs::usrWriteConfig();
+}
diff --git a/kaddressbook/common/kabprefs.h b/kaddressbook/common/kabprefs.h
new file mode 100644
index 000000000..3c2db1522
--- /dev/null
+++ b/kaddressbook/common/kabprefs.h
@@ -0,0 +1,86 @@
+/*
+ This file is part of KAddressBook.
+ Copyright (c) 2002 Mike Pilone <mpilone@slac.com>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, permission is given to link this program
+ with any edition of Qt, and distribute the resulting executable,
+ without including the source code for Qt in the source distribution.
+*/
+
+#ifndef KABPREFS_H
+#define KABPREFS_H
+
+#include <qstringlist.h>
+#include <kdepimmacros.h>
+#include "kabprefs_base.h"
+
+class KConfig;
+
+class KDE_EXPORT KABPrefs : public KABPrefsBase
+{
+ public:
+ virtual ~KABPrefs();
+
+ static KABPrefs *instance();
+
+ void usrReadConfig();
+ void usrWriteConfig();
+
+ void setLocationMapURL( const QString &locationMapURL )
+ {
+ if ( !isImmutable( QString::fromLatin1( "LocationMapURL" ) ) )
+ mLocationMapURL = locationMapURL;
+ }
+
+ QString locationMapURL() const
+ {
+ return mLocationMapURL;
+ }
+
+ void setLocationMapURLs( const QStringList &locationMapURLs )
+ {
+ if ( !isImmutable( QString::fromLatin1( "LocationMapURLs" ) ) )
+ mLocationMapURLs = locationMapURLs;
+ }
+
+ QStringList locationMapURLs() const
+ {
+ return mLocationMapURLs;
+ }
+
+ QStringList customCategories() const
+ {
+ return mCustomCategories;
+ }
+
+ void setCustomCategories(const QStringList & s)
+ {
+ mCustomCategories = s;
+ }
+
+ void setCategoryDefaults();
+
+ private:
+ KABPrefs();
+
+ static KABPrefs *mInstance;
+
+ QString mLocationMapURL;
+ QStringList mLocationMapURLs;
+};
+
+#endif
diff --git a/kaddressbook/common/kabprefs_base.kcfgc b/kaddressbook/common/kabprefs_base.kcfgc
new file mode 100644
index 000000000..cca2c9337
--- /dev/null
+++ b/kaddressbook/common/kabprefs_base.kcfgc
@@ -0,0 +1,11 @@
+# Code generation options for kconfig_compiler
+File=kaddressbook.kcfg
+ClassName=KABPrefsBase
+Singleton=false
+Mutators=true
+Inherits=KPimPrefs
+IncludeFiles=libkdepim/kpimprefs.h
+MemberVariables=public
+GlobalEnums=true
+ItemAccessors=true
+SetUserTexts=true
diff --git a/kaddressbook/common/kaddressbook.kcfg b/kaddressbook/common/kaddressbook.kcfg
new file mode 100644
index 000000000..37e6ff0a6
--- /dev/null
+++ b/kaddressbook/common/kaddressbook.kcfg
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<kcfg xmlns="http://www.kde.org/standards/kcfg/1.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
+ http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
+ <kcfgfile name="kaddressbookrc"/>
+
+ <group name="General">
+ <entry type="Bool" name="AutomaticNameParsing">
+ <label>Automatic name parsing for new addressees</label>
+ <whatsthis></whatsthis>
+ <default>true</default>
+ </entry>
+ <entry type="Int" name="CurrentIncSearchField">
+ <default>0</default>
+ </entry>
+ <entry type="String" name="PhoneHookApplication">
+ <label>Phone</label>
+ <whatsthis></whatsthis>
+ </entry>
+ <entry type="String" name="FaxHookApplication">
+ <label>Fax</label>
+ <whatsthis></whatsthis>
+ <default>kdeprintfax --phone %N</default>
+ </entry>
+ <entry type="String" name="SMSHookApplication">
+ <label>SMS</label>
+ <whatsthis>The script used to send a GSM SMS text message to the mobile phone</whatsthis>
+ </entry>
+ </group>
+
+ <group name="Views">
+ <entry type="Bool" name="HonorSingleClick">
+ <label>Honor KDE single click</label>
+ <whatsthis></whatsthis>
+ <default>false</default>
+ </entry>
+ <entry type="String" name="CurrentView">
+ <default>Default Table View</default>
+ </entry>
+ <entry type="StringList" name="ViewNames">
+ <default>Default Table View</default>
+ </entry>
+ </group>
+
+ <group name="MainWindow">
+ <entry type="Bool" name="JumpButtonBarVisible">
+ <default>false</default>
+ </entry>
+ <entry type="Bool" name="DetailsPageVisible">
+ <default>true</default>
+ </entry>
+ <entry type="IntList" name="DetailsSplitter">
+ </entry>
+ <entry type="IntList" name="LeftSplitter">
+ </entry>
+ <entry type="Bool" name="ContactListAboveExtensions">
+ <default>true</default>
+ <whatsthis>If true, the contact list will be placed above the extensions on the left (distribution list editor etc.) instead of in the middle of the main window</whatsthis>
+
+ </entry>
+ </group>
+
+ <group name="ExtensionsGeneral">
+ <entry type="String" name="CurrentExtension">
+ <default>resourceselection</default>
+ </entry>
+ <entry type="StringList" name="activeExtensions">
+ <default>distribution_list_editor_ng,resourceselection</default>
+ </entry>
+ <entry type="IntList" name="ExtensionsSplitterSizes"/>
+ </group>
+
+ <group name="Filters">
+ <entry type="Int" name="CurrentFilter">
+ <default>0</default>
+ </entry>
+ </group>
+
+ <group name="AddresseeEditor">
+ <entry type="Enum" name="EditorType">
+ <choices>
+ <choice name="FullEditor"/>
+ <choice name="SimpleEditor"/>
+ </choices>
+ <default>FullEditor</default>
+ </entry>
+ <entry type="StringList" name="GlobalCustomFields">
+ </entry>
+ <entry type="StringList" name="AdvancedCustomFields">
+ </entry>
+ </group>
+</kcfg>
diff --git a/kaddressbook/common/locationmap.cpp b/kaddressbook/common/locationmap.cpp
new file mode 100644
index 000000000..92bdfaab1
--- /dev/null
+++ b/kaddressbook/common/locationmap.cpp
@@ -0,0 +1,96 @@
+/*
+ This file is part of KAddressbook.
+ Copyright (c) 2004 Tobias Koenig <tokoe@kde.org>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, permission is given to link this program
+ with any edition of Qt, and distribute the resulting executable,
+ without including the source code for Qt in the source distribution.
+*/
+
+#include <kapplication.h>
+#include <kconfig.h>
+#include <kdeversion.h>
+#include <kglobal.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kstaticdeleter.h>
+#include <kurl.h>
+
+#include "kabprefs.h"
+#include "locationmap.h"
+
+LocationMap *LocationMap::mSelf = 0;
+static KStaticDeleter<LocationMap> locationMapDeleter;
+
+LocationMap::LocationMap()
+{
+}
+
+LocationMap::~LocationMap()
+{
+}
+
+LocationMap *LocationMap::instance()
+{
+ if ( !mSelf )
+ locationMapDeleter.setObject( mSelf, new LocationMap );
+
+ return mSelf;
+}
+
+void LocationMap::showAddress( const KABC::Address &addr )
+{
+ KURL url( createUrl( addr ) );
+ if ( url.isEmpty() )
+ return;
+
+ kapp->invokeBrowser( url.url() );
+}
+
+QString LocationMap::createUrl( const KABC::Address &addr )
+{
+ /**
+ This method makes substitutions for the following place holders:
+ %s street
+ %r region
+ %l locality
+ %z zip code
+ %c country (in ISO format)
+ */
+
+ QString urlTemplate = KABPrefs::instance()->locationMapURL().arg( KGlobal::locale()->country() );
+ if ( urlTemplate.isEmpty() ) {
+ KMessageBox::error( 0, i18n( "No service provider available for map lookup!\nPlease add one in the configuration dialog." ) );
+ return QString::null;
+ }
+
+#if KDE_VERSION >= 319
+ return urlTemplate.replace( "%s", addr.street() ).
+ replace( "%r", addr.region() ).
+ replace( "%l", addr.locality() ).
+ replace( "%z", addr.postalCode() ).
+ replace( "%c", addr.countryToISO( addr.country() ) );
+#else
+ return urlTemplate.replace( "%s", addr.street() ).
+ replace( "%r", addr.region() ).
+ replace( "%l", addr.locality() ).
+ replace( "%z", addr.postalCode() ).
+ replace( "%c", "" );
+#endif
+}
+
+#include "locationmap.moc"
diff --git a/kaddressbook/common/locationmap.h b/kaddressbook/common/locationmap.h
new file mode 100644
index 000000000..82300d9df
--- /dev/null
+++ b/kaddressbook/common/locationmap.h
@@ -0,0 +1,51 @@
+/*
+ This file is part of KAddressbook.
+ Copyright (c) 2004 Tobias Koenig <tokoe@kde.org>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, permission is given to link this program
+ with any edition of Qt, and distribute the resulting executable,
+ without including the source code for Qt in the source distribution.
+*/
+
+#ifndef LOCATIONMAP_H
+#define LOCATIONMAP_H
+
+#include <kabc/address.h>
+#include <qobject.h>
+#include <qstring.h>
+
+class LocationMap : public QObject
+{
+ Q_OBJECT
+
+ public:
+ static LocationMap *instance();
+ ~LocationMap();
+
+ public slots:
+ void showAddress( const KABC::Address& );
+
+ protected:
+ LocationMap();
+
+ private:
+ QString createUrl( const KABC::Address& );
+
+ static LocationMap *mSelf;
+};
+
+#endif