void AccountingSelector::insertDir(QDir d, QListViewItem *root) { QListViewItem* tli = 0; // sanity check if(!d.exists() || !d.isReadable()) return; // set up filter d.setNameFilter("*.rst"); d.setFilter(QDir::Files); d.setSorting(QDir::Name); // read the list of files const QFileInfoList_qt3 *list = d.entryInfoList_qt3(); QFileInfoListIterator it( *list ); QFileInfo *fi; // traverse the list and insert into the widget while((fi = it.current())) { ++it; QString samename = fi->fileName(); QListViewItem *i = findByName(samename); // skip this file if already in tree if(i) continue; // check if this is the file we should mark QString name = fileNameToName(fi->baseName(true)); if(root) tli = new QListViewItem(root, name); else tli = new QListViewItem(tl, name); tli->setPixmap(0, pmfile); // check if this is the item we are searching for // (only in "Edit"-mode, not in "New"-mode if(!isnewaccount && !edit_s.isEmpty() && (edit_s == QString(fi->filePath()).right(edit_s.length()))) { edit_item = tli; } } // set up a filter for the directories d.setFilter(QDir::Dirs); d.setNameFilter("*"); const QFileInfoList_qt3 *dlist = d.entryInfoList_qt3(); QFileInfoListIterator dit(*dlist); while((fi = dit.current())) { // skip "." and ".." directories if(fi->fileName().left(1) != ".") { // convert to human-readable name QString name = fileNameToName(fi->fileName()); // if the tree already has an item with this name, // skip creation and use this one, otherwise // create a new entry QListViewItem *i = findByName(name); if(!i) { QListViewItem* item; if(root) item = new QListViewItem(root, name); else item = new QListViewItem(tl, name); item->setPixmap(0, pmfolder); insertDir(QDir(fi->filePath()), item); } else insertDir(QDir(fi->filePath()), i); } ++dit; } }