-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 @@ -40,21 +40,19 @@ AddresseeItem::AddresseeItem( QListView *parent, const Addressee &addressee ) : 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(); } @@ -78,17 +76,12 @@ AddresseeDialog::AddresseeDialog( QWidget *parent, bool multiple ) : 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; @@ -113,6 +106,7 @@ 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 ) ); } @@ -134,11 +128,29 @@ 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) ); } } @@ -171,4 +183,14 @@ void AddresseeDialog::updateEdit( QListViewItem *item ) } +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 ) { @@ -183,4 +205,5 @@ void AddresseeDialog::addSelected( QListViewItem *item ) mSelectedDict.insert( a.uid(), selectedItem ); } + } @@ -190,7 +213,9 @@ void AddresseeDialog::removeSelected() AddresseeItem *addrItem = (AddresseeItem *)( item ); if ( !addrItem ) return; - + QListViewItem *next = item->nextSibling(); mSelectedDict.remove( addrItem->addressee().uid() ); delete addrItem; + if ( next ) + next->setSelected( true ); } diff --git a/kabc/addresseedialog.h b/kabc/addresseedialog.h index 74e7871..99c74bd 100644 --- a/kabc/addresseedialog.h +++ b/kabc/addresseedialog.h @@ -130,7 +130,9 @@ 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: @@ -138,5 +140,4 @@ class AddresseeDialog : public KDialogBase private: - void loadAddressBook(); void addCompletionItem( const QString &str, QListViewItem *item ); @@ -144,5 +145,5 @@ class AddresseeDialog : public KDialogBase KListView *mAddresseeList; - KLineEdit *mAddresseeEdit; + QLineEdit *mAddresseeEdit; KListView *mSelectedList; |