ObjectItem *CObjectModel::getObject(const QModelIndex &index)
{
	if ( !index.isValid() ) { return NULL ; }
	ObjectItem *p = static_cast<ObjectItem *>(index.internalPointer()) ;
	while ( p->parent() != m_pRoot ) {
		p = p->parent() ;
	}
	return p ;
}
bool CObjectModel::isLayer(const QModelIndex &index) const
{
	if ( !index.isValid() ) { return false ; }
	ObjectItem *p = getItemFromIndex(index) ;
	return p->parent() == m_pRoot ? false : true ;
//	return index.parent().internalPointer() != m_pRoot ? true : false ;
}
bool CObjectModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent)
{
	if ( action == Qt::IgnoreAction ) { return true ; }
	if ( !data->hasFormat("AnimationCreator/object.item.list") ) { return false ; }
	if ( column > 0 ) { return false ; }

	qDebug() << "dropMimeData row:" << row << " col:" << column ;
	qDebug() << " parent:" << parent << " action:" << action ;

	QByteArray encodeData = data->data("AnimationCreator/object.item.list") ;
	QDataStream stream(&encodeData, QIODevice::ReadOnly) ;

	while ( !stream.atEnd() ) {
		quint64 val ;
		ObjectItem *p ;
		stream >> val ;
		p = reinterpret_cast<ObjectItem *>(val) ;

		if ( p->parent() == m_pRoot ) {	// オブジェクト
			if ( !parent.isValid() ) {
				emit sig_copyIndex(row, p, parent, action) ;
			}
		}
		else {							// レイヤ
			if ( parent.isValid() ) {
				emit sig_copyIndex(row, p, parent, action) ;
			}
		}
	}

	return true ;
}
QModelIndex CObjectModel::parent(const QModelIndex &child) const
{
	if ( !child.isValid() ) { return QModelIndex() ; }
	ObjectItem *c = static_cast<ObjectItem *>(child.internalPointer()) ;
	ObjectItem *p = c->parent() ;
	if ( p == m_pRoot || c == m_pRoot ) { return QModelIndex() ; }
	return createIndex(p->row(), 0, p) ;
}
QString ObjectListView::GeneratePath(QTreeWidgetItem *item)
{
	ObjectItem *objitem = (ObjectItem*)item;
	char buf[50];
	QString res = QString();
	
	while (objitem->parent() != 0)
	{
		objitem->GetAttrib().toString(buf, 50);
		res.prepend(QString().sprintf(" %s ", buf));
		objitem = (ObjectItem*)objitem->parent();
	}

	objitem->GetValue().toString(buf, 50);
	res.prepend(buf);

	return res;
}