QtDebugger/src/qtresourcemodel.cpp

98 lines
2.5 KiB
C++

#include "qtresourcemodel.h"
#include <QFileInfo>
QtResourceModel::QtResourceModel( const QDir& root, QObject* parent ) :
QAbstractItemModel( parent ),
root( root.absolutePath() )
{
}
QtResourceModel::~QtResourceModel() {
for( internalData* inter : internals ) {
delete inter;
}
internals.clear();
}
QModelIndex QtResourceModel::index(int row, int column, const QModelIndex& parent) const {
if (!hasIndex(row, column, parent))
return QModelIndex();
internalData* parentItem;
if (parent.isValid()) {
parentItem = static_cast<internalData*>(parent.internalPointer());
} else {
parentItem = new internalData( root, "." );
// internals.append( parentItem );
}
if (parentItem->isDir()) {
QDir parentDir( parentItem->absolutePath() );
QFileInfoList entrys = parentDir.entryInfoList(QDir::Filter::AllEntries, QDir::SortFlag::DirsFirst | QDir::SortFlag::Name );
if ( entrys.size() < row ) {
internalData* childItem = new internalData( entrys.at(row) );
// internals.append( childItem );
return createIndex(row, column, childItem);
}
}
return QModelIndex();
}
QModelIndex QtResourceModel::parent(const QModelIndex& index) const {
if (!index.isValid())
return QModelIndex();
internalData* childItem = static_cast<internalData*>(index.internalPointer());
internalData* parentItem = new internalData( childItem->dir().absolutePath() );
// internals.append( parentItem );
if (parentItem->absolutePath() == root.absolutePath())
return QModelIndex();
return createIndex(0, 0, parentItem);
}
int QtResourceModel::rowCount(const QModelIndex& parent) const {
if (parent.column() > 0)
return 0;
QDir parentDir;
if( parent.isValid() ) {
internalData* parentItem = static_cast<internalData*>(parent.internalPointer());
if ( ! parentItem->isDir()) {
return 0;
}
parentDir = QDir( parentItem->absolutePath() );
} else {
parentDir = root;
}
QFileInfoList entrys = parentDir.entryInfoList(QDir::Filter::AllEntries, QDir::SortFlag::DirsFirst | QDir::SortFlag::Name );
return entrys.size();
}
int QtResourceModel::columnCount(const QModelIndex& parent) const {
return 2;
}
QVariant QtResourceModel::data(const QModelIndex& index, int role) const {
if (!index.isValid())
return QVariant();
internalData* item = static_cast<internalData*>( index.internalPointer() );
if (role == Qt::DisplayRole) {
if ( index.column() == 0)
return QVariant( item->fileName() );
if ( index.column() == 1)
return QVariant( item->size() );
}
return QVariant();
}