| Revision 1 (by moose, 2006/03/06 10:35:57) |
Initial Import
|
#include "SciQWorkspace.h"
#include <qdebug.h>
#include "SciQApp.h"
#include "SciQUtil.h"
SciQWorkspaceDirItem::SciQWorkspaceDirItem(QString n, SciQWorkspaceItem *p, SciQWorkspace *w) :
SciQWorkspaceItem(SciQWorkspaceItem::Dir, n, p, w), populated(false)
{
dir = QDir(getPath());
}
SciQWorkspaceDirItem::~SciQWorkspaceDirItem()
{
for(int i = 0; i < list.count(); ++i)
delete list[i];
}
// protected:
void SciQWorkspaceDirItem::populate()
{
if(populated)
return;
dir.refresh();
QFileInfoList fil = dir.entryInfoList(QDir::Dirs | QDir::Files | QDir::Hidden, QDir::DirsFirst | QDir::Type);
for(int i = 0; i < fil.count(); ++i) {
QString cur_name = fil[i].fileName();
if(cur_name == "." || cur_name == "..")
continue;
SciQWorkspaceItem *item = addChild(cur_name, "");
(void)item;
//SciQMWBase *mw = (SciQMWBase *)
//qDebug() << __PRETTY_FUNCTION__ << " :: " << fil[i].absoluteFilePath();
}
populated = true;
}
// Update child list if need be.
void SciQWorkspaceDirItem::update()
{
SciQWorkspaceItem::update();
if(!(flags & SciQWorkspaceItem::Modified))
return;
// if(!populated)
// populate();
flags &= ~SciQWorkspaceItem::Modified;
// qDebug("dir, %s has been modified", qPrintable(name));
dir.refresh();
//qDebug() << dir.absolutePath();
// TODO: reimp? this could possibly be a little slow/inneficient. maybe store a couple lists, one for new items, and one for changed items?
// QFileInfoList fil = dir.entryInfoList(QDir::Dirs | QDir::Files | QDir::Hidden);
// for(int i = 0; i < fil.count(); ++i) {
// if(fil[i].fileName() == "." || fil[i].fileName() == "..")
// continue;
//
// for(int j = 0; j < list.count(); ++j) {
// QFileInfo fi(list[j]->getName());
// if(fi.fileName() == fil[i].fileName()) {
// SciQWorkspaceItem *item = list[j];
//// item->update();
// }
// }
//
// //qDebug() << fil[i].absoluteFilePath();
// }
}
// public:
int SciQWorkspaceDirItem::childCount()
{
// update();
return list.count();
}
SciQWorkspaceItem *SciQWorkspaceDirItem::child(int i)
{
// update();
if(i < 0 || i >= list.count())
return 0;
//qDebug() << __PRETTY_FUNCTION__ << " " << i << ": " << list.at(i)->getName();
return list[i];
}
SciQWorkspaceItem *SciQWorkspaceDirItem::addChild(QString cname, QString icon)
{
// qDebug() << "Append: " << name;
for(int i = 0; i < list.count(); ++i) {
if(list[i]->getName() == cname)
return 0;
}
QFileInfo fi(catdir(QStringList() + path + cname));
//qDebug() << __PRETTY_FUNCTION__ << ": " << fi.absoluteFilePath();
if(fi.isDir()) {
SciQWorkspaceDirItem *dir = new SciQWorkspaceDirItem(cname, this, ws);
dir->flags |= SciQWorkspaceItem::New | SciQWorkspaceItem::Modified;
list.append(dir);
// qDebug() << "Append Dir: " << name;
//if(!populated)
// dir->populate();
return dir;
} else
if(fi.isFile()) {
SciQWorkspaceFileItem *file = new SciQWorkspaceFileItem(cname, this, ws);
file->flags |= SciQWorkspaceItem::New | SciQWorkspaceItem::Modified;
list.append(file);
// qDebug() << "Append File: " << cname;
// if(parent) qDebug() << "\tTo: " << name;
return file;
}
return 0;
}
SciQWorkspaceItemList SciQWorkspaceDirItem::childList(Flags f)
{
// update();
SciQWorkspaceItemList ret;
for(int i = 0; i < list.count(); ++i) {
if(list[i]->flag(f)) // will this work? we'll see.
ret.append(list[i]);
}
return ret;
}
QIcon SciQWorkspaceDirItem::getIcon()
{
return SciQApp::getIcon("folder");
}