File indexing completed on 2025-03-09 03:52:03

0001 /* ============================================================
0002  *
0003  * This file is a part of digiKam project
0004  * https://www.digikam.org
0005  *
0006  * Date        : 2017-05-25
0007  * Description : a tool to generate video slideshow from images.
0008  *
0009  * SPDX-FileCopyrightText: 2017-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
0010  *
0011  * SPDX-License-Identifier: GPL-2.0-or-later
0012  *
0013  * ============================================================ */
0014 
0015 #include "vidslideimagespage.h"
0016 
0017 // Qt includes
0018 
0019 #include <QIcon>
0020 #include <QPixmap>
0021 #include <QLabel>
0022 
0023 // KDE includes
0024 
0025 #include <klocalizedstring.h>
0026 
0027 // Local includes
0028 
0029 #include "vidslidewizard.h"
0030 #include "ditemslist.h"
0031 #include "dlayoutbox.h"
0032 
0033 namespace DigikamGenericVideoSlideShowPlugin
0034 {
0035 
0036 class Q_DECL_HIDDEN VidSlideImagesPage::Private
0037 {
0038 
0039 public:
0040 
0041     explicit Private(QWizard* const dialog)
0042     {
0043         wizard = dynamic_cast<VidSlideWizard*>(dialog);
0044 
0045         if (wizard)
0046         {
0047             settings = wizard->settings();
0048         }
0049     }
0050 
0051     DItemsList*       imageList = nullptr;
0052     VidSlideWizard*   wizard    = nullptr;
0053     VidSlideSettings* settings  = nullptr;
0054 };
0055 
0056 VidSlideImagesPage::VidSlideImagesPage(QWizard* const dialog, const QString& title)
0057     : DWizardPage(dialog, title),
0058       d          (new Private(dialog))
0059 {
0060     setObjectName(QLatin1String("ImagesSelectorPage"));
0061 
0062     DVBox* const vbox  = new DVBox(this);
0063     QLabel* const desc = new QLabel(vbox);
0064     desc->setText(i18n("<p>This view list all items to include on video stream.</p>"
0065                        "<p>The first one is on top of the list, the last one</p>"
0066                        "<p>on the bottom. You can adjust the order of each item.</p>"));
0067 
0068     d->imageList       = new DItemsList(vbox);
0069     d->imageList->setObjectName(QLatin1String("VideoSlideshow ImagesList"));
0070     d->imageList->setControlButtonsPlacement(DItemsList::ControlButtonsBelow);
0071 
0072     setPageWidget(vbox);
0073     setLeftBottomPix(QIcon::fromTheme(QLatin1String("image-stack")));
0074 
0075     connect(d->imageList, SIGNAL(signalImageListChanged()),
0076             this, SIGNAL(completeChanged()));
0077 }
0078 
0079 VidSlideImagesPage::~VidSlideImagesPage()
0080 {
0081     delete d;
0082 }
0083 
0084 void VidSlideImagesPage::setItemsList(const QList<QUrl>& urls)
0085 {
0086     d->imageList->slotAddImages(urls);
0087 }
0088 
0089 void VidSlideImagesPage::initializePage()
0090 {
0091     d->imageList->setIface(d->settings->iface);
0092     d->imageList->listView()->clear();
0093 
0094     if (d->wizard->settings()->selMode == VidSlideSettings::IMAGES)
0095     {
0096         d->imageList->loadImagesFromCurrentSelection();
0097     }
0098     else
0099     {
0100         setItemsList(d->wizard->settings()->inputImages);
0101     }
0102 }
0103 
0104 bool VidSlideImagesPage::validatePage()
0105 {
0106     if (d->imageList->imageUrls().isEmpty())
0107     {
0108         return false;
0109     }
0110 
0111     d->wizard->settings()->inputImages = d->imageList->imageUrls();
0112 
0113     return true;
0114 }
0115 
0116 bool VidSlideImagesPage::isComplete() const
0117 {
0118     return (!d->imageList->imageUrls().isEmpty());
0119 }
0120 
0121 } // namespace DigikamGenericVideoSlideShowPlugin
0122 
0123 #include "moc_vidslideimagespage.cpp"