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