Choreonoid  1.5
Archive.h
Go to the documentation of this file.
1 
5 #ifndef CNOID_BASE_ARCHIVE_H
6 #define CNOID_BASE_ARCHIVE_H
7 
8 #include <cnoid/ValueTree>
9 #include <boost/function.hpp>
10 #include <boost/filesystem.hpp>
11 #include <string>
12 #include "exportdecl.h"
13 
14 namespace cnoid {
15 
16 class Item;
17 class View;
18 class ViewManager;
19 class ArchiveSharedData;
20 
22 {
23 public:
24  Archive();
25  Archive(int line, int column);
26  virtual ~Archive();
27 
28  void initSharedInfo(bool useHomeRelativeDirectories = false);
29  void initSharedInfo(const std::string& projectFile, bool useHomeRelativeDirectories = false);
30  void inheritSharedInfoFrom(Archive& archive);
31 
32  void addPostProcess(const boost::function<void()>& func, int priority = 0) const;
33 
34  Archive* findSubArchive(const std::string& name);
35  const Archive* findSubArchive(const std::string& name) const;
36  bool forSubArchive(const std::string& name, boost::function<bool(const Archive& archive)> func) const;
37  Archive* openSubArchive(const std::string& name);
38 
39  ValueNodePtr getItemId(Item* item) const;
40  Item* findItem(ValueNodePtr id) const;
41 
42  int getViewId(View* view) const;
43  View* findView(int id) const;
44 
45  void clearIds();
46 
47  template<class ItemType> inline ItemType* findItem(ValueNodePtr id) const {
48  return dynamic_cast<ItemType*>(findItem(id));
49  }
50 
51  void writeItemId(const std::string& key, Item* item);
52 
53  template<class ItemType> inline ItemType* findItem(const std::string& key) const {
54  ValueNode* id = find(key);
55  return id->isValid() ? findItem<ItemType>(id) : 0;
56  }
57 
58  std::string expandPathVariables(const std::string& path) const;
59 
64  std::string resolveRelocatablePath(const std::string& relocatable) const;
65 
66  bool readRelocatablePath(const std::string& key, std::string& out_value) const;
67 
68  std::string getRelocatablePath(const std::string& path) const;
69  void writeRelocatablePath(const std::string& key, const std::string& path);
70 
71  Item* currentParentItem() const;
72 
73  boost::filesystem::path getProjectDir() const { return projectDirPath; }
74 
75 private:
76 
78 
79  Item* findItem(int id) const;
80  void setCurrentParentItem(Item* parentItem);
81  static Archive* invalidArchive();
82  void registerItemId(Item* item, int id);
83  void registerViewId(View* view, int id);
84 
85  // called from ItemTreeArchiver
86  void callPostProcesses();
87 
88  friend class ItemTreeArchiverImpl;
89  friend class ViewManager;
90  friend class ProjectManagerImpl;
91 
92  boost::filesystem::path projectDirPath;
93 };
94 
96 
97 }
98 
99 #endif
Definition: Archive.h:21
Definition: ValueTree.h:224
Definition: Item.h:38
Defines the minimum processing for performing pasing file for STL.
Definition: AbstractSceneLoader.h:9
ItemType * findItem(const std::string &key) const
Definition: Archive.h:53
Definition: ValueTree.h:34
Definition: ViewManager.h:20
ref_ptr< Archive > ArchivePtr
Definition: Archive.h:95
Definition: View.h:28
#define CNOID_EXPORT
Definition: Util/exportdecl.h:37
ItemType * findItem(ValueNodePtr id) const
Definition: Archive.h:47
boost::filesystem::path getProjectDir() const
Definition: Archive.h:73