VR-Forces 4.1.1 Class Documentation
DtVrfGuiApplicationSettings.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2010 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 /******************************************************************************
6 ** $RCSfile: DtVrfGuiApplicationSettings.h,v $ $Revision: 1.8.2.1 $ $State: Exp $
7 ******************************************************************************/
8 
11 
15 
16 #pragma once
17 
18 #include <vrfGuiCore/vrfGuiCore.h>
19 
20 #include <boost/signal.hpp>
21 #include <boost/function.hpp>
22 
24 
25 #include <boost/archive/xml_iarchive.hpp>
26 #include <boost/archive/xml_oarchive.hpp>
27 #include <boost/serialization/access.hpp>
28 #include <boost/serialization/nvp.hpp>
29 #include <boost/serialization/list.hpp>
30 #include <boost/serialization/map.hpp>
31 #include <boost/serialization/vector.hpp>
32 #include <boost/serialization/string.hpp>
33 
34 namespace makVrv
35 {
36  class DtDe;
37 }
38 
39 namespace makVrf
40 {
42  {
43  public:
46  virtual ~DtVrfGuiApplicationSetting();
47 
49  virtual DtVrfGuiApplicationSetting* clone() const = 0;
50 
53  virtual std::string classType() const = 0;
54 
55  template <typename T> static std::string theClassType()
56  {
57  return T().classType();
58  }
59 
60  template <typename T> static DtVrfGuiApplicationSetting* create(makVrv::DtDe& de)
61  {
62  return new T(&de);
63  }
64 
66  virtual void write(boost::archive::xml_oarchive& out, const unsigned int) = 0;
67  virtual void read(boost::archive::xml_iarchive& in, const unsigned int) = 0;
68 
70  virtual int dataVersion() { return 1; };
71 
72  protected:
73  friend class boost::serialization::access;
74 
78  template<class Archive>
79  void serialize(Archive & ar, const unsigned int version)
80  {
81  if (Archive::is_loading::value)
82  {
83  int dVersion = version;
84 
85  if (version > 1)
86  {
87  *((boost::archive::xml_iarchive*)&ar) >> boost::serialization::make_nvp("version", dVersion);
88  }
89 
90  read(*(boost::archive::xml_iarchive*)&ar, dVersion);
91  }
92  else
93  {
94  int dVersion = dataVersion();
95 
96  *((boost::archive::xml_oarchive*)&ar) << boost::serialization::make_nvp("version", dVersion);
97  write(*(boost::archive::xml_oarchive*)&ar, dVersion);
98  }
99  }
100 
101  protected:
103  };
104 
105  typedef DtVrfGuiApplicationSetting* (*DtApplicationSettingCreatorFcn)(makVrv::DtDe&);
106 
108  {
109  protected:
110  typedef std::map<std::string, DtApplicationSettingCreatorFcn> SettingsCreatorMap;
111 
112  public:
114  virtual ~DtVrfGuiSettingsFactory();
115 
116  public:
117  static bool addSettingCreator(const std::string& name, DtApplicationSettingCreatorFcn f);
118  static DtVrfGuiApplicationSetting* createSetting(const std::string& name, makVrv::DtDe&);
119 
120  protected:
121  static std::map<std::string, DtApplicationSettingCreatorFcn>* theSettingsCreators;
122  };
123 
124  #define REGISTER_APPLICATION_SETTING(AppSetting) static bool AppSetting##_Registered = \
125  DtVrfGuiSettingsFactory::addSettingCreator(DtVrfGuiApplicationSetting::theClassType<AppSetting>(), \
126  DtVrfGuiApplicationSetting::create<AppSetting>);
127 
129  {
130  typedef std::map<std::string, DtVrfGuiApplicationSetting*> VrfGuiSettings;
131 
132  public:
135 
137  virtual ~DtVrfGuiApplicationSettings();
138 
140  static DtVrfGuiApplicationSettings& instance( makVrv::DtDe& de );
141 
142  public:
143  virtual void loadSettings(const std::string& settingsFile);
144  virtual void saveSettings();
145  virtual void saveSettings(const std::string& settingsFile);
146 
147  public:
149  virtual DtVrfGuiApplicationSetting* addSetting(const std::string&, const DtVrfGuiApplicationSetting&);
150 
151  virtual DtVrfGuiApplicationSetting* settingFor(const std::string&);
152 
154  virtual void removeSetting(const std::string&);
155 
156  const VrfGuiSettings& settings() const
157  {
158  return mySettings;
159  }
160 
161  void setAutoSave(bool b)
162  {
163  myAutoSave = b;
164  }
165 
166  bool autoSave() const
167  {
168  return myAutoSave;
169  }
170 
171  virtual void clearSettings();
172 
173  protected:
174  friend class boost::serialization::access;
175 
179  template<class Archive>
180  void serialize(Archive & ar, const unsigned int version)
181  {
182  VrfGuiSettings::const_iterator iter = mySettings.begin();
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 

Document ID: Generated on Mon Apr 8 19:24:01 EDT 2013 from SVN revision 125877
Copyright © 2005-2013 VT MÄK. All Rights Reserved (www.mak.com)