• 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
knfolder.cpp
Go to the documentation of this file.
1 /*
2  KNode, the KDE newsreader
3  Copyright (c) 1999-2006 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 "knfolder.h"
16 
17 #include "articlewidget.h"
18 #include "knarticlefactory.h"
19 #include "knarticlemanager.h"
20 #include "knarticlewindow.h"
21 #include "kncollectionviewitem.h"
22 #include "knfoldermanager.h"
23 #include "knglobals.h"
24 #include "knhdrviewitem.h"
25 #include "knmainwidget.h"
26 #include "utilities.h"
27 #include "utils/scoped_cursor_override.h"
28 
29 #include <QFileInfo>
30 #include <kconfig.h>
31 #include <kstandarddirs.h>
32 #include <kdebug.h>
33 #include <klocale.h>
34 
35 using namespace KNode;
36 using namespace KNode::Utilities;
37 
38 
39 KNFolder::KNFolder()
40  : KNArticleCollection( KNArticleCollection::Ptr() ),
41  i_d(-1), p_arentId(-1), i_ndexDirty(false), w_asOpen(true)
42 {
43 }
44 
45 
46 KNFolder::KNFolder( int id, const QString &name, KNFolder::Ptr parent )
47  : KNArticleCollection(parent), i_d(id), i_ndexDirty(false), w_asOpen(true)
48 {
49  QString fname=path()+QString("custom_%1").arg(i_d);
50 
51  n_ame = name;
52  m_boxFile.setFileName(fname+".mbox");
53  i_ndexFile.setFileName(fname+".idx");
54  i_nfoPath=fname+".info";
55 
56  p_arentId=parent?parent->id():-1;
57 
58  if(i_ndexFile.exists())
59  c_ount=i_ndexFile.size()/sizeof(DynData);
60  else
61  c_ount=0;
62 }
63 
64 
65 KNFolder::KNFolder( int id, const QString &name, const QString &prefix, KNFolder::Ptr parent )
66  : KNArticleCollection(parent), i_d(id), i_ndexDirty(false), w_asOpen(true)
67 {
68  QString fname=path()+QString("%1_%2").arg(prefix).arg(i_d);
69 
70  n_ame = name;
71  m_boxFile.setFileName(fname+".mbox");
72  i_ndexFile.setFileName(fname+".idx");
73  i_nfoPath=fname+".info";
74 
75  p_arentId=parent?parent->id():-1;
76 
77  if(i_ndexFile.exists())
78  c_ount=i_ndexFile.size()/sizeof(DynData);
79  else
80  c_ount=0;
81 }
82 
83 
84 KNFolder::~KNFolder()
85 {
86  closeFiles();
87 }
88 
89 
90 void KNFolder::updateListItem()
91 {
92  if(l_istItem) {
93  l_istItem->setLabelText( n_ame );
94  if (!isRootFolder())
95  l_istItem->setTotalCount( c_ount );
96  }
97 }
98 
99 
100 QString KNFolder::path()
101 {
102  QString dir( KStandardDirs::locateLocal( "data", "knode/folders/" ) );
103  /*if (dir.isNull())
104  KNHelper::displayInternalFileError();*/
105  return dir;
106 }
107 
108 
109 bool KNFolder::readInfo(const QString &infoPath)
110 {
111  if(infoPath.isEmpty())
112  return false;
113 
114  i_nfoPath=infoPath;
115 
116  KConfig info(i_nfoPath, KConfig::SimpleConfig);
117  KConfigGroup grp(&info, QString());
118  if (!isRootFolder() && !isStandardFolder()) {
119  n_ame=grp.readEntry("name");
120  i_d=grp.readEntry("id", -1);
121  p_arentId=grp.readEntry("parentId", -1);
122  }
123  w_asOpen=grp.readEntry("wasOpen", true);
124 
125  if(i_d>-1) {
126  QFileInfo fi(infoPath);
127  QString fname = fi.absolutePath() + '/' + fi.baseName();
128  closeFiles();
129  clear();
130 
131  m_boxFile.setFileName(fname+".mbox");
132  i_ndexFile.setFileName(fname+".idx");
133  c_ount=i_ndexFile.exists() ? (i_ndexFile.size()/sizeof(DynData)) : 0;
134  }
135 
136  return (i_d!=-1);
137 }
138 
139 
140 bool KNFolder::readInfo()
141 {
142  return readInfo(i_nfoPath);
143 }
144 
145 
146 void KNFolder::writeConfig()
147 {
148  if(!i_nfoPath.isEmpty()) {
149  KConfig info(i_nfoPath, KConfig::SimpleConfig);
150  KConfigGroup grp(&info, QString());
151  if (!isRootFolder() && !isStandardFolder()) {
152  grp.writeEntry("name", n_ame);
153  grp.writeEntry("id", i_d);
154  grp.writeEntry("parentId", p_arentId);
155  }
156  if(l_istItem)
157  grp.writeEntry("wasOpen", l_istItem->isExpanded());
158  }
159 }
160 
161 
162 void KNFolder::setParent( KNCollection::Ptr p )
163 {
164  p_arent = p;
165  p_arentId = p ? ( boost::static_pointer_cast<KNFolder>( p ) )->id() : -1;
166 }
167 
168 
169 bool KNFolder::loadHdrs()
170 {
171  if(isLoaded()) {
172  kDebug(5003) <<"KNFolder::loadHdrs() : already loaded";
173  return true;
174  }
175 
176  if(!i_ndexFile.open(QIODevice::ReadOnly)) {
177  kError(5003) <<"KNFolder::loadHdrs() : cannot open index-file!";
178  closeFiles();
179  return false;
180  }
181 
182  if(!m_boxFile.open(QIODevice::ReadOnly)) {
183  kError(5003) <<"KNFolder::loadHdrs() : cannot open mbox-file!";
184  closeFiles();
185  return false;
186  }
187 
188  QByteArray tmp;
189  KNLocalArticle::Ptr art;
190  DynData dynamic;
191  int pos1=0, pos2=0, cnt=0, byteCount;
192 
193  ScopedCursorOverride cursor( Qt::WaitCursor );
194  knGlobals.setStatusMsg(i18n(" Loading folder..."));
195  knGlobals.top->secureProcessEvents();
196 
197  while(!i_ndexFile.atEnd()) {
198 
199  //read index-data
200  byteCount=i_ndexFile.read((char*)(&dynamic), sizeof(DynData));
201  if(byteCount!=sizeof(DynData)) {
202  if( i_ndexFile.error() == QFile::NoError ) {
203  kWarning(5003) <<"KNFolder::loadHeaders() : found broken entry in index-file: Ignored!";
204  continue;
205  }
206  else {
207  kError(5003) <<"KNFolder::loadHeaders() : corrupted index-file, IO-error!";
208  closeFiles();
209  clear();
210  return false;
211  }
212  }
213 
214  art = KNLocalArticle::Ptr( new KNLocalArticle( thisFolderPtr() ) );
215 
216  //set index-data
217  dynamic.getData(art);
218 
219  //read overview
220  if ( !m_boxFile.seek( art->startOffset() ) ) {
221  kError(5003) <<"KNFolder::loadHdrs() : cannot set mbox file-pointer!";
222  closeFiles();
223  clear();
224  return false;
225  }
226  tmp = m_boxFile.readLine();
227  if ( tmp.endsWith( '\n' ) )
228  tmp.resize( tmp.length() - 1 );
229  if(tmp.isEmpty()) {
230  if( m_boxFile.error() == QFile::NoError ) {
231  kWarning(5003) <<"found broken entry in mbox-file: Ignored!";
232  continue;
233  }
234  else {
235  kError(5003) <<"KNFolder::loadHdrs() : corrupted mbox-file, IO-error!";
236  closeFiles();
237  clear();
238  return false;
239  }
240  }
241 
242  //set overview
243  bool end=false;
244  pos1 = tmp.indexOf( ' ' ) + 1;
245  pos2 = tmp.indexOf( '\t', pos1 );
246  if (pos2 == -1) {
247  pos2=tmp.length();
248  end=true;
249  }
250  art->subject()->from7BitString(tmp.mid(pos1, pos2-pos1));
251 
252  if (!end) {
253  pos1=pos2+1;
254  pos2 = tmp.indexOf( '\t', pos1 );
255  if (pos2 == -1) {
256  pos2=tmp.length();
257  end=true;
258  }
259  art->newsgroups()->from7BitString(tmp.mid(pos1, pos2-pos1));
260  }
261 
262  if (!end) {
263  pos1=pos2+1;
264  pos2 = tmp.indexOf( '\t', pos1 );
265  if (pos2 == -1) {
266  pos2=tmp.length();
267  end=true;
268  }
269  art->to()->from7BitString(tmp.mid(pos1,pos2-pos1));
270  }
271 
272  if (!end) {
273  pos1=pos2+1;
274  pos2=tmp.length();
275  art->lines()->from7BitString(tmp.mid(pos1,pos2-pos1));
276  }
277 
278  append( art );
279  cnt++;
280  }
281 
282  closeFiles();
283  setLastID();
284  c_ount=cnt;
285  updateListItem();
286 
287  knGlobals.setStatusMsg( QString() );
288 
289  return true;
290 }
291 
292 
293 bool KNFolder::unloadHdrs(bool force)
294 {
295  if ( lockedArticles() > 0 ) {
296  return false;
297  }
298 
299  if (!force && isNotUnloadable())
300  return false;
301 
302  KNLocalArticle::Ptr a;
303  for(int idx=0; idx<length(); idx++) {
304  a=at(idx);
305  if (a->hasContent() && !knGlobals.articleManager()->unloadArticle(a, force))
306  return false;
307  }
308  syncIndex();
309  clear();
310 
311  return true;
312 }
313 
314 bool KNFolder::loadArticle( KNLocalArticle::Ptr a )
315 {
316  if(a->hasContent())
317  return true;
318 
319  closeFiles();
320  if(!m_boxFile.open(QIODevice::ReadOnly)) {
321  kError(5003) <<"KNFolder::loadArticle(KNLocalArticle *a) : cannot open mbox file:"
322  << m_boxFile.fileName();
323  return false;
324  }
325 
326  //set file-pointer
327  if ( !m_boxFile.seek( a->startOffset() ) ) {
328  kError(5003) <<"KNFolder::loadArticle(KNLocalArticle *a) : cannot set mbox file-pointer!";
329  closeFiles();
330  return false;
331  }
332 
333  //read content
334  m_boxFile.readLine(); //skip X-KNode-Overview
335 
336  unsigned int size = a->endOffset() - m_boxFile.pos() - 1;
337  QByteArray buff;
338  buff.resize( size + 10 );
339  int readBytes=m_boxFile.read(buff.data(), size);
340  closeFiles();
341  if ( readBytes < (int)(size) && m_boxFile.error() != QFile::NoError ) { // cannot read file
342  kError(5003) <<"KNFolder::loadArticle(KNLocalArticle *a) : corrupted mbox file, IO-error!";
343  return false;
344  }
345 
346  //set content
347  buff.resize( readBytes );
348  a->setContent(buff);
349  a->parse();
350 
351  return true;
352 }
353 
354 
355 bool KNFolder::saveArticles( KNLocalArticle::List &l )
356 {
357  if(!isLoaded()) // loading should not be done here - keep the StorageManager in sync !!
358  return false;
359 
360  if(!m_boxFile.open(QIODevice::WriteOnly | QIODevice::Append)) {
361  kError(5003) <<"KNFolder::saveArticles() : cannot open mbox-file!";
362  closeFiles();
363  return false;
364  }
365 
366  int addCnt=0;
367  bool ret=true;
368  bool clear=false;
369  QTextStream ts(&m_boxFile);
370  ts.setCodec( "ISO 8859-1" );
371 
372  for ( KNLocalArticle::List::Iterator it = l.begin(); it != l.end(); ++it ) {
373 
374  clear=false;
375  if ( (*it)->id() == -1 || (*it)->collection().get() != this ) {
376  if ( (*it)->id() != -1 ) {
377  KNFolder::Ptr oldFolder = boost::static_pointer_cast<KNFolder>( (*it)->collection() );
378  if ( !(*it)->hasContent() )
379  if( !( clear = oldFolder->loadArticle( (*it) ) ) ) {
380  ret = false;
381  continue;
382  }
383 
384  KNLocalArticle::List l;
385  l.append( (*it) );
386  oldFolder->removeArticles( l, false );
387  }
388  append( (*it) );
389  (*it)->setCollection( thisFolderPtr() );
390  addCnt++;
391  }
392 
393  if ( byId( (*it)->id() ) == (*it) ) {
394 
395  //MBox
396  ts << "From aaa@aaa Mon Jan 01 00:00:00 1997\n";
397  ts.flush();
398  (*it)->setStartOffset( m_boxFile.pos() ); //save offset
399 
400  //write overview information
401  ts << "X-KNode-Overview: ";
402  ts << (*it)->subject()->as7BitString(false) << '\t';
403 
404  KMime::Headers::Base* h;
405  if( ( h = (*it)->newsgroups( false ) ) !=0 )
406  ts << h->as7BitString(false);
407  ts << '\t';
408 
409  if( (h = (*it)->to( false ) ) != 0 )
410  ts << h->as7BitString(false);
411  ts << '\t';
412 
413  ts << (*it)->lines()->as7BitString(false) << '\n';
414 
415  //write article
416  (*it)->toStream( ts );
417  ts << "\n";
418  ts.flush();
419 
420  (*it)->setEndOffset( m_boxFile.pos() ); //save offset
421 
422  //update
423  ArticleWidget::articleChanged( (*it) );
424  i_ndexDirty=true;
425 
426  }
427  else {
428  kError(5003) <<"KNFolder::saveArticle() : article not in folder!";
429  ret=false;
430  }
431 
432  if ( clear )
433  (*it)->KNLocalArticle::Content::clear();
434  }
435 
436  closeFiles();
437  syncIndex();
438 
439  if(addCnt>0) {
440  c_ount=length();
441  updateListItem();
442  knGlobals.articleManager()->updateViewForCollection( thisFolderPtr() );
443  }
444 
445  return ret;
446 }
447 
448 
449 void KNFolder::removeArticles( KNLocalArticle::List &l, bool del )
450 {
451  if( !isLoaded() || l.isEmpty() )
452  return;
453 
454  int delCnt = 0;
455  for ( int idx = 0; idx < l.count(); ++idx ) {
456  KNLocalArticle::Ptr a = l[ idx ];
457  if ( a->isLocked() ) {
458  continue;
459  }
460 
461  // check if this article belongs to this folder
462  a = byId( a->id() );
463  if ( !a ) {
464  continue;
465  }
466 
467  //update
468  KNGlobals::self()->articleFactory()->deleteComposerForArticle(a);
469  ArticleWindow::closeAllWindowsForArticle( a );
470  ArticleWidget::articleRemoved( a );
471  delete a->listItem();
472 
473  //delete article
474  remove( a );
475  delCnt++;
476  if(!del)
477  a->setId(-1);
478  }
479 
480  if(delCnt>0) {
481  compact();
482  c_ount-=delCnt;
483  updateListItem();
484  i_ndexDirty=true;
485  }
486 }
487 
488 
489 void KNFolder::deleteAll()
490 {
491  if ( lockedArticles() > 0 ) {
492  return;
493  }
494 
495  if (!unloadHdrs(true))
496  return;
497 
498  clear();
499  c_ount=0;
500  syncIndex(true);
501  updateListItem();
502 }
503 
504 
505 void KNFolder::deleteFiles()
506 {
507  m_boxFile.remove();
508  i_ndexFile.remove();
509  QFile::remove(i_nfoPath);
510 }
511 
512 
513 void KNFolder::syncIndex(bool force)
514 {
515  if(!i_ndexDirty && !force)
516  return;
517 
518  if(!i_ndexFile.open(QIODevice::WriteOnly)) {
519  kError(5003) <<"KNFolder::syncIndex(bool force) : cannot open index-file!";
520  closeFiles();
521  return;
522  }
523 
524  KNLocalArticle::Ptr a;
525  DynData d;
526  for(int idx=0; idx<length(); idx++) {
527  a=at(idx);
528  d.setData(a);
529  i_ndexFile.write((char*)(&d), sizeof(DynData));
530  }
531  closeFiles();
532 
533  i_ndexDirty=false;
534 }
535 
536 
537 void KNFolder::closeFiles()
538 {
539  if(m_boxFile.isOpen())
540  m_boxFile.close();
541  if(i_ndexFile.isOpen())
542  i_ndexFile.close();
543 }
544 
545 
546 //==============================================================================
547 
548 
549 void KNFolder::DynData::setData( KNLocalArticle::Ptr a )
550 {
551  id=a->id();
552  so=a->startOffset();
553  eo=a->endOffset();
554  sId=a->serverId();
555  ti=a->date()->dateTime().toTime_t();
556 
557  flags[0]=a->doMail();
558  flags[1]=a->mailed();
559  flags[2]=a->doPost();
560  flags[3]=a->posted();
561  flags[4]=a->canceled();
562  flags[5]=a->editDisabled();
563 }
564 
565 
566 void KNFolder::DynData::getData( KNLocalArticle::Ptr a )
567 {
568  a->setId(id);
569  KDateTime dt;
570  dt.setTime_t( ti );
571  a->date()->setDateTime( dt );
572  a->setStartOffset(so);
573  a->setEndOffset(eo);
574  a->setServerId(sId);
575  a->setDoMail(flags[0]);
576  a->setMailed(flags[1]);
577  a->setDoPost(flags[2]);
578  a->setPosted(flags[3]);
579  a->setCanceled(flags[4]);
580  a->setEditDisabled(flags[5]);
581 }
582 
583 
584 KNFolder::Ptr KNFolder::thisFolderPtr()
585 {
586  return KNGlobals::self()->folderManager()->folder( id() );
587 }
588 
589 
590 
591 
592 
593 
594 
595 
596 
597 
598 
599 
KNArticleCollection::setLastID
void setLastID()
Definition: knarticlecollection.cpp:230
KNFolder::at
KNLocalArticle::Ptr at(int i)
Definition: knfolder.h:70
KNLocalArticle::Ptr
boost::shared_ptr< KNLocalArticle > Ptr
Shared pointer to a KNLocalArticle. To be used instead of raw KNLocalArticle*.
Definition: knarticle.h:214
KNFolder::saveArticles
bool saveArticles(KNLocalArticle::List &l)
Definition: knfolder.cpp:355
KNFolder::DynData::sId
int sId
Definition: knfolder.h:115
KNFolder::DynData::so
int so
Definition: knfolder.h:115
utilities.h
knfolder.h
KNFolder::closeFiles
void closeFiles()
Definition: knfolder.cpp:537
KNFolder::readInfo
bool readInfo()
Definition: knfolder.cpp:140
articlewidget.h
KNCollection::p_arent
KNCollection::Ptr p_arent
A pointer to the parent collection.
Definition: kncollection.h:93
knarticlefactory.h
KNArticleCollection::isNotUnloadable
bool isNotUnloadable()
Definition: knarticlecollection.h:98
KNFolder::KNFolder
KNFolder()
Definition: knfolder.cpp:39
KNArticleCollection::length
int length()
Definition: knarticlecollection.h:95
KNArticleCollection::lockedArticles
unsigned int lockedArticles()
Definition: knarticlecollection.h:102
KNFolder::isRootFolder
bool isRootFolder()
Definition: knfolder.h:57
KNGlobals::self
static KNGlobals * self()
Return the KNGlobals instance.
Definition: knglobals.cpp:72
KNFolder::~KNFolder
~KNFolder()
Definition: knfolder.cpp:84
knarticlemanager.h
KNFolder::Ptr
boost::shared_ptr< KNFolder > Ptr
Shared pointer to a KNFolder.
Definition: knfolder.h:38
knarticlewindow.h
KNArticleCollection::isLoaded
bool isLoaded()
Definition: knarticlecollection.h:94
KNCollection::name
virtual const QString & name()
Returns the collection name.
Definition: kncollection.h:76
KNFolder::loadArticle
bool loadArticle(KNLocalArticle::Ptr a)
Load the full content of an article.
Definition: knfolder.cpp:314
scoped_cursor_override.h
KNFolder::DynData::ti
time_t ti
Definition: knfolder.h:119
KNFolder::loadHdrs
bool loadHdrs()
Definition: knfolder.cpp:169
KNFolder::unloadHdrs
bool unloadHdrs(bool force=true)
Definition: knfolder.cpp:293
KNLocalArticle
This class encapsulates an article, that is stored locally in an MBOX-file.
Definition: knarticle.h:210
KNCollection::n_ame
QString n_ame
The name of this collection.
Definition: kncollection.h:97
KNFolder::isStandardFolder
bool isStandardFolder()
Definition: knfolder.h:56
KNFolder::DynData::flags
bool flags[6]
Definition: knfolder.h:120
KNGlobals::articleFactory
KNArticleFactory * articleFactory()
Returns the article factory.
Definition: knglobals.cpp:131
KNFolder::byId
KNLocalArticle::Ptr byId(int id)
Definition: knfolder.h:72
KNFolder::DynData
Definition: knfolder.h:108
KNCollection::l_istItem
KNCollectionViewItem * l_istItem
The list view item representing this collection in the folder tree.
Definition: kncollection.h:95
KNFolder::i_ndexDirty
bool i_ndexDirty
Definition: knfolder.h:101
knmainwidget.h
kncollectionviewitem.h
KNFolder::setParent
void setParent(KNCollection::Ptr p)
Sets the parent collection.
Definition: knfolder.cpp:162
KNArticleFactory::deleteComposerForArticle
void deleteComposerForArticle(KNLocalArticle::Ptr a)
Definition: knarticlefactory.cpp:688
KNArticleCollection::clear
void clear()
Definition: knarticlecollection.cpp:200
KNFolder::m_boxFile
QFile m_boxFile
Definition: knfolder.h:103
KNFolder::DynData::setData
void setData(KNLocalArticle::Ptr a)
Definition: knfolder.cpp:549
knglobals.h
KNCollection::Ptr
boost::shared_ptr< KNCollection > Ptr
Shared pointer to a KNCollection.
Definition: kncollection.h:40
knfoldermanager.h
KNArticleCollection::append
void append(KNArticle::Ptr a)
Appends an article to this collection.
Definition: knarticlecollection.cpp:186
KNFolder::deleteAll
void deleteAll()
Definition: knfolder.cpp:489
KNFolder::writeConfig
void writeConfig()
Save the properties/settings of this collection.
Definition: knfolder.cpp:146
KNFolder::deleteFiles
void deleteFiles()
Definition: knfolder.cpp:505
KNArticleCollection::compact
void compact()
Definition: knarticlecollection.cpp:208
KNFolder::path
QString path()
Definition: knfolder.cpp:100
KNFolder::removeArticles
void removeArticles(KNLocalArticle::List &l, bool del=true)
Definition: knfolder.cpp:449
KPIM::FolderTreeWidgetItem::setLabelText
void setLabelText(const QString &label)
Sets the textual data for the "Label" column of the parent FolderTreeWidget.
Definition: foldertreewidget.cpp:439
KNFolder::DynData::getData
void getData(KNLocalArticle::Ptr a)
Definition: knfolder.cpp:566
KNArticleCollection::Ptr
boost::shared_ptr< KNArticleCollection > Ptr
Shared pointer to a KNArticle.
Definition: knarticlecollection.h:82
KNFolder
Representation of a folder.
Definition: knfolder.h:30
KNGlobals::folderManager
KNFolderManager * folderManager()
Returns the folder manager.
Definition: knglobals.cpp:146
KNFolder::i_d
int i_d
Definition: knfolder.h:99
KNArticleCollection
Abstract base class for article collections, ie.
Definition: knarticlecollection.h:76
KNFolder::syncIndex
void syncIndex(bool force=false)
Definition: knfolder.cpp:513
KNode::Utilities::ScopedCursorOverride
This object change the application cursor to a given type and then restore the previous cursor when i...
Definition: scoped_cursor_override.h:36
KNCollection::c_ount
int c_ount
Definition: kncollection.h:98
knhdrviewitem.h
KPIM::FolderTreeWidgetItem::setTotalCount
void setTotalCount(int totalCount)
Sets the total message count to be displayed in the special "Total" column.
Definition: foldertreewidget.cpp:476
KNFolder::w_asOpen
bool w_asOpen
Definition: knfolder.h:102
KNFolder::updateListItem
void updateListItem()
Updates the listview item after the collection has changed.
Definition: knfolder.cpp:90
knGlobals
#define knGlobals
Keep compatibility with the old way.
Definition: knglobals.h:28
KNFolder::DynData::eo
int eo
Definition: knfolder.h:115
KNFolder::i_nfoPath
QString i_nfoPath
Definition: knfolder.h:105
KNFolder::i_ndexFile
QFile i_ndexFile
Definition: knfolder.h:104
KNFolderManager::folder
KNFolder::Ptr folder(int id)
Definition: knfoldermanager.cpp:130
QList
KNFolder::p_arentId
int p_arentId
Definition: knfolder.h:100
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