![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /****************************************************************************** 00002 ** Copyright (c) 2011 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 ******************************************************************************/ 00005 /****************************************************************************** 00006 ** $RCSfile: DtObjectSettingsManager.h,v $ $Revision: 1.1 $ $State: Exp $ 00007 ******************************************************************************/ 00008 00011 00013 00014 #pragma once 00015 00016 #include <vrvUtil/DtVirtualBaseClass.h> 00017 #include <vrvUtil/signalslib.h> 00018 00019 #include <vrfGuiCore/vrfGuiCore.h> 00020 #include <vrfGuiCore/DtGuiScenarioSettingsManager.h> 00021 #include <vrvCore/DtSharedSettings.h> 00022 #include <vrvCore/DtElementEntry.h> 00023 #include <vrvUtil/event_signal.h> 00024 #include <vrvUtil/DtUnicode.h> 00025 00026 #include <vrvCore/DtDe.h> 00027 00028 namespace makVrv 00029 { 00030 class DtEventQueueInterface; 00031 class DtSharedSettingsManager; 00032 } 00033 00034 namespace makVrf 00035 { 00036 enum ObjectSetting 00037 { 00038 ObjectSettingsRangeRings = 0x00000001 00039 }; 00040 00043 class DT_DLL_VRFGUICORE DtSharedObjectSettings : public makVrv::DtSharedSettings 00044 { 00045 public: 00046 00049 friend class makVrv::DtReadSettingsLock<DtSharedObjectSettings>; 00050 friend class makVrv::DtWriteSettingsLock<DtSharedObjectSettings>; 00051 friend class makVrv::DtSharedSettingsManager; 00052 00056 static std::string className(); 00057 00059 virtual ~DtSharedObjectSettings(); 00060 00061 void setSettings(const std::string& markingText, ObjectSetting); 00062 ObjectSetting settingsFor(const std::string& markingText) const; 00063 00064 void setFlagState(const std::string& markingText, ObjectSetting, bool onOff); 00065 00067 bool flagState(const std::string&, ObjectSetting) const; 00068 00069 virtual void write(boost::archive::xml_oarchive& ar, int version) const; 00070 virtual void read(boost::archive::xml_iarchive& ar, int version); 00071 00072 protected: 00073 00075 DtSharedObjectSettings(makVrv::DtSharedSettingsManager& manager); 00076 00077 protected: 00078 typedef std::map<std::string, ObjectSetting> ObjectSettingsMap; 00079 00080 ObjectSettingsMap mySettings; 00081 }; 00082 00084 class DT_DLL_VRFGUICORE DtObjectSettingsManager : public DtGuiSetting 00085 { 00086 public: 00087 struct ObjectSettingStruct 00088 { 00089 ObjectSettingStruct(ObjectSetting s, makVrv::DtUnicode n, std::set<makVrv::DtElementEntry::ElementType> e) 00090 : setting(s) 00091 , name(s) 00092 , validFor(e) 00093 { 00094 } 00095 00096 ObjectSettingStruct() 00097 : setting((ObjectSetting)0) 00098 , validFor() 00099 { 00100 validFor.insert( makVrv::DtElementEntry::Unknown ); 00101 } 00102 00103 ObjectSettingStruct(const ObjectSettingStruct& s) 00104 : setting(s.setting) 00105 , name(s.name) 00106 , validFor(s.validFor) 00107 { 00108 } 00109 00110 ObjectSettingStruct& operator=(const ObjectSettingStruct& s) 00111 { 00112 setting = s.setting; 00113 name = s.name; 00114 validFor = s.validFor; 00115 00116 return *this; 00117 } 00118 00119 ObjectSetting setting; 00120 makVrv::DtUnicode name; 00121 std::set<makVrv::DtElementEntry::ElementType> validFor; 00122 }; 00123 00124 typedef std::vector<ObjectSettingStruct> ObjectSettings; 00125 00126 public: 00127 DtObjectSettingsManager(makVrv::DtDe&); 00128 virtual ~DtObjectSettingsManager(); 00129 00131 static DtObjectSettingsManager& instance(makVrv::DtDe& de); 00132 static void registerInstance(makVrv::DtDe&, DtObjectSettingsManager*); 00133 00134 virtual void setSettings(const std::string& markingText, ObjectSetting); 00135 ObjectSetting settingsFor(const std::string& markingText) const; 00136 00137 virtual void addSetting(const makVrv::DtUnicode&, ObjectSetting, std::set<makVrv::DtElementEntry::ElementType> validFor); 00138 virtual void removeSetting(ObjectSetting); 00139 ObjectSetting settingFor(const makVrv::DtUnicode&); 00140 makVrv::DtUnicode settingNameFor(ObjectSetting); 00141 00143 bool flagState(const std::string& markingText, ObjectSetting) const; 00144 virtual void setFlagState(const std::string& markingText, ObjectSetting, bool onOff); 00145 const ObjectSettings& objectSettings() const; 00146 00147 protected: 00148 virtual void init(); 00149 00150 virtual void write(boost::archive::xml_oarchive& ar, int version) const; 00151 virtual void read(boost::archive::xml_iarchive& ar, int version); 00152 00153 protected: 00154 makVrv::DtDe& myDe; 00155 ObjectSettings myObjectSettings; 00156 }; 00157 00160 class DT_DLL_VRFGUICORE DtSharedObjectSettingsSignaler : public makVrv::DtVirtualBaseClass 00161 { 00162 public: 00163 00167 static DtSharedObjectSettingsSignaler& instance(const makVrv::DtSharedSettingsManager&); 00168 00171 static DtSharedObjectSettingsSignaler& instance(makVrv::DtEventQueueInterface&); 00172 00176 static DtSharedObjectSettingsSignaler* findInstance( 00177 makVrv::DtEventQueueInterface*); 00178 00180 virtual ~DtSharedObjectSettingsSignaler(); 00181 00183 makVrv::event_signal<void (std::string, ObjectSetting)> signal_settingsChanged; 00185 00186 protected: 00187 DtSharedObjectSettingsSignaler(makVrv::DtEventQueueInterface& eqi); 00188 00189 private: 00190 DtSharedObjectSettingsSignaler(const DtSharedObjectSettingsSignaler&); 00191 DtSharedObjectSettingsSignaler& operator=(const DtSharedObjectSettingsSignaler&); 00192 }; 00193 }