2 Copyright (c) 2013 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 "sendlaterconfiguredialog.h"
19 #include "sendlaterdialog.h"
20 #include "sendlaterinfo.h"
21 #include "sendlaterutil.h"
23 #include "kdepim-version.h"
25 #include <KConfigGroup>
30 #include <KMessageBox>
34 static QString sendLaterItemPattern
= QLatin1String( "SendLaterItem \\d+" );
36 SendLaterConfigureDialog::SendLaterConfigureDialog(QWidget
*parent
)
39 setCaption( i18n("Configure") );
40 setWindowIcon( KIcon( QLatin1String("kmail") ) );
41 setButtons( Help
|Ok
|Cancel
);
43 QWidget
*mainWidget
= new QWidget( this );
44 QHBoxLayout
*mainLayout
= new QHBoxLayout( mainWidget
);
45 mainLayout
->setSpacing( KDialog::spacingHint() );
46 mainLayout
->setMargin( KDialog::marginHint() );
47 mWidget
= new SendLaterWidget(this);
48 connect(mWidget
, SIGNAL(sendNow(Akonadi::Item::Id
)), SIGNAL(sendNow(Akonadi::Item::Id
)));
49 mainLayout
->addWidget(mWidget
);
50 setMainWidget( mainWidget
);
51 connect(this, SIGNAL(okClicked()), SLOT(slotSave()));
54 mAboutData
= new KAboutData(
55 QByteArray( "sendlateragent" ),
57 ki18n( "Send Later Agent" ),
58 QByteArray( KDEPIM_VERSION
),
59 ki18n( "Send emails later agent." ),
60 KAboutData::License_GPL_V2
,
61 ki18n( "Copyright (C) 2013 Laurent Montel" ) );
63 mAboutData
->addAuthor( ki18n( "Laurent Montel" ),
64 ki18n( "Maintainer" ), "montel@kde.org" );
66 mAboutData
->setProgramIconName( QLatin1String("kmail") );
67 mAboutData
->setTranslator( ki18nc( "NAME OF TRANSLATORS", "Your names" ),
68 ki18nc( "EMAIL OF TRANSLATORS", "Your emails" ) );
71 KHelpMenu
*helpMenu
= new KHelpMenu(this, mAboutData
, true);
73 KMenu
*menu
= helpMenu
->menu();
74 helpMenu
->action(KHelpMenu::menuAboutApp
)->setIcon(KIcon(QLatin1String("kmail")));
75 setButtonMenu( Help
, menu
);
78 SendLaterConfigureDialog::~SendLaterConfigureDialog()
84 void SendLaterConfigureDialog::slotSave()
89 void SendLaterConfigureDialog::slotNeedToReloadConfig()
91 mWidget
->needToReload();
94 void SendLaterConfigureDialog::readConfig()
96 KConfigGroup
group( KGlobal::config(), "SendLaterConfigureDialog" );
97 const QSize sizeDialog
= group
.readEntry( "Size", QSize() );
98 if ( sizeDialog
.isValid() ) {
103 mWidget
->restoreTreeWidgetHeader(group
.readEntry("HeaderState",QByteArray()));
106 void SendLaterConfigureDialog::writeConfig()
108 KConfigGroup
group( KGlobal::config(), "SendLaterConfigureDialog" );
109 group
.writeEntry( "Size", size() );
110 mWidget
->saveTreeWidgetHeader(group
);
113 SendLaterItem::SendLaterItem(QTreeWidget
*parent
)
114 : QTreeWidgetItem(parent
),
119 SendLaterItem::~SendLaterItem()
124 void SendLaterItem::setInfo(SendLater::SendLaterInfo
*info
)
131 SendLater::SendLaterInfo
* SendLaterItem::info() const
136 SendLaterWidget::SendLaterWidget( QWidget
*parent
)
140 mWidget
= new Ui::SendLaterConfigureWidget
;
141 mWidget
->setupUi( this );
143 headers
<< i18n("Subject")
144 << i18n("Send around")
146 << i18n("Message Id");
148 //TODO add more infos ? Tooltip about message for example ? with nepomuk as in messagelist ?
150 mWidget
->treeWidget
->setHeaderLabels(headers
);
151 mWidget
->treeWidget
->setSortingEnabled(true);
152 mWidget
->treeWidget
->setRootIsDecorated(false);
153 mWidget
->treeWidget
->setSelectionMode(QAbstractItemView::ExtendedSelection
);
154 mWidget
->treeWidget
->setContextMenuPolicy(Qt::CustomContextMenu
);
156 connect(mWidget
->treeWidget
, SIGNAL(customContextMenuRequested(QPoint
)),
157 this, SLOT(customContextMenuRequested(QPoint
)));
159 connect(mWidget
->removeItem
, SIGNAL(clicked(bool)), SLOT(slotRemoveItem()));
160 connect(mWidget
->modifyItem
, SIGNAL(clicked(bool)), SLOT(slotModifyItem()));
161 connect(mWidget
->treeWidget
, SIGNAL(itemSelectionChanged()), SLOT(updateButtons()));
162 connect(mWidget
->treeWidget
, SIGNAL(itemDoubleClicked(QTreeWidgetItem
*,int)), SLOT(slotModifyItem()));
167 SendLaterWidget::~SendLaterWidget()
172 void SendLaterWidget::customContextMenuRequested(const QPoint
&)
174 const QList
<QTreeWidgetItem
*> listItems
= mWidget
->treeWidget
->selectedItems();
175 if ( !listItems
.isEmpty() ) {
177 if ( listItems
.count() == 1) {
178 menu
.addAction(i18n("Send now"), this, SLOT(slotSendNow()));
181 menu
.addAction(KIcon(QLatin1String("edit-delete")), i18n("Delete"), this, SLOT(slotRemoveItem()));
182 menu
.exec(QCursor::pos());
186 void SendLaterWidget::slotSendNow()
188 const QList
<QTreeWidgetItem
*> listItems
= mWidget
->treeWidget
->selectedItems();
189 if (listItems
.count() == 1) {
190 SendLaterItem
*mailItem
= static_cast<SendLaterItem
*>(listItems
.first());
191 Q_EMIT
sendNow(mailItem
->info()->itemId());
195 void SendLaterWidget::restoreTreeWidgetHeader(const QByteArray
&data
)
197 mWidget
->treeWidget
->header()->restoreState(data
);
200 void SendLaterWidget::saveTreeWidgetHeader(KConfigGroup
&group
)
202 group
.writeEntry( "HeaderState", mWidget
->treeWidget
->header()->saveState() );
205 void SendLaterWidget::updateButtons()
207 const QList
<QTreeWidgetItem
*> listItems
= mWidget
->treeWidget
->selectedItems();
208 if (listItems
.isEmpty()) {
209 mWidget
->removeItem
->setEnabled(false);
210 mWidget
->modifyItem
->setEnabled(false);
211 } else if (listItems
.count() == 1) {
212 mWidget
->removeItem
->setEnabled(true);
213 mWidget
->modifyItem
->setEnabled(true);
215 mWidget
->removeItem
->setEnabled(true);
216 mWidget
->modifyItem
->setEnabled(false);
220 void SendLaterWidget::load()
222 KSharedConfig::Ptr config
= KGlobal::config();
223 const QStringList filterGroups
= config
->groupList().filter( QRegExp( sendLaterItemPattern
) );
224 const int numberOfItem
= filterGroups
.count();
225 for (int i
= 0 ; i
< numberOfItem
; ++i
) {
226 KConfigGroup group
= config
->group(filterGroups
.at(i
));
227 SendLater::SendLaterInfo
*info
= new SendLater::SendLaterInfo(group
);
228 createOrUpdateItem(info
);
232 void SendLaterWidget::createOrUpdateItem(SendLater::SendLaterInfo
*info
, SendLaterItem
*item
)
235 item
= new SendLaterItem(mWidget
->treeWidget
);
237 item
->setText(Recursive
, info
->isRecurrence() ? i18n("Yes") : i18n("No"));
238 item
->setText(MessageId
, QString::number(info
->itemId()));
239 item
->setText(SendAround
, info
->dateTime().toString());
240 item
->setText(Subject
, info
->subject());
241 //4.12 item->setText(To, info->to());
245 void SendLaterWidget::save()
249 KSharedConfig::Ptr config
= KGlobal::config();
251 // first, delete all filter groups:
252 const QStringList filterGroups
=config
->groupList().filter( QRegExp( sendLaterItemPattern
) );
254 foreach ( const QString
&group
, filterGroups
) {
255 config
->deleteGroup( group
);
258 const int numberOfItem(mWidget
->treeWidget
->topLevelItemCount());
259 for (int i
= 0; i
< numberOfItem
; ++i
) {
260 SendLaterItem
*mailItem
= static_cast<SendLaterItem
*>(mWidget
->treeWidget
->topLevelItem(i
));
261 if (mailItem
->info()) {
262 KConfigGroup group
= config
->group(SendLater::SendLaterUtil::sendLaterPattern
.arg(mailItem
->info()->itemId()));
263 mailItem
->info()->writeConfig(group
);
267 config
->reparseConfiguration();
270 void SendLaterWidget::slotRemoveItem()
272 const QList
<QTreeWidgetItem
*> listItems
= mWidget
->treeWidget
->selectedItems();
273 if (KMessageBox::warningYesNo(this,i18n("Do you want to delete selected items? Do you want to continue?"),i18n("Remove items"))== KMessageBox::No
)
276 //FIXME 4.12: delete message or not ?
277 Q_FOREACH(QTreeWidgetItem
*item
,listItems
) {
284 void SendLaterWidget::slotModifyItem()
286 const QList
<QTreeWidgetItem
*> listItems
= mWidget
->treeWidget
->selectedItems();
287 if (listItems
.count()==1) {
288 QTreeWidgetItem
*item
= listItems
.first();
291 SendLaterItem
*mailItem
= static_cast<SendLaterItem
*>(item
);
293 QPointer
<SendLater::SendLaterDialog
> dialog
= new SendLater::SendLaterDialog(mailItem
->info(), this);
294 if (dialog
->exec()) {
295 SendLater::SendLaterInfo
*info
= dialog
->info();
296 createOrUpdateItem(info
, mailItem
);
303 void SendLaterWidget::needToReload()
305 mWidget
->treeWidget
->clear();
306 KSharedConfig::Ptr config
= KGlobal::config();
307 config
->reparseConfiguration();
311 #include "sendlaterconfiguredialog.moc"