Updated the Tools menu to reflect current build.
[kdepim.git] / sendlateragent / sendlaterconfiguredialog.cpp
blob956f9a9fa2604b8ab70ed27966cfaa102dcea06e
1 /*
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>
26 #include <KLocale>
27 #include <KHelpMenu>
28 #include <KMenu>
29 #include <KAboutData>
30 #include <KMessageBox>
32 #include <QPointer>
34 static QString sendLaterItemPattern = QLatin1String( "SendLaterItem \\d+" );
36 SendLaterConfigureDialog::SendLaterConfigureDialog(QWidget *parent)
37 : KDialog(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()));
53 readConfig();
54 mAboutData = new KAboutData(
55 QByteArray( "sendlateragent" ),
56 QByteArray(),
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);
72 //Initialize menu
73 KMenu *menu = helpMenu->menu();
74 helpMenu->action(KHelpMenu::menuAboutApp)->setIcon(KIcon(QLatin1String("kmail")));
75 setButtonMenu( Help, menu );
78 SendLaterConfigureDialog::~SendLaterConfigureDialog()
80 writeConfig();
81 delete mAboutData;
84 void SendLaterConfigureDialog::slotSave()
86 mWidget->save();
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() ) {
99 resize( sizeDialog );
100 } else {
101 resize( 800,600);
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),
115 mInfo(0)
119 SendLaterItem::~SendLaterItem()
121 delete mInfo;
124 void SendLaterItem::setInfo(SendLater::SendLaterInfo *info)
126 //Be safe
127 delete mInfo;
128 mInfo = info;
131 SendLater::SendLaterInfo* SendLaterItem::info() const
133 return mInfo;
136 SendLaterWidget::SendLaterWidget( QWidget *parent )
137 : QWidget( parent ),
138 mChanged(false)
140 mWidget = new Ui::SendLaterConfigureWidget;
141 mWidget->setupUi( this );
142 QStringList headers;
143 headers << i18n("Subject")
144 << i18n("Send around")
145 << i18n("Recurrent")
146 << i18n("Message Id");
147 //TODO 4.12: add To
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()));
163 load();
164 updateButtons();
167 SendLaterWidget::~SendLaterWidget()
169 delete mWidget;
172 void SendLaterWidget::customContextMenuRequested(const QPoint &)
174 const QList<QTreeWidgetItem *> listItems = mWidget->treeWidget->selectedItems();
175 if ( !listItems.isEmpty() ) {
176 KMenu menu;
177 if ( listItems.count() == 1) {
178 menu.addAction(i18n("Send now"), this, SLOT(slotSendNow()));
180 menu.addSeparator();
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);
214 } else {
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)
234 if (!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());
242 item->setInfo(info);
245 void SendLaterWidget::save()
247 if (!mChanged)
248 return;
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);
266 config->sync();
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)
274 return;
276 //FIXME 4.12: delete message or not ?
277 Q_FOREACH(QTreeWidgetItem *item,listItems) {
278 delete item;
280 mChanged = true;
281 updateButtons();
284 void SendLaterWidget::slotModifyItem()
286 const QList<QTreeWidgetItem *> listItems = mWidget->treeWidget->selectedItems();
287 if (listItems.count()==1) {
288 QTreeWidgetItem *item = listItems.first();
289 if (!item)
290 return;
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);
297 mChanged = true;
299 delete dialog;
303 void SendLaterWidget::needToReload()
305 mWidget->treeWidget->clear();
306 KSharedConfig::Ptr config = KGlobal::config();
307 config->reparseConfiguration();
308 load();
311 #include "sendlaterconfiguredialog.moc"