Archived
1
Fork 0
This repository has been archived on 2025-04-12. You can view files and clone it, but cannot push or open issues or pull requests.
graph/tools/leveleditor/src/hierarchy.cpp

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);
}