Navigation Menu

Skip to content

Commit

Permalink
#6021: Move common code to ThreadedDeclarationTreePopulator. Declarat…
Browse files Browse the repository at this point in the history
…ionTreeView defines the declName column to be the one to be used when adding/removing favourites in ResourceTreeView.

This also fixes a few glaring copy/paste errors in the various populator classes.
  • Loading branch information
codereader committed Jul 29, 2022
1 parent a506aac commit 510d071
Show file tree
Hide file tree
Showing 14 changed files with 63 additions and 58 deletions.
1 change: 1 addition & 0 deletions libs/wxutil/dataview/DeclarationTreeView.cpp
Expand Up @@ -17,6 +17,7 @@ DeclarationTreeView::DeclarationTreeView(wxWindow* parent, decl::Type declType,
_columns(columns),
_declType(declType)
{
SetFavouriteKeyColumn(_columns.declName);
EnableFavouriteManagement(decl::getTypeName(_declType));
}

Expand Down
12 changes: 9 additions & 3 deletions libs/wxutil/dataview/ResourceTreeView.cpp
Expand Up @@ -46,7 +46,8 @@ ResourceTreeView::ResourceTreeView(wxWindow* parent, const TreeModel::Ptr& model
_expandTopLevelItemsAfterPopulation(false),
_columnToSelectAfterPopulation(nullptr),
_setFavouritesRecursively(true),
_declPathColumn(_columns.fullName)
_declPathColumn(_columns.fullName),
_favouriteKeyColumn(_columns.fullName)
{
_treeStore = model;

Expand Down Expand Up @@ -518,16 +519,21 @@ void ResourceTreeView::SetFavourite(TreeModel::Row& row, bool isFavourite)
// Keep track of this choice
if (isFavourite)
{
GlobalFavouritesManager().addFavourite(_favouriteTypeName, row[_columns.fullName]);
GlobalFavouritesManager().addFavourite(_favouriteTypeName, row[_favouriteKeyColumn]);
}
else
{
GlobalFavouritesManager().removeFavourite(_favouriteTypeName, row[_columns.fullName]);
GlobalFavouritesManager().removeFavourite(_favouriteTypeName, row[_favouriteKeyColumn]);
}

row.SendItemChanged();
}

void ResourceTreeView::SetFavouriteKeyColumn(const TreeModel::Column& column)
{
_favouriteKeyColumn = column;
}

void ResourceTreeView::_onSetFavourite(bool isFavourite)
{
wxDataViewItem item = GetSelection();
Expand Down
4 changes: 4 additions & 0 deletions libs/wxutil/dataview/ResourceTreeView.h
Expand Up @@ -95,6 +95,7 @@ class ResourceTreeView :

// The column that is hosting the declaration path (used by e.g. "copy to clipboard")
TreeModel::Column _declPathColumn;
TreeModel::Column _favouriteKeyColumn;

public:
ResourceTreeView(wxWindow* parent, const Columns& columns, long style = wxDV_SINGLE);
Expand Down Expand Up @@ -164,6 +165,9 @@ class ResourceTreeView :
virtual void SetFavourite(TreeModel::Row& row, bool isFavourite);
virtual void SetFavouriteRecursively(TreeModel::Row& row, bool isFavourite);

// Defines the column that is used to retrieve the key when adding/removing favourites
virtual void SetFavouriteKeyColumn(const TreeModel::Column& column);

virtual void SetupTreeModelFilter();

virtual bool IsTreeModelRowVisible(TreeModel::Row& row);
Expand Down
34 changes: 31 additions & 3 deletions libs/wxutil/dataview/ThreadedDeclarationTreePopulator.h
@@ -1,5 +1,8 @@
#pragma once

#include "idecltypes.h"
#include "ifavourites.h"

#include "DeclarationTreeView.h"
#include "ThreadedResourceTreePopulator.h"

Expand All @@ -13,10 +16,35 @@ namespace wxutil
class ThreadedDeclarationTreePopulator :
public ThreadedResourceTreePopulator
{
private:
const DeclarationTreeView::Columns& _columns;

std::set<std::string> _favourites;

public:
ThreadedDeclarationTreePopulator(const DeclarationTreeView::Columns& columns) :
ThreadedResourceTreePopulator(columns)
{}
ThreadedDeclarationTreePopulator(decl::Type type, const DeclarationTreeView::Columns& columns) :
ThreadedResourceTreePopulator(columns),
_columns(columns)
{
// Assemble the set of favourites for the given declaration type
_favourites = GlobalFavouritesManager().getFavourites(decl::getTypeName(type));
}

~ThreadedDeclarationTreePopulator() override
{
EnsureStopped();
}

protected:
const std::set<std::string>& GetFavourites() const
{
return _favourites;
}

bool IsFavourite(const std::string& declName)
{
return _favourites.count(declName) > 0;
}
};

}
8 changes: 2 additions & 6 deletions plugins/dm.editing/ThreadedEntityDefPopulator.h
Expand Up @@ -18,18 +18,14 @@ class ThreadedEntityDefPopulator :
{
private:
const wxutil::DeclarationTreeView::Columns& _columns;
std::set<std::string> _favourites;

wxIcon _icon;

public:
ThreadedEntityDefPopulator(const wxutil::DeclarationTreeView::Columns& columns, const std::string& iconName) :
ThreadedDeclarationTreePopulator(columns),
ThreadedDeclarationTreePopulator(decl::Type::EntityDef, columns),
_columns(columns)
{
// Get the list of favourites
_favourites = GlobalFavouritesManager().getFavourites(decl::getTypeName(decl::Type::EntityDef));

_icon.CopyFromBitmap(wxutil::GetLocalBitmap(iconName));
}

Expand All @@ -53,7 +49,7 @@ class ThreadedEntityDefPopulator :

if (!ClassShouldBeListed(eclass)) return;

bool isFavourite = _favourites.count(eclass->getDeclName()) > 0;
bool isFavourite = IsFavourite(eclass->getDeclName());

auto row = model->AddItem();

Expand Down
9 changes: 2 additions & 7 deletions radiant/ui/animationpreview/MD5AnimationViewer.cpp
Expand Up @@ -26,19 +26,14 @@ class ThreadedModelDefLoader final :
private:
const wxutil::DeclarationTreeView::Columns& _columns;

std::set<std::string> _favourites;

wxIcon _folderIcon;
wxIcon _modelIcon;

public:
ThreadedModelDefLoader(const wxutil::DeclarationTreeView::Columns& columns) :
ThreadedDeclarationTreePopulator(columns),
ThreadedDeclarationTreePopulator(decl::Type::ModelDef, columns),
_columns(columns)
{
// Get the list of favourites
_favourites = GlobalFavouritesManager().getFavourites(decl::getTypeName(decl::Type::Skin));

_modelIcon.CopyFromBitmap(wxutil::GetLocalBitmap("model16green.png"));
_folderIcon.CopyFromBitmap(wxutil::GetLocalBitmap("folder16.png"));
}
Expand Down Expand Up @@ -71,7 +66,7 @@ class ThreadedModelDefLoader final :
private:
void StoreModelDefValues(wxutil::TreeModel::Row& row, const std::string& modelName, const std::string& leafName, bool isFolder)
{
bool isFavourite = _favourites.count(modelName) > 0;
bool isFavourite = IsFavourite(modelName);

row[_columns.iconAndName] = wxVariant(wxDataViewIconText(leafName, !isFolder ? _modelIcon : _folderIcon));
row[_columns.iconAndName] = wxutil::TreeViewItemStyle::Declaration(isFavourite);
Expand Down
9 changes: 2 additions & 7 deletions radiant/ui/common/ShaderSelector.cpp
Expand Up @@ -47,20 +47,15 @@ class ThreadedMaterialLoader final :
const wxutil::DeclarationTreeView::Columns& _columns;
const ShaderSelector::PrefixList& _prefixes;

std::set<std::string> _favourites;

wxIcon _folderIcon;
wxIcon _textureIcon;

public:
ThreadedMaterialLoader(const wxutil::DeclarationTreeView::Columns& columns, const ShaderSelector::PrefixList& prefixes) :
ThreadedDeclarationTreePopulator(columns),
ThreadedDeclarationTreePopulator(decl::Type::Material, columns),
_columns(columns),
_prefixes(prefixes)
{
// Get the list of favourites
_favourites = GlobalFavouritesManager().getFavourites(decl::getTypeName(decl::Type::Skin));

_textureIcon.CopyFromBitmap(wxutil::GetLocalBitmap(TEXTURE_ICON));
_folderIcon.CopyFromBitmap(wxutil::GetLocalBitmap(FOLDER_ICON));
}
Expand Down Expand Up @@ -100,7 +95,7 @@ class ThreadedMaterialLoader final :
private:
void StoreMaterialValues(wxutil::TreeModel::Row& row, const std::string& materialName, const std::string& leafName, bool isFolder)
{
bool isFavourite = _favourites.count(materialName) > 0;
bool isFavourite = IsFavourite(materialName);

row[_columns.iconAndName] = wxVariant(wxDataViewIconText(leafName, !isFolder ? _textureIcon : _folderIcon));
row[_columns.iconAndName] = wxutil::TreeViewItemStyle::Declaration(isFavourite);
Expand Down
9 changes: 2 additions & 7 deletions radiant/ui/common/SkinChooser.cpp
Expand Up @@ -35,8 +35,6 @@ namespace
private:
const wxutil::DeclarationTreeView::Columns& _columns;

std::set<std::string> _favourites;

wxDataViewItem& _allSkinsItem;
wxDataViewItem& _matchingSkinsItem;

Expand All @@ -48,15 +46,12 @@ namespace
public:
ThreadedSkinLoader(const wxutil::DeclarationTreeView::Columns& columns, const std::string& model,
wxDataViewItem& allSkinsItem, wxDataViewItem& matchingSkinsItem) :
ThreadedDeclarationTreePopulator(columns),
ThreadedDeclarationTreePopulator(decl::Type::Skin, columns),
_columns(columns),
_allSkinsItem(allSkinsItem),
_matchingSkinsItem(matchingSkinsItem),
_model(model)
{
// Get the list of favourites
_favourites = GlobalFavouritesManager().getFavourites(decl::getTypeName(decl::Type::Skin));

_skinIcon.CopyFromBitmap(wxutil::GetLocalBitmap(SKIN_ICON));
_folderIcon.CopyFromBitmap(wxutil::GetLocalBitmap(FOLDER_ICON));
}
Expand Down Expand Up @@ -120,7 +115,7 @@ namespace
private:
void StoreSkinValues(wxutil::TreeModel::Row& row, const std::string& fullSkinName, const std::string& leafName, bool isFolder)
{
bool isFavourite = _favourites.count(fullSkinName) > 0;
bool isFavourite = IsFavourite(fullSkinName);

row[_columns.iconAndName] = wxVariant(wxDataViewIconText(leafName, !isFolder ? _skinIcon : _folderIcon));
row[_columns.iconAndName] = wxutil::TreeViewItemStyle::Declaration(isFavourite);
Expand Down
2 changes: 1 addition & 1 deletion radiant/ui/common/SoundChooser.cpp
Expand Up @@ -106,7 +106,7 @@ class ThreadedSoundShaderLoader :

// Construct and initialise variables
ThreadedSoundShaderLoader(const wxutil::DeclarationTreeView::Columns& columns) :
ThreadedDeclarationTreePopulator(columns),
ThreadedDeclarationTreePopulator(decl::Type::SoundShader, columns),
_columns(columns)
{}

Expand Down
7 changes: 2 additions & 5 deletions radiant/ui/eclasstree/EClassTreeBuilder.cpp
Expand Up @@ -18,12 +18,9 @@ namespace
}

EClassTreeBuilder::EClassTreeBuilder(const wxutil::DeclarationTreeView::Columns& columns) :
ThreadedDeclarationTreePopulator(columns),
ThreadedDeclarationTreePopulator(decl::Type::EntityDef, columns),
_columns(columns)
{
// Get the list of favourites
_favourites = GlobalFavouritesManager().getFavourites(decl::getTypeName(decl::Type::EntityDef));

_entityIcon.CopyFromBitmap(wxutil::GetLocalBitmap(ENTITY_ICON));
}

Expand Down Expand Up @@ -65,7 +62,7 @@ void EClassTreeBuilder::visit(const IEntityClassPtr& eclass)
_treePopulator->addPath(fullPath, [&](wxutil::TreeModel::Row& row,
const std::string& path, const std::string& leafName, bool isFolder)
{
bool isFavourite = _favourites.count(leafName) > 0;
bool isFavourite = IsFavourite(leafName);

row[_columns.iconAndName] = wxVariant(wxDataViewIconText(leafName, _entityIcon));
row[_columns.iconAndName] = wxutil::TreeViewItemStyle::Declaration(isFavourite);
Expand Down
2 changes: 0 additions & 2 deletions radiant/ui/eclasstree/EClassTreeBuilder.h
Expand Up @@ -22,8 +22,6 @@ class EClassTreeBuilder final :
private:
const wxutil::DeclarationTreeView::Columns& _columns;

std::set<std::string> _favourites;

wxIcon _entityIcon;

std::unique_ptr<wxutil::VFSTreePopulator> _treePopulator;
Expand Down
10 changes: 4 additions & 6 deletions radiant/ui/materials/MaterialPopulator.cpp
Expand Up @@ -148,11 +148,9 @@ struct ShaderNameFunctor

// Construct and initialise variables
MaterialPopulator::MaterialPopulator(const MaterialTreeView::TreeColumns& columns) :
ThreadedDeclarationTreePopulator(columns),
ThreadedDeclarationTreePopulator(decl::Type::Material, columns),
_columns(columns)
{
_favourites = GlobalFavouritesManager().getFavourites(decl::getTypeName(decl::Type::Material));
}
{}

MaterialPopulator::~MaterialPopulator()
{
Expand All @@ -162,7 +160,7 @@ MaterialPopulator::~MaterialPopulator()

void MaterialPopulator::AddSingleMaterial(const wxutil::TreeModel::Ptr& model, const std::string& materialName)
{
ShaderNameFunctor functor(*model, _columns, _favourites);
ShaderNameFunctor functor(*model, _columns, GetFavourites());

std::vector<std::string> parts;
string::split(parts, materialName, "/");
Expand Down Expand Up @@ -252,7 +250,7 @@ void MaterialPopulator::PopulateModel(const wxutil::TreeModel::Ptr& model)
{
model->SetHasDefaultCompare(false);

ShaderNameFunctor functor(*model, _columns, _favourites);
ShaderNameFunctor functor(*model, _columns, GetFavourites());
GlobalMaterialManager().foreachShaderName([&](const std::string& name)
{
ThrowIfCancellationRequested();
Expand Down
3 changes: 0 additions & 3 deletions radiant/ui/materials/MaterialPopulator.h
Expand Up @@ -14,9 +14,6 @@ class MaterialPopulator :
private:
const MaterialTreeView::TreeColumns& _columns;

// The set of favourites
std::set<std::string> _favourites;

public:
// Construct and initialise variables
MaterialPopulator(const MaterialTreeView::TreeColumns& columns);
Expand Down
11 changes: 3 additions & 8 deletions radiant/ui/particles/ThreadedParticlesLoader.h
Expand Up @@ -21,16 +21,11 @@ class ThreadedParticlesLoader final :
private:
const wxutil::DeclarationTreeView::Columns& _columns;

std::set<std::string> _favourites;

public:
ThreadedParticlesLoader(const wxutil::DeclarationTreeView::Columns& columns) :
ThreadedDeclarationTreePopulator(columns),
ThreadedDeclarationTreePopulator(decl::Type::Particle, columns),
_columns(columns)
{
// Get the list of favourites
_favourites = GlobalFavouritesManager().getFavourites(decl::getTypeName(decl::Type::Particle));
}
{}

~ThreadedParticlesLoader()
{
Expand All @@ -53,7 +48,7 @@ class ThreadedParticlesLoader final :
// Add the Def name to the list store
wxutil::TreeModel::Row row = model->AddItem();

bool isFavourite = _favourites.count(prtName) > 0;
bool isFavourite = IsFavourite(def.getDeclName());

row[_columns.iconAndName] = wxVariant(wxDataViewIconText(prtName));
row[_columns.iconAndName] = wxutil::TreeViewItemStyle::Declaration(isFavourite);
Expand Down

0 comments on commit 510d071

Please sign in to comment.