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;

}