libkdepim
recentaddresses.cpp00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include "recentaddresses.h"
00031 #include "libemailfunctions/email.h"
00032
00033 #include <kstaticdeleter.h>
00034 #include <kconfig.h>
00035 #include <kglobal.h>
00036
00037 #include <kdebug.h>
00038 #include <klocale.h>
00039 #include <keditlistbox.h>
00040
00041
00042 #include <qlayout.h>
00043
00044 using namespace KRecentAddress;
00045
00046 static KStaticDeleter<RecentAddresses> sd;
00047
00048 RecentAddresses * RecentAddresses::s_self = 0;
00049
00050 RecentAddresses * RecentAddresses::self( KConfig *config)
00051 {
00052 if ( !s_self )
00053 sd.setObject( s_self, new RecentAddresses(config) );
00054 return s_self;
00055 }
00056
00057 RecentAddresses::RecentAddresses(KConfig * config)
00058 {
00059 if ( !config )
00060 load( KGlobal::config() );
00061 else
00062 load( config );
00063 }
00064
00065 RecentAddresses::~RecentAddresses()
00066 {
00067
00068
00069 }
00070
00071 void RecentAddresses::load( KConfig *config )
00072 {
00073 QStringList addresses;
00074 QString name;
00075 QString email;
00076
00077 m_addresseeList.clear();
00078 KConfigGroupSaver cs( config, "General" );
00079 m_maxCount = config->readNumEntry( "Maximum Recent Addresses", 40 );
00080 addresses = config->readListEntry( "Recent Addresses" );
00081 for ( QStringList::Iterator it = addresses.begin(); it != addresses.end(); ++it ) {
00082 KABC::Addressee::parseEmailAddress( *it, name, email );
00083 if ( !email.isEmpty() ) {
00084 KABC::Addressee addr;
00085 addr.setNameFromString( name );
00086 addr.insertEmail( email, true );
00087 m_addresseeList.append( addr );
00088 }
00089 }
00090
00091 adjustSize();
00092 }
00093
00094 void RecentAddresses::save( KConfig *config )
00095 {
00096 KConfigGroupSaver cs( config, "General" );
00097 config->writeEntry( "Recent Addresses", addresses() );
00098 }
00099
00100 void RecentAddresses::add( const QString& entry )
00101 {
00102 if ( !entry.isEmpty() && m_maxCount > 0 ) {
00103 QStringList list = KPIM::splitEmailAddrList( entry );
00104 for( QStringList::const_iterator e_it = list.begin(); e_it != list.end(); ++e_it ) {
00105 KPIM::EmailParseResult errorCode = KPIM::isValidEmailAddress( *e_it );
00106 if ( errorCode != KPIM::AddressOk )
00107 continue;
00108 QString email;
00109 QString fullName;
00110 KABC::Addressee addr;
00111
00112 KABC::Addressee::parseEmailAddress( *e_it, fullName, email );
00113
00114 for ( KABC::Addressee::List::Iterator it = m_addresseeList.begin();
00115 it != m_addresseeList.end(); ++it )
00116 {
00117 if ( email == (*it).preferredEmail() ) {
00118
00119 m_addresseeList.remove( it );
00120 break;
00121 }
00122 }
00123 addr.setNameFromString( fullName );
00124 addr.insertEmail( email, true );
00125 m_addresseeList.prepend( addr );
00126 adjustSize();
00127 }
00128 }
00129 }
00130
00131 void RecentAddresses::setMaxCount( int count )
00132 {
00133 m_maxCount = count;
00134 adjustSize();
00135 }
00136
00137 void RecentAddresses::adjustSize()
00138 {
00139 while ( m_addresseeList.count() > m_maxCount )
00140 m_addresseeList.remove( m_addresseeList.fromLast() );
00141 }
00142
00143 void RecentAddresses::clear()
00144 {
00145 m_addresseeList.clear();
00146 adjustSize();
00147 }
00148
00149 QStringList RecentAddresses::addresses() const
00150 {
00151 QStringList addresses;
00152 for ( KABC::Addressee::List::ConstIterator it = m_addresseeList.begin();
00153 it != m_addresseeList.end(); ++it )
00154 {
00155 addresses.append( (*it).fullEmail() );
00156 }
00157 return addresses;
00158 }
00159
00160 RecentAddressDialog::RecentAddressDialog( QWidget *parent, const char *name )
00161 : KDialogBase( Plain, i18n( "Edit Recent Addresses" ), Ok | Cancel, Ok,
00162 parent, name, true )
00163 {
00164 QWidget *page = plainPage();
00165 QVBoxLayout *layout = new QVBoxLayout( page, 0, spacingHint() );
00166
00167 mEditor = new KEditListBox( i18n( "Recent Addresses" ), page, "", false,
00168 KEditListBox::Add | KEditListBox::Remove );
00169 layout->addWidget( mEditor );
00170 }
00171
00172 void RecentAddressDialog::setAddresses( const QStringList &addrs )
00173 {
00174 mEditor->clear();
00175 mEditor->insertStringList( addrs );
00176 }
00177
00178 QStringList RecentAddressDialog::addresses() const
00179 {
00180 return mEditor->items();
00181 }
|