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>
24 #include <KMessageBox>
25 #include <QHBoxLayout>
27 static QString archiveMailCollectionPattern
= QLatin1String( "ArchiveMailCollection \\d+" );
29 ArchiveMailDialog::ArchiveMailDialog(QWidget
*parent
)
32 setCaption( i18n( "Configure Archive Mail Agent" ) );
33 setButtons( Ok
|Cancel
);
34 setDefaultButton( Ok
);
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()));
47 ArchiveMailDialog::~ArchiveMailDialog()
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() ) {
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
);
76 void ArchiveMailDialog::slotSave()
82 ArchiveMailItem::ArchiveMailItem(QTreeWidget
*parent
)
83 : QTreeWidgetItem(parent
),mInfo(0)
87 ArchiveMailItem::~ArchiveMailItem()
92 void ArchiveMailItem::setInfo(ArchiveMailInfo
* info
)
97 ArchiveMailInfo
* ArchiveMailItem::info() const
103 ArchiveMailWidget::ArchiveMailWidget( QWidget
*parent
)
106 mWidget
= new Ui::ArchiveMailWidget
;
107 mWidget
->setupUi( this );
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
);
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()));
123 ArchiveMailWidget::~ArchiveMailWidget()
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);
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
)
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
)));
176 item
->setBackgroundColor(2,Qt::red
);
178 item
->setToolTip(2,i18n("Archive will be done %1",KGlobal::locale()->formatDate(diffDate
)));
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
);
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
)
211 Q_FOREACH(QTreeWidgetItem
*item
,listItems
) {
217 void ArchiveMailWidget::slotModifyItem()
219 const QList
<QTreeWidgetItem
*> listItems
= mWidget
->treeWidget
->selectedItems();
220 if(listItems
.count()==1) {
221 QTreeWidgetItem
*item
= listItems
.at(0);
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
);
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"));
243 createOrUpdateItem(info
);
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()) {
264 #include "archivemaildialog.moc"