summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--kabc/addresseedialog.cpp69
-rw-r--r--kabc/addresseedialog.h5
2 files changed, 50 insertions, 24 deletions
diff --git a/kabc/addresseedialog.cpp b/kabc/addresseedialog.cpp
index 033e857..cb6c12f 100644
--- a/kabc/addresseedialog.cpp
+++ b/kabc/addresseedialog.cpp
@@ -30,125 +30,137 @@
#include "stdaddressbook.h"
#include "addresseedialog.h"
//#include "addresseedialog.moc"
using namespace KABC;
AddresseeItem::AddresseeItem( QListView *parent, const Addressee &addressee ) :
QListViewItem( parent ),
mAddressee( addressee )
{
- setText( Name, addressee.realName() );
+ 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 ) :
KDialogBase( KDialogBase::Plain, i18n("Select Addressee"),
Ok|Cancel, Ok, parent ), mMultiple( multiple )
{
QWidget *topWidget = plainPage();
QBoxLayout *topLayout = new QHBoxLayout( topWidget );
QBoxLayout *listLayout = new QVBoxLayout;
topLayout->addLayout( listLayout );
mAddresseeList = new KListView( topWidget );
mAddresseeList->addColumn( i18n("Name") );
mAddresseeList->addColumn( i18n("Email") );
mAddresseeList->setAllColumnsShowFocus( true );
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 ) );
+ listLayout->addWidget( mAddresseeEdit );
if ( mMultiple ) {
QBoxLayout *selectedLayout = new QVBoxLayout;
topLayout->addLayout( selectedLayout );
topLayout->setSpacing( spacingHint() );
QGroupBox *selectedGroup = new QGroupBox( 1, Horizontal, i18n("Selected"),
topWidget );
selectedLayout->addWidget( selectedGroup );
mSelectedList = new KListView( selectedGroup );
mSelectedList->addColumn( i18n("Name") );
mSelectedList->addColumn( i18n("Email") );
mSelectedList->setAllColumnsShowFocus( true );
mSelectedList->setFullWidth( true );
connect( mSelectedList, SIGNAL( doubleClicked( QListViewItem * ) ),
SLOT( removeSelected() ) );
QPushButton *unselectButton = new QPushButton( i18n("Unselect"), selectedGroup );
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* ) ),
SLOT( addressBookChanged() ) );
connect( mAddressBook, SIGNAL( loadingFinished( Resource* ) ),
SLOT( addressBookChanged() ) );
loadAddressBook();
}
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 ) {
+ 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) );
- addCompletionItem( (*it).realName(), item );
- addCompletionItem( (*it).preferredEmail(), item );
}
}
void AddresseeDialog::addCompletionItem( const QString &str, QListViewItem *item )
{
if ( str.isEmpty() ) return;
mItemDict.insert( str, item );
//mAddresseeEdit->completionObject()->addItem( str );
}
void AddresseeDialog::selectItem( const QString &str )
@@ -161,46 +173,59 @@ void AddresseeDialog::selectItem( const QString &str )
mAddresseeList->setSelected( item, true );
mAddresseeList->ensureItemVisible( item );
mAddresseeList->blockSignals( false );
}
}
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;
Addressee a = addrItem->addressee();
QListViewItem *selectedItem = mSelectedDict.find( a.uid() );
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()
{
AddresseeItem *aItem = 0;
if ( mMultiple )
aItem = (AddresseeItem *)( mSelectedList->firstChild() );
else
aItem = (AddresseeItem *)( mAddresseeList->selectedItem() );
if (aItem) return aItem->addressee();
diff --git a/kabc/addresseedialog.h b/kabc/addresseedialog.h
index 74e7871..99c74bd 100644
--- a/kabc/addresseedialog.h
+++ b/kabc/addresseedialog.h
@@ -120,39 +120,40 @@ class AddresseeDialog : public KDialogBase
/**
Select multiple address book entries.
Open addressee select dialog and return the entries selected by the user.
If the user doesn't select an entry or presses cancel, the returned
addressee list is empty.
*/
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;
QDict<QListViewItem> mItemDict;
QDict<QListViewItem> mSelectedDict;
class AddresseeDialogPrivate;
AddresseeDialogPrivate *d;
};