GDevelop Core
Core library for developing platforms and tools compatible with GDevelop.
ObjectsContainer.h
1 /*
2  * GDevelop Core
3  * Copyright 2008-2016 Florian Rival ([email protected]). All rights
4  * reserved. This project is released under the MIT License.
5  */
6 #ifndef GDCORE_OBJECTSCONTAINER_H
7 #define GDCORE_OBJECTSCONTAINER_H
8 #include <memory>
9 #include <vector>
10 #include "GDCore/String.h"
11 #include "GDCore/Project/ObjectGroupsContainer.h"
12 #include "GDCore/Project/ObjectFolderOrObject.h"
13 namespace gd {
14 class Object;
15 class Project;
16 class SerializerElement;
17 } // namespace gd
18 #undef GetObject // Disable an annoying macro
19 
20 namespace gd {
21 
36 class GD_CORE_API ObjectsContainer {
37  public:
42  virtual ~ObjectsContainer();
43 
48 
52  bool HasObjectNamed(const gd::String& name) const;
53 
57  Object& GetObject(const gd::String& name);
58 
62  const gd::Object& GetObject(const gd::String& name) const;
63 
68  Object& GetObject(std::size_t index);
69 
74  const gd::Object& GetObject(std::size_t index) const;
75 
84  std::size_t GetObjectPosition(const gd::String& name) const;
85 
89  std::size_t GetObjectsCount() const;
90 
98  gd::Object& InsertNewObject(const gd::Project& project,
99  const gd::String& objectType,
100  const gd::String& name,
101  std::size_t position);
109  gd::Object& InsertNewObjectInFolder(
110  const gd::Project& project,
111  const gd::String& objectType,
112  const gd::String& name,
113  gd::ObjectFolderOrObject& objectFolderOrObject,
114  std::size_t position);
115 
125  gd::Object& InsertObject(const gd::Object& object, std::size_t position);
126 
134  void RemoveObject(const gd::String& name);
135 
139  void MoveObject(std::size_t oldIndex, std::size_t newIndex);
140 
149  void MoveObjectFolderOrObjectToAnotherContainerInFolder(
150  gd::ObjectFolderOrObject& objectFolderOrObject,
151  gd::ObjectsContainer& newContainer,
152  gd::ObjectFolderOrObject& newParentFolder,
153  std::size_t newPosition);
154 
158  std::vector<std::unique_ptr<gd::Object> >& GetObjects() {
159  return initialObjects;
160  }
161 
165  const std::vector<std::unique_ptr<gd::Object> >& GetObjects() const {
166  return initialObjects;
167  }
169 
175  std::vector<const ObjectFolderOrObject*> GetAllObjectFolderOrObjects() const;
176 
177  gd::ObjectFolderOrObject& GetRootFolder() {
178  return *rootFolder;
179  }
180 
181  void AddMissingObjectsInRootFolder();
182 
187 
190  void SerializeObjectsTo(SerializerElement& element) const;
191 
195  void UnserializeObjectsFrom(gd::Project& project,
196  const SerializerElement& element);
200  void SerializeFoldersTo(SerializerElement& element) const;
201 
205  void UnserializeFoldersFrom(gd::Project& project,
206  const SerializerElement& element);
208 
213 
217  ObjectGroupsContainer& GetObjectGroups() { return objectGroups; }
218 
222  const ObjectGroupsContainer& GetObjectGroups() const { return objectGroups; }
223 
225 
226  protected:
227  std::vector<std::unique_ptr<gd::Object> >
229  gd::ObjectGroupsContainer objectGroups;
230 
231  private:
232  std::unique_ptr<gd::ObjectFolderOrObject> rootFolder;
233 };
234 
235 } // namespace gd
236 
237 #endif // GDCORE_OBJECTSCONTAINER_H
Class representing a folder structure in order to organize objects in folders (to be used with an Obj...
Definition: ObjectFolderOrObject.h:29
A container for objects groups.
Definition: ObjectGroupsContainer.h:29
Represent an object of a platform.
Definition: Object.h:37
Used as a base class for classes that will own objects (see gd::Object).
Definition: ObjectsContainer.h:36
std::vector< std::unique_ptr< gd::Object > > & GetObjects()
Definition: ObjectsContainer.h:158
const ObjectGroupsContainer & GetObjectGroups() const
Return a const reference to the project's objects groups.
Definition: ObjectsContainer.h:222
const std::vector< std::unique_ptr< gd::Object > > & GetObjects() const
Definition: ObjectsContainer.h:165
std::vector< std::unique_ptr< gd::Object > > initialObjects
Objects contained.
Definition: ObjectsContainer.h:228
ObjectGroupsContainer & GetObjectGroups()
Return a reference to the project's objects groups.
Definition: ObjectsContainer.h:217
Base class representing a project (game), including all resources, scenes, objects,...
Definition: Project.h:50
String represents an UTF8 encoded string.
Definition: String.h:31
Definition: CommonTools.h:24