Sophie

Sophie

distrib > Mageia > 5 > i586 > by-pkgid > ddfeee3bedf84e44f20049fdcc070a8a > files > 41

kdepimlibs4-4.14.10-2.2.mga5.src.rpm

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