#include "hierarchy.h" #include #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 filteredEntities; for(auto entity : entities) { const auto info = ECS::getComponent(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(entity); if(info) list << info->name.c_str(); } listModel->setStringList(list); }