LibreCAD
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
blockops.cpp
Go to the documentation of this file.
1 #include "blockops.h"
2 
3 using namespace lc;
4 using namespace operation;
5 
6 AddBlock::AddBlock(const Document_SPtr& document, const Block_CSPtr& block) :
7  DocumentOperation(document, "AddBlock"),
8  _block(block) {
9 
10 }
11 
12 void AddBlock::undo() const {
13  document()->removeDocumentMetaType(_block);
14 }
15 
16 void AddBlock::redo() const {
17  document()->addDocumentMetaType(_block);
18 }
19 
21  document()->addDocumentMetaType(_block);
22 }
23 
24 
25 RemoveBlock::RemoveBlock(const Document_SPtr& document, const Block_CSPtr& block) :
26  DocumentOperation(document, "RemoveBlock"),
27  _block(block){
28 
29 }
30 
31 void RemoveBlock::undo() const {
32  document()->addDocumentMetaType(_block);
33 }
34 
35 void RemoveBlock::redo() const {
36  document()->removeDocumentMetaType(_block);
37 }
38 
40  document()->removeDocumentMetaType(_block);
41 }
42 
43 
44 ReplaceBlock::ReplaceBlock(const Document_SPtr& document, const Block_CSPtr& oldBlock, const Block_CSPtr& newBlock) :
45  DocumentOperation(document, "ReplaceBlock"),
46  _oldBlock(oldBlock),
47  _newBlock(newBlock) {
48 
49 }
50 
51 void ReplaceBlock::undo() const {
52  document()->removeDocumentMetaType(_newBlock);
53  document()->addDocumentMetaType(_oldBlock);
54 }
55 
56 void ReplaceBlock::redo() const {
57  document()->removeDocumentMetaType(_oldBlock);
58  document()->addDocumentMetaType(_newBlock);
59 }
60 
62  auto entities = document()->entitiesByBlock(_oldBlock).asVector();
63 
64  for(auto entity : entities) {
65  document()->removeEntity(entity);
66  document()->insertEntity(entity->modify(
67  entity->layer(),
68  entity->metaInfo(),
69  _newBlock
70  ));
71  }
72 
73  document()->removeDocumentMetaType(_oldBlock);
74  document()->addDocumentMetaType(_newBlock);
75 
76  //TODO: should we modify the inserts ?
77 }
AddBlock(const Document_SPtr &document, const Block_CSPtr &block)
Definition: blockops.cpp:6
virtual void undo() const override
Undo a given operation.
Definition: blockops.cpp:12
virtual void processInternal() override
Definition: blockops.cpp:20
virtual void processInternal() override
Definition: blockops.cpp:61
virtual void redo() const override
Redo a given operation.
Definition: blockops.cpp:35
virtual void processInternal() override
Definition: blockops.cpp:39
ReplaceBlock(const Document_SPtr &document, const Block_CSPtr &oldBlock, const Block_CSPtr &newBlock)
Definition: blockops.cpp:44
virtual void redo() const override
Redo a given operation.
Definition: blockops.cpp:56
Definition: cadentity.h:12
virtual void undo() const override
Undo a given operation.
Definition: blockops.cpp:31
Block_CSPtr _block
Definition: blockops.h:20
RemoveBlock(const Document_SPtr &document, const Block_CSPtr &block)
Definition: blockops.cpp:25
virtual void redo() const override
Redo a given operation.
Definition: blockops.cpp:16
virtual void undo() const override
Undo a given operation.
Definition: blockops.cpp:51