• 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
  • manualmerge
mergecontactwidget.cpp
Go to the documentation of this file.
1 /*
2  Copyright (c) 2013-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 #include "mergecontactwidget.h"
19 #include "mergecontactwidgetlist.h"
20 
21 #include <KLocalizedString>
22 #include <QSplitter>
23 
24 #include <KABC/Addressee>
25 
26 #include <Akonadi/CollectionComboBox>
27 #include <QListWidget>
28 #include <QVBoxLayout>
29 #include <QPushButton>
30 #include <QDebug>
31 #include <QLabel>
32 #include <kaddressbook/merge/widgets/mergecontactinfowidget.h>
33 #include <kaddressbook/merge/widgets/mergecontactloseinformationwarning.h>
34 #include <kaddressbook/merge/job/mergecontacts.h>
35 #include <kaddressbook/merge/job/mergecontactsjob.h>
36 
37 namespace KABMergeContacts {
38 KADDRESSBOOK_EXPORT QAbstractItemModel *_k_mergeStubModel = 0;
39 }
40 
41 
42 using namespace KABMergeContacts;
43 MergeContactWidget::MergeContactWidget(QWidget *parent)
44  : QWidget(parent),
45  mConflictTypes(MergeContacts::None)
46 {
47  QVBoxLayout *lay = new QVBoxLayout;
48 
49  QSplitter *splitter = new QSplitter;
50  splitter->setObjectName(QLatin1String("splitter"));
51  splitter->setChildrenCollapsible(false);
52  lay->addWidget(splitter);
53 
54 
55  QWidget *selectContactWidget = new QWidget(this);
56  selectContactWidget->setObjectName(QLatin1String("selectcontactwidget"));
57  QVBoxLayout *vbox = new QVBoxLayout;
58  selectContactWidget->setLayout(vbox);
59  QLabel *lab = new QLabel(i18n("Select contacts that you want really to merge:"));
60  vbox->addWidget(lab);
61  mListWidget = new MergeContactWidgetList;
62  mListWidget->setObjectName(QLatin1String("listcontact"));
63  mListWidget->setSelectionMode(QAbstractItemView::SingleSelection);
64  vbox->addWidget(mListWidget);
65  connect(mListWidget, SIGNAL(itemSelectionChanged()), SLOT(slotUpdateMergeButton()));
66  connect(mListWidget, SIGNAL(itemChanged(QListWidgetItem*)), SLOT(slotUpdateMergeButton()));
67  splitter->addWidget(selectContactWidget);
68 
69  mMergeContactInfoWidget = new MergeContactInfoWidget;
70  mMergeContactInfoWidget->setObjectName(QLatin1String("mergecontactinfowidget"));
71  splitter->addWidget(mMergeContactInfoWidget);
72 
73  mMergeContactWarning = new MergeContactLoseInformationWarning;
74  mMergeContactWarning->setObjectName(QLatin1String("mergecontactwarning"));
75  connect(mMergeContactWarning, SIGNAL(continueMerging()), this, SLOT(slotAutomaticMerging()));
76  connect(mMergeContactWarning, SIGNAL(customizeMergingContacts()), this, SLOT(slotCustomizeMergingContacts()));
77  lay->addWidget(mMergeContactWarning);
78 
79 
80  QHBoxLayout *hbox = new QHBoxLayout;
81  hbox->addStretch();
82 
83  lab = new QLabel(i18n("Select addressbook where to store merged contact:"));
84  hbox->addWidget(lab);
85 
86  mCollectionCombobox = new Akonadi::CollectionComboBox(_k_mergeStubModel);
87  mCollectionCombobox->setAccessRightsFilter(Akonadi::Collection::CanCreateItem);
88  mCollectionCombobox->setMinimumWidth(250);
89  mCollectionCombobox->setMimeTypeFilter( QStringList() << KABC::Addressee::mimeType() );
90  mCollectionCombobox->setObjectName(QLatin1String("akonadicombobox"));
91  connect(mCollectionCombobox, SIGNAL(currentIndexChanged(int)), SLOT(slotUpdateMergeButton()));
92  connect(mCollectionCombobox, SIGNAL(activated(int)), SLOT(slotUpdateMergeButton()));
93 
94  hbox->addWidget(mCollectionCombobox);
95 
96  lay->addLayout(hbox);
97 
98  hbox = new QHBoxLayout;
99  hbox->addStretch();
100  mMergeButton = new QPushButton(i18n("merge"));
101  mMergeButton->setObjectName(QLatin1String("mergebutton"));
102  hbox->addWidget(mMergeButton);
103  mMergeButton->setEnabled(false);
104  lay->addLayout(hbox);
105 
106  connect(mMergeButton, SIGNAL(clicked()), this, SLOT(slotMergeContacts()));
107 
108  setLayout(lay);
109 }
110 
111 MergeContactWidget::~MergeContactWidget()
112 {
113 
114 }
115 
116 void MergeContactWidget::setContacts(const Akonadi::Item::List &items)
117 {
118  mItems = items;
119  fillListContact();
120 }
121 
122 void MergeContactWidget::fillListContact()
123 {
124  mListWidget->fillListContact(mItems);
125 }
126 
127 Akonadi::Item::List MergeContactWidget::listSelectedContacts() const
128 {
129  return mListWidget->listSelectedContacts();
130 }
131 
132 Akonadi::Item MergeContactWidget::currentItem() const
133 {
134  return mListWidget->currentAkonadiItem();
135 }
136 
137 void MergeContactWidget::slotUpdateMergeButton()
138 {
139  const Akonadi::Item::List listCheckedItems = listSelectedContacts();
140  Akonadi::Item item = currentItem();
141  mMergeContactInfoWidget->setContact(item);
142  mMergeButton->setEnabled((listCheckedItems.count()>=2) && mCollectionCombobox->currentCollection().isValid());
143 }
144 
145 void MergeContactWidget::slotMergeContacts()
146 {
147  mSelectedItems = listSelectedContacts();
148  const Akonadi::Collection col = mCollectionCombobox->currentCollection();
149 
150  KABMergeContacts::MergeContacts mergeContacts;
151  mergeContacts.setItems(mSelectedItems);
152  mConflictTypes = mergeContacts.requiresManualSelectionOfInformation();
153  if (mConflictTypes != MergeContacts::None) {
154  mMergeContactWarning->animatedShow();
155  } else {
156  slotAutomaticMerging();
157  }
158 }
159 
160 void MergeContactWidget::slotAutomaticMerging()
161 {
162  KABMergeContacts::MergeContactsJob *job = new KABMergeContacts::MergeContactsJob(this);
163  job->setListItem(mSelectedItems);
164  job->setDestination(mCollectionCombobox->currentCollection());
165  connect(job, SIGNAL(finished(Akonadi::Item)), this, SLOT(slotMergeDone(Akonadi::Item)));
166  job->start();
167 }
168 
169 void MergeContactWidget::slotCustomizeMergingContacts()
170 {
171  Q_EMIT customizeMergeContact(mSelectedItems, mConflictTypes, mCollectionCombobox->currentCollection());
172 }
173 
174 void MergeContactWidget::slotMergeDone(const Akonadi::Item &item)
175 {
176  Q_EMIT contactMerged(item);
177 }
QWidget
KABMergeContacts::MergeContactWidget::MergeContactWidget
MergeContactWidget(QWidget *parent=0)
Definition: mergecontactwidget.cpp:43
KABMergeContacts::MergeContactWidgetList::fillListContact
void fillListContact(const Akonadi::Item::List &items)
Definition: mergecontactwidgetlist.cpp:44
QAbstractItemView::setSelectionMode
void setSelectionMode(QAbstractItemView::SelectionMode mode)
KABMergeContacts::MergeContacts::setItems
void setItems(const Akonadi::Item::List &items)
Definition: mergecontacts.cpp:32
KABMergeContacts::MergeContactWidgetList::listSelectedContacts
Akonadi::Item::List listSelectedContacts() const
Definition: mergecontactwidgetlist.cpp:57
mergecontactwidget.h
KADDRESSBOOK_EXPORT
#define KADDRESSBOOK_EXPORT
Definition: kaddressbook_export.h:35
KABMergeContacts::MergeContactWidgetList
Definition: mergecontactwidgetlist.h:39
KABMergeContacts::MergeContactWidget::contactMerged
void contactMerged(const Akonadi::Item &item)
QListWidgetItem
mergecontactloseinformationwarning.h
QHBoxLayout
KABMergeContacts::MergeContacts::None
Definition: mergecontacts.h:33
KABMergeContacts::_k_mergeStubModel
KADDRESSBOOK_EXPORT QAbstractItemModel * _k_mergeStubModel
Definition: mergecontactwidget.cpp:38
KABMergeContacts::MergeContacts
Definition: mergecontacts.h:26
KABMergeContacts::MergeContactWidget::setContacts
void setContacts(const Akonadi::Item::List &items)
Definition: mergecontactwidget.cpp:116
KABMergeContacts::MergeContactWidget::~MergeContactWidget
~MergeContactWidget()
Definition: mergecontactwidget.cpp:111
QSplitter::addWidget
void addWidget(QWidget *widget)
KABMergeContacts::MergeContactsJob
Definition: mergecontactsjob.h:26
QWidget::setEnabled
void setEnabled(bool)
QBoxLayout::addWidget
void addWidget(QWidget *widget, int stretch, QFlags< Qt::AlignmentFlag > alignment)
QWidget::setLayout
void setLayout(QLayout *layout)
QSplitter::setChildrenCollapsible
void setChildrenCollapsible(bool)
KABMergeContacts::MergeContactLoseInformationWarning
Definition: mergecontactloseinformationwarning.h:24
mergecontacts.h
KABMergeContacts::MergeContactInfoWidget::setContact
void setContact(const Akonadi::Item &item)
Definition: mergecontactinfowidget.cpp:59
mergecontactsjob.h
QObject::setObjectName
void setObjectName(const QString &name)
KABMergeContacts::MergeContactWidgetList::currentAkonadiItem
Akonadi::Item currentAkonadiItem() const
Definition: mergecontactwidgetlist.cpp:69
QVBoxLayout
KABMergeContacts::MergeContactsJob::start
void start()
Definition: mergecontactsjob.cpp:56
KABMergeContacts::MergeContactInfoWidget
Definition: mergecontactinfowidget.h:31
KABMergeContacts::MergeContactWidget::customizeMergeContact
void customizeMergeContact(const Akonadi::Item::List &lst, MergeContacts::ConflictInformations conflictType, const Akonadi::Collection &col)
QStringList
mergecontactwidgetlist.h
KABMergeContacts::MergeContactsJob::setListItem
void setListItem(const Akonadi::Item::List &lstItem)
Definition: mergecontactsjob.cpp:87
QSplitter
QLatin1String
QBoxLayout::addStretch
void addStretch(int stretch)
QWidget::QWidget
QWidget(QWidget *parent, QFlags< Qt::WindowType > f)
QAbstractItemModel
QPushButton
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
KABMergeContacts::MergeContacts::requiresManualSelectionOfInformation
MergeContacts::ConflictInformations requiresManualSelectionOfInformation()
Definition: mergecontacts.cpp:186
QLabel
KABMergeContacts::MergeContactsJob::setDestination
void setDestination(const Akonadi::Collection &collection)
Definition: mergecontactsjob.cpp:92
mergecontactinfowidget.h
QBoxLayout::addLayout
void addLayout(QLayout *layout, int stretch)
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