Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
#5430: Add change signal to eclass::IColourManager
  • Loading branch information
codereader committed Nov 24, 2020
1 parent 77ebdae commit 21d391e
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 1 deletion.
4 changes: 4 additions & 0 deletions include/ieclasscolours.h
@@ -1,6 +1,7 @@
#pragma once

#include <functional>
#include <sigc++/signal.h>
#include "imodule.h"
#include "ieclass.h"
#include "math/Vector3.h"
Expand Down Expand Up @@ -37,6 +38,9 @@ class IColourManager :

// Removes all registered overrides
virtual void clearOverrideColours() = 0;

// Signal invoked when an override of a specific eclass is added, changed or removed
virtual sigc::signal<void, const std::string&>& sig_overrideColourChanged() = 0;
};

}
Expand Down
20 changes: 19 additions & 1 deletion radiantcore/eclass/EClassColourManager.cpp
Expand Up @@ -9,6 +9,7 @@ namespace eclass
void EClassColourManager::addOverrideColour(const std::string& eclass, const Vector3& colour)
{
_overrides[eclass] = colour;
_overrideChangedSignal.emit(eclass);
}

void EClassColourManager::applyColours(const IEntityClassPtr& eclass)
Expand Down Expand Up @@ -37,11 +38,28 @@ void EClassColourManager::foreachOverrideColour(
void EClassColourManager::removeOverrideColour(const std::string& eclass)
{
_overrides.erase(eclass);
_overrideChangedSignal.emit(eclass);
}

void EClassColourManager::clearOverrideColours()
{
_overrides.clear();
for (auto i = _overrides.begin(); i != _overrides.end(); ++i)
{
// Copy the eclass name to a local
auto eclass = i->first;

// Delete from map
_overrides.erase(i++);

// Fire signal, this might call applyColours which will
// find the colour has have been removed
_overrideChangedSignal.emit(eclass);
}
}

sigc::signal<void, const std::string&>& EClassColourManager::sig_overrideColourChanged()
{
return _overrideChangedSignal;
}

const std::string& EClassColourManager::getName() const
Expand Down
2 changes: 2 additions & 0 deletions radiantcore/eclass/EClassColourManager.h
Expand Up @@ -11,6 +11,7 @@ class EClassColourManager :
{
private:
std::map<std::string, Vector3> _overrides;
sigc::signal<void, const std::string&> _overrideChangedSignal;

public:
// IColourManager implementation
Expand All @@ -20,6 +21,7 @@ class EClassColourManager :
void foreachOverrideColour(const std::function<void(const std::string&, const Vector3&)>& functor) override;
void removeOverrideColour(const std::string& eclass) override;
void clearOverrideColours() override;
sigc::signal<void, const std::string&>& sig_overrideColourChanged() override;

// RegisterableModule implementation

Expand Down

0 comments on commit 21d391e

Please sign in to comment.