LibreCAD
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
lc::DocumentImpl Class Reference

#include <documentimpl.h>

Inheritance diagram for lc::DocumentImpl:
Collaboration diagram for lc::DocumentImpl:

Public Member Functions

 DocumentImpl (StorageManager_SPtr storageManager)
 
virtual ~DocumentImpl ()
 
void insertEntity (entity::CADEntity_CSPtr cadEntity) override
 add an entity to document. More...
 
void removeEntity (entity::CADEntity_CSPtr entity) override
 removes an entity from the document. More...
 
void addDocumentMetaType (DocumentMetaType_CSPtr dmt) override
 add a new layer to the document More...
 
void removeDocumentMetaType (DocumentMetaType_CSPtr dmt) override
 remove a layer from the document More...
 
void replaceDocumentMetaType (DocumentMetaType_CSPtr oldDmt, DocumentMetaType_CSPtr newDmt) override
 remove a layer from the document More...
 
std::map< std::string,
DocumentMetaType_CSPtr,
lc::StringHelper::cmpCaseInsensetive
allMetaTypes () override
 
EntityContainer
< entity::CADEntity_CSPtr > 
entitiesByLayer (Layer_CSPtr layer) override
 entitiesByLayer More...
 
EntityContainer
< entity::CADEntity_CSPtr > 
entitiesByBlock (Block_CSPtr block) override
 Search entities in a given block. More...
 
EntityContainer
< entity::CADEntity_CSPtr > & 
entityContainer () override
 entityContainer Return a copy of all entities within the document More...
 
std::map< std::string,
Layer_CSPtr > 
allLayers () const override
 Returns all layers. More...
 
Layer_CSPtr layerByName (const std::string &layerName) const override
 return a layer by it's name More...
 
DxfLinePatternByValue_CSPtr linePatternByName (const std::string &linePatternName) const override
 return a line pattern by it's name More...
 
std::vector
< DxfLinePatternByValue_CSPtr > 
linePatterns () const override
 return all line patterns More...
 
std::unordered_set
< entity::Insert_CSPtr > 
waitingCustomEntities (const std::string &pluginName) override
 
std::vector< Block_CSPtr > blocks () const override
 
- Public Member Functions inherited from lc::Document
 Document ()
 
virtual ~Document ()
 
virtual Nano::Signal< void(const
lc::BeginProcessEvent &)> & 
beginProcessEvent ()
 begins a Process Event More...
 
virtual Nano::Signal< void(const
lc::CommitProcessEvent &)> & 
commitProcessEvent ()
 commits a Process Event More...
 
virtual Nano::Signal< void(const
lc::AddEntityEvent &)> & 
addEntityEvent ()
 Event to add an Entity. More...
 
virtual Nano::Signal< void(const
lc::ReplaceEntityEvent &)> & 
replaceEntityEvent ()
 Event to replace an Entity. More...
 
virtual Nano::Signal< void(const
lc::RemoveEntityEvent &)> & 
removeEntityEvent ()
 Event to remove an Entity. More...
 
virtual Nano::Signal< void(const
lc::RemoveLayerEvent &)> & 
removeLayerEvent ()
 Event to remove an layer. More...
 
virtual Nano::Signal< void(const
lc::AddLayerEvent &)> & 
addLayerEvent ()
 Event to add a layer. More...
 
virtual Nano::Signal< void(const
lc::ReplaceLayerEvent &)> & 
replaceLayerEvent ()
 Event to replace a layer. More...
 
virtual Nano::Signal< void(const
lc::RemoveLinePatternEvent &)> & 
removeLinePatternEvent ()
 Event to remove a line pattern. More...
 
virtual Nano::Signal< void(const
lc::AddLinePatternEvent &)> & 
addLinePatternEvent ()
 Event to add a line pattern. More...
 
virtual Nano::Signal< void(const
lc::ReplaceLinePatternEvent &)> & 
replaceLinePatternEvent ()
 Event to replace a line pattern. More...
 
virtual Nano::Signal< void(const
NewWaitingCustomEntityEvent &)> & 
newWaitingCustomEntityEvent ()
 Event called when an unmanaged entity is added to the document. More...
 

Protected Member Functions

void execute (operation::DocumentOperation_SPtr operation) override
 execute's a operation More...
 
void begin (operation::DocumentOperation_SPtr operation) override
 begins operation More...
 
void commit (operation::DocumentOperation_SPtr operation) override
 commits operation More...
 
StorageManager_SPtr storageManager () const
 
- Protected Member Functions inherited from lc::Document
virtual void operationStart (operation::DocumentOperation_SPtr operation)
 operationStart Starts the operation. More...
 
virtual void operationFinnish (operation::DocumentOperation_SPtr operation)
 operationFinnish Finishes the operation. More...
 
virtual void operationProcess (operation::DocumentOperation_SPtr operation)
 operationProcess process the operation. More...
 

Private Attributes

std::mutex _documentMutex
 
StorageManager_SPtr _storageManager
 
std::map< std::string,
std::unordered_set
< entity::Insert_CSPtr > > 
_waitingCustomEntities
 
std::unordered_set
< entity::Insert_CSPtr > 
_newWaitingCustomEntities
 

Detailed Description

Definition at line 15 of file documentimpl.h.

Constructor & Destructor Documentation

DocumentImpl::DocumentImpl ( StorageManager_SPtr  storageManager)

Definition at line 11 of file documentimpl.cpp.

12  _storageManager->addDocumentMetaType(std::make_shared<Layer>("0", Color(255, 255, 255)));
13 }
StorageManager_SPtr storageManager() const
StorageManager_SPtr _storageManager
Definition: documentimpl.h:77
DocumentImpl::~DocumentImpl ( )
virtual

Definition at line 15 of file documentimpl.cpp.

15  {
16  // LOG4CXX_DEBUG(logger, "DocumentImpl removed");
17 }

Member Function Documentation

void DocumentImpl::addDocumentMetaType ( DocumentMetaType_CSPtr  dmt)
overridevirtual

add a new layer to the document

Parameters
layerlayer to be added.

Implements lc::Document.

Definition at line 87 of file documentimpl.cpp.

87  {
88  _storageManager->addDocumentMetaType(dmt);
89 
90  auto layer = std::dynamic_pointer_cast<const Layer>(dmt);
91  if (layer != nullptr) {
92  AddLayerEvent event(layer);
93  addLayerEvent()(event);
94  }
95 
96  auto linePattern = std::dynamic_pointer_cast<const DxfLinePatternByValue>(dmt);
97  if (linePattern != nullptr) {
98  AddLinePatternEvent event(linePattern);
99  addLinePatternEvent()(event);
100  }
101 }
virtual Nano::Signal< void(const lc::AddLinePatternEvent &)> & addLinePatternEvent()
Event to add a line pattern.
Definition: document.cpp:66
virtual Nano::Signal< void(const lc::AddLayerEvent &)> & addLayerEvent()
Event to add a layer.
Definition: document.cpp:54
Event that gets emitted when a new line pattern was added to the document.
StorageManager_SPtr _storageManager
Definition: documentimpl.h:77
std::map< std::string, Layer_CSPtr > DocumentImpl::allLayers ( ) const
overridevirtual

Returns all layers.

Implements lc::Document.

Definition at line 158 of file documentimpl.cpp.

158  {
159  return _storageManager->allLayers();
160 }
StorageManager_SPtr _storageManager
Definition: documentimpl.h:77
std::map< std::string, DocumentMetaType_CSPtr, lc::StringHelper::cmpCaseInsensetive > DocumentImpl::allMetaTypes ( )
overridevirtual

Implements lc::Document.

Definition at line 139 of file documentimpl.cpp.

139  {
140  return _storageManager->allMetaTypes();
141 }
StorageManager_SPtr _storageManager
Definition: documentimpl.h:77
void DocumentImpl::begin ( operation::DocumentOperation_SPtr  operation)
overrideprotectedvirtual

begins operation

Parameters
operation

Implements lc::Document.

Definition at line 37 of file documentimpl.cpp.

37  {
38  this->operationStart(operation);
39  BeginProcessEvent event;
40  beginProcessEvent()(event);
41 }
virtual void operationStart(operation::DocumentOperation_SPtr operation)
operationStart Starts the operation.
Definition: document.cpp:21
virtual Nano::Signal< void(const lc::BeginProcessEvent &)> & beginProcessEvent()
begins a Process Event
Definition: document.cpp:30
std::vector< Block_CSPtr > DocumentImpl::blocks ( ) const
overridevirtual
Returns
all blocks

Implements lc::Document.

Definition at line 182 of file documentimpl.cpp.

182  {
183  return _storageManager->metaTypes<const Block>();
184 }
StorageManager_SPtr _storageManager
Definition: documentimpl.h:77
void DocumentImpl::commit ( operation::DocumentOperation_SPtr  operation)
overrideprotectedvirtual

commits operation

Parameters
operation

Implements lc::Document.

Definition at line 43 of file documentimpl.cpp.

43  {
44  _storageManager->optimise();
45  CommitProcessEvent event(operation);
46  commitProcessEvent()(event);
47 }
virtual Nano::Signal< void(const lc::CommitProcessEvent &)> & commitProcessEvent()
commits a Process Event
Definition: document.cpp:34
StorageManager_SPtr _storageManager
Definition: documentimpl.h:77
EntityContainer< entity::CADEntity_CSPtr > DocumentImpl::entitiesByBlock ( Block_CSPtr  block)
overridevirtual

Search entities in a given block.

Parameters
block
Returns
EntityContainer

Implements lc::Document.

Definition at line 178 of file documentimpl.cpp.

178  {
179  return _storageManager->entitiesByBlock(block);
180 }
StorageManager_SPtr _storageManager
Definition: documentimpl.h:77
EntityContainer< entity::CADEntity_CSPtr > DocumentImpl::entitiesByLayer ( Layer_CSPtr  layer)
overridevirtual

entitiesByLayer

Parameters
layer
Returns

Implements lc::Document.

Definition at line 143 of file documentimpl.cpp.

143  {
144  std::lock_guard<std::mutex> lck(_documentMutex);
145  return _storageManager->entitiesByLayer(layer);
146 }
std::mutex _documentMutex
Definition: documentimpl.h:75
StorageManager_SPtr _storageManager
Definition: documentimpl.h:77
EntityContainer< entity::CADEntity_CSPtr > & DocumentImpl::entityContainer ( )
overridevirtual

entityContainer Return a copy of all entities within the document

Returns

Implements lc::Document.

Definition at line 153 of file documentimpl.cpp.

153  {
154  // std::lock_guard<std::mutex> lck(_documentMutex);
155  return _storageManager->entityContainer();
156 }
StorageManager_SPtr _storageManager
Definition: documentimpl.h:77
void DocumentImpl::execute ( operation::DocumentOperation_SPtr  operation)
overrideprotectedvirtual

execute's a operation

Parameters
operation

Implements lc::Document.

Definition at line 19 of file documentimpl.cpp.

19  {
20  {
21  std::lock_guard<std::mutex> lck(_documentMutex);
22  begin(operation);
23  this->operationProcess(operation);
24  commit(operation);
25 
26  _documentMutex.unlock();
27  }
28 
29  auto tmp = _newWaitingCustomEntities;
31  for (auto insert : tmp) {
32  NewWaitingCustomEntityEvent customEntityEvent(insert);
33  newWaitingCustomEntityEvent()(customEntityEvent);
34  }
35 }
virtual void operationProcess(operation::DocumentOperation_SPtr operation)
operationProcess process the operation.
Definition: document.cpp:27
std::mutex _documentMutex
Definition: documentimpl.h:75
std::unordered_set< entity::Insert_CSPtr > _newWaitingCustomEntities
Definition: documentimpl.h:80
void begin(operation::DocumentOperation_SPtr operation) override
begins operation
void commit(operation::DocumentOperation_SPtr operation) override
commits operation
virtual Nano::Signal< void(const NewWaitingCustomEntityEvent &)> & newWaitingCustomEntityEvent()
Event called when an unmanaged entity is added to the document.
Definition: document.cpp:74
void DocumentImpl::insertEntity ( entity::CADEntity_CSPtr  cadEntity)
overridevirtual

add an entity to document.

Parameters
layerNameName of layer to which entity is to be added
cadEntityEntity to be added

Implements lc::Document.

Definition at line 49 of file documentimpl.cpp.

49  {
50  if (_storageManager->entityByID(cadEntity->id()) != nullptr) {
51  removeEntity(cadEntity);
52  }
53 
54  _storageManager->insertEntity(cadEntity);
55  AddEntityEvent event(cadEntity);
56  addEntityEvent()(event);
57 
58  auto insert = std::dynamic_pointer_cast<const entity::Insert>(cadEntity);
59  if (insert != nullptr && std::dynamic_pointer_cast<const entity::CustomEntity>(cadEntity) == nullptr) {
60  auto ces = std::dynamic_pointer_cast<const CustomEntityStorage>(insert->displayBlock());
61 
62  if (ces != nullptr) {
63  _waitingCustomEntities[ces->pluginName()].insert(insert);
64  _newWaitingCustomEntities.insert(insert);
65  }
66  }
67 }
virtual Nano::Signal< void(const lc::AddEntityEvent &)> & addEntityEvent()
Event to add an Entity.
Definition: document.cpp:38
std::unordered_set< entity::Insert_CSPtr > _newWaitingCustomEntities
Definition: documentimpl.h:80
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
StorageManager_SPtr _storageManager
Definition: documentimpl.h:77
Class for storage of components of custom entities Child of Block for compatibility with other CAD so...
Layer_CSPtr DocumentImpl::layerByName ( const std::string &  layerName) const
overridevirtual

return a layer by it's name

Implements lc::Document.

Definition at line 162 of file documentimpl.cpp.

162  {
163  return _storageManager->layerByName(layerName);
164 }
StorageManager_SPtr _storageManager
Definition: documentimpl.h:77
DxfLinePatternByValue_CSPtr DocumentImpl::linePatternByName ( const std::string &  linePatternName) const
overridevirtual

return a line pattern by it's name

Implements lc::Document.

Definition at line 166 of file documentimpl.cpp.

166  {
167  return _storageManager->linePatternByName(linePatternName);
168 }
StorageManager_SPtr _storageManager
Definition: documentimpl.h:77
std::vector< DxfLinePatternByValue_CSPtr > DocumentImpl::linePatterns ( ) const
overridevirtual

return all line patterns

Return all line patterns

Todo:
probably change this to metaTypes<T>()

Implements lc::Document.

Definition at line 174 of file documentimpl.cpp.

174  {
175  return _storageManager->metaTypes<const DxfLinePatternByValue>();
176 }
StorageManager_SPtr _storageManager
Definition: documentimpl.h:77
void DocumentImpl::removeDocumentMetaType ( DocumentMetaType_CSPtr  dmt)
overridevirtual

remove a layer from the document

Parameters
layerlayer to be added.

Implements lc::Document.

Definition at line 102 of file documentimpl.cpp.

102  {
103  _storageManager->removeDocumentMetaType(dmt);
104  auto layer = std::dynamic_pointer_cast<const Layer>(dmt);
105  if (layer != nullptr) {
106  RemoveLayerEvent event(layer);
107  removeLayerEvent()(event);
108  }
109 
110  auto linePattern = std::dynamic_pointer_cast<const DxfLinePatternByValue>(dmt);
111  if (linePattern != nullptr) {
112  RemoveLinePatternEvent event(linePattern);
113  removeLinePatternEvent()(event);
114  }
115 }
virtual Nano::Signal< void(const lc::RemoveLayerEvent &)> & removeLayerEvent()
Event to remove an layer.
Definition: document.cpp:50
Event that gets emitted when a new line pattern was removed from the document.
virtual Nano::Signal< void(const lc::RemoveLinePatternEvent &)> & removeLinePatternEvent()
Event to remove a line pattern.
Definition: document.cpp:62
StorageManager_SPtr _storageManager
Definition: documentimpl.h:77
void DocumentImpl::removeEntity ( entity::CADEntity_CSPtr  entity)
overridevirtual

removes an entity from the document.

Parameters
idID of the entity to be removed.

Implements lc::Document.

Definition at line 69 of file documentimpl.cpp.

69  {
70  auto insert = std::dynamic_pointer_cast<const entity::Insert>(entity);
71  if (insert != nullptr && std::dynamic_pointer_cast<const entity::CustomEntity>(entity) == nullptr) {
72  auto ces = std::dynamic_pointer_cast<const CustomEntityStorage>(insert->displayBlock());
73  if (ces != nullptr) {
74  _waitingCustomEntities[ces->pluginName()].erase(insert);
75  }
76  }
77 
78  if (_storageManager->entityByID(entity->id()) != nullptr) {
79  _storageManager->removeEntity(entity);
80  RemoveEntityEvent event(entity);
81  removeEntityEvent()(event);
82  }
83 }
virtual Nano::Signal< void(const lc::RemoveEntityEvent &)> & removeEntityEvent()
Event to remove an Entity.
Definition: document.cpp:46
std::map< std::string, std::unordered_set< entity::Insert_CSPtr > > _waitingCustomEntities
Definition: documentimpl.h:79
StorageManager_SPtr _storageManager
Definition: documentimpl.h:77
Class for storage of components of custom entities Child of Block for compatibility with other CAD so...
void DocumentImpl::replaceDocumentMetaType ( DocumentMetaType_CSPtr  oldDmt,
DocumentMetaType_CSPtr  newDmt 
)
overridevirtual

remove a layer from the document

Implements lc::Document.

Definition at line 116 of file documentimpl.cpp.

116  {
117  _storageManager->replaceDocumentMetaType(oldDmt, newDmt);
118  auto oldLayer = std::dynamic_pointer_cast<const Layer>(oldDmt);
119  if (oldLayer != nullptr) {
120  auto newLayer = std::dynamic_pointer_cast<const Layer>(newDmt);
121  if (newLayer != nullptr) {
122  ReplaceLayerEvent event(oldLayer, newLayer);
123  replaceLayerEvent()(event);
124  } else {
125  throw;
126  }
127  }
128 
129  auto oldLinePattern = std::dynamic_pointer_cast<const DxfLinePatternByValue>(oldDmt);
130  if (oldLinePattern != nullptr) {
131  auto newLinePattern = std::dynamic_pointer_cast<const DxfLinePatternByValue>(newDmt);
132  if (newLinePattern != nullptr) {
133  ReplaceLinePatternEvent event(oldLinePattern, newLinePattern);
134  replaceLinePatternEvent()(event);
135  }
136  }
137 }
virtual Nano::Signal< void(const lc::ReplaceLayerEvent &)> & replaceLayerEvent()
Event to replace a layer.
Definition: document.cpp:58
Event that gets emitted when a new line pattern was replaced in the document.
virtual Nano::Signal< void(const lc::ReplaceLinePatternEvent &)> & replaceLinePatternEvent()
Event to replace a line pattern.
Definition: document.cpp:70
StorageManager_SPtr _storageManager
Definition: documentimpl.h:77
StorageManager_SPtr DocumentImpl::storageManager ( ) const
protected

Definition at line 148 of file documentimpl.cpp.

148  {
149  return _storageManager;
150 }
StorageManager_SPtr _storageManager
Definition: documentimpl.h:77
std::unordered_set< entity::Insert_CSPtr > DocumentImpl::waitingCustomEntities ( const std::string &  pluginName)
overridevirtual
Returns
all the custom entities which aren't managed by a plugin

Implements lc::Document.

Definition at line 186 of file documentimpl.cpp.

186  {
187  return _waitingCustomEntities[pluginName];
188 }
std::map< std::string, std::unordered_set< entity::Insert_CSPtr > > _waitingCustomEntities
Definition: documentimpl.h:79

Member Data Documentation

std::mutex lc::DocumentImpl::_documentMutex
private

Definition at line 75 of file documentimpl.h.

std::unordered_set<entity::Insert_CSPtr> lc::DocumentImpl::_newWaitingCustomEntities
private

Definition at line 80 of file documentimpl.h.

StorageManager_SPtr lc::DocumentImpl::_storageManager
private

Definition at line 77 of file documentimpl.h.

std::map<std::string, std::unordered_set<entity::Insert_CSPtr> > lc::DocumentImpl::_waitingCustomEntities
private

Definition at line 79 of file documentimpl.h.


The documentation for this class was generated from the following files: