1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
#pragma once
#include "ieclass.h"
#include "wxutil/dataview/DeclarationTreeView.h"
#include "wxutil/dataview/ThreadedDeclarationTreePopulator.h"
namespace ui
{
class ThreadedEntityDefPopulator :
public wxutil::ThreadedDeclarationTreePopulator
{
private:
const wxutil::DeclarationTreeView::Columns& _columns;
public:
ThreadedEntityDefPopulator(const wxutil::DeclarationTreeView::Columns& columns, const std::string& iconName) :
ThreadedDeclarationTreePopulator(decl::Type::EntityDef, columns, iconName),
_columns(columns)
{}
~ThreadedEntityDefPopulator() override
{
EnsureStopped();
}
protected:
// Predicate to be implemented by subclasses. Returns true if the eclass should be listed.
virtual bool ClassShouldBeListed(const IEntityClassPtr& eclass) = 0;
void PopulateModel(const wxutil::TreeModel::Ptr& model) override
{
GlobalEntityClassManager().forEachEntityClass([&](const IEntityClassPtr& eclass)
{
ThrowIfCancellationRequested();
// Don't include hidden eclasses
if (eclass->getVisibility() == vfs::Visibility::HIDDEN) return;
if (!ClassShouldBeListed(eclass)) return;
auto row = model->AddItem();
const auto& declName = eclass->getDeclName();
AssignValuesToRow(row, declName, declName, declName, false);
});
}
};
}
|