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