XPlor/app/treebuilder.h
njohnson 272216a7d5 Fix TreeBuilder assignment and xscript-cli linking
- Change TreeBuilder m_registry from reference to pointer to allow assignment
- Add default constructor to TreeBuilder for member initialization
- Add Xbox SDK xcompress64 library to xscript-cli linker dependencies

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-11 12:39:18 -05:00

54 lines
1.6 KiB
C++

#ifndef TREEBUILDER_H
#define TREEBUILDER_H
#include "dslkeys.h"
#include <QVariantMap>
#include <QString>
#include <QHash>
#include <optional>
class XTreeWidget;
class XTreeWidgetItem;
class TypeRegistry;
class TreeBuilder
{
public:
TreeBuilder() : m_tree(nullptr), m_registry(nullptr) {}
TreeBuilder(XTreeWidget* tree, const TypeRegistry& registry);
// Build tree from parsed data
void addParsedFile(const QString& typeName, const QVariantMap& vars, const QString& fileName);
// Category management
XTreeWidgetItem* ensureTypeCategoryRoot(const QString& typeName, const QString& displayOverride = {});
XTreeWidgetItem* ensureSubcategory(XTreeWidgetItem* parent, const QString& childTypeName);
// Instance management
XTreeWidgetItem* addInstanceNode(XTreeWidgetItem* parent, const QString& displayName,
const QString& typeName, const QVariantMap& vars);
// Recursively route nested objects into tree
void routeNestedObjects(XTreeWidgetItem* parent, const QVariantMap& vars);
// Post-processing
void organizeChildrenByExtension(XTreeWidgetItem* parent);
void updateNodeCounts(XTreeWidgetItem* node);
// Utilities
QString pluralizeType(const QString& typeName) const;
static QString instanceDisplayFor(const QVariantMap& obj, const QString& fallbackType,
const QString& fallbackKey = {}, std::optional<int> index = std::nullopt);
// Clear all category roots
void reset();
private:
XTreeWidget* m_tree;
const TypeRegistry* m_registry;
QHash<QString, XTreeWidgetItem*> m_categoryRoots;
};
#endif // TREEBUILDER_H