• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdepim API Reference
  • KDE Home
  • Contact Us
 

kaddressbook

  • sources
  • kde-4.14
  • kdepim
  • kaddressbook
  • merge
  • searchduplicate
resultduplicatetreewidget.cpp
Go to the documentation of this file.
1 /*
2  Copyright (c) 2015 Montel Laurent <montel@kde.org>
3 
4  This program is free software; you can redistribute it and/or modify it
5  under the terms of the GNU General Public License, version 2, as
6  published by the Free Software Foundation.
7 
8  This program is distributed in the hope that it will be useful, but
9  WITHOUT ANY WARRANTY; without even the implied warranty of
10  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11  General Public License for more details.
12 
13  You should have received a copy of the GNU General Public License along
14  with this program; if not, write to the Free Software Foundation, Inc.,
15  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16 */
17 
18 
19 #include "resultduplicatetreewidget.h"
20 
21 #include <KABC/Addressee>
22 
23 using namespace KABMergeContacts;
24 
25 
26 
27 ResultDuplicateTreeWidget::ResultDuplicateTreeWidget(QWidget *parent)
28  : QTreeWidget(parent)
29 {
30  //kf5 add i18n
31  setHeaderLabel(QLatin1String("Contacts"));
32  connect(this, SIGNAL(itemActivated(QTreeWidgetItem*,int)), this, SLOT(slotItemActivated(QTreeWidgetItem*,int)));
33  connect(this, SIGNAL(itemChanged(QTreeWidgetItem*,int)), SLOT(slotItemChanged(QTreeWidgetItem*,int)));
34 }
35 
36 ResultDuplicateTreeWidget::~ResultDuplicateTreeWidget()
37 {
38 
39 }
40 
41 void ResultDuplicateTreeWidget::slotItemChanged(QTreeWidgetItem *item, int column)
42 {
43  if (column!=0)
44  return;
45  //Parent
46  if (item->childCount()!=0) {
47  changeState(item, item->checkState(0) == Qt::Checked);
48  } else { //child
49  QTreeWidgetItem *parent = item->parent();
50  if (parent) {
51  blockSignals(true);
52  Qt::CheckState state = Qt::PartiallyChecked;
53  for (int i=0; i < parent->childCount(); ++i) {
54  if (i == 0) {
55  state = parent->child(i)->checkState(0);
56  } else {
57  if (state != parent->child(i)->checkState(0)) {
58  state = Qt::PartiallyChecked;
59  break;
60  }
61  }
62  }
63  parent->setCheckState(0, state);
64  blockSignals(false);
65  }
66  }
67 }
68 
69 void ResultDuplicateTreeWidget::changeState(QTreeWidgetItem *item, bool b)
70 {
71  blockSignals(true);
72  item->setCheckState(0, b ? Qt::Checked : Qt::Unchecked);
73  for (int i=0; i < item->childCount(); ++i) {
74  item->child(i)->setCheckState(0, b ? Qt::Checked : Qt::Unchecked);
75  }
76  blockSignals(false);
77 }
78 
79 void ResultDuplicateTreeWidget::slotItemActivated(QTreeWidgetItem* item, int column)
80 {
81  Q_UNUSED(column);
82  ResultDuplicateTreeWidgetItem *resultItem = dynamic_cast<ResultDuplicateTreeWidgetItem *>(item);
83  if (resultItem) {
84  Q_EMIT showContactPreview(resultItem->item());
85  }
86 }
87 
88 void ResultDuplicateTreeWidget::setContacts(const QList<Akonadi::Item::List> &lstItem)
89 {
90  clear();
91  int i = 1;
92  Q_FOREACH(const Akonadi::Item::List &lst, lstItem) {
93  ResultDuplicateTreeWidgetItem *topLevelItem = new ResultDuplicateTreeWidgetItem(this);
94  //KF5 add i18n
95  topLevelItem->setText(0, QString::fromLatin1("Duplicate contact %1").arg(i));
96  Q_FOREACH(const Akonadi::Item &item, lst) {
97  ResultDuplicateTreeWidgetItem *childItem = new ResultDuplicateTreeWidgetItem;
98  topLevelItem->addChild(childItem);
99  childItem->setItem(item);
100  }
101  ++i;
102  }
103  expandAll();
104 }
105 
106 QList<Akonadi::Item::List> ResultDuplicateTreeWidget::selectedContactsToMerge() const
107 {
108  QList<Akonadi::Item::List> listItems;
109  for(int i=0; i < topLevelItemCount(); ++i) {
110  QTreeWidgetItem *item = topLevelItem(i);
111  const int childCount = item->childCount();
112  if (childCount > 0) {
113  Akonadi::Item::List items;
114  for (int child = 0; child < childCount; ++child) {
115  ResultDuplicateTreeWidgetItem *childItem = static_cast<ResultDuplicateTreeWidgetItem *> (item->child(child));
116  if (childItem->checkState(0) == Qt::Checked) {
117  items << childItem->item();
118  }
119  }
120  if (items.count() > 1) {
121  listItems << items;
122  }
123  }
124  }
125  return listItems;
126 }
127 
128 
129 ResultDuplicateTreeWidgetItem::ResultDuplicateTreeWidgetItem(QTreeWidget *parent)
130  : QTreeWidgetItem(parent)
131 {
132  setFlags( Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled );
133  setCheckState(0, Qt::Unchecked);
134 }
135 
136 ResultDuplicateTreeWidgetItem::~ResultDuplicateTreeWidgetItem()
137 {
138 
139 }
140 
141 Akonadi::Item ResultDuplicateTreeWidgetItem::item() const
142 {
143  return mItem;
144 }
145 
146 void ResultDuplicateTreeWidgetItem::setItem(const Akonadi::Item &item)
147 {
148  mItem = item;
149  setDisplayName();
150 }
151 
152 QString ResultDuplicateTreeWidgetItem::contactName(const KABC::Addressee &address)
153 {
154  const QString realName = address.realName();
155  if (!realName.isEmpty()) {
156  return realName;
157  }
158  const QString name = address.name();
159  if (!name.isEmpty()) {
160  return name;
161  }
162  return address.fullEmail();
163 }
164 
165 void ResultDuplicateTreeWidgetItem::setDisplayName()
166 {
167  if (mItem.isValid()) {
168  const KABC::Addressee address = mItem.payload<KABC::Addressee>();
169  setText(0, contactName(address));
170  }
171 }
QObject::child
QObject * child(const char *objName, const char *inheritsClass, bool recursiveSearch) const
resultduplicatetreewidget.h
QWidget
QTreeWidget::itemActivated
void itemActivated(QTreeWidgetItem *item, int column)
QTreeWidget::itemChanged
void itemChanged(QTreeWidgetItem *item, int column)
QTreeWidgetItem::checkState
Qt::CheckState checkState(int column) const
QTreeWidgetItem::child
QTreeWidgetItem * child(int index) const
KABMergeContacts::ResultDuplicateTreeWidget::showContactPreview
void showContactPreview(const Akonadi::Item &item)
KABMergeContacts::ResultDuplicateTreeWidgetItem::setItem
void setItem(const Akonadi::Item &item)
Definition: resultduplicatetreewidget.cpp:146
QTreeWidget::items
QList< QTreeWidgetItem * > items(const QMimeData *data) const
KABMergeContacts::ResultDuplicateTreeWidgetItem
Definition: resultduplicatetreewidget.h:29
KABMergeContacts::ResultDuplicateTreeWidget::ResultDuplicateTreeWidget
ResultDuplicateTreeWidget(QWidget *parent=0)
Definition: resultduplicatetreewidget.cpp:27
QTreeWidget::clear
void clear()
QTreeWidgetItem::setFlags
void setFlags(QFlags< Qt::ItemFlag > flags)
QTreeWidget
QString::isEmpty
bool isEmpty() const
QString
QList< Akonadi::Item::List >
QTreeWidgetItem::addChild
void addChild(QTreeWidgetItem *child)
QObject::blockSignals
bool blockSignals(bool block)
QTreeView::expandAll
void expandAll()
QTreeWidgetItem::parent
QTreeWidgetItem * parent() const
QAbstractItemView::state
State state() const
KABMergeContacts::ResultDuplicateTreeWidget::selectedContactsToMerge
QList< Akonadi::Item::List > selectedContactsToMerge() const
Definition: resultduplicatetreewidget.cpp:106
QTreeWidget::setHeaderLabel
void setHeaderLabel(const QString &label)
QTreeWidgetItem::setCheckState
void setCheckState(int column, Qt::CheckState state)
QTreeWidgetItem
QLatin1String
KABMergeContacts::ResultDuplicateTreeWidgetItem::~ResultDuplicateTreeWidgetItem
~ResultDuplicateTreeWidgetItem()
Definition: resultduplicatetreewidget.cpp:136
QTreeWidgetItem::setText
void setText(int column, const QString &text)
QString::fromLatin1
QString fromLatin1(const char *str, int size)
KABMergeContacts::ResultDuplicateTreeWidgetItem::item
Akonadi::Item item() const
Definition: resultduplicatetreewidget.cpp:141
QTreeWidget::topLevelItem
QTreeWidgetItem * topLevelItem(int index) const
KABMergeContacts::ResultDuplicateTreeWidget::~ResultDuplicateTreeWidget
~ResultDuplicateTreeWidget()
Definition: resultduplicatetreewidget.cpp:36
KABMergeContacts::ResultDuplicateTreeWidgetItem::ResultDuplicateTreeWidgetItem
ResultDuplicateTreeWidgetItem(QTreeWidget *parent=0)
Definition: resultduplicatetreewidget.cpp:129
QTreeWidget::topLevelItemCount
int topLevelItemCount() const
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
QObject::parent
QObject * parent() const
KABMergeContacts::ResultDuplicateTreeWidget::setContacts
void setContacts(const QList< Akonadi::Item::List > &lstItem)
Definition: resultduplicatetreewidget.cpp:88
QTreeWidgetItem::childCount
int childCount() const
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:32:34 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kaddressbook

Skip menu "kaddressbook"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members

kdepim API Reference

Skip menu "kdepim API Reference"
  • akonadi_next
  • akregator
  • blogilo
  • calendarsupport
  • console
  •   kabcclient
  •   konsolekalendar
  • kaddressbook
  • kalarm
  •   lib
  • kdgantt2
  • kjots
  • kleopatra
  • kmail
  • knode
  • knotes
  • kontact
  • korgac
  • korganizer
  • ktimetracker
  • libkdepim
  • libkleo
  • libkpgp
  • mailcommon
  • messagelist
  • messageviewer
  • pimprint

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal