You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

237 lines
7.5 KiB

/*
Copyright (C) 2012-2017 Montel Laurent <montel@kde.org>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include "addarchivemaildialog.h"
#include "widgets/formatcombobox.h"
#include "widgets/unitcombobox.h"
#include "MailCommon/FolderRequester"
#include <Collection>
#include <KLocalizedString>
#include <KUrlRequester>
#include <QSpinBox>
#include <KSeparator>
#include <QIcon>
#include <QGridLayout>
#include <QLabel>
#include <QCheckBox>
#include <QDialogButtonBox>
#include <QPushButton>
#include <QVBoxLayout>
AddArchiveMailDialog::AddArchiveMailDialog(ArchiveMailInfo *info, QWidget *parent)
: QDialog(parent)
, mInfo(info)
{
if (info) {
setWindowTitle(i18n("Modify Archive Mail"));
} else {
setWindowTitle(i18n("Add Archive Mail"));
}
setModal(true);
setWindowIcon(QIcon::fromTheme(QStringLiteral("kmail")));
QVBoxLayout *topLayout = new QVBoxLayout(this);
QGridLayout *mainLayout = new QGridLayout;
mainLayout->setMargin(0);
int row = 0;
QLabel *folderLabel = new QLabel(i18n("&Folder:"), this);
mainLayout->addWidget(folderLabel, row, 0);
mFolderRequester = new MailCommon::FolderRequester(this);
mFolderRequester->setObjectName(QStringLiteral("folder_requester"));
mFolderRequester->setMustBeReadWrite(false);
mFolderRequester->setNotAllowToCreateNewFolder(true);
connect(mFolderRequester, &MailCommon::FolderRequester::folderChanged, this, &AddArchiveMailDialog::slotFolderChanged);
if (info) { //Don't autorize to modify folder when we just modify item.
mFolderRequester->setEnabled(false);
}
folderLabel->setBuddy(mFolderRequester);
mainLayout->addWidget(mFolderRequester, row, 1);
++row;
QLabel *formatLabel = new QLabel(i18n("Format:"), this);
formatLabel->setObjectName(QStringLiteral("label_format"));
mainLayout->addWidget(formatLabel, row, 0);
mFormatComboBox = new FormatComboBox(this);
mainLayout->addWidget(mFormatComboBox, row, 1);
++row;
mRecursiveCheckBox = new QCheckBox(i18n("Archive all subfolders"), this);
mRecursiveCheckBox->setObjectName(QStringLiteral("recursive_checkbox"));
mainLayout->addWidget(mRecursiveCheckBox, row, 0, 1, 2, Qt::AlignLeft);
mRecursiveCheckBox->setChecked(true);
++row;
QLabel *pathLabel = new QLabel(i18n("Path:"), this);
mainLayout->addWidget(pathLabel, row, 0);
pathLabel->setObjectName(QStringLiteral("path_label"));
mPath = new KUrlRequester(this);
mPath->lineEdit()->setTrapReturnKey(true);
connect(mPath, &KUrlRequester::textChanged, this, &AddArchiveMailDialog::slotUpdateOkButton);
mPath->setMode(KFile::Directory);
mainLayout->addWidget(mPath);
++row;
QLabel *dateLabel = new QLabel(i18n("Backup each:"), this);
dateLabel->setObjectName(QStringLiteral("date_label"));
mainLayout->addWidget(dateLabel, row, 0);
QHBoxLayout *hlayout = new QHBoxLayout;
mDays = new QSpinBox(this);
mDays->setMinimum(1);
mDays->setMaximum(3600);
hlayout->addWidget(mDays);
mUnits = new UnitComboBox(this);
hlayout->addWidget(mUnits);
mainLayout->addLayout(hlayout, row, 1);
++row;
QLabel *maxCountlabel = new QLabel(i18n("Maximum number of archive:"), this);
mainLayout->addWidget(maxCountlabel, row, 0);
mMaximumArchive = new QSpinBox(this);
mMaximumArchive->setMinimum(0);
mMaximumArchive->setMaximum(9999);
mMaximumArchive->setSpecialValueText(i18n("unlimited"));
maxCountlabel->setBuddy(mMaximumArchive);
mainLayout->addWidget(mMaximumArchive, row, 1);
++row;
mainLayout->addWidget(new KSeparator, row, 0, row, 2);
mainLayout->setColumnStretch(1, 1);
mainLayout->addItem(new QSpacerItem(1, 1, QSizePolicy::Expanding, QSizePolicy::Expanding), row, 0);
QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this);
mOkButton = buttonBox->button(QDialogButtonBox::Ok);
mOkButton->setDefault(true);
mOkButton->setShortcut(Qt::CTRL | Qt::Key_Return);
connect(buttonBox, &QDialogButtonBox::accepted, this, &AddArchiveMailDialog::accept);
connect(buttonBox, &QDialogButtonBox::rejected, this, &AddArchiveMailDialog::reject);
if (mInfo) {
load(mInfo);
} else {
mOkButton->setEnabled(false);
}
topLayout->addLayout(mainLayout);
topLayout->addWidget(buttonBox);
// Make it a bit bigger, else the folder requester cuts off the text too early
resize(500, minimumSize().height());
}
AddArchiveMailDialog::~AddArchiveMailDialog()
{
}
void AddArchiveMailDialog::load(ArchiveMailInfo *info)
{
mPath->setUrl(info->url());
mRecursiveCheckBox->setChecked(info->saveSubCollection());
mFolderRequester->setCollection(Akonadi::Collection(info->saveCollectionId()));
mFormatComboBox->setFormat(info->archiveType());
mDays->setValue(info->archiveAge());
mUnits->setUnit(info->archiveUnit());
mMaximumArchive->setValue(info->maximumArchiveCount());
slotUpdateOkButton();
}
ArchiveMailInfo *AddArchiveMailDialog::info()
{
if (!mInfo) {
mInfo = new ArchiveMailInfo();
}
mInfo->setSaveSubCollection(mRecursiveCheckBox->isChecked());
mInfo->setArchiveType(mFormatComboBox->format());
mInfo->setSaveCollectionId(mFolderRequester->collection().id());
mInfo->setUrl(mPath->url());
mInfo->setArchiveAge(mDays->value());
mInfo->setArchiveUnit(mUnits->unit());
mInfo->setMaximumArchiveCount(mMaximumArchive->value());
return mInfo;
}
void AddArchiveMailDialog::slotUpdateOkButton()
{
const bool valid = (!mPath->lineEdit()->text().trimmed().isEmpty() && !mPath->url().isEmpty() && mFolderRequester->collection().isValid());
mOkButton->setEnabled(valid);
}
void AddArchiveMailDialog::slotFolderChanged(const Akonadi::Collection &collection)
{
Q_UNUSED(collection);
slotUpdateOkButton();
}
void AddArchiveMailDialog::setArchiveType(MailCommon::BackupJob::ArchiveType type)
{
mFormatComboBox->setFormat(type);
}
MailCommon::BackupJob::ArchiveType AddArchiveMailDialog::archiveType() const
{
return mFormatComboBox->format();
}
void AddArchiveMailDialog::setRecursive(bool b)
{
mRecursiveCheckBox->setChecked(b);
}
bool AddArchiveMailDialog::recursive() const
{
return mRecursiveCheckBox->isChecked();
}
void AddArchiveMailDialog::setSelectedFolder(const Akonadi::Collection &collection)
{
mFolderRequester->setCollection(collection);
}
Akonadi::Collection AddArchiveMailDialog::selectedFolder() const
{
return mFolderRequester->collection();
}
QUrl AddArchiveMailDialog::path() const
{
return mPath->url();
}
void AddArchiveMailDialog::setPath(const QUrl &url)
{
mPath->setUrl(url);
}
void AddArchiveMailDialog::setMaximumArchiveCount(int max)
{
mMaximumArchive->setValue(max);
}
int AddArchiveMailDialog::maximumArchiveCount() const
{
return mMaximumArchive->value();
}