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"
35 SelectionTypeTreeWidget::SelectionTypeTreeWidget(QWidget
*parent
)
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
);
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());
144 parameters
.types
= types
;
145 parameters
.numberSteps
= numberOfStep
;
149 void SelectionTypeTreeWidget::createSubItem(QTreeWidgetItem
*parent
, Utils::StoredType type
)
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
)
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
);
237 void SelectionTypeTreeWidget::slotItemChanged(QTreeWidgetItem
*item
, int column
)
243 if (item
->childCount() != 0) {
244 changeState(item
, item
->checkState(0) == Qt::Checked
);
247 QTreeWidgetItem
*parent
= item
->parent();
248 Qt::CheckState state
= Qt::PartiallyChecked
;
249 for (int i
= 0; i
< parent
->childCount(); ++i
) {
251 state
= parent
->child(i
)->checkState(0);
253 if (state
!= parent
->child(i
)->checkState(0)) {
254 state
= Qt::PartiallyChecked
;
259 parent
->setCheckState(0, state
);
264 void SelectionTypeTreeWidget::loadFileName(const QString
&fileName
)
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()) {
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
);
286 const QStringList file
= dlg
->selectedFiles();
287 loadFileName(file
.at(0));
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
);
323 child
->setCheckState(0, Qt::Unchecked
);
328 void SelectionTypeTreeWidget::setParameters(const QHash
<Utils::AppsType
, Utils::importExportParameters
> ¶ms
)
330 QHash
<Utils::AppsType
, Utils::importExportParameters
>::const_iterator i
= params
.constBegin();
331 while (i
!= params
.constEnd()) {
334 initializeSubItem(mKmailItem
, i
.value().types
);
337 case Utils::KAddressBook
: {
338 initializeSubItem(mKaddressbookItem
, i
.value().types
);
341 case Utils::KAlarm
: {
342 initializeSubItem(mKalarmItem
, i
.value().types
);
345 case Utils::KOrganizer
: {
346 initializeSubItem(mKorganizerItem
, i
.value().types
);
349 case Utils::KNotes
: {
350 initializeSubItem(mKNotesItem
, i
.value().types
);
353 case Utils::Akregator
: {
354 initializeSubItem(mAkregatorItem
, i
.value().types
);
357 case Utils::Blogilo
: {
358 initializeSubItem(mBlogiloItem
, i
.value().types
);
361 case Utils::Unknown
: {