53 lines
1.6 KiB
C
53 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(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
|