98 lines
2.5 KiB
C++
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();
|
|
}
|