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

mailcommon

  • sources
  • kde-4.14
  • kdepim
  • mailcommon
  • folder
foldertreewidget.cpp
Go to the documentation of this file.
1 /* -*- mode: C++; c-file-style: "gnu" -*-
2 
3  Copyright (c) 2009-2015 Montel Laurent <montel@kde.org>
4 
5  This program is free software; you can redistribute it and/or modify it
6  under the terms of the GNU General Public License, version 2, as
7  published by the Free Software Foundation.
8 
9  This program is distributed in the hope that it will be useful, but
10  WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License along
15  with this program; if not, write to the Free Software Foundation, Inc.,
16  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18 
19 #include "foldertreewidget.h"
20 #include "entitycollectionorderproxymodel.h"
21 #include "foldertreeview.h"
22 #include "foldertreewidgetproxymodel.h"
23 #include "kernel/mailkernel.h"
24 #include "util/mailutil.h"
25 
26 #include "pimcommon/acl/imapaclattribute.h"
27 #include "pimcommon/util/pimutil.h"
28 
29 #include <akonadi_next/quotacolorproxymodel.h>
30 
31 #include <libkdepim/misc/statisticsproxymodel.h>
32 
33 #include <messageviewer/settings/globalsettings.h>
34 
35 #include <messagecore/settings/globalsettings.h>
36 
37 #include <Akonadi/AttributeFactory>
38 #include <Akonadi/ChangeRecorder>
39 #include <Akonadi/Collection>
40 #include <Akonadi/EntityMimeTypeFilterModel>
41 #include <Akonadi/EntityTreeModel>
42 #include <Akonadi/EntityTreeView>
43 #include <Akonadi/ETMViewStateSaver>
44 #include <Akonadi/ItemFetchScope>
45 
46 #include <KLineEdit>
47 #include <KLocalizedString>
48 
49 #include <QKeyEvent>
50 #include <QLabel>
51 
52 namespace MailCommon {
53 
54 class FolderTreeWidget::FolderTreeWidgetPrivate
55 {
56 public:
57  FolderTreeWidgetPrivate()
58  : filterModel( 0 ),
59  folderTreeView( 0 ),
60  quotaModel( 0 ),
61  readableproxy( 0 ),
62  entityOrderProxy( 0 ),
63  filterFolderLineEdit( 0 ),
64  saver( 0 ),
65  label( 0 ),
66  dontKeyFilter( false )
67  {
68  }
69 
70  QString filter;
71  QString oldFilterStr;
72  KPIM::StatisticsProxyModel *filterModel;
73  FolderTreeView *folderTreeView;
74  Akonadi::QuotaColorProxyModel *quotaModel;
75  FolderTreeWidgetProxyModel *readableproxy;
76  EntityCollectionOrderProxyModel *entityOrderProxy;
77  KLineEdit *filterFolderLineEdit;
78  QPointer<Akonadi::ETMViewStateSaver> saver;
79  QStringList expandedItems;
80  QString currentItem;
81  QLabel *label;
82  bool dontKeyFilter;
83 };
84 
85 FolderTreeWidget::FolderTreeWidget(
86  QWidget *parent, KXMLGUIClient *xmlGuiClient,
87  FolderTreeWidget::TreeViewOptions options,
88  FolderTreeWidgetProxyModel::FolderTreeWidgetProxyModelOptions optReadableProxy )
89  : QWidget( parent ), d( new FolderTreeWidgetPrivate() )
90 {
91  Akonadi::AttributeFactory::registerAttribute<PimCommon::ImapAclAttribute>();
92 
93  d->folderTreeView = new FolderTreeView( xmlGuiClient, this, options & ShowUnreadCount );
94  d->folderTreeView->showStatisticAnimation( options & ShowCollectionStatisticAnimation );
95 
96  connect( d->folderTreeView, SIGNAL(manualSortingChanged(bool)),
97  this, SLOT(slotManualSortingChanged(bool)) );
98 
99  QVBoxLayout *lay = new QVBoxLayout( this );
100  lay->setMargin( 0 );
101 
102  d->label = new QLabel( i18n( "You can start typing to filter the list of folders." ), this );
103  lay->addWidget( d->label );
104 
105  d->filterFolderLineEdit = new KLineEdit( this );
106  d->filterFolderLineEdit->setClearButtonShown( true );
107  d->filterFolderLineEdit->setClickMessage(
108  i18nc( "@info/plain Displayed grayed-out inside the textbox, verb to search",
109  "Search" ) );
110  lay->addWidget( d->filterFolderLineEdit );
111 
112  // ... with statistics...
113  d->quotaModel = new Akonadi::QuotaColorProxyModel( this );
114  d->quotaModel->setSourceModel( KernelIf->collectionModel() );
115 
116  d->filterModel = new KPIM::StatisticsProxyModel( this );
117  d->filterModel->setSourceModel( d->quotaModel );
118 
119  d->readableproxy = new FolderTreeWidgetProxyModel( this, optReadableProxy );
120  d->readableproxy->setSourceModel( d->filterModel );
121  d->readableproxy->addContentMimeTypeInclusionFilter( KMime::Message::mimeType() );
122 
123  connect( d->folderTreeView, SIGNAL(changeTooltipsPolicy(FolderTreeWidget::ToolTipDisplayPolicy)),
124  this, SLOT(slotChangeTooltipsPolicy(FolderTreeWidget::ToolTipDisplayPolicy)) );
125 
126  d->folderTreeView->setSelectionMode( QAbstractItemView::SingleSelection );
127  d->folderTreeView->setEditTriggers( QAbstractItemView::NoEditTriggers );
128  d->folderTreeView->installEventFilter( this );
129 
130  //Order proxy
131  d->entityOrderProxy = new EntityCollectionOrderProxyModel( this );
132  d->entityOrderProxy->setSourceModel( d->readableproxy );
133  KConfigGroup grp( KernelIf->config(), "CollectionTreeOrder" );
134  d->entityOrderProxy->setOrderConfig( grp );
135  d->folderTreeView->setModel( d->entityOrderProxy );
136 
137  if ( options & UseDistinctSelectionModel ) {
138  d->folderTreeView->setSelectionModel( new QItemSelectionModel( d->entityOrderProxy, this ) );
139  }
140 
141  lay->addWidget( d->folderTreeView );
142 
143  d->dontKeyFilter = ( options & DontKeyFilter );
144 
145  if ( ( options & UseLineEditForFiltering ) ) {
146  connect( d->filterFolderLineEdit, SIGNAL(textChanged(QString)),
147  this, SLOT(slotFilterFixedString(QString)) );
148  d->label->hide();
149  } else {
150  d->filterFolderLineEdit->hide();
151  }
152 
153  connect( KGlobalSettings::self(), SIGNAL(kdisplayFontChanged()),
154  this, SLOT(slotGeneralFontChanged()));
155  connect( KGlobalSettings::self(), SIGNAL(kdisplayPaletteChanged()),
156  this, SLOT(slotGeneralPaletteChanged()));
157 }
158 
159 FolderTreeWidget::~FolderTreeWidget()
160 {
161  delete d;
162 }
163 
164 void FolderTreeWidget::slotFilterFixedString( const QString &text )
165 {
166  delete d->saver;
167  if ( d->oldFilterStr.isEmpty() ) {
168  //Save it.
169  Akonadi::ETMViewStateSaver saver;
170  saver.setView( folderTreeView() );
171  d->expandedItems = saver.expansionKeys();
172  d->currentItem = saver.currentIndexKey();
173  } else if ( text.isEmpty() ) {
174  d->saver = new Akonadi::ETMViewStateSaver;
175  d->saver->setView( folderTreeView() );
176  QString currentIndex = d->saver->currentIndexKey();
177  if ( d->saver->selectionKeys().isEmpty() ) {
178  currentIndex = d->currentItem;
179  } else if ( !currentIndex.isEmpty() ) {
180  d->expandedItems << currentIndex;
181  }
182  d->saver->restoreExpanded( d->expandedItems );
183  d->saver->restoreCurrentItem( currentIndex );
184  } else {
185  d->folderTreeView->expandAll();
186  }
187  d->oldFilterStr = text;
188  d->readableproxy->setFilterFolder( text );
189 }
190 
191 void FolderTreeWidget::disableContextMenuAndExtraColumn()
192 {
193  d->folderTreeView->disableContextMenuAndExtraColumn();
194 }
195 
196 void FolderTreeWidget::selectCollectionFolder( const Akonadi::Collection &collection )
197 {
198  const QModelIndex index =
199  Akonadi::EntityTreeModel::modelIndexForCollection( d->folderTreeView->model(), collection );
200 
201  d->folderTreeView->setCurrentIndex( index );
202  d->folderTreeView->setExpanded( index, true );
203  d->folderTreeView->scrollTo( index );
204 }
205 
206 void FolderTreeWidget::setSelectionMode( QAbstractItemView::SelectionMode mode )
207 {
208  d->folderTreeView->setSelectionMode( mode );
209 }
210 
211 QAbstractItemView::SelectionMode FolderTreeWidget::selectionMode() const
212 {
213  return d->folderTreeView->selectionMode();
214 }
215 
216 QItemSelectionModel * FolderTreeWidget::selectionModel () const
217 {
218  return d->folderTreeView->selectionModel();
219 }
220 
221 QModelIndex FolderTreeWidget::currentIndex() const
222 {
223  return d->folderTreeView->currentIndex();
224 }
225 
226 Akonadi::Collection FolderTreeWidget::selectedCollection() const
227 {
228  if ( d->folderTreeView->selectionMode() == QAbstractItemView::SingleSelection ) {
229  Akonadi::Collection::List lstCollection = selectedCollections();
230  if ( lstCollection.isEmpty() ) {
231  return Akonadi::Collection();
232  } else {
233  return lstCollection.at( 0 );
234  }
235  }
236 
237  return Akonadi::Collection();
238 }
239 
240 Akonadi::Collection::List FolderTreeWidget::selectedCollections() const
241 {
242  Akonadi::Collection::List collections;
243  const QItemSelectionModel *selectionModel = d->folderTreeView->selectionModel();
244  const QModelIndexList selectedIndexes = selectionModel->selectedIndexes();
245  foreach ( const QModelIndex &index, selectedIndexes ) {
246  if ( index.isValid() ) {
247  const Akonadi::Collection collection =
248  index.model()->data(
249  index, Akonadi::EntityTreeModel::CollectionRole ).value<Akonadi::Collection>();
250  if ( collection.isValid() ) {
251  collections.append( collection );
252  }
253  }
254  }
255 
256  return collections;
257 }
258 
259 FolderTreeView *FolderTreeWidget::folderTreeView() const
260 {
261  return d->folderTreeView;
262 }
263 
264 void FolderTreeWidget::slotGeneralFontChanged()
265 {
266  // Custom/System font support
267  if ( MessageCore::GlobalSettings::self()->useDefaultFonts() ) {
268  setFont( KGlobalSettings::generalFont() );
269  }
270 }
271 
272 void FolderTreeWidget::slotGeneralPaletteChanged()
273 {
274  d->readableproxy->updatePalette();
275  d->folderTreeView->updatePalette();
276 }
277 
278 void FolderTreeWidget::readConfig()
279 {
280  // Custom/System font support
281  if ( !MessageCore::GlobalSettings::self()->useDefaultFonts() ) {
282  KConfigGroup fontConfig( KernelIf->config(), "Fonts" );
283  setFont( fontConfig.readEntry( "folder-font", KGlobalSettings::generalFont() ) );
284  } else {
285  setFont( KGlobalSettings::generalFont() );
286  }
287 
288  d->folderTreeView->readConfig();
289  d->folderTreeView->setDropActionMenuEnabled( SettingsIf->showPopupAfterDnD() );
290  d->readableproxy->readConfig();
291 
292  KConfigGroup readerConfig( KernelIf->config(), "AccountOrder" );
293  QStringList listOrder;
294  if (readerConfig.readEntry("EnableAccountOrder", true)) {
295  listOrder = readerConfig.readEntry( "order", QStringList() );
296  }
297  d->entityOrderProxy->setTopLevelOrder(listOrder);
298 
299  readQuotaConfig();
300 }
301 
302 void FolderTreeWidget::restoreHeaderState( const QByteArray &data )
303 {
304  d->folderTreeView->restoreHeaderState( data );
305 }
306 
307 void FolderTreeWidget::slotChangeTooltipsPolicy( FolderTreeWidget::ToolTipDisplayPolicy policy )
308 {
309  changeToolTipsPolicyConfig( policy );
310 }
311 
312 void FolderTreeWidget::changeToolTipsPolicyConfig( ToolTipDisplayPolicy policy )
313 {
314  switch( policy ){
315  case DisplayAlways:
316  case DisplayWhenTextElided: //Need to implement in the future
317  d->filterModel->setToolTipEnabled( true );
318  break;
319  case DisplayNever:
320  d->filterModel->setToolTipEnabled( false );
321  }
322  d->folderTreeView->setTooltipsPolicy( policy );
323 }
324 
325 void FolderTreeWidget::quotaWarningParameters( const QColor &color, qreal threshold )
326 {
327  d->quotaModel->setWarningThreshold( threshold );
328  d->quotaModel->setWarningColor( color );
329 }
330 
331 void FolderTreeWidget::readQuotaConfig()
332 {
333  QColor quotaColor = MailCommon::Util::defaultQuotaColor();
334  qreal threshold = 100;
335  if ( !MessageCore::GlobalSettings::self()->useDefaultColors() ) {
336  KConfigGroup readerConfig( KernelIf->config(), "Reader" );
337  quotaColor = readerConfig.readEntry( "CloseToQuotaColor", quotaColor );
338  }
339  threshold = SettingsIf->closeToQuotaThreshold();
340  quotaWarningParameters( quotaColor, threshold );
341 }
342 
343 KPIM::StatisticsProxyModel *FolderTreeWidget::statisticsProxyModel() const
344 {
345  return d->filterModel;
346 }
347 
348 FolderTreeWidgetProxyModel *FolderTreeWidget::folderTreeWidgetProxyModel() const
349 {
350  return d->readableproxy;
351 }
352 
353 EntityCollectionOrderProxyModel *FolderTreeWidget::entityOrderProxy() const
354 {
355  return d->entityOrderProxy;
356 }
357 
358 KLineEdit *FolderTreeWidget::filterFolderLineEdit() const
359 {
360  return d->filterFolderLineEdit;
361 }
362 
363 void FolderTreeWidget::applyFilter( const QString &filter )
364 {
365  d->label->setText(
366  filter.isEmpty() ?
367  i18n( "You can start typing to filter the list of folders." ) :
368  i18n( "Path: (%1)", filter ) );
369 
370  d->readableproxy->setFilterFolder( filter );
371  d->folderTreeView->expandAll();
372  QAbstractItemModel *model = d->folderTreeView->model();
373  QModelIndex current = d->folderTreeView->currentIndex();
374  QModelIndex start = current.isValid() ? current : model->index(0, 0);
375  QModelIndexList list = model->match( start, Qt::DisplayRole, d->filter, 1 /* stop at first hit */,
376  Qt::MatchContains | Qt::MatchWrap | Qt::MatchRecursive );
377  if ( !list.isEmpty() ) {
378  current = list.first();
379  d->folderTreeView->setCurrentIndex( current );
380  d->folderTreeView->scrollTo( current );
381  }
382 }
383 
384 void FolderTreeWidget::clearFilter()
385 {
386  d->filter.clear();
387  applyFilter( d->filter );
388  const QModelIndexList lst = d->folderTreeView->selectionModel()->selectedIndexes();
389  if ( !lst.isEmpty() ) {
390  d->folderTreeView->scrollTo( lst.first() );
391  }
392 }
393 
394 void FolderTreeWidget::slotManualSortingChanged( bool active )
395 {
396  d->entityOrderProxy->setManualSortingActive( active );
397  d->folderTreeView->setManualSortingActive( active );
398 }
399 
400 bool FolderTreeWidget::eventFilter( QObject *o, QEvent *e )
401 {
402  Q_UNUSED( o );
403  if ( d->dontKeyFilter ) {
404  return false;
405  }
406 
407  if ( e->type() == QEvent::KeyPress ) {
408  const QKeyEvent* const ke = static_cast<QKeyEvent*>( e );
409  switch( ke->key() ) {
410  case Qt::Key_Backspace:
411  {
412  const int filterLength( d->filter.length() );
413  if ( filterLength > 0 ) {
414  d->filter.truncate( filterLength-1 );
415  }
416  applyFilter( d->filter );
417  return false;
418  }
419  break;
420  case Qt::Key_Delete:
421  d->filter.clear();
422  applyFilter( d->filter );
423  return false;
424  break;
425  default:
426  {
427  const QString s = ke->text();
428  if ( !s.isEmpty() && s.at( 0 ).isPrint() ) {
429  d->filter += s;
430  applyFilter( d->filter );
431  return false;
432  }
433  }
434  break;
435  }
436  }
437  return false;
438 }
439 
440 }
441 
MailCommon::Util::defaultQuotaColor
MAILCOMMON_EXPORT QColor defaultQuotaColor()
Definition: mailutil.cpp:391
MailCommon::FolderTreeWidget::UseLineEditForFiltering
Definition: foldertreewidget.h:58
SettingsIf
#define SettingsIf
Definition: mailkernel.h:193
MailCommon::FolderTreeWidget::applyFilter
void applyFilter(const QString &)
Definition: foldertreewidget.cpp:363
QModelIndex
QEvent
QWidget
MailCommon::FolderTreeWidget::FolderTreeWidget
FolderTreeWidget(QWidget *parent=0, KXMLGUIClient *xmlGuiClient=0, TreeViewOptions options=(TreeViewOptions)(ShowUnreadCount|ShowCollectionStatisticAnimation), FolderTreeWidgetProxyModel::FolderTreeWidgetProxyModelOptions optReadableProxy=FolderTreeWidgetProxyModel::None)
Definition: foldertreewidget.cpp:85
QEvent::type
Type type() const
KernelIf
#define KernelIf
Definition: mailkernel.h:191
QAbstractItemModel::index
virtual QModelIndex index(int row, int column, const QModelIndex &parent) const =0
foldertreewidgetproxymodel.h
entitycollectionorderproxymodel.h
QByteArray
text
const char * text
Definition: mdnadvicedialog.cpp:54
QPointer< Akonadi::ETMViewStateSaver >
MailCommon::FolderTreeWidget::ToolTipDisplayPolicy
ToolTipDisplayPolicy
The possible tooltip display policies.
Definition: foldertreewidget.h:76
MailCommon::FolderTreeWidget::DisplayNever
Nevery display tooltips.
Definition: foldertreewidget.h:79
QVariant::value
T value() const
MailCommon::FolderTreeWidget::currentIndex
QModelIndex currentIndex() const
Definition: foldertreewidget.cpp:221
QAbstractItemModel::match
virtual QModelIndexList match(const QModelIndex &start, int role, const QVariant &value, int hits, QFlags< Qt::MatchFlag > flags) const
QChar::isPrint
bool isPrint() const
MailCommon::FolderTreeWidget::slotFilterFixedString
void slotFilterFixedString(const QString &)
Definition: foldertreewidget.cpp:164
QModelIndex::isValid
bool isValid() const
QBoxLayout::addWidget
void addWidget(QWidget *widget, int stretch, QFlags< Qt::AlignmentFlag > alignment)
MailCommon::FolderTreeWidget::folderTreeWidgetProxyModel
FolderTreeWidgetProxyModel * folderTreeWidgetProxyModel() const
Definition: foldertreewidget.cpp:348
MailCommon::FolderTreeWidget::ShowUnreadCount
Definition: foldertreewidget.h:57
MailCommon::FolderTreeView
This is an enhanced EntityTreeView specially suited for the folders in KMail's main folder widget...
Definition: foldertreeview.h:41
MailCommon::FolderTreeWidget::restoreHeaderState
void restoreHeaderState(const QByteArray &data)
Definition: foldertreewidget.cpp:302
foldertreeview.h
QObject
QString::isEmpty
bool isEmpty() const
QItemSelectionModel::selectedIndexes
QModelIndexList selectedIndexes() const
MailCommon::FolderTreeWidget::filterFolderLineEdit
KLineEdit * filterFolderLineEdit() const
Definition: foldertreewidget.cpp:358
QKeyEvent::text
QString text() const
foldertreewidget.h
QVBoxLayout
QAbstractItemModel::data
virtual QVariant data(const QModelIndex &index, int role) const =0
QString
QColor
QLayout::setMargin
void setMargin(int margin)
MailCommon::FolderTreeWidgetProxyModel
Definition: foldertreewidgetproxymodel.h:28
MailCommon::FolderTreeWidget::ShowCollectionStatisticAnimation
Definition: foldertreewidget.h:60
QStringList
MailCommon::FolderTreeWidget::UseDistinctSelectionModel
Definition: foldertreewidget.h:59
MailCommon::FolderTreeWidget::clearFilter
void clearFilter()
Definition: foldertreewidget.cpp:384
QKeyEvent::key
int key() const
MailCommon::FolderTreeWidget::selectCollectionFolder
void selectCollectionFolder(const Akonadi::Collection &col)
Definition: foldertreewidget.cpp:196
QWidget::setFont
void setFont(const QFont &)
MailCommon::FolderTreeWidget::folderTreeView
FolderTreeView * folderTreeView() const
Definition: foldertreewidget.cpp:259
MailCommon::EntityCollectionOrderProxyModel
Definition: entitycollectionorderproxymodel.h:26
QKeyEvent
MailCommon::FolderTreeWidget::selectionMode
QAbstractItemView::SelectionMode selectionMode() const
Definition: foldertreewidget.cpp:211
MailCommon::FolderTreeWidget::selectedCollection
Akonadi::Collection selectedCollection() const
Definition: foldertreewidget.cpp:226
MailCommon::FolderTreeWidget::disableContextMenuAndExtraColumn
void disableContextMenuAndExtraColumn()
Definition: foldertreewidget.cpp:191
QModelIndex::model
const QAbstractItemModel * model() const
MailCommon::FolderTreeWidget::slotManualSortingChanged
void slotManualSortingChanged(bool)
Definition: foldertreewidget.cpp:394
mailkernel.h
MailCommon::FolderTreeWidget::statisticsProxyModel
KPIM::StatisticsProxyModel * statisticsProxyModel() const
Definition: foldertreewidget.cpp:343
MailCommon::FolderTreeWidget::~FolderTreeWidget
~FolderTreeWidget()
Definition: foldertreewidget.cpp:159
MailCommon::FolderTreeWidget::selectionModel
QItemSelectionModel * selectionModel() const
Definition: foldertreewidget.cpp:216
QString::at
const QChar at(int position) const
MailCommon::FolderTreeWidget::slotGeneralPaletteChanged
void slotGeneralPaletteChanged()
Definition: foldertreewidget.cpp:272
MailCommon::FolderTreeWidget::quotaWarningParameters
void quotaWarningParameters(const QColor &color, qreal threshold)
Definition: foldertreewidget.cpp:325
MailCommon::FolderTreeWidget::readConfig
void readConfig()
Definition: foldertreewidget.cpp:278
QAbstractItemModel
MailCommon::FolderTreeWidget::entityOrderProxy
EntityCollectionOrderProxyModel * entityOrderProxy() const
Definition: foldertreewidget.cpp:353
MailCommon::FolderTreeWidget::selectedCollections
Akonadi::Collection::List selectedCollections() const
Definition: foldertreewidget.cpp:240
MailCommon::FolderTreeWidget::DisplayWhenTextElided
Display the tooltip if the item text is actually elided.
Definition: foldertreewidget.h:78
MailCommon::FolderTreeWidget::slotGeneralFontChanged
void slotGeneralFontChanged()
Definition: foldertreewidget.cpp:264
QtConcurrent::filter
QFuture< void > filter(Sequence &sequence, FilterFunction filterFunction)
MailCommon::FolderTreeWidget::slotChangeTooltipsPolicy
void slotChangeTooltipsPolicy(FolderTreeWidget::ToolTipDisplayPolicy)
Definition: foldertreewidget.cpp:307
MailCommon::FolderTreeWidget::setSelectionMode
void setSelectionMode(QAbstractItemView::SelectionMode mode)
Definition: foldertreewidget.cpp:206
MailCommon::FolderTreeWidget::DontKeyFilter
Definition: foldertreewidget.h:61
MailCommon::FolderTreeWidget::readQuotaConfig
void readQuotaConfig()
Definition: foldertreewidget.cpp:331
MailCommon::FolderTreeWidget::changeToolTipsPolicyConfig
void changeToolTipsPolicyConfig(ToolTipDisplayPolicy)
Definition: foldertreewidget.cpp:312
QItemSelectionModel
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
QLabel
mailutil.h
MailCommon::FolderTreeWidget::DisplayAlways
Always display a tooltip when hovering over an item.
Definition: foldertreewidget.h:77
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:31:40 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

mailcommon

Skip menu "mailcommon"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

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