VR-Forces 4.8 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
vrfGuiApplicationSettings.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2015 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
8 
12 
13 #pragma once
14 
15 #include <vrfGuiCore/vrfGuiCore.h>
16 
17 #include <boost/signals2.hpp>
18 #include <boost/function.hpp>
19 
21 
22 #include <boost/archive/xml_iarchive.hpp>
23 #include <boost/archive/xml_oarchive.hpp>
24 #include <boost/serialization/access.hpp>
25 #include <boost/serialization/nvp.hpp>
26 #include <boost/serialization/list.hpp>
27 #include <boost/serialization/map.hpp>
28 #include <boost/serialization/vector.hpp>
29 #include <boost/serialization/string.hpp>
30 
31 namespace makVrv
32 {
33  class DtDe;
34 }
35 
36 namespace makVrf
37 {
39  {
40  public:
43  virtual ~DtVrfGuiApplicationSetting();
44 
46  virtual DtVrfGuiApplicationSetting* clone() const = 0;
47 
50  virtual std::string classType() const = 0;
51 
52  template <typename T> static std::string theClassType()
53  {
54  return T().classType();
55  }
56 
57  template <typename T> static DtVrfGuiApplicationSetting* create(makVrv::DtDe& de)
58  {
59  return new T(&de);
60  }
61 
63  virtual void write(boost::archive::xml_oarchive& out, const unsigned int) = 0;
64  virtual void read(boost::archive::xml_iarchive& in, const unsigned int) = 0;
65 
67  virtual int dataVersion() { return 1; };
68 
69  protected:
70  friend class boost::serialization::access;
71 
75  template<class Archive>
76  void serialize(Archive & ar, const unsigned int version)
77  {
78  if (Archive::is_loading::value)
79  {
80  int dVersion = version;
81 
82  if (version > 1)
83  {
84  *((boost::archive::xml_iarchive*)&ar) >> boost::serialization::make_nvp("version", dVersion);
85  }
86 
87  read(*(boost::archive::xml_iarchive*)&ar, dVersion);
88  }
89  else
90  {
91  int dVersion = dataVersion();
92 
93  *((boost::archive::xml_oarchive*)&ar) << boost::serialization::make_nvp("version", dVersion);
94  write(*(boost::archive::xml_oarchive*)&ar, dVersion);
95  }
96  }
97 
98  protected:
100  };
101 
102  typedef DtVrfGuiApplicationSetting* (*DtApplicationSettingCreatorFcn)(makVrv::DtDe&);
103 
105  {
106  protected:
107  typedef std::map<std::string, DtApplicationSettingCreatorFcn> SettingsCreatorMap;
108 
109  public:
111  virtual ~DtVrfGuiSettingsFactory();
112 
113  static void cleanup();
114 
115  public:
116  static bool addSettingCreator(const std::string& name, DtApplicationSettingCreatorFcn f);
117  static DtVrfGuiApplicationSetting* createSetting(const std::string& name, makVrv::DtDe&);
118 
119  protected:
120  static std::map<std::string, DtApplicationSettingCreatorFcn>* theSettingsCreators;
121  };
122 
123  #define REGISTER_APPLICATION_SETTING(AppSetting) static bool AppSetting##_Registered = \
124  DtVrfGuiSettingsFactory::addSettingCreator(DtVrfGuiApplicationSetting::theClassType<AppSetting>(), \
125  DtVrfGuiApplicationSetting::create<AppSetting>);
126 
128  {
129  typedef std::map<std::string, DtVrfGuiApplicationSetting*> VrfGuiSettings;
130 
131  public:
134 
136  virtual ~DtVrfGuiApplicationSettings();
137 
139  static DtVrfGuiApplicationSettings& instance( makVrv::DtDe& de );
140 
141  public:
142  virtual void loadSettings(const std::string& settingsFile);
143  virtual void saveSettings();
144  virtual void saveSettings(const std::string& settingsFile);
145 
146  public:
148  virtual DtVrfGuiApplicationSetting* addSetting(const std::string&, const DtVrfGuiApplicationSetting&);
149 
150  virtual DtVrfGuiApplicationSetting* settingFor(const std::string&);
151 
153  virtual void removeSetting(const std::string&);
154 
155  const VrfGuiSettings& settings() const
156  {
157  return mySettings;
158  }
159 
160  void setAutoSave(bool b)
161  {
162  myAutoSave = b;
163  }
164 
165  bool autoSave() const
166  {
167  return myAutoSave;
168  }
169 
170  virtual void clearSettings();
171 
172  protected:
173  friend class boost::serialization::access;
174 
178  template<class Archive>
179  void serialize(Archive & ar, const unsigned int version)
180  {
181  VrfGuiSettings::const_iterator iter = mySettings.begin();
182 
183  if (Archive::is_loading::value)
184  {
185  int size = 0;
186  std::string classType;
187  std::string name;
188 
189  ar & BOOST_SERIALIZATION_NVP(size);
190 
191  for (int i = 0; i < size; i++)
192  {
193  ar & BOOST_SERIALIZATION_NVP(name);
194  ar & BOOST_SERIALIZATION_NVP(classType);
196 
197  if (iface)
198  {
199  DtVrfGuiApplicationSetting& guiSetting = *iface;
200  ar & BOOST_SERIALIZATION_NVP(guiSetting);
201  mySettings[name] = iface;
202  }
203  }
204 
205  }
206  else
207  {
208  int size = mySettings.size();
209  ar & BOOST_SERIALIZATION_NVP(size);
210  VrfGuiSettings::const_iterator iter = mySettings.begin();
211 
212  while (iter != mySettings.end())
213  {
214  std::string name = iter->first;
215 
216  ar & BOOST_SERIALIZATION_NVP(name);
217  std::string classType = iter->second->classType();
218  ar & BOOST_SERIALIZATION_NVP(classType);
219 
220  DtVrfGuiApplicationSetting& guiSetting = *iter->second;
221  ar & BOOST_SERIALIZATION_NVP(guiSetting);
222 
223  ++iter;
224  }
225  }
226  }
227 
228  protected:
231  std::string mySettingsFile;
233  };
234 }
235 
DtVrfGuiApplicationSetting *(* DtApplicationSettingCreatorFcn)(makVrv::DtDe &)
Definition: vrfGuiApplicationSettings.h:102
bool autoSave() const
Definition: vrfGuiApplicationSettings.h:165
makVrv::DtDe & myDe
Definition: vrfGuiApplicationSettings.h:229
Virtual base class.
Definition: DtVirtualBaseClass.h:22
static std::string theClassType()
Definition: vrfGuiApplicationSettings.h:52
voidpf void uLong size
Definition: ioapi.h:39
VrfGuiSettings mySettings
Definition: vrfGuiApplicationSettings.h:230
std::map< std::string, DtVrfGuiApplicationSetting * > VrfGuiSettings
Definition: vrfGuiApplicationSettings.h:129
#define DT_DLL_VRFGUICORE
Contains DLL export macros.
Definition: vrfGuiCore.h:25
BOOST_CLASS_VERSION(makArchives::DtDiGuySettingsRecord, 2)
Definition: vrfGuiApplicationSettings.h:38
const VrfGuiSettings & settings() const
Definition: vrfGuiApplicationSettings.h:155
makVrv::DtDe * myDe
Definition: vrfGuiApplicationSettings.h:99
Contains makVrv::DtVirtualBaseClass class.
std::map< std::string, DtApplicationSettingCreatorFcn > SettingsCreatorMap
Definition: vrfGuiApplicationSettings.h:107
void serialize(Archive &ar, const unsigned int version)
When the class Archive corresponds to an output archive, the &amp; operator is defined similar to &lt;&lt;...
Definition: vrfGuiApplicationSettings.h:179
void serialize(Archive &ar, const unsigned int version)
When the class Archive corresponds to an output archive, the &amp; operator is defined similar to &lt;&lt;...
Definition: vrfGuiApplicationSettings.h:76
void setAutoSave(bool b)
Definition: vrfGuiApplicationSettings.h:160
virtual int dataVersion()
Override in subclass to version data.
Definition: vrfGuiApplicationSettings.h:67
Definition: vrfGuiApplicationSettings.h:104
std::string mySettingsFile
Definition: vrfGuiApplicationSettings.h:231
Definition: vrfGuiApplicationSettings.h:127
bool myAutoSave
Definition: vrfGuiApplicationSettings.h:232
The DtDe is the core component of any VR-Vantage application.
Definition: DtDe.h:69
static std::map< std::string, DtApplicationSettingCreatorFcn > * theSettingsCreators
Definition: vrfGuiApplicationSettings.h:120
static DtVrfGuiApplicationSetting * createSetting(const std::string &name, makVrv::DtDe &)
static DtVrfGuiApplicationSetting * create(makVrv::DtDe &de)
Definition: vrfGuiApplicationSettings.h:57

Document ID: Generated on Thu Aug 27 10:56:05 EDT 2020 from SVN revision 217100
Copyright © 2005-2020 MAK Technologies. All Rights Reserved (www.mak.com)