Revision 1 (by moose, 2006/03/06 10:35:57) Initial Import
#include "SciQWorkspaceModel.h"
#include <QDebug>
SciQWorkspaceModel::SciQWorkspaceModel(SciQWorkspaceItem *i, QObject *parent) :
	QAbstractItemModel(parent), root(i) { }

SciQWorkspaceModel::~SciQWorkspaceModel() { }

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) {
		return QVariant(i->getName());
	}

	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
{
	SciQWorkspaceItem *i = 0;
	if(row >= rowCount(pmi))
		return QModelIndex();

	if (!pmi.isValid())
		i = static_cast<SciQWorkspaceItem *>(root);
	else
		i = (SciQWorkspaceItem *)pmi.internalPointer();

	if(!i)
		return QModelIndex();

	SciQWorkspaceItem *childItem = i->child(row);
	if (childItem) {
//		qDebug() << __PRETTY_FUNCTION__ << ": " << i->getName() << "::" << row << ":" << childItem->row() << " : " << i->childCount();
		return createIndex(row, column, childItem);
	}

	return QModelIndex();
}

QModelIndex SciQWorkspaceModel::parent(const QModelIndex &index) const
{
	if (!index.isValid())
		return QModelIndex();

	SciQWorkspaceItem *i = (SciQWorkspaceItem *)index.internalPointer();
	if (!i || i == root)
		return QModelIndex();

	SciQWorkspaceItem *p = i->getParent();
	if(p) {
		int prow = p->row();
//		qDebug() << prow;
		return createIndex(prow >= 0 ? prow : 0, 0, p);
	}
	return QModelIndex();
}

int SciQWorkspaceModel::rowCount(const QModelIndex &pmi) const
{
	SciQWorkspaceItem *i;

	if (!pmi.isValid())
		i = static_cast<SciQWorkspaceItem *>(root);
	else
		i = (SciQWorkspaceItem *)pmi.internalPointer();

	if(!i)
		return 0;

	int count = 0;

	count = i->childCount();

//	qDebug() << __PRETTY_FUNCTION__ << ": " << count << ": " << i->getName();

	return count > -1 ? count : 0;
}

int SciQWorkspaceModel::columnCount(const QModelIndex&) const
{
	return 1;
}

/*
bool SciQWorkspaceModel::hasChildren ( const QModelIndex & parent ) const
{
	SciQWorkspaceItem *i;

	if (!parent.isValid())
		i = root;
	else
		i = (SciQWorkspaceItem *)parent.internalPointer();

	if(!i)
		return false;

	return i->childCount();

}*/