Better wording
[kdepim.git] / archivemailagent / archivemaildialog.cpp
blob8a2f22d156bbc837fc02160b10ea82c821968303
1 /*
2 Copyright (c) 2012 Montel Laurent <montel@kde.org>
4 This program is free software; you can redistribute it and/or modify it
5 under the terms of the GNU General Public License, version 2, as
6 published by the Free Software Foundation.
8 This program is distributed in the hope that it will be useful, but
9 WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 General Public License for more details.
13 You should have received a copy of the GNU General Public License along
14 with this program; if not, write to the Free Software Foundation, Inc.,
15 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 #include "archivemaildialog.h"
19 #include "addarchivemaildialog.h"
20 #include "archivemailagentutil.h"
21 #include <mailcommon/mailutil.h>
22 #include <KGlobal>
23 #include <KLocale>
24 #include <KMessageBox>
25 #include <QHBoxLayout>
27 static QString archiveMailCollectionPattern = QLatin1String( "ArchiveMailCollection \\d+" );
29 ArchiveMailDialog::ArchiveMailDialog(QWidget *parent)
30 :KDialog(parent)
32 setCaption( i18n( "Configure Archive Mail Agent" ) );
33 setButtons( Ok|Cancel );
34 setDefaultButton( Ok );
35 setModal( true );
36 QWidget *mainWidget = new QWidget( this );
37 QHBoxLayout *mainLayout = new QHBoxLayout( mainWidget );
38 mainLayout->setSpacing( KDialog::spacingHint() );
39 mainLayout->setMargin( KDialog::marginHint() );
40 mWidget = new ArchiveMailWidget(this);
41 mainLayout->addWidget(mWidget);
42 setMainWidget( mainWidget );
43 connect(this,SIGNAL(okClicked()),SLOT(slotSave()));
44 readConfig();
47 ArchiveMailDialog::~ArchiveMailDialog()
49 writeConfig();
52 static const char *myConfigGroupName = "ArchiveMailDialog";
54 void ArchiveMailDialog::readConfig()
56 KConfigGroup group( KGlobal::config(), myConfigGroupName );
58 const QSize size = group.readEntry( "Size", QSize() );
59 if ( size.isValid() ) {
60 resize( size );
61 } else {
62 resize( 500, 300 );
65 mWidget->restoreTreeWidgetHeader(group.readEntry("HeaderState",QByteArray()));
68 void ArchiveMailDialog::writeConfig()
70 KConfigGroup group( KGlobal::config(), myConfigGroupName );
71 group.writeEntry( "Size", size() );
72 mWidget->saveTreeWidgetHeader(group);
73 group.sync();
76 void ArchiveMailDialog::slotSave()
78 mWidget->save();
82 ArchiveMailItem::ArchiveMailItem(QTreeWidget *parent )
83 : QTreeWidgetItem(parent),mInfo(0)
87 ArchiveMailItem::~ArchiveMailItem()
89 delete mInfo;
92 void ArchiveMailItem::setInfo(ArchiveMailInfo* info)
94 mInfo = info;
97 ArchiveMailInfo* ArchiveMailItem::info() const
99 return mInfo;
103 ArchiveMailWidget::ArchiveMailWidget( QWidget *parent )
104 : QWidget( parent )
106 mWidget = new Ui::ArchiveMailWidget;
107 mWidget->setupUi( this );
108 QStringList headers;
109 headers<<i18n("Name")<<i18n("Last archive")<<i18n("Next archive in");
110 mWidget->treeWidget->setHeaderLabels(headers);
111 mWidget->treeWidget->setSortingEnabled(true);
112 mWidget->treeWidget->setRootIsDecorated(false);
113 mWidget->treeWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);
114 load();
115 connect(mWidget->removeItem,SIGNAL(clicked(bool)),SLOT(slotRemoveItem()));
116 connect(mWidget->modifyItem,SIGNAL(clicked(bool)),SLOT(slotModifyItem()));
117 connect(mWidget->addItem,SIGNAL(clicked(bool)),SLOT(slotAddItem()));
118 connect(mWidget->treeWidget,SIGNAL(itemClicked(QTreeWidgetItem*,int)),SLOT(updateButtons()));
119 connect(mWidget->treeWidget,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),SLOT(slotModifyItem()));
120 updateButtons();
123 ArchiveMailWidget::~ArchiveMailWidget()
125 delete mWidget;
128 void ArchiveMailWidget::restoreTreeWidgetHeader(const QByteArray& data)
130 mWidget->treeWidget->header()->restoreState(data);
133 void ArchiveMailWidget::saveTreeWidgetHeader(KConfigGroup& group)
135 group.writeEntry( "HeaderState", mWidget->treeWidget->header()->saveState() );
138 void ArchiveMailWidget::updateButtons()
140 const QList<QTreeWidgetItem *> listItems = mWidget->treeWidget->selectedItems();
141 if(listItems.isEmpty()) {
142 mWidget->removeItem->setEnabled(false);
143 mWidget->modifyItem->setEnabled(false);
144 } else if(listItems.count() == 1) {
145 mWidget->removeItem->setEnabled(true);
146 mWidget->modifyItem->setEnabled(true);
147 } else {
148 mWidget->removeItem->setEnabled(true);
149 mWidget->modifyItem->setEnabled(false);
153 void ArchiveMailWidget::load()
155 KSharedConfig::Ptr config = KGlobal::config();
156 const QStringList collectionList = config->groupList().filter( QRegExp( archiveMailCollectionPattern ) );
157 const int numberOfCollection = collectionList.count();
158 for(int i = 0 ; i < numberOfCollection; ++i) {
159 KConfigGroup group = config->group(collectionList.at(i));
160 ArchiveMailInfo *info = new ArchiveMailInfo(group);
161 createOrUpdateItem(info);
165 void ArchiveMailWidget::createOrUpdateItem(ArchiveMailInfo *info, ArchiveMailItem* item)
167 if(!item) {
168 item = new ArchiveMailItem(mWidget->treeWidget);
170 item->setText(0,i18n("Folder: %1",MailCommon::Util::fullCollectionPath(Akonadi::Collection(info->saveCollectionId()))));
171 item->setText(1,KGlobal::locale()->formatDate(info->lastDateSaved()));
172 const QDate diffDate = ArchiveMailAgentUtil::diffDate(info);
173 const int diff = QDate::currentDate().daysTo(diffDate);
174 item->setText(2,i18np("1 day", "%1 days",QString::number(diff)));
175 if(diff<0) {
176 item->setBackgroundColor(2,Qt::red);
177 } else {
178 item->setToolTip(2,i18n("Archive will be done %1",KGlobal::locale()->formatDate(diffDate)));
180 item->setInfo(info);
183 void ArchiveMailWidget::save()
185 KSharedConfig::Ptr config = KGlobal::config();
187 // first, delete all filter groups:
188 const QStringList filterGroups =config->groupList().filter( QRegExp( archiveMailCollectionPattern ) );
190 foreach ( const QString &group, filterGroups ) {
191 config->deleteGroup( group );
194 const int numberOfItem(mWidget->treeWidget->topLevelItemCount());
195 for(int i = 0; i < numberOfItem; ++i) {
196 ArchiveMailItem *mailItem = static_cast<ArchiveMailItem *>(mWidget->treeWidget->topLevelItem(i));
197 if(mailItem->info()) {
198 KConfigGroup group = config->group(QString::fromLatin1("ArchiveMailCollection %1").arg(mailItem->info()->saveCollectionId()));
199 mailItem->info()->writeConfig(group);
202 config->sync();
205 void ArchiveMailWidget::slotRemoveItem()
207 const QList<QTreeWidgetItem *> listItems = mWidget->treeWidget->selectedItems();
208 if(KMessageBox::warningYesNo(this,i18n("Do you want to delete selected items? Do you want to continue?"),i18n("Remove items"))== KMessageBox::No)
209 return;
211 Q_FOREACH(QTreeWidgetItem *item,listItems) {
212 delete item;
214 updateButtons();
217 void ArchiveMailWidget::slotModifyItem()
219 const QList<QTreeWidgetItem *> listItems = mWidget->treeWidget->selectedItems();
220 if(listItems.count()==1) {
221 QTreeWidgetItem *item = listItems.at(0);
222 if(!item)
223 return;
224 ArchiveMailItem *archiveItem = static_cast<ArchiveMailItem*>(item);
225 AddArchiveMailDialog *dialog = new AddArchiveMailDialog(archiveItem->info(), this);
226 if( dialog->exec() ) {
227 ArchiveMailInfo *info = dialog->info();
228 createOrUpdateItem(info,archiveItem);
230 delete dialog;
234 void ArchiveMailWidget::slotAddItem()
236 AddArchiveMailDialog *dialog = new AddArchiveMailDialog(0,this);
237 if( dialog->exec() ) {
238 ArchiveMailInfo *info = dialog->info();
239 if(verifyExistingArchive(info)) {
240 KMessageBox::error(this,i18n("Cannot add a second archive for this folder. Modify the existing one instead."),i18n("Add Archive Mail"));
241 delete info;
242 } else {
243 createOrUpdateItem(info);
244 updateButtons();
247 delete dialog;
250 bool ArchiveMailWidget::verifyExistingArchive(ArchiveMailInfo *info) const
252 const int numberOfItem(mWidget->treeWidget->topLevelItemCount());
253 for(int i = 0; i < numberOfItem; ++i) {
254 ArchiveMailItem *mailItem = static_cast<ArchiveMailItem *>(mWidget->treeWidget->topLevelItem(i));
255 if(mailItem->info()) {
256 if(info->saveCollectionId() == mailItem->info()->saveCollectionId()) {
257 return true;
261 return false;
264 #include "archivemaildialog.moc"