VR-Forces 4.3 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator 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/signal.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 

Document ID: Generated on Wed Mar 11 21:20:57 EDT 2015 from SVN revision 150940
Copyright © 2005-2014 VT MÄK. All Rights Reserved (www.mak.com)