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
|
#pragma once
#include <list>
#include <sigc++/connection.h>
#include "itexturetoolmodel.h"
#include "messages/TextureChanged.h"
namespace textool
{
class TextureToolSceneGraph :
public ITextureToolSceneGraph
{
private:
sigc::connection _sceneSelectionChanged;
std::size_t _textureChangedHandler;
bool _selectionNeedsRescan;
bool _activeMaterialNeedsRescan;
std::list<INode::Ptr> _nodes;
std::vector<sigc::connection> _faceObservers;
// The single active material. Is empty if the scene graph has no items
std::string _activeMaterial;
public:
TextureToolSceneGraph();
const std::string& getName() const override;
const StringSet& getDependencies() const override;
void initialiseModule(const IApplicationContext& ctx) override;
void shutdownModule() override;
void foreachNode(const std::function<bool(const INode::Ptr&)>& functor) override;
const std::string& getActiveMaterial() override;
private:
void onSceneSelectionChanged(const ISelectable& selectable);
void onTextureChanged(radiant::TextureChangedMessage& msg);
void createFaceNode(IFace& face);
void clearFaceObservers();
void ensureSceneIsAnalysed();
};
}
|