File indexing completed on 2024-05-05 05:50:38

0001 /*
0002     SPDX-FileCopyrightText: 2016 Ragnar Thomsen <rthomsen6@gmail.com>
0003 
0004     SPDX-License-Identifier: BSD-2-Clause
0005 */
0006 
0007 #include "adddialog.h"
0008 #include "archiveformat.h"
0009 #include "ark_debug.h"
0010 #include "mimetypes.h"
0011 
0012 #include <QDialogButtonBox>
0013 #include <QPushButton>
0014 #include <QUrl>
0015 #include <QVBoxLayout>
0016 
0017 namespace Kerfuffle
0018 {
0019 AddDialog::AddDialog(QWidget *parent, const QString &title, const QUrl &startDir, const QMimeType &mimeType, const CompressionOptions &opts)
0020     : QDialog(parent, Qt::Dialog)
0021     , m_mimeType(mimeType)
0022     , m_compOptions(opts)
0023 {
0024     qCDebug(ARK) << "AddDialog loaded with options:" << m_compOptions;
0025 
0026     setWindowTitle(title);
0027 
0028     QVBoxLayout *vlayout = new QVBoxLayout(this);
0029     m_fileWidget = new KFileWidget(startDir, this);
0030     vlayout->addWidget(m_fileWidget);
0031 
0032     QPushButton *optionsButton = new QPushButton(QIcon::fromTheme(QStringLiteral("settings-configure")), i18n("Advanced Options"));
0033     optionsButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
0034     m_fileWidget->setCustomWidget(optionsButton);
0035 
0036     connect(optionsButton, &QPushButton::clicked, this, &AddDialog::slotOpenOptions);
0037 
0038     m_fileWidget->setMode(KFile::Files | KFile::Directory | KFile::LocalOnly | KFile::ExistingOnly);
0039     m_fileWidget->setOperationMode(KFileWidget::Opening);
0040 
0041     m_fileWidget->okButton()->setText(i18nc("@action:button", "Add"));
0042     m_fileWidget->okButton()->show();
0043     connect(m_fileWidget->okButton(), &QPushButton::clicked, m_fileWidget, &KFileWidget::slotOk);
0044     connect(m_fileWidget, &KFileWidget::accepted, m_fileWidget, &KFileWidget::accept);
0045     connect(m_fileWidget, &KFileWidget::accepted, this, &QDialog::accept);
0046 
0047     m_fileWidget->cancelButton()->show();
0048     connect(m_fileWidget->cancelButton(), &QPushButton::clicked, this, &QDialog::reject);
0049 }
0050 
0051 AddDialog::~AddDialog()
0052 {
0053 }
0054 
0055 QStringList AddDialog::selectedFiles() const
0056 {
0057     return m_fileWidget->selectedFiles();
0058 }
0059 
0060 CompressionOptions AddDialog::compressionOptions() const
0061 {
0062     qCDebug(ARK) << "Returning with options:" << m_compOptions;
0063     return m_compOptions;
0064 }
0065 
0066 void AddDialog::slotOpenOptions()
0067 {
0068     optionsDialog = new QDialog(this);
0069     QVBoxLayout *vlayout = new QVBoxLayout(optionsDialog);
0070     optionsDialog->setWindowTitle(i18n("Advanced Options"));
0071 
0072     CompressionOptionsWidget *optionsWidget = new CompressionOptionsWidget(optionsDialog, m_compOptions);
0073     optionsWidget->setMimeType(m_mimeType);
0074     optionsWidget->setEncryptionVisible(false);
0075     optionsWidget->collapsibleMultiVolume->setVisible(false);
0076     optionsWidget->collapsibleCompression->expand();
0077     vlayout->addWidget(optionsWidget);
0078 
0079     QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, optionsDialog);
0080     vlayout->addWidget(buttonBox);
0081     connect(buttonBox, &QDialogButtonBox::accepted, optionsDialog, &QDialog::accept);
0082     connect(buttonBox, &QDialogButtonBox::rejected, optionsDialog, &QDialog::reject);
0083 
0084     optionsDialog->layout()->setSizeConstraint(QLayout::SetFixedSize);
0085 
0086     connect(optionsDialog, &QDialog::finished, this, [this, optionsWidget](int result) {
0087         if (result == QDialog::Accepted) {
0088             m_compOptions = optionsWidget->commpressionOptions();
0089         }
0090         optionsDialog->deleteLater();
0091     });
0092 
0093     optionsDialog->open();
0094 }
0095 
0096 }
0097 
0098 #include "moc_adddialog.cpp"