![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /****************************************************************************** 00002 ** Copyright (c) 2010 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 ******************************************************************************/ 00005 /****************************************************************************** 00006 ** $RCSfile: $ $Revision: $ $State: $ 00007 ******************************************************************************/ 00008 00012 00013 #pragma once 00014 #include <vrvCore/vrvCore.h> 00015 #include <vrvCore/DtFeature.h> 00016 #include <vrvUtil/DtUnicode.h> 00017 #include <vrvUtil/DtVirtualBaseClass.h> 00018 #include <vrvUtil/DtFaccCode.h> 00019 #include <boost/unordered_map.hpp> 00020 #include <boost/signal.hpp> 00021 #include <map> 00022 00023 namespace makArchives 00024 { 00025 class DtFeatureSettingsRecord; 00026 } 00027 00028 namespace makVrv 00029 { 00030 class DtFaccSignaler; 00031 class DtDeSettings; 00032 00033 class DtFaccInfo 00034 { 00035 public: 00036 00037 DtFaccInfo(const DtUnicode& name = DtUnicode()) 00038 : myName(name) 00039 { 00040 myColor[3] = myColor[2] = myColor[1] = myColor[0] = 1.0f; 00041 } 00042 00043 DtFaccInfo(const DtUnicode& name, float r, float g, float b, float a) 00044 : myName(name) 00045 { 00046 myColor[0] = r; 00047 myColor[1] = g; 00048 myColor[2] = b; 00049 myColor[3] = a; 00050 } 00051 00052 const DtUnicode& name() const 00053 { 00054 return myName; 00055 } 00056 00057 void setName(const DtUnicode& name) 00058 { 00059 myName = name; 00060 } 00061 00062 const float* color() const 00063 { 00064 return myColor; 00065 } 00066 00067 void setColor(const float color[4]) 00068 { 00069 memcpy(myColor,color,sizeof(float[4])); 00070 } 00071 00072 protected: 00073 DtUnicode myName; 00074 float myColor[4]; 00075 }; 00076 00080 class DT_DLL_VRVCORE DtFaccManager : public DtVirtualBaseClass 00081 { 00082 public: 00083 00084 //Using std::map to ensure that the Info is sorted by facc code. 00085 typedef std::map<DtFaccCode, DtFaccInfo> FaccCodeInfo; 00086 00088 static DtFaccManager& instance(DtDe& de); 00089 00092 static void registerInstance(DtDe& de, DtFaccManager* ); 00093 00095 virtual ~DtFaccManager(); 00096 00098 DtFaccInfo categoryInfo(const DtFaccCode& code) const; 00099 00101 DtFaccInfo subcategoryInfo(const DtFaccCode& code) const; 00102 00104 DtFaccInfo info(const DtFaccCode& code) const; 00105 00108 virtual void setFaccInfo(const DtFaccCode& code, const DtFaccInfo& info, 00109 bool disableAutoSave = false); 00110 00112 virtual void removeFaccInfo(const DtFaccCode& code); 00113 00115 const FaccCodeInfo& features() const; 00116 00118 virtual void setFromRecord(const makArchives::DtFeatureSettingsRecord& record); 00119 00121 virtual void getRecord(makArchives::DtFeatureSettingsRecord& record) const; 00122 00124 virtual void exportSettings(const std::string& filename); 00125 00127 virtual void importSettings(const std::string& filename); 00128 00130 virtual DtDeSettings* settings(); 00131 00132 protected: 00133 00135 DtFaccManager(DtDe& de); 00136 00137 virtual void loadDefaults(); 00138 virtual void autoSave(); 00139 00140 protected: 00141 DtDe& myDe; 00142 DtFaccSignaler& mySignaler; 00143 FaccCodeInfo myCodeInfo; 00144 }; 00145 00148 class DT_DLL_VRVCORE DtFaccSignaler : public DtVirtualBaseClass 00149 { 00150 public: 00151 00153 static DtFaccSignaler& instance(DtDe&); 00154 00155 virtual ~DtFaccSignaler(); 00156 00158 boost::signal< void (const DtFaccCode&, const DtFaccInfo&) > signal_infoChanged; 00159 00160 protected: 00161 00162 DtFaccSignaler(); 00163 00164 }; 00165 }