OpenCores
URL https://opencores.org/ocsvn/ezidebug/ezidebug/trunk

Subversion Repositories ezidebug

[/] [ezidebug/] [trunk/] [EziDebug_src/] [ezidebugtreemodel.cpp] - Rev 2

Compare with Previous | Blame | View Log

#include <QString>
#include <QList>
#include <QDebug>
#include <QFileIconProvider>
#include "ezidebuginstancetreeitem.h"
#include "ezidebugtreemodel.h"
 
 
EziDebugTreeModel::EziDebugTreeModel(EziDebugInstanceTreeItem* item, QObject *parent)\
    :QAbstractItemModel(parent)
{
    m_pinstanceTopItem = item ;
    m_pheadItem = new EziDebugInstanceTreeItem("module","instance");
    m_pheadItem->setItemParent(NULL);
    m_pheadItem->appendChild(m_pinstanceTopItem);
 
    m_pinstanceTopItem->setItemParent(m_pheadItem);
 
}
 
 
EziDebugTreeModel::~EziDebugTreeModel()
{
    if(m_pheadItem)
        delete m_pheadItem ;
    m_pheadItem = NULL ;
}
 
QVariant EziDebugTreeModel::data(const QModelIndex &index, int role) const
{
 
    QIcon iexistChainIcon(tr(":/images/yeschain.png"));
    QIcon inoChainIcon(tr(":/images/nochain.png"));
 
 
    EziDebugInstanceTreeItem* pparentItem = static_cast<EziDebugInstanceTreeItem*>(index.internalPointer());
 
    // index 无效 则返回 QVariant()
    if (!index.isValid())
        return QVariant();
    //
    if (role == Qt::DisplayRole)
    {
        return (pparentItem->getNameData());
    }
 
    if (role == Qt::DecorationRole)
    {
        if (index.column() == 0)
        {
            if(pparentItem->getScanChainInfo())
                return iexistChainIcon ;
            else
                return inoChainIcon ;
        }
            //return iconProvider.icon(QFileIconProvider::Folder);
       // return iconProvider.icon(QFileIconProvider::File);
    }
    return QVariant();
}
 
Qt::ItemFlags EziDebugTreeModel::flags(const QModelIndex &index) const
{
    if (!index.isValid())
        return 0;
 
    return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
}
 
QVariant EziDebugTreeModel::headerData(int section, Qt::Orientation orientation, \
                    int role) const
{
    QString iheadData = "Node Tree" ;
    if (orientation == Qt::Horizontal && role == Qt::DisplayRole)
        return iheadData ;
 
    return QVariant();
}
 
// 获得 parent 的 row 行 column 列 的 modelIndex
QModelIndex EziDebugTreeModel::index(int row, int column, const QModelIndex &parent) const
{
    //如果行列在允许范围之内
    if(!hasIndex(row, column, parent))
    {
      return QModelIndex();
    }
 
    EziDebugInstanceTreeItem * pparentItem;
 
    if (!parent.isValid())
        //return QModelIndex();
        pparentItem = m_pheadItem ;
    else
        pparentItem = static_cast<EziDebugInstanceTreeItem*>(parent.internalPointer());
 
    EziDebugInstanceTreeItem *pchildItem = pparentItem->child(row);
    // qDebug() << pchildItem << "first" << column ;
    //qDebug() << pchildItem << row << column << pparentItem;
    //qDebug() << QObject::tr("创建index") << QObject::tr("行数") << row;
 
    //qDebug() << "index" << pchildItem->getModuleName() << pchildItem->getInstanceName()  ;
    if (pchildItem)
        return createIndex(row, column, pchildItem);
    else
        return QModelIndex();
 
}
 
// 根据 child 的 modelIndex 获取  parent 的 modelIndex
QModelIndex EziDebugTreeModel::parent(const QModelIndex &child) const
{
    //qDebug() << "parent" << __LINE__  ;
    if(child.isValid())
    {
        EziDebugInstanceTreeItem *pchildItem = static_cast<EziDebugInstanceTreeItem*>(child.internalPointer());
 
        EziDebugInstanceTreeItem *pparentItem = pchildItem->parent();
        // qDebug() << pchildItem << "result" << child.row() << child.column();
 
        if (pparentItem == m_pheadItem)
        {
            return QModelIndex();
        }
        else
        {
            //  return createIndex(0, 0, pparentItem);
            //qDebug() << "parent" <<  pparentItem->row() ;
            return createIndex(pparentItem->row(), 0, pparentItem);
        }
    }
    return QModelIndex();
}
 
// 父节点下面有多少行
int EziDebugTreeModel::rowCount(const QModelIndex &parent) const
{
    //qDebug() << "rowCount" << __LINE__  ;
    EziDebugInstanceTreeItem *pparentItem;
    if (parent.column() > 1)
        return 0 ;
 
    if (!parent.isValid())
        pparentItem = m_pheadItem ;
    else
        pparentItem = static_cast<EziDebugInstanceTreeItem*>(parent.internalPointer());
    //qDebug() << QObject::tr("获取节点下面多少行") << pparentItem->getModuleName() << pparentItem->childCount() ;
    return pparentItem->childCount();
}
 
int EziDebugTreeModel::columnCount(const QModelIndex &parent) const
{
    if (parent.isValid())
        return 1 ;
    else
        return 1 ;
 
}
 
EziDebugInstanceTreeItem* EziDebugTreeModel::getInstanceTreeRootItem(void)
{
    return m_pinstanceTopItem ;
}
 
void  EziDebugTreeModel::setInstanceTreeRootItem(EziDebugInstanceTreeItem* item)
{
    m_pheadItem->removeChild(m_pinstanceTopItem);
 
    m_pinstanceTopItem = item ;
 
    m_pheadItem->appendChild(m_pinstanceTopItem);
 
    m_pinstanceTopItem->setItemParent(m_pheadItem);
 
    return ;
}
 
 
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.