Choreonoid  1.8
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 <string>
10 #include <functional>
11 #include "exportdecl.h"
12 
13 namespace cnoid {
14 
15 class Item;
16 class View;
17 class ViewManager;
18 class ProjectManager;
19 class FilePathVariableProcessor;
20 class ArchiveSharedData;
21 class ArchiveSession;
22 
23 class CNOID_EXPORT Archive : public Mapping
24 {
25 public:
26  Archive();
27  Archive(int line, int column);
28  virtual ~Archive();
29 
30  void initSharedInfo(const std::string& projectFile, bool isSubProject, ArchiveSession* session);
31  void inheritSharedInfoFrom(Archive& archive);
32 
33  ArchiveSession* session() const;
34 
35  void addProcessOnSubTreeRestored(const std::function<void()>& func) const;
36  void addPostProcess(const std::function<void()>& func, int priority = 0) const;
37  void addFinalProcess(const std::function<void()>& func) const;
38 
39  Archive* findSubArchive(const std::string& name);
40  const Archive* findSubArchive(const std::string& name) const;
41  bool forSubArchive(const std::string& name, std::function<bool(const Archive& archive)> func) const;
42  Archive* openSubArchive(const std::string& name);
43  Archive* subArchive(Mapping* node);
44 
45  ValueNodePtr getItemId(Item* item) const;
46  Item* findItem(ValueNodePtr id) const;
47 
48  int getViewId(View* view) const;
49  View* findView(int id) const;
50 
51  void clearIds();
52 
53  template<class ItemType> inline ItemType* findItem(ValueNodePtr id) const {
54  return dynamic_cast<ItemType*>(findItem(id));
55  }
56 
57  void writeItemId(const std::string& key, Item* item);
58 
59  template<class ItemType> inline ItemType* findItem(const std::string& key) const {
60  ValueNode* id = find(key);
61  return id->isValid() ? findItem<ItemType>(id) : 0;
62  }
63 
64  std::string expandPathVariables(const std::string& path) const;
65 
70  std::string resolveRelocatablePath(const std::string& relocatable) const;
71 
72  bool readRelocatablePath(const std::string& key, std::string& out_value) const;
73  std::string readItemFilePath() const;
74  bool loadFileTo(Item* item) const;
75  bool loadFileTo(Item* item, const std::string& filepath) const;
76  [[deprecated]]
77  bool loadFileTo(const std::string& filepath, Item* item) const {
78  return loadFileTo(item, filepath);
79  }
80  [[deprecated]]
81  bool loadItemFile(Item* item, const std::string& fileNameKey, const std::string& fileFormatKey = std::string()) const;
82 
83  std::string getRelocatablePath(const std::string& path) const;
84  bool writeRelocatablePath(const std::string& key, const std::string& path);
85  bool writeFileInformation(Item* item);
86 
87  Item* currentParentItem() const;
88 
89  std::string projectDirectory() const;
90 
91  FilePathVariableProcessor* filePathVariableProcessor() const;
92 
93 private:
95 
96  Item* findItem(int id) const;
97  void setCurrentParentItem(Item* parentItem);
98  static Archive* invalidArchive();
99  void registerItemId(Item* item, int id);
100  void registerViewId(View* view, int id);
101 
102  // called from ItemTreeArchiver
103  void setPointerToProcessesOnSubTreeRestored(std::vector<std::function<void()>>* pfunc);
104  void callPostProcesses();
105 
106  friend class ItemTreeArchiver;
107  friend class ViewManager;
108  friend class ProjectManager;
109 };
110 
112 
113 }
114 
115 #endif
cnoid::Mapping
Definition: ValueTree.h:251
cnoid::Archive::findItem
ItemType * findItem(const std::string &key) const
Definition: Archive.h:59
cnoid::View
Definition: View.h:27
cnoid::ValueNode
Definition: ValueTree.h:34
cnoid::Archive
Definition: Archive.h:23
cnoid::ItemTreeArchiver
Definition: ItemTreeArchiver.h:17
cnoid::Archive::findItem
ItemType * findItem(ValueNodePtr id) const
Definition: Archive.h:53
cnoid::ref_ptr< ValueNode >
cnoid::ArchivePtr
ref_ptr< Archive > ArchivePtr
Definition: Archive.h:111
cnoid::FilePathVariableProcessor
Definition: FilePathVariableProcessor.h:18
cnoid::ArchiveSession
Definition: ArchiveSession.h:13
cnoid
Definition: AbstractSceneLoader.h:11
cnoid::Item
Definition: Item.h:29
cnoid::ProjectManager
Definition: ProjectManager.h:18
cnoid::ViewManager
Definition: ViewManager.h:19
cnoid::Archive::loadFileTo
bool loadFileTo(const std::string &filepath, Item *item) const
Definition: Archive.h:77