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

libkdepim

  • sources
  • kde-4.14
  • kdepim
  • libkdepim
  • addressline
  • blacklistbaloocompletion
blacklistbalooemailcompletionwidget.cpp
Go to the documentation of this file.
1 /*
2  Copyright (c) 2015 Montel Laurent <montel@kde.org>
3 
4  This library is free software; you can redistribute it and/or modify it
5  under the terms of the GNU Library General Public License as published by
6  the Free Software Foundation; either version 2 of the License, or (at your
7  option) any later version.
8 
9  This library is distributed in the hope that it will be useful, but WITHOUT
10  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
12  License for more details.
13 
14  You should have received a copy of the GNU Library General Public License
15  along with this library; see the file COPYING.LIB. If not, write to the
16  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17  02110-1301, USA.
18 
19 */
20 
21 #include "blacklistbalooemailcompletionwidget.h"
22 #include "blacklistbalooemaillist.h"
23 #include "blacklistbalooemailsearchjob.h"
24 #include "blacklistbalooemailutil.h"
25 
26 #include <KLocalizedString>
27 #include <KLineEdit>
28 #include <KPushButton>
29 #include <QBoxLayout>
30 #include <QLabel>
31 #include <KConfigGroup>
32 using namespace KPIM;
33 BlackListBalooEmailCompletionWidget::BlackListBalooEmailCompletionWidget(QWidget *parent)
34  : QWidget(parent),
35  mLimit(500)
36 {
37  QVBoxLayout *mainLayout = new QVBoxLayout;
38  setLayout(mainLayout);
39 
40  QHBoxLayout *searchLayout = new QHBoxLayout;
41  mainLayout->addLayout(searchLayout);
42 
43  //Add i18n in kf5
44  QLabel *lab = new QLabel(QLatin1String("Search email:"));
45  lab->setObjectName(QLatin1String("search_label"));
46  searchLayout->addWidget(lab);
47 
48  mSearchLineEdit = new KLineEdit;
49  // KF5 add i18n
50  mSearchLineEdit->setClickMessage(QLatin1String("Research is done from 3 characters"));
51  mSearchLineEdit->setFocus();
52  mSearchLineEdit->setClearButtonShown(true);
53  mSearchLineEdit->setTrapReturnKey(true);
54  mSearchLineEdit->setObjectName(QLatin1String("search_lineedit"));
55  connect(mSearchLineEdit, SIGNAL(returnPressed()), this, SLOT(slotSearch()));
56  searchLayout->addWidget(mSearchLineEdit);
57 
58  //Add i18n in kf5
59  mSearchButton = new KPushButton(QLatin1String("Search"));
60  mSearchButton->setObjectName(QLatin1String("search_button"));
61  connect(mSearchButton, SIGNAL(clicked()), this, SLOT(slotSearch()));
62  mSearchButton->setEnabled(false);
63  searchLayout->addWidget(mSearchButton);
64 
65  mEmailList = new BlackListBalooEmailList;
66  mEmailList->setObjectName(QLatin1String("email_list"));
67  mainLayout->addWidget(mEmailList);
68 
69 
70  QHBoxLayout *selectElementLayout = new QHBoxLayout;
71  mainLayout->addLayout(selectElementLayout);
72  //Add i18n in kf5
73  mSelectButton = new KPushButton(QLatin1String("&Select"), this);
74  mSelectButton->setObjectName(QLatin1String("select_email"));
75  mSelectButton->setEnabled(false);
76  connect(mSelectButton, SIGNAL(clicked(bool)), this, SLOT(slotSelectEmails()));
77  selectElementLayout->addWidget(mSelectButton);
78 
79  //Add i18n in kf5
80  mUnselectButton = new KPushButton(QLatin1String("&Unselect"), this);
81  mUnselectButton->setObjectName(QLatin1String("unselect_email"));
82  mUnselectButton->setEnabled(false);
83  connect(mUnselectButton, SIGNAL(clicked(bool)), this, SLOT(slotUnselectEmails()));
84  selectElementLayout->addWidget(mUnselectButton);
85 
86 
87  //Add i18n in kf5
88  mMoreResult = new QLabel(QLatin1String( "<qt><a href=\"more_result\">More result...</a></qt>"), this );
89  mMoreResult->setObjectName(QLatin1String("moreresultlabel"));
90  selectElementLayout->addWidget(mMoreResult);
91 
92  mMoreResult->setContextMenuPolicy(Qt::NoContextMenu);
93  connect( mMoreResult, SIGNAL(linkActivated(QString)), SLOT(slotLinkClicked(QString)) );
94  mMoreResult->setVisible(false);
95  selectElementLayout->addStretch(1);
96 
97 
98  connect(mSearchLineEdit, SIGNAL(textChanged(QString)), this, SLOT(slotSearchLineEditChanged(QString)));
99 
100  QHBoxLayout *excludeDomainLayout = new QHBoxLayout;
101  excludeDomainLayout->setMargin(0);
102  mainLayout->addLayout(excludeDomainLayout);
103 
104  //kf5 add i18n
105  QLabel *excludeDomainLabel = new QLabel(QLatin1String("Exclude domain names:"));
106  excludeDomainLabel->setObjectName(QLatin1String("domain_label"));
107  excludeDomainLayout->addWidget(excludeDomainLabel);
108 
109  mExcludeDomainLineEdit = new KLineEdit;
110  excludeDomainLayout->addWidget(mExcludeDomainLineEdit);
111  mExcludeDomainLineEdit->setObjectName(QLatin1String("domain_lineedit"));
112  mExcludeDomainLineEdit->setClearButtonShown(true);
113  mExcludeDomainLineEdit->setTrapReturnKey(true);
114  //kf5 add i18n
115  mExcludeDomainLineEdit->setClickMessage(QString::fromLatin1("Separate domain with \'%1\'").arg(QLatin1Char(',')));
116  connect(mEmailList, SIGNAL(itemSelectionChanged()), this, SLOT(slotSelectionChanged()));
117 }
118 
119 BlackListBalooEmailCompletionWidget::~BlackListBalooEmailCompletionWidget()
120 {
121 
122 }
123 
124 void BlackListBalooEmailCompletionWidget::slotSelectionChanged()
125 {
126  mSelectButton->setEnabled(!mEmailList->selectedItems().isEmpty());
127  mUnselectButton->setEnabled(!mEmailList->selectedItems().isEmpty());
128 }
129 
130 void BlackListBalooEmailCompletionWidget::load()
131 {
132  KSharedConfig::Ptr config = KSharedConfig::openConfig( QLatin1String("kpimbalooblacklist") );
133  KConfigGroup group( config, "AddressLineEdit" );
134  const QStringList lst = group.readEntry("ExcludeDomain", QStringList());
135  mEmailList->setExcludeDomain(lst);
136  mExcludeDomainLineEdit->setText(lst.join(QLatin1String(",")));
137  mOriginalExcludeDomain = lst;
138 }
139 
140 void BlackListBalooEmailCompletionWidget::slotUnselectEmails()
141 {
142  Q_FOREACH(QListWidgetItem *item, mEmailList->selectedItems()) {
143  item->setCheckState(Qt::Unchecked);
144  }
145 }
146 
147 void BlackListBalooEmailCompletionWidget::slotSelectEmails()
148 {
149  Q_FOREACH(QListWidgetItem *item, mEmailList->selectedItems()) {
150  item->setCheckState(Qt::Checked);
151  }
152 }
153 
154 void BlackListBalooEmailCompletionWidget::slotSearchLineEditChanged(const QString &text)
155 {
156  mSearchButton->setEnabled(text.trimmed().count() > 2);
157  hideMoreResultAndChangeLimit();
158 }
159 
160 void BlackListBalooEmailCompletionWidget::hideMoreResultAndChangeLimit()
161 {
162  mMoreResult->setVisible(false);
163  mLimit = 500;
164 }
165 
166 void BlackListBalooEmailCompletionWidget::slotSearch()
167 {
168  const QString searchEmail = mSearchLineEdit->text().trimmed();
169  if (searchEmail.length() > 2 ) {
170  KPIM::BlackListBalooEmailSearchJob *job = new KPIM::BlackListBalooEmailSearchJob(this);
171  job->setSearchEmail(searchEmail);
172  job->setLimit(mLimit);
173  connect(job, SIGNAL(emailsFound(QStringList)), this, SLOT(slotEmailFound(QStringList)));
174  job->start();
175  }
176 }
177 
178 void BlackListBalooEmailCompletionWidget::slotEmailFound(const QStringList &list)
179 {
180  mEmailList->slotEmailFound(list);
181  mMoreResult->setVisible(list.count() == mLimit);
182  mEmailList->scrollToBottom();
183 }
184 
185 void BlackListBalooEmailCompletionWidget::setEmailBlackList(const QStringList &list)
186 {
187  mEmailList->setEmailBlackList(list);
188 }
189 
190 void BlackListBalooEmailCompletionWidget::save()
191 {
192  const QString domain = mExcludeDomainLineEdit->text().remove(QLatin1Char(' '));
193  const QStringList newExcludeDomain = domain.split(QLatin1String(","), QString::SkipEmptyParts);
194  bool needToSave = ( mOriginalExcludeDomain != newExcludeDomain );
195  KSharedConfig::Ptr config = KSharedConfig::openConfig( QLatin1String("kpimbalooblacklist") );
196  KConfigGroup group( config, "AddressLineEdit" );
197  const QHash<QString, bool> result = mEmailList->blackListItemChanged();
198  if (!result.isEmpty()) {
199  needToSave = true;
200  QStringList blackList = group.readEntry( "BalooBackList", QStringList() );
201  KPIM::BlackListBalooEmailUtil util;
202  util.initialBlackList(blackList);
203  util.newBlackList(result);
204  blackList = util.createNewBlackList();
205  group.writeEntry( "BalooBackList", blackList );
206  }
207  if (needToSave) {
208  group.writeEntry("ExcludeDomain", newExcludeDomain);
209  group.sync();
210  }
211 }
212 
213 void BlackListBalooEmailCompletionWidget::slotLinkClicked(const QString &link)
214 {
215  if ( link == QLatin1String( "more_result" ) ) {
216  mLimit += 200;
217  slotSearch();
218  }
219 }
KPIM::BlackListBalooEmailSearchJob::start
bool start()
Definition: blacklistbalooemailsearchjob.cpp:39
KPIM::BlackListBalooEmailUtil::newBlackList
void newBlackList(const QHash< QString, bool > &)
Definition: blacklistbalooemailutil.cpp:39
QWidget
blacklistbalooemailsearchjob.h
KPIM::BlackListBalooEmailCompletionWidget::load
void load()
Definition: blacklistbalooemailcompletionwidget.cpp:130
blacklistbalooemaillist.h
blacklistbalooemailcompletionwidget.h
KPIM::BlackListBalooEmailSearchJob::setSearchEmail
void setSearchEmail(const QString &searchEmail)
Definition: blacklistbalooemailsearchjob.cpp:53
QString::split
QStringList split(const QString &sep, SplitBehavior behavior, Qt::CaseSensitivity cs) const
QListWidgetItem
QWidget::setVisible
virtual void setVisible(bool visible)
QAbstractItemView::scrollToBottom
void scrollToBottom()
QHBoxLayout
KPIM::BlackListBalooEmailUtil
Definition: blacklistbalooemailutil.h:28
QStringList::join
QString join(const QString &separator) const
KPIM::BlackListBalooEmailUtil::createNewBlackList
QStringList createNewBlackList()
Definition: blacklistbalooemailutil.cpp:44
QBoxLayout::addWidget
void addWidget(QWidget *widget, int stretch, QFlags< Qt::AlignmentFlag > alignment)
KPIM::BlackListBalooEmailList::blackListItemChanged
QHash< QString, bool > blackListItemChanged() const
Definition: blacklistbalooemaillist.cpp:48
QList::count
int count(const T &value) const
KPIM::BlackListBalooEmailList::setEmailBlackList
void setEmailBlackList(const QStringList &list)
Definition: blacklistbalooemaillist.cpp:43
QWidget::setLayout
void setLayout(QLayout *layout)
KPIM::BlackListBalooEmailList
Definition: blacklistbalooemaillist.h:44
QHash< QString, bool >
KPIM::BlackListBalooEmailSearchJob
Definition: blacklistbalooemailsearchjob.h:28
QObject::setObjectName
void setObjectName(const QString &name)
QString::trimmed
QString trimmed() const
KPIM::BlackListBalooEmailList::setExcludeDomain
void setExcludeDomain(const QStringList &domain)
Definition: blacklistbalooemaillist.cpp:62
QVBoxLayout
QString
QListWidgetItem::setCheckState
void setCheckState(Qt::CheckState state)
QLayout::setMargin
void setMargin(int margin)
KPIM::BlackListBalooEmailList::slotEmailFound
void slotEmailFound(const QStringList &)
Definition: blacklistbalooemaillist.cpp:67
KPIM::BlackListBalooEmailSearchJob::setLimit
void setLimit(int limit)
Definition: blacklistbalooemailsearchjob.cpp:58
QStringList
QListWidget::selectedItems
QList< QListWidgetItem * > selectedItems() const
QLatin1Char
QWidget::setContextMenuPolicy
void setContextMenuPolicy(Qt::ContextMenuPolicy policy)
KPIM::BlackListBalooEmailCompletionWidget::save
void save()
Definition: blacklistbalooemailcompletionwidget.cpp:190
KLineEdit
QLatin1String
QBoxLayout::addStretch
void addStretch(int stretch)
QHash::isEmpty
bool isEmpty() const
QString::count
int count() const
KPIM::BlackListBalooEmailCompletionWidget::BlackListBalooEmailCompletionWidget
BlackListBalooEmailCompletionWidget(QWidget *parent=0)
Definition: blacklistbalooemailcompletionwidget.cpp:33
QString::length
int length() const
KPIM::BlackListBalooEmailCompletionWidget::~BlackListBalooEmailCompletionWidget
~BlackListBalooEmailCompletionWidget()
Definition: blacklistbalooemailcompletionwidget.cpp:119
QString::fromLatin1
QString fromLatin1(const char *str, int size)
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
QLabel
blacklistbalooemailutil.h
KPIM::BlackListBalooEmailCompletionWidget::setEmailBlackList
void setEmailBlackList(const QStringList &list)
Definition: blacklistbalooemailcompletionwidget.cpp:185
QBoxLayout::addLayout
void addLayout(QLayout *layout, int stretch)
KPIM::BlackListBalooEmailUtil::initialBlackList
void initialBlackList(const QStringList &blackList)
Definition: blacklistbalooemailutil.cpp:34
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:33:50 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

libkdepim

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

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
  • pimprint

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