From 06d4306f66c28c7bfe30704f4a3cf1ca0f211ead Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Vr=C3=A1til?= <daniel.vratil@kdab.com> Date: Mon, 4 Jul 2016 08:05:19 +0200 Subject: [PATCH 40/47] Add email autocompletion to ContactGroupEditor Filling in email now gets autocompletion, and confirming the selection also sets the contact name for the selected email address. --- akonadi/contact/contactgroupeditordelegate.cpp | 47 +++++++++----------------- akonadi/contact/contactgroupeditordelegate_p.h | 4 ++- 2 files changed, 19 insertions(+), 32 deletions(-) diff --git a/akonadi/contact/contactgroupeditordelegate.cpp b/akonadi/contact/contactgroupeditordelegate.cpp index dee797e97..73d1c2fe4 100644 --- a/akonadi/contact/contactgroupeditordelegate.cpp +++ b/akonadi/contact/contactgroupeditordelegate.cpp @@ -62,7 +62,8 @@ class ContactsWithEmailFilterModel : public QSortFilterProxyModel } }; -ContactLineEdit::ContactLineEdit( bool isReference, QWidget *parent ) +ContactLineEdit::ContactLineEdit( bool isReference, Akonadi::ContactCompletionModel::Columns column, + QWidget *parent ) : KLineEdit( parent ), mIsReference( isReference ) { setFrame( false ); @@ -71,7 +72,7 @@ ContactLineEdit::ContactLineEdit( bool isReference, QWidget *parent ) filter->setSourceModel( Akonadi::ContactCompletionModel::self() ); QCompleter *completer = new QCompleter( filter, this ); - completer->setCompletionColumn( Akonadi::ContactCompletionModel::NameColumn ); + completer->setCompletionColumn( column ); completer->setCaseSensitivity( Qt::CaseInsensitive ); connect( completer, SIGNAL(activated(QModelIndex)), SLOT(completed(QModelIndex)) ); @@ -136,14 +137,9 @@ ContactGroupEditorDelegate::~ContactGroupEditorDelegate() QWidget* ContactGroupEditorDelegate::createEditor( QWidget *parent, const QStyleOptionViewItem&, const QModelIndex &index ) const { + const bool isReference = index.data( ContactGroupModel::IsReferenceRole ).toBool(); if ( index.column() == 0 ) { - ContactLineEdit *edit = 0; - if ( index.data( ContactGroupModel::IsReferenceRole ).toBool() ) { - edit = new ContactLineEdit( true, parent ); - } else { - edit = new ContactLineEdit( false, parent ); - } - + ContactLineEdit *edit = new ContactLineEdit( isReference, ContactCompletionModel::NameColumn, parent ); connect( edit, SIGNAL(completed(QWidget*)), SLOT(completed(QWidget*)) ); return edit; @@ -154,8 +150,8 @@ QWidget* ContactGroupEditorDelegate::createEditor( QWidget *parent, const QStyle comboBox->setAutoFillBackground( true ); return comboBox; } else { - KLineEdit *lineEdit = new KLineEdit( parent ); - lineEdit->setFrame( false ); + ContactLineEdit *lineEdit = new ContactLineEdit( isReference, ContactCompletionModel::EmailColumn, parent); + connect( lineEdit, SIGNAL(completed(QWidget*)), SLOT(completed(QWidget*)) ); return lineEdit; } } @@ -219,28 +215,17 @@ void ContactGroupEditorDelegate::setModelData( QWidget *editor, QAbstractItemMod model->setData( index, comboBox->currentText(), Qt::EditRole ); } } else { - if ( index.column() == 0 ) { - ContactLineEdit *lineEdit = static_cast<ContactLineEdit*>( editor ); - - const bool isReference = lineEdit->isReference(); - const Item item = lineEdit->completedItem(); - model->setData( index, isReference, ContactGroupModel::IsReferenceRole ); - if ( isReference ) { - if ( item.isValid() ) { - model->setData( index, item.id(), Qt::EditRole ); - } - } else - model->setData( index, lineEdit->text(), Qt::EditRole ); - } - - if ( index.column() == 1 ) { - KLineEdit *lineEdit = qobject_cast<KLineEdit*>( editor ); - if ( !lineEdit ) { - return; + ContactLineEdit *lineEdit = static_cast<ContactLineEdit*>( editor ); + + const bool isReference = lineEdit->isReference(); + const Item item = lineEdit->completedItem(); + model->setData( index, isReference, ContactGroupModel::IsReferenceRole ); + if ( isReference ) { + if ( item.isValid() ) { + model->setData( index.sibling(index.row(), 0), item.id(), Qt::EditRole ); } - + } else model->setData( index, lineEdit->text(), Qt::EditRole ); - } } } diff --git a/akonadi/contact/contactgroupeditordelegate_p.h b/akonadi/contact/contactgroupeditordelegate_p.h index be4eb7cd4..8a1556504 100644 --- a/akonadi/contact/contactgroupeditordelegate_p.h +++ b/akonadi/contact/contactgroupeditordelegate_p.h @@ -27,6 +27,7 @@ #include <QStyledItemDelegate> #include <akonadi/item.h> +#include "contactcompletionmodel_p.h" namespace Akonadi { @@ -36,7 +37,8 @@ class ContactLineEdit : public KLineEdit Q_OBJECT public: - explicit ContactLineEdit( bool isReference, QWidget *parent = 0 ); + explicit ContactLineEdit( bool isReference, Akonadi::ContactCompletionModel::Columns column, + QWidget *parent = 0 ); bool isReference() const; Akonadi::Item completedItem() const; -- 2.14.1