![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /****************************************************************************** 00002 ** Copyright (c) 2011 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 ******************************************************************************/ 00005 00009 00010 #pragma once 00011 #include <vrvCore/vrvCore.h> 00012 #include <vrvCore/DtVisualizerAttribute.h> 00013 #include <vrvUtil/DtVirtualBaseClass.h> 00014 #include <vrvUtil/DtUnicode.h> 00015 #include <boost/unordered_map.hpp> 00016 00017 namespace makVrv 00018 { 00019 class DtVisualizerAttribute; 00020 class DtDe; 00021 00025 class DT_DLL_VRVCORE DtVisualizerAttributeFactory : public DtVirtualBaseClass 00026 { 00027 public: 00028 00031 class CreatorInterface 00032 { 00033 public: 00035 virtual ~CreatorInterface(); 00036 00038 virtual DtVisualizerAttribute* create() = 0; 00039 00040 virtual const DtVisualizerAttribute::TypeInfo& attributeTypeInfo() const 00041 = 0; 00042 }; 00043 00045 template <typename Attribute> 00046 class Creator : public CreatorInterface 00047 { 00048 public: 00049 virtual DtVisualizerAttribute* create() 00050 { 00051 return new Attribute(); 00052 } 00053 00054 virtual const DtVisualizerAttribute::TypeInfo& attributeTypeInfo() const 00055 { 00056 return Attribute::theTypeInfo(); 00057 } 00058 }; 00059 00061 static DtVisualizerAttributeFactory& instance(DtDe&); 00062 00065 static void registerInstance(DtDe&, DtVisualizerAttributeFactory*); 00066 00068 virtual ~DtVisualizerAttributeFactory(); 00069 00071 virtual DtVisualizerAttribute* create(const std::string& className); 00072 00073 00076 virtual DtVisualizerAttribute* create(const std::string& className, 00077 const DtUnicode& value); 00078 00081 virtual void registerClass(CreatorInterface* creator); 00082 00083 protected: 00084 DtVisualizerAttributeFactory(DtDe&); 00085 00086 protected: 00087 typedef boost::unordered_map<std::string, CreatorInterface*> CreatorMap; 00088 CreatorMap myCreators; 00089 Creator<DtVisualizerAttributeString> myDefaultCreator; 00090 DtDe& myDe; 00091 }; 00092 } 00093