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

0001 /* ============================================================
0002  *
0003  * This file is a part of digiKam project
0004  * https://www.digikam.org
0005  *
0006  * Date        : 04-10-2009
0007  * Description : main widget of the import dialog
0008  *
0009  * SPDX-FileCopyrightText: 2009      by Johannes Wienke <languitar at semipol dot de>
0010  * SPDX-FileCopyrightText: 2011-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
0011  *
0012  * SPDX-License-Identifier: GPL-2.0-or-later
0013  *
0014  * ============================================================ */
0015 
0016 #include "ftimportwidget.h"
0017 
0018 // Qt includes
0019 
0020 #include <QApplication>
0021 #include <QPushButton>
0022 #include <QBoxLayout>
0023 #include <QPointer>
0024 
0025 // KDE includes
0026 
0027 #include <klocalizedstring.h>
0028 
0029 // Local includes
0030 
0031 #include "dfiledialog.h"
0032 
0033 namespace DigikamGenericFileTransferPlugin
0034 {
0035 
0036 class Q_DECL_HIDDEN FTImportWidget::Private
0037 {
0038 public:
0039 
0040     explicit Private()
0041     {
0042         imageList       = nullptr;
0043         uploadWidget    = nullptr;
0044         importSearchBtn = nullptr;
0045     }
0046 
0047     DItemsList*  imageList;
0048     QWidget*     uploadWidget;
0049     QPushButton* importSearchBtn;
0050 };
0051 
0052 FTImportWidget::FTImportWidget(QWidget* const parent, DInfoInterface* const iface)
0053     : QWidget(parent),
0054       d      (new Private)
0055 {
0056     d->importSearchBtn = new QPushButton(i18n("Select import location..."), this);
0057     d->importSearchBtn->setIcon(QIcon::fromTheme(QLatin1String("folder-remote")));
0058 
0059     // setup image list
0060 
0061     d->imageList = new DItemsList(this);
0062     d->imageList->setObjectName(QLatin1String("FTImport ImagesList"));
0063     d->imageList->setAllowRAW(true);
0064     d->imageList->setIface(iface);
0065     d->imageList->listView()->setColumnEnabled(DItemsListView::Thumbnail, false);
0066     d->imageList->setControlButtons(DItemsList::Remove | DItemsList::MoveUp | DItemsList::MoveDown | DItemsList::Clear);
0067     d->imageList->listView()->setWhatsThis(i18n("This is the list of images to import "
0068                                                 "into the current album."));
0069 
0070     // setup upload widget
0071 
0072     d->uploadWidget = iface->uploadWidget(this);
0073 
0074     // layout dialog
0075 
0076     QVBoxLayout* const layout = new QVBoxLayout(this);
0077     layout->addWidget(d->importSearchBtn);
0078     layout->addWidget(d->imageList);
0079     layout->addWidget(d->uploadWidget);
0080     layout->setContentsMargins(QMargins());
0081     layout->setSpacing(qMin(QApplication::style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing),
0082                              QApplication::style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing)));
0083 
0084     connect(d->importSearchBtn, SIGNAL(clicked(bool)),
0085             this, SLOT(slotShowImportDialogClicked(bool)));
0086 }
0087 
0088 FTImportWidget::~FTImportWidget()
0089 {
0090     delete d;
0091 }
0092 
0093 void FTImportWidget::slotShowImportDialogClicked(bool checked)
0094 {
0095     Q_UNUSED(checked);
0096 
0097     // TODO : store and restore previous session url from rc file
0098 
0099     QPointer<DFileDialog> importDlg = new DFileDialog(this, i18nc("@title:window", "Select Items to Import..."),
0100                                                       QString(),
0101                                                       i18n("All Files (*)"));
0102     importDlg->setAcceptMode(QFileDialog::AcceptOpen);
0103     importDlg->setFileMode(QFileDialog::ExistingFiles);
0104     importDlg->exec();
0105 
0106     if (importDlg->hasAcceptedUrls())
0107     {
0108         d->imageList->slotAddImages(importDlg->selectedUrls());
0109     }
0110 
0111     delete importDlg;
0112 }
0113 
0114 DItemsList* FTImportWidget::imagesList() const
0115 {
0116     return d->imageList;
0117 }
0118 
0119 QWidget* FTImportWidget::uploadWidget() const
0120 {
0121     return d->uploadWidget;
0122 }
0123 
0124 QList<QUrl> FTImportWidget::sourceUrls() const
0125 {
0126     return d->imageList->imageUrls();
0127 }
0128 
0129 } // namespace DigikamGenericFileTransferPlugin
0130 
0131 #include "moc_ftimportwidget.cpp"