VR-Forces 4.10 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/function.hpp>
18 
20 
21 #include <boost/archive/xml_iarchive.hpp>
22 #include <boost/archive/xml_oarchive.hpp>
23 #include <boost/serialization/access.hpp>
24 #include <boost/serialization/nvp.hpp>
25 #include <boost/serialization/list.hpp>
26 #include <boost/serialization/map.hpp>
27 #include <boost/serialization/vector.hpp>
28 #include <boost/serialization/string.hpp>
29 
30 namespace makVrv
31 {
32  class DtDe;
33 }
34 
35 namespace makVrf
36 {
38  {
39  public:
42  virtual ~DtVrfGuiApplicationSetting();
43 
45  virtual DtVrfGuiApplicationSetting* clone() const = 0;
46 
49  virtual std::string classType() const = 0;
50 
51  template <typename T> static std::string theClassType()
52  {
53  return T().classType();
54  }
55 
56  template <typename T> static DtVrfGuiApplicationSetting* create(makVrv::DtDe& de)
57  {
58  return new T(&de);
59  }
60 
62  virtual void write(boost::archive::xml_oarchive& out, const unsigned int) = 0;
63  virtual void read(boost::archive::xml_iarchive& in, const unsigned int) = 0;
64 
66  virtual int dataVersion() { return 1; };
67 
68  protected:
69  friend class boost::serialization::access;
70 
74  template<class Archive>
75  void serialize(Archive & ar, const unsigned int version)
76  {
77  if (Archive::is_loading::value)
78  {
79  int dVersion = version;
80 
81  if (version > 1)
82  {
83  *((boost::archive::xml_iarchive*)&ar) >> boost::serialization::make_nvp("version", dVersion);
84  }
85 
86  read(*(boost::archive::xml_iarchive*)&ar, dVersion);
87  }
88  else
89  {
90  int dVersion = dataVersion();
91 
92  *((boost::archive::xml_oarchive*)&ar) << boost::serialization::make_nvp("version", dVersion);
93  write(*(boost::archive::xml_oarchive*)&ar, dVersion);
94  }
95  }
96 
97  protected:
99  };
100 
101  typedef DtVrfGuiApplicationSetting* (*DtApplicationSettingCreatorFcn)(makVrv::DtDe&);
102 
104  {
105  protected:
106  typedef std::map<std::string, DtApplicationSettingCreatorFcn> SettingsCreatorMap;
107 
108  public:
110  virtual ~DtVrfGuiSettingsFactory();
111 
112  static void cleanup();
113 
114  public:
115  static bool addSettingCreator(const std::string& name, DtApplicationSettingCreatorFcn f);
116  static DtVrfGuiApplicationSetting* createSetting(const std::string& name, makVrv::DtDe&);
117 
118  protected:
119  static std::map<std::string, DtApplicationSettingCreatorFcn>* theSettingsCreators;
120  };
121 
122  #define REGISTER_APPLICATION_SETTING(AppSetting) static bool AppSetting##_Registered = \
123  DtVrfGuiSettingsFactory::addSettingCreator(DtVrfGuiApplicationSetting::theClassType<AppSetting>(), \
124  DtVrfGuiApplicationSetting::create<AppSetting>);
125 
127  {
128  typedef std::map<std::string, DtVrfGuiApplicationSetting*> VrfGuiSettings;
129 
130  public:
133 
135  virtual ~DtVrfGuiApplicationSettings();
136 
138  static DtVrfGuiApplicationSettings& instance( makVrv::DtDe& de );
139 
140  public:
141  virtual void loadSettings(const std::string& settingsFile);
142  virtual void saveSettings();
143  virtual void saveSettings(const std::string& settingsFile);
144 
145  public:
147  virtual DtVrfGuiApplicationSetting* addSetting(const std::string&, const DtVrfGuiApplicationSetting&);
148 
149  virtual DtVrfGuiApplicationSetting* settingFor(const std::string&);
150 
152  virtual void removeSetting(const std::string&);
153 
154  const VrfGuiSettings& settings() const
155  {
156  return mySettings;
157  }
158 
159  void setAutoSave(bool b)
160  {
161  myAutoSave = b;
162  }
163 
164  bool autoSave() const
165  {
166  return myAutoSave;
167  }
168 
169  virtual void clearSettings();
170 
171  protected:
172  friend class boost::serialization::access;
173 
177  template<class Archive>
178  void serialize(Archive & ar, const unsigned int version)
179  {
180  VrfGuiSettings::const_iterator iter = mySettings.begin();
181 
182  if (Archive::is_loading::value)
183  {
184  int size = 0;
185  std::string classType;
186  std::string name;
187 
188  ar & BOOST_SERIALIZATION_NVP(size);
189 
190  for (int i = 0; i < size; i++)
191  {
192  ar & BOOST_SERIALIZATION_NVP(name);
193  ar & BOOST_SERIALIZATION_NVP(classType);
195 
196  if (iface)
197  {
198  DtVrfGuiApplicationSetting& guiSetting = *iface;
199  ar & BOOST_SERIALIZATION_NVP(guiSetting);
200  mySettings[name] = iface;
201  }
202  }
203 
204  }
205  else
206  {
207  int size = mySettings.size();
208  ar & BOOST_SERIALIZATION_NVP(size);
209  VrfGuiSettings::const_iterator iter = mySettings.begin();
210 
211  while (iter != mySettings.end())
212  {
213  std::string name = iter->first;
214 
215  ar & BOOST_SERIALIZATION_NVP(name);
216  std::string classType = iter->second->classType();
217  ar & BOOST_SERIALIZATION_NVP(classType);
218 
219  DtVrfGuiApplicationSetting& guiSetting = *iter->second;
220  ar & BOOST_SERIALIZATION_NVP(guiSetting);
221 
222  ++iter;
223  }
224  }
225  }
226 
227  protected:
230  std::string mySettingsFile;
232  };
233 }
234 
DtVrfGuiApplicationSetting *(* DtApplicationSettingCreatorFcn)(makVrv::DtDe &)
Definition: vrfGuiApplicationSettings.h:101
bool autoSave() const
Definition: vrfGuiApplicationSettings.h:164
makVrv::DtDe & myDe
Definition: vrfGuiApplicationSettings.h:228
Virtual base class.
Definition: DtVirtualBaseClass.h:19
BOOST_CLASS_VERSION(makArchives::DtDiGuySettingsRecord, 3)
static std::string theClassType()
Definition: vrfGuiApplicationSettings.h:51
voidpf void uLong size
Definition: ioapi.h:39
VrfGuiSettings mySettings
Definition: vrfGuiApplicationSettings.h:229
std::map< std::string, DtVrfGuiApplicationSetting * > VrfGuiSettings
Definition: vrfGuiApplicationSettings.h:128
#define DT_DLL_VRFGUICORE
Contains DLL export macros.
Definition: vrfGuiCore.h:25
Definition: vrfGuiApplicationSettings.h:37
const VrfGuiSettings & settings() const
Definition: vrfGuiApplicationSettings.h:154
makVrv::DtDe * myDe
Definition: vrfGuiApplicationSettings.h:98
Contains makVrv::DtVirtualBaseClass class.
std::map< std::string, DtApplicationSettingCreatorFcn > SettingsCreatorMap
Definition: vrfGuiApplicationSettings.h:106
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:178
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:75
void setAutoSave(bool b)
Definition: vrfGuiApplicationSettings.h:159
virtual int dataVersion()
Override in subclass to version data.
Definition: vrfGuiApplicationSettings.h:66
Definition: vrfGuiApplicationSettings.h:103
std::string mySettingsFile
Definition: vrfGuiApplicationSettings.h:230
Definition: vrfGuiApplicationSettings.h:126
bool myAutoSave
Definition: vrfGuiApplicationSettings.h:231
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:119
static DtVrfGuiApplicationSetting * createSetting(const std::string &name, makVrv::DtDe &)
static DtVrfGuiApplicationSetting * create(makVrv::DtDe &de)
Definition: vrfGuiApplicationSettings.h:56

Document ID: Generated on Tue Sep 21 17:42:52 EDT 2021 from SVN revision 234861
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)