File indexing completed on 2024-04-28 15:40:12

0001 /* SPDX-FileCopyrightText: 2003-2020 Jesper K. Pedersen <blackie@kde.org>
0002 
0003    SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #include "DeleteDialog.h"
0007 
0008 #include <Utilities/DeleteFiles.h>
0009 
0010 #include <KLocalizedString>
0011 #include <QDialogButtonBox>
0012 #include <QPushButton>
0013 #include <QVBoxLayout>
0014 #include <qcheckbox.h>
0015 #include <qlabel.h>
0016 #include <qlayout.h>
0017 
0018 using namespace MainWindow;
0019 
0020 DeleteDialog::DeleteDialog(QWidget *parent)
0021     : QDialog(parent)
0022     , m_list()
0023 {
0024     setWindowTitle(i18nc("@title:window", "Removing Items"));
0025     QVBoxLayout *mainLayout = new QVBoxLayout;
0026     setLayout(mainLayout);
0027 
0028     QWidget *top = new QWidget;
0029     QVBoxLayout *lay1 = new QVBoxLayout(top);
0030     mainLayout->addWidget(top);
0031 
0032     m_label = new QLabel;
0033     lay1->addWidget(m_label);
0034 
0035     m_useTrash = new QRadioButton;
0036     lay1->addWidget(m_useTrash);
0037 
0038     m_deleteFile = new QRadioButton;
0039     lay1->addWidget(m_deleteFile);
0040 
0041     m_deleteFromDb = new QRadioButton;
0042     lay1->addWidget(m_deleteFromDb);
0043 
0044     QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Cancel | QDialogButtonBox::Ok);
0045     buttonBox->button(QDialogButtonBox::Ok)->setShortcut(Qt::CTRL | Qt::Key_Return);
0046     connect(buttonBox, &QDialogButtonBox::accepted, this, &DeleteDialog::deleteImages);
0047     connect(buttonBox, &QDialogButtonBox::rejected, this, &DeleteDialog::reject);
0048     mainLayout->addWidget(buttonBox);
0049 }
0050 
0051 int DeleteDialog::exec(const DB::FileNameList &list)
0052 {
0053     if (!list.size())
0054         return 0;
0055 
0056     bool someFileExists = false;
0057     for (const DB::FileName &file : list) {
0058         if (file.exists()) {
0059             someFileExists = true;
0060             break;
0061         }
0062     }
0063 
0064     const QString msg1 = i18np("Removing 1 item", "Removing %1 items", list.size());
0065     const QString msg2 = i18np("Selected item will be removed from the database.<br/>What do you want to do with the file on disk?",
0066                                "Selected %1 items will be removed from the database.<br/>What do you want to do with the files on disk?",
0067                                list.size());
0068 
0069     const QString txt = QString::fromLatin1("<p><b><center><font size=\"+3\">%1</font><br/>%2</center></b></p>").arg(msg1, msg2);
0070 
0071     m_useTrash->setText(i18np("Move file to Trash", "Move %1 files to Trash", list.size()));
0072     m_deleteFile->setText(i18np("Delete file from disk", "Delete %1 files from disk", list.size()));
0073     m_deleteFromDb->setText(i18np("Only remove the item from database", "Only remove %1 items from database", list.size()));
0074 
0075     m_label->setText(txt);
0076     m_list = list;
0077 
0078     // disable trash/delete options if files don't exist
0079     m_useTrash->setChecked(someFileExists);
0080     m_useTrash->setEnabled(someFileExists);
0081     m_deleteFile->setEnabled(someFileExists);
0082     m_deleteFromDb->setChecked(!someFileExists);
0083 
0084     return QDialog::exec();
0085 }
0086 
0087 void DeleteDialog::deleteImages()
0088 {
0089     bool anyDeleted = Utilities::DeleteFiles::deleteFiles(m_list, m_deleteFile->isChecked() ? Utilities::DeleteFromDisk : m_useTrash->isChecked() ? Utilities::MoveToTrash
0090                                                                                                                                                   : Utilities::BlockFromDatabase);
0091     if (anyDeleted)
0092         accept();
0093     else
0094         reject();
0095 }
0096 
0097 // vi:expandtab:tabstop=4 shiftwidth=4:
0098 
0099 #include "moc_DeleteDialog.cpp"