1 /*
2    SPDX-FileCopyrightText: 2012-2021 Laurent Montel <montel@kde.org>
3 
4    SPDX-License-Identifier: GPL-2.0-or-later
5 */
6 
7 #include "selectiontypedialog.h"
8 #include "gui/widgets/selectiontypetreewidget.h"
9 
10 #include <KConfigGroup>
11 #include <KLocalizedString>
12 #include <KSharedConfig>
13 #include <QCheckBox>
14 #include <QDialogButtonBox>
15 #include <QHBoxLayout>
16 #include <QPushButton>
17 #include <QVBoxLayout>
18 
SelectionTypeDialog(bool backupData,QWidget * parent)19 SelectionTypeDialog::SelectionTypeDialog(bool backupData, QWidget *parent)
20     : QDialog(parent)
21 {
22     setWindowTitle(i18nc("@title:window", "Select Type"));
23     setModal(true);
24 
25     auto topLayout = new QVBoxLayout(this);
26 
27     QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this);
28     buttonBox->setObjectName(QStringLiteral("buttonbox"));
29 
30     QPushButton *okButton = buttonBox->button(QDialogButtonBox::Ok);
31     okButton->setShortcut(Qt::CTRL | Qt::Key_Return);
32     connect(buttonBox, &QDialogButtonBox::accepted, this, &SelectionTypeDialog::accept);
33     connect(buttonBox, &QDialogButtonBox::rejected, this, &SelectionTypeDialog::reject);
34     okButton->setDefault(true);
35 
36     mSelectionTreeWidget = new SelectionTypeTreeWidget(backupData, this);
37     mSelectionTreeWidget->setObjectName(QStringLiteral("mSelectionTreeWidget"));
38     topLayout->addWidget(mSelectionTreeWidget);
39 
40     mUseTemplateByDefault = new QCheckBox(i18n("Use this template by default"), this);
41     mUseTemplateByDefault->setObjectName(QStringLiteral("mUseTemplateByDefault"));
42     topLayout->addWidget(mUseTemplateByDefault);
43 
44     auto hbox = new QHBoxLayout;
45     QPushButton *selectAll = new QPushButton(i18n("Select All"), this);
46     selectAll->setObjectName(QStringLiteral("selectAll"));
47     connect(selectAll, &QPushButton::clicked, this, &SelectionTypeDialog::slotSelectAll);
48     hbox->addWidget(selectAll);
49 
50     QPushButton *unselectAll = new QPushButton(i18n("Unselect All"), this);
51     unselectAll->setObjectName(QStringLiteral("unselectAll"));
52     connect(unselectAll, &QPushButton::clicked, this, &SelectionTypeDialog::slotUnselectAll);
53     hbox->addWidget(unselectAll);
54 
55     mSaveTemplate = new QPushButton(i18n("Save as Template..."), this);
56     mSaveTemplate->setObjectName(QStringLiteral("mSaveTemplate"));
57     connect(mSaveTemplate, &QPushButton::clicked, this, &SelectionTypeDialog::slotSaveAsTemplate);
58     hbox->addWidget(mSaveTemplate);
59 
60     mLoadTemplate = new QPushButton(i18n("Load Template..."), this);
61     mLoadTemplate->setObjectName(QStringLiteral("mLoadTemplate"));
62     connect(mLoadTemplate, &QPushButton::clicked, this, &SelectionTypeDialog::slotLoadTemplate);
63     hbox->addWidget(mLoadTemplate);
64 
65     topLayout->addLayout(hbox);
66     topLayout->addWidget(buttonBox);
67     readConfig();
68 }
69 
~SelectionTypeDialog()70 SelectionTypeDialog::~SelectionTypeDialog()
71 {
72     saveDefaultTemplate();
73     writeConfig();
74 }
75 
writeConfig()76 void SelectionTypeDialog::writeConfig()
77 {
78     KConfigGroup group(KSharedConfig::openStateConfig(), "SelectionTypeDialog");
79     group.writeEntry("Size", size());
80 }
81 
readConfig()82 void SelectionTypeDialog::readConfig()
83 {
84     KConfigGroup group(KSharedConfig::openStateConfig(), "SelectionTypeDialog");
85     const QSize sizeDialog = group.readEntry("Size", QSize(600, 400));
86     if (sizeDialog.isValid()) {
87         resize(sizeDialog);
88     }
89     loadDefaultTemplate();
90 }
91 
storedType() const92 QHash<Utils::AppsType, Utils::importExportParameters> SelectionTypeDialog::storedType() const
93 {
94     return mSelectionTreeWidget->storedType();
95 }
96 
exportedFileInfo() const97 QString SelectionTypeDialog::exportedFileInfo() const
98 {
99     return mSelectionTreeWidget->exportedFileInfo();
100 }
101 
removeNotSelectedItems()102 void SelectionTypeDialog::removeNotSelectedItems()
103 {
104     mSelectionTreeWidget->removeNotSelectedItems();
105     mSaveTemplate->hide();
106     mLoadTemplate->hide();
107     mUseTemplateByDefault->hide();
108 }
109 
loadTemplate(const QString & fileName)110 void SelectionTypeDialog::loadTemplate(const QString &fileName)
111 {
112     if (!fileName.isEmpty()) {
113         mSelectionTreeWidget->loadTemplate(fileName);
114     }
115 }
116 
slotSelectAll()117 void SelectionTypeDialog::slotSelectAll()
118 {
119     mSelectionTreeWidget->selectAllItems();
120 }
121 
slotUnselectAll()122 void SelectionTypeDialog::slotUnselectAll()
123 {
124     mSelectionTreeWidget->unSelectAllItems();
125 }
126 
slotSaveAsTemplate()127 void SelectionTypeDialog::slotSaveAsTemplate()
128 {
129     mSelectionTreeWidget->saveAsTemplate();
130 }
131 
slotLoadTemplate()132 void SelectionTypeDialog::slotLoadTemplate()
133 {
134     mSelectionTreeWidget->loadTemplate();
135 }
136 
saveDefaultTemplate()137 void SelectionTypeDialog::saveDefaultTemplate()
138 {
139     if (mUseTemplateByDefault->isChecked()) {
140         mSelectionTreeWidget->saveAsDefaultTemplate();
141     }
142 }
143 
loadDefaultTemplate()144 void SelectionTypeDialog::loadDefaultTemplate()
145 {
146     mSelectionTreeWidget->loadDefaultTemplate();
147 }
148