Debug-- Remove includes
[kdepim.git] / pimsettingexporter / gui / widgets / selectiontypetreewidget.cpp
blob9afdf02b6fba58f86a186926811adc7a7a36d1eb
1 /*
2 Copyright (C) 2013-2016 Montel Laurent <montel@kde.org>
4 This program is free software; you can redistribute it and/or
5 modify it under the terms of the GNU General Public
6 License as published by the Free Software Foundation; either
7 version 2 of the License, or (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program; see the file COPYING. If not, write to
16 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 Boston, MA 02110-1301, USA.
20 #include "selectiontypetreewidget.h"
21 #include "core/utils.h"
22 #include "core/xml/templateselection.h"
24 #include "PimCommon/PimUtil"
26 #include <QFileDialog>
28 #include <KLocalizedString>
30 #include <QTreeWidgetItem>
31 #include <QHeaderView>
32 #include "gui/pimsettingexportgui_debug.h"
33 #include <QPointer>
35 SelectionTypeTreeWidget::SelectionTypeTreeWidget(QWidget *parent)
36 : QTreeWidget(parent)
38 initialize();
39 expandAll();
40 header()->hide();
43 SelectionTypeTreeWidget::~SelectionTypeTreeWidget()
47 void SelectionTypeTreeWidget::initialize()
49 mKmailItem = new QTreeWidgetItem(this);
50 mKmailItem->setCheckState(0, Qt::Checked);
51 mKmailItem->setText(0, Utils::appTypeToI18n(Utils::KMail));
52 createSubItem(mKmailItem, Utils::Identity);
53 createSubItem(mKmailItem, Utils::Mails);
54 createSubItem(mKmailItem, Utils::MailTransport);
55 createSubItem(mKmailItem, Utils::Resources);
56 createSubItem(mKmailItem, Utils::Config);
57 //createSubItem(mKmailItem, Utils::AkonadiDb);
59 mKaddressbookItem = new QTreeWidgetItem(this);
60 mKaddressbookItem->setText(0, Utils::appTypeToI18n(Utils::KAddressBook));
61 mKaddressbookItem->setCheckState(0, Qt::Checked);
62 createSubItem(mKaddressbookItem, Utils::Resources);
63 createSubItem(mKaddressbookItem, Utils::Config);
65 mKalarmItem = new QTreeWidgetItem(this);
66 mKalarmItem->setText(0, Utils::appTypeToI18n(Utils::KAlarm));
67 mKalarmItem->setCheckState(0, Qt::Checked);
68 createSubItem(mKalarmItem, Utils::Resources);
69 createSubItem(mKalarmItem, Utils::Config);
71 mKorganizerItem = new QTreeWidgetItem(this);
72 mKorganizerItem->setText(0, Utils::appTypeToI18n(Utils::KOrganizer));
73 mKorganizerItem->setCheckState(0, Qt::Checked);
74 createSubItem(mKorganizerItem, Utils::Resources);
75 createSubItem(mKorganizerItem, Utils::Config);
77 mKNotesItem = new QTreeWidgetItem(this);
78 mKNotesItem->setText(0, Utils::appTypeToI18n(Utils::KNotes));
79 mKNotesItem->setCheckState(0, Qt::Checked);
80 createSubItem(mKNotesItem, Utils::Config);
81 createSubItem(mKNotesItem, Utils::Data);
83 mAkregatorItem = new QTreeWidgetItem(this);
84 mAkregatorItem->setText(0, Utils::appTypeToI18n(Utils::Akregator));
85 mAkregatorItem->setCheckState(0, Qt::Checked);
86 createSubItem(mAkregatorItem, Utils::Config);
87 createSubItem(mAkregatorItem, Utils::Data);
89 mBlogiloItem = new QTreeWidgetItem(this);
90 mBlogiloItem->setText(0, Utils::appTypeToI18n(Utils::Blogilo));
91 mBlogiloItem->setCheckState(0, Qt::Checked);
92 createSubItem(mBlogiloItem, Utils::Config);
93 createSubItem(mBlogiloItem, Utils::Data);
95 connect(this, &SelectionTypeTreeWidget::itemChanged, this, &SelectionTypeTreeWidget::slotItemChanged);
98 QHash<Utils::AppsType, Utils::importExportParameters> SelectionTypeTreeWidget::storedType() const
100 QHash<Utils::AppsType, Utils::importExportParameters> stored;
101 Utils::importExportParameters var = typeChecked(mKmailItem);
102 if (!var.isEmpty()) {
103 stored.insert(Utils::KMail, var);
105 var = typeChecked(mKalarmItem);
106 if (!var.isEmpty()) {
107 stored.insert(Utils::KAlarm, var);
109 var = typeChecked(mKaddressbookItem);
110 if (!var.isEmpty()) {
111 stored.insert(Utils::KAddressBook, var);
113 var = typeChecked(mKorganizerItem);
114 if (!var.isEmpty()) {
115 stored.insert(Utils::KOrganizer, var);
117 var = typeChecked(mKNotesItem);
118 if (!var.isEmpty()) {
119 stored.insert(Utils::KNotes, var);
121 var = typeChecked(mAkregatorItem);
122 if (!var.isEmpty()) {
123 stored.insert(Utils::Akregator, var);
125 var = typeChecked(mBlogiloItem);
126 if (!var.isEmpty()) {
127 stored.insert(Utils::Blogilo, var);
129 return stored;
132 Utils::importExportParameters SelectionTypeTreeWidget::typeChecked(QTreeWidgetItem *parent) const
134 Utils::importExportParameters parameters;
135 int numberOfStep = 0;
136 Utils::StoredTypes types = Utils::None;
137 for (int i = 0; i < parent->childCount(); ++i) {
138 QTreeWidgetItem *item = parent->child(i);
139 if (item->checkState(0) == Qt::Checked) {
140 types |= static_cast<Utils::StoredType>(item->data(0, action).toInt());
141 ++numberOfStep;
144 parameters.types = types;
145 parameters.numberSteps = numberOfStep;
146 return parameters;
149 void SelectionTypeTreeWidget::createSubItem(QTreeWidgetItem *parent, Utils::StoredType type)
151 switch (type) {
152 case Utils::None:
153 break;
154 case Utils::Identity: {
155 QTreeWidgetItem *item = new QTreeWidgetItem(parent);
156 item->setText(0, Utils::storedTypeToI18n(Utils::Identity));
157 item->setCheckState(0, Qt::Checked);
158 item->setData(0, action, type);
159 break;
161 case Utils::Mails: {
162 QTreeWidgetItem *item = new QTreeWidgetItem(parent);
163 item->setText(0, Utils::storedTypeToI18n(Utils::Mails));
164 item->setCheckState(0, Qt::Checked);
165 item->setData(0, action, type);
166 break;
168 case Utils::MailTransport: {
169 QTreeWidgetItem *item = new QTreeWidgetItem(parent);
170 item->setText(0, Utils::storedTypeToI18n(Utils::MailTransport));
171 item->setCheckState(0, Qt::Checked);
172 item->setData(0, action, type);
173 break;
175 case Utils::Resources: {
176 QTreeWidgetItem *item = new QTreeWidgetItem(parent);
177 item->setText(0, Utils::storedTypeToI18n(Utils::Resources));
178 item->setCheckState(0, Qt::Checked);
179 item->setData(0, action, type);
180 break;
182 case Utils::Config: {
183 QTreeWidgetItem *item = new QTreeWidgetItem(parent);
184 item->setText(0, Utils::storedTypeToI18n(Utils::Config));
185 item->setCheckState(0, Qt::Checked);
186 item->setData(0, action, type);
187 break;
189 case Utils::AkonadiDb: {
190 QTreeWidgetItem *item = new QTreeWidgetItem(parent);
191 item->setText(0, Utils::storedTypeToI18n(Utils::AkonadiDb));
192 item->setCheckState(0, Qt::Checked);
193 item->setData(0, action, type);
194 break;
196 case Utils::Data: {
197 QTreeWidgetItem *item = new QTreeWidgetItem(parent);
198 item->setText(0, Utils::storedTypeToI18n(Utils::Data));
199 item->setCheckState(0, Qt::Checked);
200 item->setData(0, action, type);
201 break;
206 void SelectionTypeTreeWidget::selectAllItems()
208 setSelectItems(true);
211 void SelectionTypeTreeWidget::unSelectAllItems()
213 setSelectItems(false);
216 void SelectionTypeTreeWidget::setSelectItems(bool b)
218 changeState(mKmailItem, b);
219 changeState(mKalarmItem, b);
220 changeState(mKaddressbookItem, b);
221 changeState(mKorganizerItem, b);
222 changeState(mKNotesItem, b);
223 changeState(mAkregatorItem, b);
224 changeState(mBlogiloItem, b);
227 void SelectionTypeTreeWidget::changeState(QTreeWidgetItem *item, bool b)
229 blockSignals(true);
230 item->setCheckState(0, b ? Qt::Checked : Qt::Unchecked);
231 for (int i = 0; i < item->childCount(); ++i) {
232 item->child(i)->setCheckState(0, b ? Qt::Checked : Qt::Unchecked);
234 blockSignals(false);
237 void SelectionTypeTreeWidget::slotItemChanged(QTreeWidgetItem *item, int column)
239 if (column != 0) {
240 return;
242 //Parent
243 if (item->childCount() != 0) {
244 changeState(item, item->checkState(0) == Qt::Checked);
245 } else { //child
246 blockSignals(true);
247 QTreeWidgetItem *parent = item->parent();
248 Qt::CheckState state = Qt::PartiallyChecked;
249 for (int i = 0; i < parent->childCount(); ++i) {
250 if (i == 0) {
251 state = parent->child(i)->checkState(0);
252 } else {
253 if (state != parent->child(i)->checkState(0)) {
254 state = Qt::PartiallyChecked;
255 break;
259 parent->setCheckState(0, state);
260 blockSignals(false);
264 void SelectionTypeTreeWidget::loadFileName(const QString &fileName)
266 unSelectAllItems();
267 TemplateSelection templateSelection(fileName);
268 const QHash<Utils::AppsType, Utils::importExportParameters> params = templateSelection.loadTemplate();
269 setParameters(params);
272 void SelectionTypeTreeWidget::loadDefaultTemplate()
274 QString ret = QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("/pimsettingexporter/defaulttemplate.xml"));
275 if (!ret.isEmpty()) {
276 loadFileName(ret);
280 void SelectionTypeTreeWidget::loadTemplate(const QString &fileName)
282 if (fileName.isEmpty()) {
283 QPointer<QFileDialog> dlg = new QFileDialog(this, QString(), QString(), QStringLiteral("*.xml"));
284 dlg->setFileMode(QFileDialog::ExistingFile);
285 if (dlg->exec()) {
286 const QStringList file = dlg->selectedFiles();
287 loadFileName(file.at(0));
289 delete dlg;
290 } else {
291 loadFileName(fileName);
295 void SelectionTypeTreeWidget::saveAsDefaultTemplate()
297 TemplateSelection templateSelection;
298 templateSelection.createTemplate(storedType());
299 const QString templateStr = templateSelection.document().toString(2);
300 QString ret = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QStringLiteral("/pimsettingexporter/");
301 QFileInfo fileInfo(ret);
302 QDir().mkpath(fileInfo.absolutePath());
304 PimCommon::Util::saveToFile(ret + QStringLiteral("defaulttemplate.xml"), templateStr);
307 void SelectionTypeTreeWidget::saveAsTemplate()
309 TemplateSelection templateSelection;
310 templateSelection.createTemplate(storedType());
311 const QString templateStr = templateSelection.document().toString(2);
312 const QString filter(i18n("Template Files (*.xml)"));
313 PimCommon::Util::saveTextAs(templateStr, filter, this);
316 void SelectionTypeTreeWidget::initializeSubItem(QTreeWidgetItem *item, Utils::StoredTypes types)
318 for (int i = 0; i < item->childCount(); ++i) {
319 QTreeWidgetItem *child = item->child(i);
320 if (types & static_cast<Utils::StoredType>(child->data(0, action).toInt())) {
321 child->setCheckState(0, Qt::Checked);
322 } else {
323 child->setCheckState(0, Qt::Unchecked);
328 void SelectionTypeTreeWidget::setParameters(const QHash<Utils::AppsType, Utils::importExportParameters> &params)
330 QHash<Utils::AppsType, Utils::importExportParameters>::const_iterator i = params.constBegin();
331 while (i != params.constEnd()) {
332 switch (i.key()) {
333 case Utils::KMail: {
334 initializeSubItem(mKmailItem, i.value().types);
335 break;
337 case Utils::KAddressBook: {
338 initializeSubItem(mKaddressbookItem, i.value().types);
339 break;
341 case Utils::KAlarm: {
342 initializeSubItem(mKalarmItem, i.value().types);
343 break;
345 case Utils::KOrganizer: {
346 initializeSubItem(mKorganizerItem, i.value().types);
347 break;
349 case Utils::KNotes: {
350 initializeSubItem(mKNotesItem, i.value().types);
351 break;
353 case Utils::Akregator: {
354 initializeSubItem(mAkregatorItem, i.value().types);
355 break;
357 case Utils::Blogilo: {
358 initializeSubItem(mBlogiloItem, i.value().types);
359 break;
361 case Utils::Unknown: {
362 break;
365 ++i;