| Revision 1 (by moose, 2006/03/06 10:35:57) |
Initial Import
|
#include <qdebug.h>
#include "SciQWorkspace.h"
#include "SciQUtil.h"
#include "SciQWorkspaceModel.h"
SciQWorkspaceModel::SciQWorkspaceModel(SciQWorkspaceItem *i, QObject *parent) :
QAbstractItemModel(parent), root(i)
{
root->update();
}
SciQWorkspaceModel::~SciQWorkspaceModel()
{
// empty?
}
QVariant SciQWorkspaceModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid() /*|| index.column() != 0*/)
return QVariant();
SciQWorkspaceItem *i = static_cast<SciQWorkspaceItem *>(index.internalPointer());
if (role == Qt::DisplayRole) {
QFileInfo fi(i->getName());
// qDebug() << fi.fileName();
return QVariant(fi.fileName());
} else
if(role == Qt::DecorationRole)
return QVariant(i->getIcon());
return QVariant();
}
Qt::ItemFlags SciQWorkspaceModel::flags(const QModelIndex &index) const
{
if (!index.isValid())
return Qt::ItemIsEnabled;
return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
}
QVariant SciQWorkspaceModel::headerData(int section, Qt::Orientation orientation, int role) const
{
if(!section)
return QVariant("Workspace");
return QVariant();
}
QModelIndex SciQWorkspaceModel::index(int row, int column, const QModelIndex &pmi) const
{
SciQWorkspaceDirItem *i = 0;
if (!pmi.isValid())
i = static_cast<SciQWorkspaceDirItem *>(root);
else
i = static_cast<SciQWorkspaceDirItem *>((SciQWorkspaceItem *)pmi.internalPointer());
if(!i)
return QModelIndex();
SciQWorkspaceItem *childItem = i->child(row);
if (childItem) {
// qDebug() << __PRETTY_FUNCTION__ << ": " << i->getName() << "::" << childItem->getName() << " :: " << row << ":" << i->childCount();
return createIndex(row, column, childItem);
}
return QModelIndex();
}
QModelIndex SciQWorkspaceModel::parent(const QModelIndex &index) const
{
if (!index.isValid())
return QModelIndex();
SciQWorkspaceDirItem *i = static_cast<SciQWorkspaceDirItem *>((SciQWorkspaceItem *)index.internalPointer());
if (!i || i == root)
return QModelIndex();
SciQWorkspaceDirItem *p = static_cast<SciQWorkspaceDirItem *>(i->getParent());
if(p)
return createIndex(p->row(), 0, p);
return QModelIndex();
}
int SciQWorkspaceModel::rowCount(const QModelIndex &pmi) const
{
SciQWorkspaceDirItem *i;
if (!pmi.isValid())
i = static_cast<SciQWorkspaceDirItem *>(root);
else
i = static_cast<SciQWorkspaceDirItem *>((SciQWorkspaceItem *)pmi.internalPointer());
if(!i)
return 0;
if(!i->populated) // lazy poulation
i->populate();
int count = 0;
count = i->list.count();
//qDebug() << __PRETTY_FUNCTION__ << ": " << count << ": " << i->getName();
return count;
}
int SciQWorkspaceModel::columnCount(const QModelIndex&) const
{
return 1;
}
bool SciQWorkspaceModel::hasChildren ( const QModelIndex & parent ) const
{
SciQWorkspaceDirItem *i;
if (!parent.isValid())
i = dynamic_cast<SciQWorkspaceDirItem *>(root);
else
i = dynamic_cast<SciQWorkspaceDirItem *>((SciQWorkspaceItem *)parent.internalPointer());
if(!i)
return false;
return i->populated ? (bool)i->list.count() : true;
}