• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdepim API Reference
  • KDE Home
  • Contact Us
 

kmail

  • sources
  • kde-4.12
  • kdepim
  • kmail
  • configuredialog
configureagentswidget.cpp
Go to the documentation of this file.
1 /*
2  Copyright (c) 2013 Montel Laurent <montel@kde.org>
3 
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.
7 
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.
12 
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
16 */
17 
18 #include "configureagentswidget.h"
19 
20 #include "agents/sendlateragent/sendlaterutil.h"
21 #include "agents/folderarchiveagent/folderarchiveutil.h"
22 #include <akonadi/private/xdgbasedirs_p.h>
23 
24 #include <KLocale>
25 #include <KDesktopFile>
26 #include <KDebug>
27 #include <KTextEdit>
28 #include <KGlobal>
29 #include <KConfigGroup>
30 
31 #include <QVBoxLayout>
32 #include <QTreeWidget>
33 #include <QTreeWidgetItem>
34 #include <QDBusInterface>
35 #include <QDBusReply>
36 #include <QSplitter>
37 #include <QPushButton>
38 #include <QVBoxLayout>
39 #include <QFile>
40 #include <QDir>
41 
42 
43 ConfigureAgentsWidget::ConfigureAgentsWidget(QWidget *parent)
44  : QWidget(parent)
45 {
46  QHBoxLayout *lay = new QHBoxLayout;
47  mSplitter = new QSplitter;
48  mSplitter->setChildrenCollapsible(false);
49  lay->addWidget(mSplitter);
50 
51  mTreeWidget = new QTreeWidget;
52  QStringList headers;
53  headers<<i18n("Activate")<<i18n("Agent Name");
54  mTreeWidget->setHeaderLabels(headers);
55  mTreeWidget->setSortingEnabled(true);
56  mTreeWidget->setRootIsDecorated(false);
57 
58  mSplitter->addWidget(mTreeWidget);
59  QWidget *w = new QWidget;
60  QVBoxLayout *vbox = new QVBoxLayout;
61  mDescription = new KTextEdit;
62  mDescription->setReadOnly(true);
63  mDescription->enableFindReplace(false);
64  vbox->addWidget(mDescription);
65  mConfigure = new QPushButton(i18n("Configure..."));
66  mConfigure->setEnabled(false);
67  vbox->addWidget(mConfigure);
68  w->setLayout(vbox);
69  mSplitter->addWidget(w);
70 
71  setLayout(lay);
72  connect(mTreeWidget, SIGNAL(itemClicked(QTreeWidgetItem*,int)), SLOT(slotItemClicked(QTreeWidgetItem*)));
73  connect(mTreeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), SLOT(slotItemClicked(QTreeWidgetItem*)));
74  connect(mTreeWidget, SIGNAL(itemChanged(QTreeWidgetItem*,int)), SIGNAL(changed()));
75  connect(mConfigure, SIGNAL(clicked()), this, SLOT(slotConfigureAgent()));
76  connect(mTreeWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)), SLOT(slotConfigureAgent()));
77  mAgentPathList = Akonadi::XdgBaseDirs::findAllResourceDirs( "data", QLatin1String( "akonadi/agents" ) );
78  initialize();
79  readConfig();
80 }
81 
82 ConfigureAgentsWidget::~ConfigureAgentsWidget()
83 {
84  writeConfig();
85 }
86 
87 void ConfigureAgentsWidget::readConfig()
88 {
89  KConfigGroup group( KGlobal::config(), "ConfigureAgentsWidget" );
90  QList<int> size;
91  size << 400 << 100;
92  mSplitter->setSizes(group.readEntry( "splitter", size));
93 }
94 
95 void ConfigureAgentsWidget::writeConfig()
96 {
97  KConfigGroup group( KGlobal::config(), "ConfigureAgentsWidget" );
98  group.writeEntry( "splitter", mSplitter->sizes());
99 }
100 
101 void ConfigureAgentsWidget::slotItemClicked(QTreeWidgetItem *item)
102 {
103  if (item) {
104  if (item->flags() & Qt::ItemIsEnabled) {
105  mDescription->setText(item->data(AgentName, Description).toString());
106  }
107  }
108  mConfigure->setEnabled(item);
109 }
110 
111 void ConfigureAgentsWidget::addInfos(QTreeWidgetItem *item, const QString &desktopFile)
112 {
113  KDesktopFile config(desktopFile);
114  item->setText(AgentName, config.readName());
115  const QString descriptionStr = QLatin1String("<b>") + i18n("Description:") + QLatin1String("</b><br>") + config.readComment();
116  item->setData(AgentName, Description, descriptionStr);
117 }
118 
119 void ConfigureAgentsWidget::initialize()
120 {
121  createItem(QLatin1String("akonadi_sendlater_agent"), QLatin1String("/SendLaterAgent"), QLatin1String("sendlateragent.desktop"));
122  createItem(QLatin1String("akonadi_archivemail_agent"), QLatin1String("/ArchiveMailAgent"), QLatin1String("archivemailagent.desktop"));
123  createItem(QLatin1String("akonadi_newmailnotifier_agent"), QLatin1String("/NewMailNotifierAgent"), QLatin1String("newmailnotifieragent.desktop"));
124  createItem(QLatin1String("akonadi_folderarchive_agent"), QLatin1String("/FolderArchiveAgent"), QLatin1String("folderarchiveagent.desktop"));
125 
126  //Laurent readd when implement it in future kdepim version
127  //createItem(QLatin1String("akonadi_followupreminder_agent"), QLatin1String("/FollowUpReminder"), QLatin1String("followupreminder.desktop"));
128  //Add more
129 }
130 
131 void ConfigureAgentsWidget::createItem(const QString &interfaceName, const QString &path, const QString &desktopFileName)
132 {
133  Q_FOREACH(const QString &agentPath, mAgentPathList) {
134  QFile file (agentPath + QDir::separator() + desktopFileName);
135  if (file.exists()) {
136  QTreeWidgetItem *item = new QTreeWidgetItem(mTreeWidget);
137  item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsUserCheckable|Qt::ItemIsEnabled);
138  item->setData(AgentName, InterfaceName, interfaceName);
139  item->setData(AgentName, PathName, path);
140  addInfos(item, file.fileName());
141  }
142  }
143 }
144 
145 bool ConfigureAgentsWidget::agentActivateState(const QString &interfaceName, const QString &pathName, bool &failed)
146 {
147  failed = false;
148  QDBusInterface interface( QLatin1String("org.freedesktop.Akonadi.Agent.") + interfaceName, pathName );
149  if (interface.isValid()) {
150  QDBusReply<bool> enabled = interface.call(QLatin1String("enabledAgent"));
151  if (enabled.isValid()) {
152  return enabled;
153  } else {
154  kDebug()<<interfaceName << "doesn't have enabledAgent function";
155  failed = true;
156  return false;
157  }
158  } else {
159  failed = true;
160  kDebug()<<interfaceName << "does not exist ";
161  }
162  return false;
163 }
164 
165 void ConfigureAgentsWidget::changeAgentActiveState(bool enable, const QString &interfaceName, const QString &pathName)
166 {
167  QDBusInterface interface( QLatin1String("org.freedesktop.Akonadi.Agent.") + interfaceName, pathName );
168  if (interface.isValid()) {
169  interface.call(QLatin1String("setEnableAgent"), enable);
170  } else {
171  kDebug()<<interfaceName << "does not exist ";
172  }
173 }
174 
175 void ConfigureAgentsWidget::slotConfigureAgent()
176 {
177  QTreeWidgetItem *item = mTreeWidget->currentItem();
178  if (item) {
179  QDBusInterface interface( QLatin1String("org.freedesktop.Akonadi.Agent.") + item->data(AgentName, InterfaceName).toString(), item->data(AgentName, PathName).toString() );
180  if (interface.isValid()) {
181  interface.call(QLatin1String("showConfigureDialog"), (qlonglong)winId());
182  } else {
183  kDebug()<<" interface does not exist ";
184  }
185  }
186 }
187 
188 void ConfigureAgentsWidget::save()
189 {
190  const int numberOfElement(mTreeWidget->topLevelItemCount());
191  for (int i=0; i <numberOfElement; ++i) {
192  QTreeWidgetItem *item = mTreeWidget->topLevelItem(i);
193  if (item->flags() & Qt::ItemIsEnabled)
194  changeAgentActiveState((item->checkState(AgentState) == Qt::Checked), item->data(AgentName, InterfaceName).toString(), item->data(AgentName, PathName).toString());
195  }
196  SendLater::SendLaterUtil::forceReparseConfiguration();
197  FolderArchive::FolderArchiveUtil::forceReparseConfiguration();
198 }
199 
200 QString ConfigureAgentsWidget::helpAnchor() const
201 {
202  return QString();
203 }
204 
205 void ConfigureAgentsWidget::doLoadFromGlobalSettings()
206 {
207  const int numberOfElement(mTreeWidget->topLevelItemCount());
208  for (int i=0; i <numberOfElement; ++i) {
209  QTreeWidgetItem *item = mTreeWidget->topLevelItem(i);
210  bool failed;
211  const bool enabled = agentActivateState(item->data(AgentName, InterfaceName).toString(), item->data(AgentName, PathName).toString(), failed);
212  item->setCheckState(AgentState, enabled ? Qt::Checked : Qt::Unchecked);
213  if (failed) {
214  item->setFlags(Qt::NoItemFlags);
215  item->setBackgroundColor(AgentState, Qt::red);
216  }
217  }
218 }
219 
220 void ConfigureAgentsWidget::doResetToDefaultsOther()
221 {
222  const int numberOfElement(mTreeWidget->topLevelItemCount());
223  for (int i=0; i <numberOfElement; ++i) {
224  QTreeWidgetItem *item = mTreeWidget->topLevelItem(i);
225  if (item->flags() & Qt::ItemIsEnabled)
226  item->setCheckState(AgentState, Qt::Checked);
227  }
228 }
229 
230 
231 #include "configureagentswidget.moc"
ConfigureAgentsWidget::doResetToDefaultsOther
void doResetToDefaultsOther()
Definition: configureagentswidget.cpp:220
QTreeWidget
ConfigureAgentsWidget::ConfigureAgentsWidget
ConfigureAgentsWidget(QWidget *parent=0)
Definition: configureagentswidget.cpp:43
QWidget
ConfigureAgentsWidget::doLoadFromGlobalSettings
void doLoadFromGlobalSettings()
Definition: configureagentswidget.cpp:205
ConfigureAgentsWidget::helpAnchor
QString helpAnchor() const
Definition: configureagentswidget.cpp:200
configureagentswidget.h
ConfigureAgentsWidget::save
void save()
Definition: configureagentswidget.cpp:188
QTreeWidgetItem
ConfigureAgentsWidget::changed
void changed()
ConfigureAgentsWidget::~ConfigureAgentsWidget
~ConfigureAgentsWidget()
Definition: configureagentswidget.cpp:82
KTextEdit
QList
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:58:51 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kmail

Skip menu "kmail"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members

kdepim API Reference

Skip menu "kdepim API Reference"
  • akonadi_next
  • akregator
  • blogilo
  • calendarsupport
  • console
  •   kabcclient
  •   konsolekalendar
  • kaddressbook
  • kalarm
  •   lib
  • kdgantt2
  • kjots
  • kleopatra
  • kmail
  • knode
  • knotes
  • kontact
  • korgac
  • korganizer
  • ktimetracker
  • libkdepim
  • libkleo
  • libkpgp
  • mailcommon
  • messagelist
  • messageviewer

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal