You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
1.6 KiB
74 lines
1.6 KiB
#include <stdlib.h> |
|
#include <qfileinf.h> |
|
#include "util.h" |
|
#include "kmfoldertree.moc" |
|
|
|
KMFolderTree::KMFolderTree(QWidget *parent=0,const char *name=0) : KTreeList(parent,name) { |
|
connect(this,SIGNAL(highlighted(int)),this,SLOT(doFolderSelected(int))); |
|
getList(); |
|
} |
|
|
|
void KMFolderTree::cdFolder(QDir *dir,int index=-1) { |
|
KPath p,q; |
|
QString *s; |
|
dir->cd(QDir::home().path()); |
|
dir->cd(".kmail/folders"); |
|
if (index==-1) { |
|
index=currentItem(); |
|
if (index==-1) return; |
|
} |
|
p=*(itemPath(index)); |
|
while (!(p.isEmpty())) { |
|
s=p.pop(); // reverse the path order, so that I can cd with it |
|
q.push(s); // the treewidget needs a redesign :-( |
|
} |
|
q.pop(); // get rid of "/" |
|
while (!(q.isEmpty())) dir->cd(*q.pop()); |
|
} |
|
|
|
void KMFolderTree::getList() { |
|
QDir *d; |
|
KPath *p; |
|
char buf[255]; |
|
strcpy(buf,QDir::home().path()); |
|
strcat(buf,"/.kmail/folders"); |
|
clear(); |
|
insertItem("/",NULL,-1); |
|
d=new QDir(buf,NULL,QDir::Name,QDir::Dirs); |
|
p=new KPath(); |
|
p->push(new QString("/")); |
|
getListRecur(d,p); |
|
delete p; |
|
delete d; |
|
setExpandLevel(10); |
|
} |
|
|
|
void KMFolderTree::getListRecur(QDir *d,KPath *p) { |
|
QString s; |
|
d->setFilter(QDir::Dirs | QDir::Hidden); |
|
d->setNameFilter("*"); |
|
const QFileInfoList *list=d->entryInfoList(); |
|
QFileInfoListIterator it(*list); |
|
QFileInfo *fi; |
|
while ((fi=(it.current()))!=0) { |
|
if ((fi->fileName()!=".") && (fi->fileName()!="..")) { |
|
s=fi->fileName(); |
|
addChildItem(s,NULL,p); |
|
QDir *e=new QDir(*d); |
|
e->cd(s); |
|
p->push(&s); |
|
getListRecur(e,p); |
|
p->pop(); |
|
delete e; |
|
} |
|
++it; |
|
} |
|
} |
|
|
|
void KMFolderTree::doFolderSelected(int index) { |
|
QDir d; |
|
cdFolder(&d,index); |
|
d.convertToAbs(); |
|
emit folderSelected(&d); |
|
} |
|
|
|
|