-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 @@ -38,25 +38,23 @@ using namespace KABC; 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(); } AddresseeDialog::AddresseeDialog( QWidget *parent, bool multiple ) : @@ -76,21 +74,16 @@ AddresseeDialog::AddresseeDialog( QWidget *parent, bool multiple ) : mAddresseeList->setFullWidth( true ); 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 ); topLayout->setSpacing( spacingHint() ); @@ -111,10 +104,11 @@ AddresseeDialog::AddresseeDialog( QWidget *parent, bool multiple ) : connect ( unselectButton, SIGNAL( clicked() ), SLOT( removeSelected() ) ); connect( mAddresseeList, SIGNAL( clicked( QListViewItem * ) ), SLOT( addSelected( QListViewItem * ) ) ); + connect( mAddresseeList, SIGNAL( returnPressed( QListViewItem * ) ), + SLOT( selectNextItem( QListViewItem * ) ) ); - // setInitialSize( QSize( 650, 350 ) ); } mAddressBook = StdAddressBook::self( true ); connect( mAddressBook, SIGNAL( addressBookChanged( AddressBook* ) ), @@ -132,15 +126,33 @@ AddresseeDialog::~AddresseeDialog() 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) ); } } void AddresseeDialog::addCompletionItem( const QString &str, QListViewItem *item ) @@ -169,8 +181,18 @@ void AddresseeDialog::updateEdit( QListViewItem *item ) mAddresseeEdit->setText( item->text( 0 ) ); 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 ); if ( !addrItem ) return; @@ -181,18 +203,21 @@ void AddresseeDialog::addSelected( QListViewItem *item ) if ( !selectedItem ) { selectedItem = new AddresseeItem( mSelectedList, a ); mSelectedDict.insert( a.uid(), selectedItem ); } + } 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 @@ -128,23 +128,24 @@ class AddresseeDialog : public KDialogBase static Addressee::List getAddressees( QWidget *parent ); 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; AddressBook *mAddressBook; |