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();
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  VrfGuiSettings::const_iterator iter = mySettings.begin();
185 
186  if (Archive::is_loading::value)
187  {
188  int size = 0;
189  std::string classType;
190  std::string name;
191 
192  ar & BOOST_SERIALIZATION_NVP(size);
193 
194  for (int i = 0; i < size; i++)
195  {
196  ar & BOOST_SERIALIZATION_NVP(name);
197  ar & BOOST_SERIALIZATION_NVP(classType);
199 
200  if (iface)
201  {
202  DtVrfGuiApplicationSetting& guiSetting = *iface;
203  ar & BOOST_SERIALIZATION_NVP(guiSetting);
204  mySettings[name] = iface;
205  }
206  }
207 
208  }
209  else
210  {
211  int size = mySettings.size();
212  ar & BOOST_SERIALIZATION_NVP(size);
213  VrfGuiSettings::const_iterator iter = mySettings.begin();
214 
215  while (iter != mySettings.end())
216  {
217  std::string name = iter->first;
218 
219  ar & BOOST_SERIALIZATION_NVP(name);
220  std::string classType = iter->second->classType();
221  ar & BOOST_SERIALIZATION_NVP(classType);
222 
223  DtVrfGuiApplicationSetting& guiSetting = *iter->second;
224  ar & BOOST_SERIALIZATION_NVP(guiSetting);
225 
226  ++iter;
227  }
228  }
229  }
230 
231  protected:
234  std::string mySettingsFile;
236  };
237 }
238 
DtVrfGuiApplicationSetting *(* DtApplicationSettingCreatorFcn)(makVrv::DtDe &)
Definition: vrfGuiApplicationSettings.h:101
bool autoSave() const
Definition: vrfGuiApplicationSettings.h:168
makVrv::DtDe & myDe
Definition: vrfGuiApplicationSettings.h:232
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:233
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:234
Definition: vrfGuiApplicationSettings.h:126
bool myAutoSave
Definition: vrfGuiApplicationSettings.h:235
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:72
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 24 19:28:17 EDT 2024 from SVN revision 269799
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)