LibreCAD
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
documentimpl.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <mutex>
4 #include <vector>
5 #include <string>
6 #include <unordered_set>
7 #include <map>
8 #include "cad/const.h"
9 
10 #include "cad/document/document.h"
13 
14 namespace lc {
15  class DocumentImpl : public Document {
16  public:
17  DocumentImpl(StorageManager_SPtr storageManager);
18  virtual ~DocumentImpl();
19 
20  public:
21  void insertEntity(entity::CADEntity_CSPtr cadEntity) override;
22  void removeEntity(entity::CADEntity_CSPtr entity) override;
23 
24  void addDocumentMetaType(DocumentMetaType_CSPtr dmt) override;
25  void removeDocumentMetaType(DocumentMetaType_CSPtr dmt) override;
26  void replaceDocumentMetaType(DocumentMetaType_CSPtr oldDmt, DocumentMetaType_CSPtr newDmt) override;
27  std::map<std::string, DocumentMetaType_CSPtr, lc::StringHelper::cmpCaseInsensetive> allMetaTypes() override;
34 
36 
38 
39  std::map<std::string, Layer_CSPtr> allLayers() const override;
40 
41  Layer_CSPtr layerByName(const std::string& layerName) const override;
42  DxfLinePatternByValue_CSPtr linePatternByName(const std::string& linePatternName) const override;
43 
47  std::vector<DxfLinePatternByValue_CSPtr> linePatterns() const override;
48 
49  protected:
54  void execute(operation::DocumentOperation_SPtr operation) override;
55 
60  void begin(operation::DocumentOperation_SPtr operation) override;
65  void commit(operation::DocumentOperation_SPtr operation) override;
66 
67  StorageManager_SPtr storageManager() const;
68 
69  public:
70  std::unordered_set<entity::Insert_CSPtr> waitingCustomEntities(const std::string& pluginName) override;
71 
72  std::vector<Block_CSPtr> blocks() const override;
73 
74  private:
75  std::mutex _documentMutex;
76  // AI am considering remove the shared_ptr from this one so we can never get a shared object from it
77  StorageManager_SPtr _storageManager;
78 
79  std::map<std::string, std::unordered_set<entity::Insert_CSPtr>> _waitingCustomEntities;
80  std::unordered_set<entity::Insert_CSPtr> _newWaitingCustomEntities;
81  };
82 }
std::map< std::string, Layer_CSPtr > allLayers() const override
Returns all layers.
DocumentImpl(StorageManager_SPtr storageManager)
std::map< std::string, DocumentMetaType_CSPtr, lc::StringHelper::cmpCaseInsensetive > allMetaTypes() override
EntityContainer< entity::CADEntity_CSPtr > & entityContainer() override
entityContainer Return a copy of all entities within the document
DxfLinePatternByValue_CSPtr linePatternByName(const std::string &linePatternName) const override
return a line pattern by it's name
void removeDocumentMetaType(DocumentMetaType_CSPtr dmt) override
remove a layer from the document
void execute(operation::DocumentOperation_SPtr operation) override
execute's a operation
std::mutex _documentMutex
Definition: documentimpl.h:75
std::vector< DxfLinePatternByValue_CSPtr > linePatterns() const override
return all line patterns
std::unordered_set< entity::Insert_CSPtr > _newWaitingCustomEntities
Definition: documentimpl.h:80
StorageManager_SPtr storageManager() const
Definition: cadentity.h:12
EntityContainer< entity::CADEntity_CSPtr > entitiesByLayer(Layer_CSPtr layer) override
entitiesByLayer
Layer_CSPtr layerByName(const std::string &layerName) const override
return a layer by it's name
EntityContainer< entity::CADEntity_CSPtr > entitiesByBlock(Block_CSPtr block) override
Search entities in a given block.
virtual ~DocumentImpl()
std::unordered_set< entity::Insert_CSPtr > waitingCustomEntities(const std::string &pluginName) override
void insertEntity(entity::CADEntity_CSPtr cadEntity) override
add an entity to document.
std::vector< Block_CSPtr > blocks() const override
void begin(operation::DocumentOperation_SPtr operation) override
begins operation
void commit(operation::DocumentOperation_SPtr operation) override
commits operation
void removeEntity(entity::CADEntity_CSPtr entity) override
removes an entity from the document.
std::map< std::string, std::unordered_set< entity::Insert_CSPtr > > _waitingCustomEntities
Definition: documentimpl.h:79
void addDocumentMetaType(DocumentMetaType_CSPtr dmt) override
add a new layer to the document
StorageManager_SPtr _storageManager
Definition: documentimpl.h:77
void replaceDocumentMetaType(DocumentMetaType_CSPtr oldDmt, DocumentMetaType_CSPtr newDmt) override
remove a layer from the document