VR-Forces 4.6.1 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
selectionGroupManager.h
Go to the documentation of this file.
1 /*********************************************************************
2 ** Copyright (c) 2013 MaK Technologies, Inc.
3 ** All rights reserved.
4 *********************************************************************/
5 
8 #pragma once
9 
10 #include <vrvUtil/signalslib.h>
11 #include <vrfGuiCore/vrfGuiCore.h>
15 #include <vrvCore/DtElementData.h>
16 #include <vrvCore/DtUniqueID.h>
19 #include <vrvCore/DtStateView.h>
20 #include <vrvCore/DtEntityState.h>
21 #include <vrfutil/rwUUID.h>
22 
23 #include <map>
24 #include <set>
25 
26 #include <boost/archive/xml_iarchive.hpp>
27 #include <boost/archive/xml_oarchive.hpp>
28 #include <boost/serialization/access.hpp>
29 #include <boost/serialization/nvp.hpp>
30 #include <boost/serialization/list.hpp>
31 #include <boost/serialization/map.hpp>
32 #include <boost/serialization/vector.hpp>
33 #include <boost/serialization/string.hpp>
34 
35 #include <vlutil/vlSmartPointers.h>
36 
37 namespace makVrv
38 {
39  class DtDe;
40 }
41 
42 class DtSimMessage;
43 
44 namespace makVrf
45 {
48 
53  {
54  public:
55  typedef std::set<DtUUID> GroupItems;
56  typedef std::map<std::string, GroupItems> SelectionGroups;
57 
58  public:
61 
63  virtual ~DtSelectionGroupManager();
64 
65  static DtSelectionGroupManager& instance(makVrv::DtDe& de);
66  static void registerInstance(makVrv::DtDe& de, DtSelectionGroupManager*);
67 
69  virtual void createSelectionGroup(const std::string&, bool signal = true);
70 
74  virtual void createSelectionGroupFromCurrentSelection(const std::string& groupName, bool select = false);
75 
77  virtual void clearSelectionGroup(const std::string&);
78 
80  virtual void removeSelectionGroup(const std::string&);
81 
83  virtual bool hasSelectionGroup(const std::string&) const;
84 
87  virtual void renameSelectionGroup(const std::string& from, const std::string& to);
88 
90  virtual void addItemToSelectionGroup(const std::string&, const DtUUID&, bool signal = true);
91 
93  virtual bool atLeastOneItemNotInSelectionGroup(const std::string&, const GroupItems& names) const;
94  virtual bool atLeastOneItemNotInSelectionGroup(const std::string&, const std::vector<DtUUID>& names) const;
95 
97  virtual bool anyItemsInSelectionGroup(const std::string&, const GroupItems& names) const;
98  virtual bool anyItemsInSelectionGroup(const std::string&, const std::vector<DtUUID>& names) const;
99 
101  virtual void addItemsToSelectionGroup(const std::string&, const GroupItems& names, bool signal = true);
102  virtual void addItemsToSelectionGroup(const std::string&, const std::vector<DtUUID>& names, bool signal = true);
103 
105  virtual bool itemInAnySelectionGroup(const DtUUID&) const;
106 
108  virtual void removeItemFromSelectionGroup(const std::string&, const DtUUID&);
109 
111  virtual void removeItemsFromSelectionGroup(const std::string&, const GroupItems& names);
112  virtual void removeItemsFromSelectionGroup(const std::string&, const std::vector<DtUUID>& names);
113 
115  virtual const SelectionGroups& selectionGroups() const;
116 
118  virtual bool load(const std::string&);
119 
121  virtual bool save(const std::string&);
122 
124  virtual std::string toStringBuffer();
125 
127  virtual bool fromStringBuffer(const std::string&);
128 
130  virtual void removeAll();
131 
133  virtual GroupItems itemsInSelectionGroup(const std::string&) const;
134 
136  virtual bool itemIsInSelectionGroup(const std::string& group, const DtUUID&) const;
137 
140  virtual void selectItemsInSelectionGroup(const std::string&);
141 
143  virtual const std::string& selectedSelectionGroup() const;
144 
146  virtual void processCreateSelectionGroup(DtSimMessage*);
147 
150  virtual bool canRenameSelectionGroup(const std::string&) const;
151 
153  virtual void allScenarioObjectsDiscovered();
154 
155  public:
160  boost::signal<void (std::string)> signal_selectionGroupAdded;
161 
163  boost::signal<void (std::string, std::string)> signal_selectionGroupRenamed;
164 
166  boost::signal<void (std::string)> signal_selectionGroupRemoved;
167 
169  boost::signal<void (std::string)> signal_selectionGroupCleared;
170 
172  boost::signal<void (std::string, GroupItems)> signal_itemsAddedToSelectionGroup;
173 
175  boost::signal<void (std::string, GroupItems)> signal_itemsRemovedFromSelectionGroup;
176 
178  boost::signal<void (DtUUID)> signal_itemRemovedFromGroups;
179 
181  boost::signal<void ()> signal_loading;
182 
184  boost::signal<void ()> signal_loaded;
185 
187  boost::signal<void ()> signal_selectionGroupsCleared;
188 
190  boost::signal<void (std::string, std::string)> signal_itemRenamed;
191 
193  boost::signal<void (std::string)> signal_selectionGroupSelected;
194 
196 
197  protected:
200  virtual void slot_stateRemoved(const makVrv::DtStateView<makVrv::DtVrlinkSimulatedBaseState>*);
201 
202  protected:
203  friend class boost::serialization::access;
204 
208  template<class Archive>
209  void serialize(Archive & ar, const unsigned int version)
210  {
211  if (version >= 2)
212  {
213  ar & BOOST_SERIALIZATION_NVP(mySelectionGroupsUUID);
214  }
215  else
216  {
217  typedef std::set<std::string> OldGroupItems;
218  typedef std::map<std::string, OldGroupItems> OldSelectionGroups;
219 
220  OldSelectionGroups mySelectionGroups;
221 
222  ar & BOOST_SERIALIZATION_NVP(mySelectionGroups);
223 
224  if (Archive::is_loading::value)
225  {
226  OldSelectionGroups::const_iterator iter = mySelectionGroups.begin();
227  bool hasItems = false;
228 
229  while (iter != mySelectionGroups.end())
230  {
231  GroupItems newGroupItems;
232  OldGroupItems::const_iterator oldIter = iter->second.begin();
233 
234  while (oldIter != iter->second.end())
235  {
236  DtUUID uuid(DtUUID::nullUUID());
237 
238  uuid.setStringUUID(*oldIter);
239  newGroupItems.insert(uuid);
240  ++oldIter;
241  }
242 
243  hasItems |= (newGroupItems.size() != 0);
244  mySelectionGroupsUUID[iter->first] = newGroupItems;
245  ++iter;
246  }
247 
248  if (hasItems)
249  {
250  myWaitingForDiscovery = true;
251  }
252  }
253  }
254  }
255 
256  protected:
262  };
263 
267  {
268  public:
271 
273  virtual ~DtVrfSelectionGroupFilter();
274 
275  protected:
276  virtual DtVrfSelectionFilter* clone() const;
277 
278  virtual void setForce(int)
279  {
280  };
281 
282  virtual bool isValid(const makVrv::DtVrlinkSimulatedBaseState*, const DtVrfObjectDataState* = 0) const;
283 
284  protected:
286  };
287 }
288 

Document ID: Generated on Wed Jul 25 16:57:45 EDT 2018 from SVN revision 190790
Copyright © 2005-2018 VT MÄK. All Rights Reserved (www.mak.com)