-rw-r--r-- | kabc/addresseedialog.cpp | 73 | ||||
-rw-r--r-- | kabc/addresseedialog.h | 5 |
2 files changed, 52 insertions, 26 deletions
diff --git a/kabc/addresseedialog.cpp b/kabc/addresseedialog.cpp index 033e857..cb6c12f 100644 --- a/kabc/addresseedialog.cpp +++ b/kabc/addresseedialog.cpp @@ -39,23 +39,21 @@ AddresseeItem::AddresseeItem( QListView *parent, const Addressee &addressee ) : QListViewItem( parent ), mAddressee( addressee ) { - setText( Name, addressee.realName() ); - setText( Email, addressee.preferredEmail() ); + QString name = addressee.familyName()+", "+ addressee.givenName(); + if ( name.length() == 2 ) + name = addressee.realName(); + setText( Name,name); + setText( Email, addressee.preferredEmail() ); } QString AddresseeItem::key( int column, bool ) const { - /* LR + if (column == Email) { QString value = text(Email); - QRegExp emailRe("<\\S*>"); - int match = emailRe.search(value); - if (match > -1) - value = value.mid(match + 1, emailRe.matchedLength() - 2); - - return value.lower(); + int val = value.findRev("@"); + return value.mid( val) + value.left( val ); } - */ return text(column).lower(); } @@ -77,19 +75,14 @@ AddresseeDialog::AddresseeDialog( QWidget *parent, bool multiple ) : listLayout->addWidget( mAddresseeList ); connect( mAddresseeList, SIGNAL( doubleClicked( QListViewItem * ) ), SLOT( slotOk() ) ); - connect( mAddresseeList, SIGNAL( selectionChanged( QListViewItem * ) ), - SLOT( updateEdit( QListViewItem * ) ) ); - mAddresseeEdit = new KLineEdit( topWidget ); - //mAddresseeEdit->setCompletionMode( KGlobalSettings::CompletionAuto ); - // connect( mAddresseeEdit->completionObject(), SIGNAL( match( const QString & ) ), - // SLOT( selectItem( const QString & ) ) ); + mAddresseeEdit = new QLineEdit( topWidget ); + connect( mAddresseeEdit, SIGNAL( returnPressed() ), + SLOT( loadAddressBook() ) ); mAddresseeEdit->setFocus(); - //mAddresseeEdit->completionObject()->setIgnoreCase( true ); + listLayout->addWidget( mAddresseeEdit ); - //setInitialSize( QSize( 450, 300 ) ); - if ( mMultiple ) { QBoxLayout *selectedLayout = new QVBoxLayout; topLayout->addLayout( selectedLayout ); @@ -112,8 +105,9 @@ AddresseeDialog::AddresseeDialog( QWidget *parent, bool multiple ) : connect( mAddresseeList, SIGNAL( clicked( QListViewItem * ) ), SLOT( addSelected( QListViewItem * ) ) ); + connect( mAddresseeList, SIGNAL( returnPressed( QListViewItem * ) ), + SLOT( selectNextItem( QListViewItem * ) ) ); - // setInitialSize( QSize( 650, 350 ) ); } mAddressBook = StdAddressBook::self( true ); @@ -133,13 +127,31 @@ void AddresseeDialog::loadAddressBook() { mAddresseeList->clear(); mItemDict.clear(); + if ( mAddresseeEdit->text().isEmpty() ) { + AddressBook::Iterator it; + for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) { + new AddresseeItem( mAddresseeList, (*it) ); + } + return; + } //mAddresseeEdit->completionObject()->clear(); + QRegExp re; + re.setWildcard(true); // most people understand these better. + re.setCaseSensitive(false); + re.setPattern( "*"+ mAddresseeEdit->text() + "*"); AddressBook::Iterator it; for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) { - AddresseeItem *item = new AddresseeItem( mAddresseeList, (*it) ); - addCompletionItem( (*it).realName(), item ); - addCompletionItem( (*it).preferredEmail(), item ); + QString name = (*it).familyName()+", "+ (*it).givenName(); + if ( name.length() == 2 ) + name = (*it).realName(); + name += (*it).preferredEmail(); +#if QT_VERSION >= 300 + if (re.search(name)) != -1) +#else + if (re.match(name) != -1) +#endif + AddresseeItem *item = new AddresseeItem( mAddresseeList, (*it) ); } } @@ -170,6 +182,16 @@ void AddresseeDialog::updateEdit( QListViewItem *item ) mAddresseeEdit->setSelection( 0, item->text( 0 ).length() ); } +void AddresseeDialog::selectNextItem( QListViewItem *item ) +{ + addSelected( item ); + QListViewItem *next = item->nextSibling(); + if ( next ) { + next->setSelected( true ); + item->setSelected( false ); + mAddresseeList->setCurrentItem( next ); + } +} void AddresseeDialog::addSelected( QListViewItem *item ) { AddresseeItem *addrItem = (AddresseeItem *)( item ); @@ -182,6 +204,7 @@ void AddresseeDialog::addSelected( QListViewItem *item ) selectedItem = new AddresseeItem( mSelectedList, a ); mSelectedDict.insert( a.uid(), selectedItem ); } + } void AddresseeDialog::removeSelected() @@ -189,9 +212,11 @@ void AddresseeDialog::removeSelected() QListViewItem *item = mSelectedList->selectedItem(); AddresseeItem *addrItem = (AddresseeItem *)( item ); if ( !addrItem ) return; - + QListViewItem *next = item->nextSibling(); mSelectedDict.remove( addrItem->addressee().uid() ); delete addrItem; + if ( next ) + next->setSelected( true ); } Addressee AddresseeDialog::addressee() diff --git a/kabc/addresseedialog.h b/kabc/addresseedialog.h index 74e7871..99c74bd 100644 --- a/kabc/addresseedialog.h +++ b/kabc/addresseedialog.h @@ -129,21 +129,22 @@ class AddresseeDialog : public KDialogBase private slots: void selectItem( const QString & ); + void selectNextItem( QListViewItem *item ); void updateEdit( QListViewItem *item ); void addSelected( QListViewItem *item ); void removeSelected(); + void loadAddressBook(); protected slots: void addressBookChanged(); private: - void loadAddressBook(); void addCompletionItem( const QString &str, QListViewItem *item ); bool mMultiple; KListView *mAddresseeList; - KLineEdit *mAddresseeEdit; + QLineEdit *mAddresseeEdit; KListView *mSelectedList; |