![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /****************************************************************************** 00002 ** Copyright (c) 2009 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 ******************************************************************************/ 00005 /****************************************************************************** 00006 ** $RCSfile: DtSettingsChangeManager.h,v $ $Revision: 1.16 $ $State: Exp $ 00007 ******************************************************************************/ 00008 00011 00012 #pragma once 00013 00014 #include <vrvCore/vrvCore.h> 00015 #include <vrvCore/DtSettings.h> 00016 #include <vrvUtil/DtVirtualBaseClass.h> 00017 #include <vrvUtil/event_signal.h> 00018 #include <vrvUtil/DtLockedBufferedQueue.h> 00019 00020 #include <boost/thread/mutex.hpp> 00021 #include <boost/signals.hpp> 00022 00023 #include <boost/signal.hpp> 00024 #include <boost/function.hpp> 00025 00026 namespace makVrv 00027 { 00028 class DtDe; 00029 class DtSharedSettingsManager; 00030 00034 class DT_DLL_VRVCORE DtSettingsChangeObject 00035 { 00036 public: 00037 enum SettingsChangeType 00038 { 00039 SchemaRenamed = 1, 00040 SchemaParameterRenamed, 00041 ModelDefinitionRenamed, 00042 ElementDefinitionRenamed, 00043 SettingsChangedUserDefinedStart = 100000 00044 }; 00045 00046 enum UseType 00047 { 00048 ElementDefinition = 0, 00049 ModelDefinition, 00050 SchemaDefinition, 00051 UserDefined = 100000 00052 }; 00053 00054 public: 00055 DtSettingsChangeObject(SettingsChangeType type); 00056 00057 virtual ~DtSettingsChangeObject(); 00058 00059 SettingsChangeType type() const 00060 { 00061 return myType; 00062 } 00063 00066 boost::signal<void (DtSettingsChangeObject*)> signal_changeInvoked; 00067 00068 protected: 00069 SettingsChangeType myType; 00070 }; 00071 00083 class DT_DLL_VRVCORE DtSettingsChangeManager : public DtVirtualBaseClass 00084 { 00085 public: 00086 typedef boost::function<bool (const std::string&, DtSettingsChangeObject::UseType)> DtSettingInUseFunction; 00087 typedef std::vector<DtSettingInUseFunction> DtSettingsInUse; 00088 typedef std::vector<DtSettingsChangeObject*> DtSettingsChangedList; 00089 00090 public: 00092 static DtSettingsChangeManager& instance(DtDe& de); 00093 00094 virtual ~DtSettingsChangeManager(); 00095 00098 virtual void addSettingsChangeObject(DtSettingsChangeObject*); 00099 00101 virtual void removeSettingsChangeObject(DtSettingsChangeObject*); 00102 00104 virtual DtSettingsChangedList changeObjectsFor(DtSettingsChangeObject::SettingsChangeType) const; 00105 00106 static std::string className(); 00107 00108 public: 00110 virtual void addSettingInUseCheck(const DtSettingInUseFunction& f); 00111 00113 virtual bool settingInUse(const std::string& setting, DtSettingsChangeObject::UseType) const; 00114 00115 protected: 00117 virtual void settingsObjectInvoked(DtSettingsChangeObject*); 00118 00120 DtSettingsChangeManager(DtDe&); 00121 00122 protected: 00123 typedef std::map<DtSettingsChangeObject::SettingsChangeType, DtSettingsChangedList> DtSettingsChangedMap; 00124 00125 DtSettingsChangedMap mySettings; 00126 DtSettingsInUse mySettingsInUseChecks; 00127 DtDe& myDe; 00128 mutable boost::mutex myMonitor; 00129 }; 00130 00134 class DT_DLL_VRVCORE DtSharedSettingsChangeManagerSignaler : 00135 public DtVirtualBaseClass 00136 { 00137 public: 00138 00142 static DtSharedSettingsChangeManagerSignaler& instance(const DtSharedSettingsManager&); 00143 00146 static DtSharedSettingsChangeManagerSignaler& instance(DtEventQueueInterface&); 00147 00151 static DtSharedSettingsChangeManagerSignaler* findInstance( 00152 DtEventQueueInterface*); 00153 00155 virtual ~DtSharedSettingsChangeManagerSignaler(); 00156 00157 event_signal< void (DtSettingsChangeObject*) > signal_changeInvoked; 00158 00159 protected: 00160 DtSharedSettingsChangeManagerSignaler(DtEventQueueInterface& eqi); 00161 00162 private: 00163 DtSharedSettingsChangeManagerSignaler(const DtSharedSettingsChangeManagerSignaler&); 00164 DtSharedSettingsChangeManagerSignaler& operator=(const DtSharedSettingsChangeManagerSignaler&); 00165 }; 00166 }