LibreCAD
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
document.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "cad/meta/layer.h"
4 
5 #include "cad/const.h"
8 
9 #include <nano-signal-slot/nano_signal_slot.hpp>
10 
15 #include <unordered_set>
17 
20 
24 
28 
29 namespace lc {
30 
31  namespace entity {
32  class CADEntity;
33  }
34 
35  namespace operation {
36  class DocumentOperation;
38  }
39 
40  class Document {
41  public:
42  Document();
43  virtual ~Document();
44 
48  virtual Nano::Signal<void(const lc::BeginProcessEvent&)>& beginProcessEvent();
52  virtual Nano::Signal<void(const lc::CommitProcessEvent&)>& commitProcessEvent();
53 
57  virtual Nano::Signal<void(const lc::AddEntityEvent&)>& addEntityEvent();
58 
62  virtual Nano::Signal<void(const lc::ReplaceEntityEvent&)>& replaceEntityEvent();
63 
67  virtual Nano::Signal<void(const lc::RemoveEntityEvent&)>& removeEntityEvent();
68 
72  virtual Nano::Signal<void(const lc::RemoveLayerEvent&)>& removeLayerEvent();
73 
77  virtual Nano::Signal<void(const lc::AddLayerEvent&)>& addLayerEvent();
78 
82  virtual Nano::Signal<void(const lc::ReplaceLayerEvent&)>& replaceLayerEvent();
83 
87  virtual Nano::Signal<void(const lc::RemoveLinePatternEvent&)>& removeLinePatternEvent();
88 
92  virtual Nano::Signal<void(const lc::AddLinePatternEvent&)>& addLinePatternEvent();
93 
97  virtual Nano::Signal<void(const lc::ReplaceLinePatternEvent&)>& replaceLinePatternEvent();
98 
102  virtual Nano::Signal<void(const NewWaitingCustomEntityEvent&)>& newWaitingCustomEntityEvent();
103 
104  protected:
110  virtual void execute(operation::DocumentOperation_SPtr operation) = 0;
111 
116  virtual void begin(operation::DocumentOperation_SPtr operation) = 0;
117 
122  virtual void commit(operation::DocumentOperation_SPtr operation) = 0;
123 
124 
129  virtual void operationStart(operation::DocumentOperation_SPtr operation);
130 
135  virtual void operationFinnish(operation::DocumentOperation_SPtr operation);
136 
141  virtual void operationProcess(operation::DocumentOperation_SPtr operation);
142 
143  public:
149  virtual void insertEntity(entity::CADEntity_CSPtr cadEntity) = 0;
154  virtual void removeEntity(entity::CADEntity_CSPtr entity) = 0;
155 
160  virtual void addDocumentMetaType(DocumentMetaType_CSPtr dmt) = 0;
161 
166  virtual void removeDocumentMetaType(DocumentMetaType_CSPtr dmt) = 0;
167 
171  virtual void replaceDocumentMetaType(DocumentMetaType_CSPtr oldDmt, DocumentMetaType_CSPtr newDmt) = 0;
172 
179  virtual EntityContainer<entity::CADEntity_CSPtr> entitiesByLayer(Layer_CSPtr layer) = 0;
180 
186  virtual EntityContainer<entity::CADEntity_CSPtr> entitiesByBlock(Block_CSPtr block) = 0;
187 
194 
195 
199  virtual std::map<std::string, Layer_CSPtr> allLayers() const = 0;
200 
201  virtual std::map<std::string, DocumentMetaType_CSPtr, lc::StringHelper::cmpCaseInsensetive> allMetaTypes() = 0;
202 
206  virtual Layer_CSPtr layerByName(const std::string& layerName) const = 0;
207 
211  virtual DxfLinePatternByValue_CSPtr linePatternByName(const std::string& linePatternName) const = 0;
212 
216  virtual std::vector<DxfLinePatternByValue_CSPtr> linePatterns() const = 0;
217 
221  virtual std::vector<Block_CSPtr> blocks() const = 0;
222 
226  virtual std::unordered_set<entity::Insert_CSPtr> waitingCustomEntities(const std::string& pluginName) = 0;
227 
228  public:
230 
231  private:
232  Nano::Signal<void(const lc::BeginProcessEvent&)> _beginProcessEvent;
233  Nano::Signal<void(const lc::CommitProcessEvent&)> _commitProcessEvent;
234 
235  Nano::Signal<void(const lc::AddEntityEvent&)> _addEntityEvent;
236  Nano::Signal<void(const lc::ReplaceEntityEvent&)> _replaceEntityEvent;
237  Nano::Signal<void(const lc::RemoveEntityEvent&)> _removeEntityEvent;
238 
239  Nano::Signal<void(const lc::AddLayerEvent&)> _addLayerEvent;
240  Nano::Signal<void(const lc::ReplaceLayerEvent&)> _replaceLayerEvent;
241  Nano::Signal<void(const lc::RemoveLayerEvent&)> _removeLayerEvent;
242 
243  Nano::Signal<void(const lc::AddLinePatternEvent&)> _addLinePatternEvent;
244  Nano::Signal<void(const lc::ReplaceLinePatternEvent&)> _replaceLinePatternEvent;
245  Nano::Signal<void(const lc::RemoveLinePatternEvent&)> _removeLinePatternEvent;
246 
247  Nano::Signal<void(const lc::NewWaitingCustomEntityEvent&)> _newWaitingCustomEntityEvent;
248  };
249 
251 }
virtual Nano::Signal< void(const lc::ReplaceLayerEvent &)> & replaceLayerEvent()
Event to replace a layer.
Definition: document.cpp:58
virtual void operationFinnish(operation::DocumentOperation_SPtr operation)
operationFinnish Finishes the operation.
Definition: document.cpp:24
virtual ~Document()
Definition: document.cpp:17
virtual Nano::Signal< void(const lc::RemoveLayerEvent &)> & removeLayerEvent()
Event to remove an layer.
Definition: document.cpp:50
virtual Layer_CSPtr layerByName(const std::string &layerName) const =0
return a layer by it's name
virtual Nano::Signal< void(const lc::AddEntityEvent &)> & addEntityEvent()
Event to add an Entity.
Definition: document.cpp:38
Nano::Signal< void(const lc::NewWaitingCustomEntityEvent &)> _newWaitingCustomEntityEvent
Definition: document.h:247
virtual void removeEntity(entity::CADEntity_CSPtr entity)=0
removes an entity from the document.
virtual void operationStart(operation::DocumentOperation_SPtr operation)
operationStart Starts the operation.
Definition: document.cpp:21
virtual void operationProcess(operation::DocumentOperation_SPtr operation)
operationProcess process the operation.
Definition: document.cpp:27
virtual void execute(operation::DocumentOperation_SPtr operation)=0
execute the given operations within the document
virtual Nano::Signal< void(const lc::AddLinePatternEvent &)> & addLinePatternEvent()
Event to add a line pattern.
Definition: document.cpp:66
virtual EntityContainer< entity::CADEntity_CSPtr > & entityContainer()=0
entityContainer Return a copy of all entities within the document
Nano::Signal< void(const lc::ReplaceEntityEvent &)> _replaceEntityEvent
Definition: document.h:236
Nano::Signal< void(const lc::AddLayerEvent &)> _addLayerEvent
Definition: document.h:239
virtual void insertEntity(entity::CADEntity_CSPtr cadEntity)=0
add an entity to document.
Nano::Signal< void(const lc::BeginProcessEvent &)> _beginProcessEvent
Definition: document.h:232
virtual std::unordered_set< entity::Insert_CSPtr > waitingCustomEntities(const std::string &pluginName)=0
virtual void begin(operation::DocumentOperation_SPtr operation)=0
begins an operation
virtual EntityContainer< entity::CADEntity_CSPtr > entitiesByLayer(Layer_CSPtr layer)=0
findEntitiesByLayer rturn a entities container with all entities on the given layer ...
Nano::Signal< void(const lc::AddLinePatternEvent &)> _addLinePatternEvent
Definition: document.h:243
virtual std::map< std::string, Layer_CSPtr > allLayers() const =0
Returns all layers.
virtual DxfLinePatternByValue_CSPtr linePatternByName(const std::string &linePatternName) const =0
return a line pattern by it's name
DECLARE_SHORT_SHARED_PTR(Document)
virtual std::vector< Block_CSPtr > blocks() const =0
virtual EntityContainer< entity::CADEntity_CSPtr > entitiesByBlock(Block_CSPtr block)=0
Search entities in a given block.
virtual Nano::Signal< void(const lc::BeginProcessEvent &)> & beginProcessEvent()
begins a Process Event
Definition: document.cpp:30
Nano::Signal< void(const lc::RemoveLayerEvent &)> _removeLayerEvent
Definition: document.h:241
Nano::Signal< void(const lc::ReplaceLayerEvent &)> _replaceLayerEvent
Definition: document.h:240
Definition: cadentity.h:12
virtual void removeDocumentMetaType(DocumentMetaType_CSPtr dmt)=0
remove a layer from the document
virtual std::vector< DxfLinePatternByValue_CSPtr > linePatterns() const =0
return all line patterns
virtual Nano::Signal< void(const lc::RemoveLinePatternEvent &)> & removeLinePatternEvent()
Event to remove a line pattern.
Definition: document.cpp:62
Nano::Signal< void(const lc::AddEntityEvent &)> _addEntityEvent
Definition: document.h:235
Nano::Signal< void(const lc::ReplaceLinePatternEvent &)> _replaceLinePatternEvent
Definition: document.h:244
Nano::Signal< void(const lc::RemoveEntityEvent &)> _removeEntityEvent
Definition: document.h:237
virtual void addDocumentMetaType(DocumentMetaType_CSPtr dmt)=0
add a new layer to the document
virtual Nano::Signal< void(const lc::RemoveEntityEvent &)> & removeEntityEvent()
Event to remove an Entity.
Definition: document.cpp:46
virtual Nano::Signal< void(const lc::ReplaceLinePatternEvent &)> & replaceLinePatternEvent()
Event to replace a line pattern.
Definition: document.cpp:70
virtual std::map< std::string, DocumentMetaType_CSPtr, lc::StringHelper::cmpCaseInsensetive > allMetaTypes()=0
Nano::Signal< void(const lc::CommitProcessEvent &)> _commitProcessEvent
Definition: document.h:233
virtual Nano::Signal< void(const lc::CommitProcessEvent &)> & commitProcessEvent()
commits a Process Event
Definition: document.cpp:34
Nano::Signal< void(const lc::RemoveLinePatternEvent &)> _removeLinePatternEvent
Definition: document.h:245
virtual Nano::Signal< void(const lc::ReplaceEntityEvent &)> & replaceEntityEvent()
Event to replace an Entity.
Definition: document.cpp:42
virtual Nano::Signal< void(const lc::AddLayerEvent &)> & addLayerEvent()
Event to add a layer.
Definition: document.cpp:54
virtual Nano::Signal< void(const NewWaitingCustomEntityEvent &)> & newWaitingCustomEntityEvent()
Event called when an unmanaged entity is added to the document.
Definition: document.cpp:74
virtual void commit(operation::DocumentOperation_SPtr operation)=0
commits an operation
virtual void replaceDocumentMetaType(DocumentMetaType_CSPtr oldDmt, DocumentMetaType_CSPtr newDmt)=0
remove a layer from the document