58 lines
1.5 KiB
C++
Executable file
58 lines
1.5 KiB
C++
Executable file
#include "hierarchy.h"
|
|
|
|
#include <QVBoxLayout>
|
|
|
|
#include "context.h"
|
|
#include "ecs.h"
|
|
#include "worldmanager.h"
|
|
|
|
Hierarchy::Hierarchy(Context& context, QWidget* parent) : QWidget(parent), context(context) {
|
|
setWindowTitle("Hierarchy");
|
|
setWindowIcon(QIcon::fromTheme("view-sort-ascending"));
|
|
|
|
QVBoxLayout* layout = new QVBoxLayout();
|
|
setLayout(layout);
|
|
|
|
listView = new QListView();
|
|
layout->addWidget(listView);
|
|
|
|
connect(listView, &QListView::clicked, [&context](QModelIndex index) {
|
|
context.selectedEntities.clear();
|
|
|
|
if(index.isValid()) {
|
|
const auto entities = ECS::getWorldEntities(worldManager.getCurrentWorld());
|
|
|
|
QList<EntityID> filteredEntities;
|
|
for(auto entity : entities) {
|
|
const auto info = ECS::getComponent<InfoComponent>(entity);
|
|
if(info)
|
|
filteredEntities.push_back(entity);
|
|
}
|
|
|
|
context.selectedEntities.push_back(filteredEntities[index.row()]);
|
|
}
|
|
|
|
emit context.selectionChanged();
|
|
});
|
|
|
|
listModel = new QStringListModel();
|
|
listView->setModel(listModel);
|
|
|
|
connect(&context, &Context::entitiesChanged, this, &Hierarchy::rebuild);
|
|
|
|
rebuild();
|
|
}
|
|
|
|
void Hierarchy::rebuild() {
|
|
const auto entities = ECS::getWorldEntities(worldManager.getCurrentWorld());
|
|
|
|
QStringList list;
|
|
|
|
for(auto entity : entities) {
|
|
const auto info = ECS::getComponent<InfoComponent>(entity);
|
|
if(info)
|
|
list << info->name.c_str();
|
|
}
|
|
|
|
listModel->setStringList(list);
|
|
}
|