VR-Forces Developer's Guide
 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() override;
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 
147  virtual std::string iconsPath() const;
148 
149  public:
151  virtual DtVrfGuiApplicationSetting* addSetting(const std::string&, const DtVrfGuiApplicationSetting&);
152 
153  virtual DtVrfGuiApplicationSetting* settingFor(const std::string&);
154 
156  virtual void removeSetting(const std::string&);
157 
158  const VrfGuiSettings& settings() const
159  {
160  return mySettings;
161  }
162 
163  void setAutoSave(bool b)
164  {
165  myAutoSave = b;
166  }
167 
168  bool autoSave() const
169  {
170  return myAutoSave;
171  }
172 
173  virtual void clearSettings();
174 
175  protected:
176  friend class boost::serialization::access;
177 
181  template<class Archive>
182  void serialize(Archive & ar, const unsigned int version)
183  {
184  if (Archive::is_loading::value)
185  {
186  int size = 0;
187  std::string classType;
188  std::string name;
189 
190  ar & BOOST_SERIALIZATION_NVP(size);
191 
192  for (int i = 0; i < size; i++)
193  {
194  ar & BOOST_SERIALIZATION_NVP(name);
195  ar & BOOST_SERIALIZATION_NVP(classType);
197 
198  if (iface)
199  {
200  DtVrfGuiApplicationSetting& guiSetting = *iface;
201  ar & BOOST_SERIALIZATION_NVP(guiSetting);
202  mySettings[name] = iface;
203  }
204  }
205 
206  }
207  else
208  {
209  int size = mySettings.size();
210  ar & BOOST_SERIALIZATION_NVP(size);
211  VrfGuiSettings::const_iterator iter = mySettings.begin();
212 
213  while (iter != mySettings.end())
214  {
215  std::string name = iter->first;
216 
217  ar & BOOST_SERIALIZATION_NVP(name);
218  std::string classType = iter->second->classType();
219  ar & BOOST_SERIALIZATION_NVP(classType);
220 
221  DtVrfGuiApplicationSetting& guiSetting = *iter->second;
222  ar & BOOST_SERIALIZATION_NVP(guiSetting);
223 
224  ++iter;
225  }
226  }
227  }
228 
229  protected:
232  std::string mySettingsFile;
234  };
235 }
236 
DtVrfGuiApplicationSetting *(* DtApplicationSettingCreatorFcn)(makVrv::DtDe &)
Definition: vrfGuiApplicationSettings.h:101
bool autoSave() const
Definition: vrfGuiApplicationSettings.h:168
makVrv::DtDe & myDe
Definition: vrfGuiApplicationSettings.h:230
Virtual base class. Allows for RTTI and proper virtual destruction. Used by Creators, Factories, Providers, Assemblers and User Interfaces.
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:231
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:158
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:182
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:163
virtual int dataVersion()
Override in subclass to version data.
Definition: vrfGuiApplicationSettings.h:66
Definition: vrfGuiApplicationSettings.h:103
std::string mySettingsFile
Definition: vrfGuiApplicationSettings.h:232
Definition: vrfGuiApplicationSettings.h:126
bool myAutoSave
Definition: vrfGuiApplicationSettings.h:233
The DtDe is the core component of any VR-Vantage application. It owns a DtRenderer, DtDeCommunicator, as well as a DtDisplay and other things.
Definition: DtDe.h:76
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 Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)