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

knode

  • sources
  • kde-4.12
  • kdepim
  • knode
kngroupbrowser.cpp
Go to the documentation of this file.
1 /*
2  KNode, the KDE newsreader
3  Copyright (c) 1999-2005 the KNode authors.
4  See file AUTHORS for details
5 
6  This program is free software; you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation; either version 2 of the License, or
9  (at your option) any later version.
10  You should have received a copy of the GNU General Public License
11  along with this program; if not, write to the Free Software Foundation,
12  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, US
13 */
14 
15 #include "kngroupbrowser.h"
16 
17 #include "knconfigmanager.h"
18 #include "knglobals.h"
19 #include "knnntpaccount.h"
20 #include "scheduler.h"
21 
22 #include <kseparator.h>
23 #include <kdebug.h>
24 #include <klineedit.h>
25 #include <QCheckBox>
26 #include <QTimer>
27 #include <QApplication>
28 #include <QGridLayout>
29 #include <QHBoxLayout>
30 #include <QVBoxLayout>
31 #include <QLabel>
32 #include <QPushButton>
33 
34 
35 KNGroupBrowser::KNGroupBrowser(QWidget *parent, const QString &caption, KNNntpAccount::Ptr a,
36  ButtonCodes buttons, bool newCBact, const QString &user1, const QString &user2) :
37  KDialog( parent ),
38  incrementalFilter(false), a_ccount(a)
39 {
40  setCaption( caption );
41  setButtons( buttons | Help | Ok | Cancel );
42  setButtonGuiItem( User1, KGuiItem(user1) );
43  setButtonGuiItem( User2, KGuiItem(user2) );
44  refilterTimer = new QTimer();
45  refilterTimer->setSingleShot( true );
46 
47  allList=new QList<KNGroupInfo>;
48  matchList=new QList<KNGroupInfo>;
49 
50  //create Widgets
51  page=new QWidget(this);
52  setMainWidget(page);
53 
54  filterEdit=new KLineEdit(page);
55  QLabel *l=new QLabel(i18n("S&earch:"),page);
56  l->setBuddy(filterEdit);
57  filterEdit->setClearButtonShown( true );
58  noTreeCB=new QCheckBox(i18n("Disable &tree view"), page);
59  noTreeCB->setChecked(false);
60  subCB=new QCheckBox(i18n("&Subscribed only"), page);
61  subCB->setChecked(false);
62  newCB=new QCheckBox(i18n("&New only"), page);
63  if (!newCBact)
64  newCB->hide();
65  newCB->setChecked(false);
66  KSeparator *sep = new KSeparator( Qt::Horizontal, page );
67 
68  QFont fnt=font();
69  fnt.setBold(true);
70  leftLabel=new QLabel(i18n("Loading groups..."),page);
71  rightLabel=new QLabel(page);
72  leftLabel->setFont(fnt);
73  rightLabel->setFont(fnt);
74 
75  pmGroup=knGlobals.configManager()->appearance()->icon(KNode::Appearance::group);
76  pmNew=knGlobals.configManager()->appearance()->icon(KNode::Appearance::redBall);
77  pmRight=KIcon( QApplication::isRightToLeft()? "go-previous": "go-next");
78  pmLeft=KIcon( QApplication::isRightToLeft() ? "go-next" : "go-previous");
79 
80  arrowBtn1=new QPushButton(page);
81  arrowBtn1->setEnabled(false);
82  arrowBtn2=new QPushButton(page);
83  arrowBtn2->setEnabled(false);
84  arrowBtn1->setIcon(pmRight);
85  arrowBtn2->setIcon(pmLeft);
86  arrowBtn1->setFixedSize(35,30);
87  arrowBtn2->setFixedSize(35,30);
88 
89  groupView=new Q3ListView(page);
90  groupView->setRootIsDecorated(true);
91  groupView->addColumn(i18n("Name"));
92  groupView->addColumn(i18n("Description"));
93  groupView->setTreeStepSize(15);
94 
95  connect(groupView, SIGNAL(doubleClicked(Q3ListViewItem*)),
96  this, SLOT(slotItemDoubleClicked(Q3ListViewItem*)));
97 
98  //layout
99  QGridLayout *topL=new QGridLayout(page);
100  topL->setSpacing(5);
101  topL->setMargin(0);
102  QHBoxLayout *filterL=new QHBoxLayout();
103  filterL->setSpacing(10);
104  QVBoxLayout *arrL=new QVBoxLayout();
105  arrL->setSpacing(10);
106  listL=new QGridLayout();
107  listL->setSpacing(5);
108 
109  topL->addLayout(filterL, 0,0);
110  topL->addWidget(sep,1,0);
111  topL->addLayout(listL, 2,0);
112 
113  filterL->addWidget(l);
114  filterL->addWidget(filterEdit, 1);
115  filterL->addWidget(noTreeCB);
116  filterL->addWidget(subCB);
117  if (newCBact)
118  filterL->addWidget(newCB);
119 
120  listL->addWidget(leftLabel, 0,0);
121  listL->addWidget(rightLabel, 0,2);
122  listL->addWidget(groupView, 1,0);
123  listL->addLayout(arrL, 1,1);
124  listL->setRowStretch(1,1);
125  listL->setColumnStretch(0,5);
126  listL->setColumnStretch(2,2);
127 
128  arrL->addWidget( arrowBtn1, Qt::AlignCenter );
129  arrL->addWidget( arrowBtn2, Qt::AlignCenter );
130 
131  //connect
132  connect(filterEdit, SIGNAL(textChanged(QString)),
133  SLOT(slotFilterTextChanged(QString)));
134  connect(groupView, SIGNAL(expanded(Q3ListViewItem*)),
135  SLOT(slotItemExpand(Q3ListViewItem*)));
136 
137  connect(refilterTimer, SIGNAL(timeout()), SLOT(slotRefilter()));
138  connect(noTreeCB, SIGNAL(clicked()), SLOT(slotTreeCBToggled()));
139  connect(subCB, SIGNAL(clicked()), SLOT(slotSubCBToggled()));
140  connect(newCB, SIGNAL(clicked()), SLOT(slotNewCBToggled()));
141 
142  enableButton(User1,false);
143  enableButton(User2,false);
144 
145  filterEdit->setFocus();
146 
147  QTimer::singleShot(2, this, SLOT(slotLoadList()));
148 }
149 
150 
151 KNGroupBrowser::~KNGroupBrowser()
152 {
153 
154  knGlobals.scheduler()->cancelJobs( KNJobData::JTLoadGroups );
155  knGlobals.scheduler()->cancelJobs( KNJobData::JTFetchGroups );
156 
157  delete matchList;
158  delete allList;
159  delete refilterTimer;
160 }
161 
162 
163 void KNGroupBrowser::slotReceiveList( KNGroupListData::Ptr d )
164 {
165  enableButton(User1,true);
166  enableButton(User2,true);
167 
168  if (d) { // d==0 if something has gone wrong...
169  delete allList;
170  allList = d->extractList();
171  incrementalFilter=false;
172  slotRefilter();
173  }
174 }
175 
176 
177 void KNGroupBrowser::changeItemState(const KNGroupInfo &gi, bool s)
178 {
179  Q3ListViewItemIterator it(groupView);
180 
181  for( ; it.current(); ++it)
182  if (it.current()->isSelectable() && (static_cast<CheckItem*>(it.current())->info==gi))
183  static_cast<CheckItem*>(it.current())->setChecked(s);
184 }
185 
186 
187 bool KNGroupBrowser::itemInListView(Q3ListView *view, const KNGroupInfo &gi)
188 {
189  if(!view) return false;
190  Q3ListViewItemIterator it(view);
191 
192  for( ; it.current(); ++it)
193  if(static_cast<GroupItem*>(it.current())->info==gi)
194  return true;
195 
196  return false;
197 }
198 
199 
200 void KNGroupBrowser::createListItems(Q3ListViewItem *parent)
201 {
202  QString prefix, tlgn, compare;
203  Q3ListViewItem *it;
204  CheckItem *cit;
205  int colon;
206  bool expandit=false;
207 
208  if(parent) {
209  Q3ListViewItem *p=parent;
210  while(p) {
211  prefix.prepend(p->text(0));
212  p=p->parent();
213  }
214  }
215 
216  qSort(*matchList);
217  Q_FOREACH(const KNGroupInfo& gn, *matchList) {
218 
219  if(!prefix.isEmpty() && !gn.name.startsWith(prefix)) {
220  if(!compare.isNull())
221  break;
222  else
223  continue;
224  }
225 
226  compare=gn.name.mid(prefix.length());
227 
228  if(!expandit || !compare.startsWith(tlgn)) {
229  if( ( colon = compare.indexOf('.') ) != -1 ) {
230  colon++;
231  expandit=true;
232  } else {
233  colon=compare.length();
234  expandit=false;
235  }
236 
237  tlgn = compare.left(colon);
238 
239  if(expandit) {
240  if(parent)
241  it=new Q3ListViewItem(parent, tlgn);
242  else
243  it=new Q3ListViewItem(groupView, tlgn);
244  it->setSelectable(false);
245  it->setExpandable(true);
246  }
247  else {
248  if(parent)
249  cit=new CheckItem(parent, gn, this);
250  else
251  cit=new CheckItem(groupView, gn, this);
252  updateItemState(cit);
253  }
254  }
255  }
256 }
257 
258 
259 void KNGroupBrowser::removeListItem(Q3ListView *view, const KNGroupInfo &gi)
260 {
261  if(!view) return;
262  Q3ListViewItemIterator it(view);
263 
264  for( ; it.current(); ++it)
265  if(static_cast<GroupItem*>(it.current())->info==gi) {
266  delete it.current();
267  break;
268  }
269 }
270 
271 
272 void KNGroupBrowser::slotLoadList()
273 {
274  emit(loadList(a_ccount));
275 }
276 
277 
278 void KNGroupBrowser::slotItemExpand(Q3ListViewItem *it)
279 {
280  if(!it) return;
281 
282  if(it->childCount()) {
283  kDebug(5003) <<"KNGroupBrowser::slotItemExpand() : has already been expanded, returning";
284  return;
285  }
286 
287  createListItems(it);
288 
289  // center the item - smart scrolling
290  delayedCenter = -1;
291  int y = groupView->itemPos(it);
292  int h = it->height();
293 
294  if ( (y+h*4+5) >= (groupView->contentsY()+groupView->visibleHeight()) )
295  {
296  groupView->ensureVisible(groupView->contentsX(), y+h/2, 0, h/2);
297  delayedCenter = y+h/2;
298  QTimer::singleShot(300, this, SLOT(slotCenterDelayed()));
299  }
300 }
301 
302 
303 void KNGroupBrowser::slotCenterDelayed()
304 {
305  if (delayedCenter != -1)
306  groupView->ensureVisible(groupView->contentsX(), delayedCenter, 0, groupView->visibleHeight()/2);
307 }
308 
309 
310 void KNGroupBrowser::slotItemDoubleClicked(Q3ListViewItem *it)
311 {
312  if (it && (it->childCount()==0)) static_cast<CheckItem*>(it)->setOn(!static_cast<CheckItem*>(it)->isOn());
313 }
314 
315 
316 #define MIN_FOR_TREE 200
317 void KNGroupBrowser::slotFilter(const QString &txt)
318 {
319  QString filtertxt = txt.toLower();
320  QRegExp reg(filtertxt, Qt::CaseInsensitive, QRegExp::RegExp);
321  CheckItem *cit=0;
322 
323  bool notCheckSub = !subCB->isChecked();
324  bool notCheckNew = !newCB->isChecked();
325  bool notCheckStr = (filtertxt.isEmpty());
326 
327  bool isRegexp = filtertxt.contains(QRegExp("[^a-z0-9\\-\\+.]"));
328 
329  bool doIncrementalUpdate = (!isRegexp && incrementalFilter && (filtertxt.left(lastFilter.length())==lastFilter));
330 
331  kDebug() << "Populating view, incremental is " << doIncrementalUpdate;
332  if (doIncrementalUpdate) {
333  QList<KNGroupInfo> *tempList = new QList<KNGroupInfo>();
334 
335  Q_FOREACH(const KNGroupInfo& g, *matchList) {
336  if ((notCheckSub||g.subscribed)&&
337  (notCheckNew||g.newGroup)&&
338  ( notCheckStr || ( g.name.indexOf(filtertxt) != -1 ) ) )
339  tempList->append(g);
340  }
341 
342  delete matchList;
343  matchList=tempList;
344  } else {
345  matchList->clear();
346 
347  Q_FOREACH(const KNGroupInfo& g, *allList) {
348  if ((notCheckSub||g.subscribed)&&
349  (notCheckNew||g.newGroup)&&
350  (notCheckStr||(isRegexp? (reg.indexIn(g.name,0) != -1) : ( g.name.indexOf( filtertxt ) != -1 ) )))
351  matchList->append(g);
352  }
353  }
354 
355  groupView->clear();
356 
357  if((matchList->count() < MIN_FOR_TREE) || noTreeCB->isChecked()) {
358  Q_FOREACH(const KNGroupInfo& g, *matchList) {
359  cit=new CheckItem(groupView, g, this);
360  updateItemState(cit);
361  }
362  } else {
363  createListItems();
364  }
365 
366  lastFilter = filtertxt;
367  incrementalFilter = !isRegexp;
368 
369  leftLabel->setText(i18n("Groups on %1: (%2 displayed)", a_ccount->name(), matchList->count()));
370 
371  arrowBtn1->setEnabled(false);
372  arrowBtn2->setEnabled(false);
373 }
374 
375 
376 void KNGroupBrowser::slotTreeCBToggled()
377 {
378  incrementalFilter=false;
379  slotRefilter();
380 }
381 
382 
383 void KNGroupBrowser::slotSubCBToggled()
384 {
385  incrementalFilter=subCB->isChecked();
386  slotRefilter();
387 }
388 
389 
390 void KNGroupBrowser::slotNewCBToggled()
391 {
392  incrementalFilter=newCB->isChecked();
393  slotRefilter();
394 }
395 
396 
397 void KNGroupBrowser::slotFilterTextChanged(const QString &)
398 {
399  if (subCB->isChecked() || newCB->isChecked())
400  slotRefilter();
401  else
402  refilterTimer->start(200);
403 }
404 
405 
406 void KNGroupBrowser::slotRefilter()
407 {
408  refilterTimer->stop();
409  slotFilter(filterEdit->text());
410 }
411 
412 
413 //=======================================================================================
414 
415 
416 KNGroupBrowser::CheckItem::CheckItem(Q3ListView *v, const KNGroupInfo &gi, KNGroupBrowser *b) :
417  Q3CheckListItem(v, gi.name, Q3CheckListItem::CheckBox), info(gi), browser(b)
418 {
419  QString des(gi.description);
420  if (gi.status == KNGroup::moderated) {
421  setText(0,gi.name+" (m)");
422  if (!des.toUpper().contains(i18n("moderated").toUpper()))
423  des+=i18n(" (moderated)");
424  }
425  setText(1,des);
426 }
427 
428 
429 KNGroupBrowser::CheckItem::CheckItem(Q3ListViewItem *i, const KNGroupInfo &gi, KNGroupBrowser *b) :
430  Q3CheckListItem(i, gi.name, Q3CheckListItem::CheckBox), info(gi), browser(b)
431 {
432  QString des(gi.description);
433  if (gi.status == KNGroup::moderated) {
434  setText(0,gi.name+" (m)");
435  if (!des.toUpper().contains(i18n("moderated").toUpper()))
436  des+=i18n(" (moderated)");
437  }
438  setText(1,des);
439 }
440 
441 
442 KNGroupBrowser::CheckItem::~CheckItem()
443 {
444 }
445 
446 
447 void KNGroupBrowser::CheckItem::setChecked(bool c)
448 {
449  KNGroupBrowser *b=browser;
450  browser=0;
451  Q3CheckListItem::setOn(c);
452  browser=b;
453 }
454 
455 
456 void KNGroupBrowser::CheckItem::stateChange(bool s)
457 {
458  if(browser) {
459  kDebug(5003) <<"KNGroupBrowser::CheckItem::stateChange()";
460  browser->itemChangedState(this, s);
461  }
462 }
463 
464 
465 //=======================================================================================
466 
467 
468 KNGroupBrowser::GroupItem::GroupItem(Q3ListView *v, const KNGroupInfo &gi)
469  : Q3ListViewItem(v, gi.name), info(gi)
470 {
471  if (gi.status == KNGroup::moderated)
472  setText(0,gi.name+" (m)");
473 }
474 
475 
476 KNGroupBrowser::GroupItem::GroupItem(Q3ListViewItem *i, const KNGroupInfo &gi)
477  : Q3ListViewItem(i, gi.name), info(gi)
478 {
479 }
480 
481 
482 KNGroupBrowser::GroupItem::~GroupItem()
483 {
484 }
485 
486 
487 //-----------------------------------------
488 
489 #include "kngroupbrowser.moc"
KNGroupBrowser::arrowBtn1
QPushButton * arrowBtn1
Definition: kngroupbrowser.h:89
kngroupbrowser.h
KNGroupInfo::description
QString description
Definition: kngroupmanager.h:43
KNGroupBrowser::delayedCenter
int delayedCenter
Definition: kngroupbrowser.h:86
KNGroupBrowser::slotReceiveList
void slotReceiveList(KNGroupListData::Ptr d)
Definition: kngroupbrowser.cpp:163
KNGroupBrowser::pmRight
QIcon pmRight
Definition: kngroupbrowser.h:91
KNGroupBrowser::changeItemState
void changeItemState(const KNGroupInfo &gi, bool s)
Definition: kngroupbrowser.cpp:177
KNGroupBrowser::leftLabel
QLabel * leftLabel
Definition: kngroupbrowser.h:93
KNJobData::JTLoadGroups
Definition: knjobdata.h:109
KNGroupBrowser::slotLoadList
void slotLoadList()
Definition: kngroupbrowser.cpp:272
KNGroupBrowser
Base class for group selection dialogs.
Definition: kngroupbrowser.h:32
KNGroupBrowser::slotNewCBToggled
void slotNewCBToggled()
Definition: kngroupbrowser.cpp:390
KNGroupBrowser::subCB
QCheckBox * subCB
Definition: kngroupbrowser.h:88
KNGroup::moderated
Definition: kngroup.h:50
KNGroupBrowser::refilterTimer
QTimer * refilterTimer
Definition: kngroupbrowser.h:94
KNGroupBrowser::pmGroup
QPixmap pmGroup
Definition: kngroupbrowser.h:90
KNGroupBrowser::slotTreeCBToggled
void slotTreeCBToggled()
Definition: kngroupbrowser.cpp:376
KNGroupBrowser::page
QWidget * page
Definition: kngroupbrowser.h:84
KNGroupListData::Ptr
boost::shared_ptr< KNGroupListData > Ptr
Shared pointer to a KNGroupListData.
Definition: kngroupmanager.h:59
KNGroupBrowser::removeListItem
void removeListItem(Q3ListView *view, const KNGroupInfo &gi)
Definition: kngroupbrowser.cpp:259
QWidget
KNGroupBrowser::lastFilter
QString lastFilter
Definition: kngroupbrowser.h:95
KNode::Appearance::redBall
Definition: knconfig.h:62
KDialog
KNGroupBrowser::newCB
QCheckBox * newCB
Definition: kngroupbrowser.h:88
KNNntpAccount::Ptr
boost::shared_ptr< KNNntpAccount > Ptr
Shared pointer to a KNNntpAccount.
Definition: knnntpaccount.h:62
KNGroupBrowser::filterEdit
KLineEdit * filterEdit
Definition: kngroupbrowser.h:87
KNGroupBrowser::listL
QGridLayout * listL
Definition: kngroupbrowser.h:92
knnntpaccount.h
scheduler.h
KNGroupInfo::newGroup
bool newGroup
Definition: kngroupmanager.h:44
KNode::Appearance::group
Definition: knconfig.h:65
KNGroupBrowser::CheckItem::stateChange
void stateChange(bool s)
Definition: kngroupbrowser.cpp:456
KNJobData::JTFetchGroups
Definition: knjobdata.h:110
MIN_FOR_TREE
#define MIN_FOR_TREE
Definition: kngroupbrowser.cpp:316
KNGroupBrowser::CheckItem::~CheckItem
~CheckItem()
Definition: kngroupbrowser.cpp:442
KNGroupBrowser::noTreeCB
QCheckBox * noTreeCB
Definition: kngroupbrowser.h:88
KNGroupInfo::name
QString name
group names will be utf-8 encoded in the future...
Definition: kngroupmanager.h:43
KNGroupBrowser::groupView
Q3ListView * groupView
Definition: kngroupbrowser.h:85
KNGroupBrowser::slotFilter
void slotFilter(const QString &txt)
Definition: kngroupbrowser.cpp:317
KNGroupBrowser::~KNGroupBrowser
~KNGroupBrowser()
Definition: kngroupbrowser.cpp:151
KNGroupBrowser::slotSubCBToggled
void slotSubCBToggled()
Definition: kngroupbrowser.cpp:383
KNGroupBrowser::loadList
void loadList(KNNntpAccount::Ptr a)
Q3ListViewItem
KNGroupBrowser::CheckItem::setChecked
void setChecked(bool c)
Definition: kngroupbrowser.cpp:447
KNGroupBrowser::slotCenterDelayed
void slotCenterDelayed()
Definition: kngroupbrowser.cpp:303
knglobals.h
KNGroupBrowser::rightLabel
QLabel * rightLabel
Definition: kngroupbrowser.h:93
KNGroupBrowser::incrementalFilter
bool incrementalFilter
Definition: kngroupbrowser.h:96
KNGroupInfo::subscribed
bool subscribed
Definition: kngroupmanager.h:44
KLineEdit
KNGroupBrowser::slotItemDoubleClicked
void slotItemDoubleClicked(Q3ListViewItem *it)
double click checks/unchecks (opens/closes) item
Definition: kngroupbrowser.cpp:310
KNGroupBrowser::slotFilterTextChanged
void slotFilterTextChanged(const QString &txt)
Definition: kngroupbrowser.cpp:397
Q3CheckListItem
KNGroupBrowser::updateItemState
virtual void updateItemState(CheckItem *it)=0
KNGroupBrowser::allList
QList< KNGroupInfo > * allList
Definition: kngroupbrowser.h:99
QLabel
KNGroupBrowser::a_ccount
KNNntpAccount::Ptr a_ccount
Definition: kngroupbrowser.h:98
KNGroupBrowser::itemInListView
bool itemInListView(Q3ListView *view, const KNGroupInfo &gi)
Definition: kngroupbrowser.cpp:187
KNGroupBrowser::arrowBtn2
QPushButton * arrowBtn2
Definition: kngroupbrowser.h:89
knconfigmanager.h
KNGroupBrowser::pmNew
QPixmap pmNew
Definition: kngroupbrowser.h:90
KNGroupBrowser::KNGroupBrowser
KNGroupBrowser(QWidget *parent, const QString &caption, KNNntpAccount::Ptr a, ButtonCodes buttons=0, bool newCBact=false, const QString &user1=QString(), const QString &user2=QString())
Definition: kngroupbrowser.cpp:35
KNGroupBrowser::CheckItem
Checkable list view item with special handling for displaying moderated groups.
Definition: kngroupbrowser.h:38
KNGroupBrowser::CheckItem::CheckItem
CheckItem(Q3ListView *v, const KNGroupInfo &gi, KNGroupBrowser *b)
Definition: kngroupbrowser.cpp:416
KNGroupBrowser::GroupItem::~GroupItem
~GroupItem()
Definition: kngroupbrowser.cpp:482
knGlobals
#define knGlobals
Keep compatibility with the old way.
Definition: knglobals.h:28
KNGroupInfo
Helper classes for the group selection dialog, contains info about a newsgroup (name, description)
Definition: kngroupmanager.h:34
KNGroupBrowser::slotRefilter
void slotRefilter()
Definition: kngroupbrowser.cpp:406
KNGroupBrowser::GroupItem::GroupItem
GroupItem(Q3ListView *v, const KNGroupInfo &gi)
Definition: kngroupbrowser.cpp:468
KNGroupBrowser::matchList
QList< KNGroupInfo > * matchList
Definition: kngroupbrowser.h:99
KNGroupBrowser::pmLeft
QIcon pmLeft
Definition: kngroupbrowser.h:91
KNGroupInfo::status
KNGroup::Status status
Definition: kngroupmanager.h:45
QList< KNGroupInfo >
KNGroupBrowser::createListItems
void createListItems(Q3ListViewItem *parent=0)
Definition: kngroupbrowser.cpp:200
KNGroupBrowser::slotItemExpand
void slotItemExpand(Q3ListViewItem *it)
Definition: kngroupbrowser.cpp:278
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:58:36 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

knode

Skip menu "knode"
  • Main Page
  • Namespace List
  • 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

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