cutter/src/widgets/ResourcesWidget.cpp

122 lines
2.9 KiB
C++
Raw Normal View History

2018-02-04 17:27:48 +00:00
#include "utils/Helpers.h"
2018-02-04 14:32:18 +00:00
#include "ResourcesWidget.h"
#include "MainWindow.h"
2018-02-04 14:32:18 +00:00
#include <QVBoxLayout>
ResourcesModel::ResourcesModel(QList<ResourcesDescription> *resources, QObject *parent)
: QAbstractListModel(parent),
resources(resources)
{
}
int ResourcesModel::rowCount(const QModelIndex &) const
{
return resources->count();
}
int ResourcesModel::columnCount(const QModelIndex &) const
{
return Columns::COUNT;
}
QVariant ResourcesModel::data(const QModelIndex &index, int role) const
{
2018-02-09 13:19:36 +00:00
const ResourcesDescription &res = resources->at(index.row());
2018-02-04 14:32:18 +00:00
switch (role)
{
case Qt::DisplayRole:
switch (index.column())
{
case NAME:
2018-02-09 13:19:36 +00:00
return res.name;
2018-02-04 14:32:18 +00:00
case VADDR:
2018-02-09 13:19:36 +00:00
return RAddressString(res.vaddr);
2018-02-04 14:32:18 +00:00
case INDEX:
2018-02-09 13:19:36 +00:00
return res.index;
2018-02-04 14:32:18 +00:00
case TYPE:
2018-02-09 13:19:36 +00:00
return res.type;
2018-02-04 14:32:18 +00:00
case SIZE:
2018-02-09 13:19:36 +00:00
return qhelpers::formatBytecount(res.size);
2018-02-04 14:32:18 +00:00
case LANG:
2018-02-09 13:19:36 +00:00
return res.lang;
2018-02-04 14:32:18 +00:00
default:
return QVariant();
}
2018-02-09 13:19:36 +00:00
case Qt::UserRole:
return QVariant::fromValue(res);
2018-02-04 14:32:18 +00:00
default:
return QVariant();
}
}
QVariant ResourcesModel::headerData(int section, Qt::Orientation, int role) const
{
switch (role)
{
case Qt::DisplayRole:
switch (section)
{
case NAME:
return tr("Name");
case VADDR:
return tr("Vaddr");
case INDEX:
return tr("Index");
case TYPE:
return tr("Type");
case SIZE:
return tr("Size");
case LANG:
return tr("Lang");
default:
return QVariant();
}
default:
return QVariant();
}
}
void ResourcesModel::beginReload()
{
beginResetModel();
}
void ResourcesModel::endReload()
{
endResetModel();
}
ResourcesWidget::ResourcesWidget(MainWindow *main, QAction *action) :
CutterDockWidget(main, action)
2018-02-04 14:32:18 +00:00
{
2018-03-03 17:48:39 +00:00
setObjectName("ResourcesWidget");
2018-02-04 14:32:18 +00:00
model = new ResourcesModel(&resources, this);
// Configure widget
this->setWindowTitle(tr("Resources"));
// Add resources tree view
view = new QTreeView(this);
view->setModel(model);
view->show();
this->setWidget(view);
connect(Core(), SIGNAL(refreshAll()), this, SLOT(refreshResources()));
connect(view, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(onDoubleClicked(const QModelIndex &)));
}
void ResourcesWidget::refreshResources()
{
model->beginReload();
resources = Core()->getAllResources();
model->endReload();
}
void ResourcesWidget::onDoubleClicked(const QModelIndex &index)
{
2018-02-09 13:19:36 +00:00
ResourcesDescription res = index.data(Qt::UserRole).value<ResourcesDescription>();
2018-02-04 14:32:18 +00:00
CutterCore::getInstance()->seek(res.vaddr);
}