00001
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, true )
00153 {
00154
QWidget *page = plainPage();
00155
QVBoxLayout *layout =
new QVBoxLayout( page, marginHint(), 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 }