1 /* ============================================================
2 *
3 * This file is a part of digiKam project
4 * https://www.digikam.org
5 *
6 * Date : 2009-28-04
7 * Description : first run assistant dialog
8 *
9 * Copyright (C) 2009-2021 by Gilles Caulier <caulier dot gilles at gmail dot com>
10 *
11 * This program is free software; you can redistribute it
12 * and/or modify it under the terms of the GNU General
13 * Public License as published by the Free Software Foundation;
14 * either version 2, or (at your option)
15 * any later version.
16 *
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
21 *
22 * ============================================================ */
23
24 #include "firstrundlg.h"
25
26 // Qt includes
27
28 #include <QPushButton>
29
30 // Local includes
31
32 #include "dxmlguiwindow.h"
33 #include "welcomepage.h"
34 #include "migratefromdigikam4page.h"
35 #include "collectionpage.h"
36 #include "databasepage.h"
37 #include "rawpage.h"
38 #include "metadatapage.h"
39 #include "previewpage.h"
40 #include "openfilepage.h"
41 #include "tooltipspage.h"
42 #include "startscanpage.h"
43
44 namespace Digikam
45 {
46
47 class Q_DECL_HIDDEN FirstRunDlg::Private
48 {
49 public:
50
Private()51 explicit Private()
52 : welcomePage(nullptr),
53 migrateFromDigikam4Page(nullptr),
54 collectionPage(nullptr),
55 databasePage(nullptr),
56 rawPage(nullptr),
57 metadataPage(nullptr),
58 previewPage(nullptr),
59 openFilePage(nullptr),
60 tooltipsPage(nullptr),
61 startScanPage(nullptr)
62 {
63 }
64
65 WelcomePage* welcomePage;
66 MigrateFromDigikam4Page* migrateFromDigikam4Page;
67 CollectionPage* collectionPage;
68 DatabasePage* databasePage;
69 RawPage* rawPage;
70 MetadataPage* metadataPage;
71 PreviewPage* previewPage;
72 OpenFilePage* openFilePage;
73 TooltipsPage* tooltipsPage;
74 StartScanPage* startScanPage;
75 };
76
FirstRunDlg(QWidget * const parent)77 FirstRunDlg::FirstRunDlg(QWidget* const parent)
78 : QWizard(parent),
79 d(new Private)
80 {
81 setWizardStyle(QWizard::ClassicStyle);
82 setButtonLayout(QList<QWizard::WizardButton>() << QWizard::HelpButton
83 << QWizard::BackButton
84 << QWizard::CancelButton
85 << QWizard::NextButton
86 << QWizard::FinishButton);
87
88 d->welcomePage = new WelcomePage(this); // First assistant page
89
90 if (MigrateFromDigikam4Page::checkForMigration())
91 {
92 d->migrateFromDigikam4Page = new MigrateFromDigikam4Page(this);
93 }
94
95 d->collectionPage = new CollectionPage(this);
96 d->databasePage = new DatabasePage(this);
97 d->rawPage = new RawPage(this);
98 d->metadataPage = new MetadataPage(this);
99 d->previewPage = new PreviewPage(this);
100 d->openFilePage = new OpenFilePage(this);
101 d->tooltipsPage = new TooltipsPage(this);
102
103 // NOTE: Added here new assistant pages...
104
105 d->startScanPage = new StartScanPage(this); // Last assistant page
106
107 resize(600, 600);
108
109 connect(button(QWizard::FinishButton), SIGNAL(clicked()),
110 this, SLOT(slotFinishPressed()));
111
112 connect(this, SIGNAL(helpRequested()),
113 this, SLOT(slotHelp()));
114 }
115
~FirstRunDlg()116 FirstRunDlg::~FirstRunDlg()
117 {
118 delete d;
119 }
120
slotHelp()121 void FirstRunDlg::slotHelp()
122 {
123 DXmlGuiWindow::openHandbook();
124 }
125
firstAlbumPath() const126 QString FirstRunDlg::firstAlbumPath() const
127 {
128 return d->collectionPage->firstAlbumPath();
129 }
130
getDbEngineParameters() const131 DbEngineParameters FirstRunDlg::getDbEngineParameters() const
132 {
133 return d->databasePage->getDbEngineParameters();
134 }
135
validateCurrentPage()136 bool FirstRunDlg::validateCurrentPage()
137 {
138 if (currentPage() == d->collectionPage)
139 {
140 if (!d->collectionPage->checkSettings())
141 {
142 return false;
143 }
144 else
145 {
146 d->databasePage->setDatabasePath(firstAlbumPath());
147 }
148 }
149
150 if (currentPage() == d->databasePage)
151 {
152 if (!d->databasePage->checkSettings())
153 {
154 return false;
155 }
156 }
157
158 return true;
159 }
160
slotFinishPressed()161 void FirstRunDlg::slotFinishPressed()
162 {
163 if (d->migrateFromDigikam4Page && d->migrateFromDigikam4Page->isMigrationChecked())
164 {
165 // The user choose to do a migration from digikam4
166
167 d->migrateFromDigikam4Page->doMigration();
168 }
169 else
170 {
171 // Save settings to rc files.
172
173 d->collectionPage->saveSettings();
174 d->databasePage->saveSettings();
175 d->rawPage->saveSettings();
176 d->metadataPage->saveSettings();
177 d->previewPage->saveSettings();
178 d->openFilePage->saveSettings();
179 d->tooltipsPage->saveSettings();
180 }
181 }
182
183 } // namespace Digikam
184