1
////////////////////////////////////////////////////////////////////////////////
3
// This file is part of Toolkit for Conceptual Modeling (TCM).
4
// (c) copyright 1995, Vrije Universiteit Amsterdam.
5
// Author: Frank Dehne (frank@cs.vu.nl).
7
// TCM is free software; you can redistribute it and/or modify
8
// it under the terms of the GNU General Public License as published by
9
// the Free Software Foundation; either version 2 of the License, or
10
// (at your option) any later version.
12
// TCM is distributed in the hope that it will be useful,
13
// but WITHOUT ANY WARRANTY; without even the implied warranty of
14
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
// GNU General Public License for more details.
17
// You should have received a copy of the GNU General Public License
18
// along with TCM; if not, write to the Free Software
19
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
21
////////////////////////////////////////////////////////////////////////////////
24
#include "shapeview.h"
26
#include "diagramviewer.h"
27
#include "cutshapescmd.h"
29
CutShapesCmd::CutShapesCmd(ShapeView *v): CopyShapesCmd(v) {
30
// add the lines connected to the shapes.
31
List<GShape *> *sel = v->GetSelection();
32
v->CompleteShapes(sel);
33
// subjects to cut (remove from graph).
34
cutSubjects = new List<Subject *>;
35
// subjects only to update (delete dupl. mark).
36
updateSubjects = new List<Subject *>;
38
cutShapes = new List<GShape *>;
39
List<GShape *> tmpShapes;
40
List<GShape *> selCopy(*sel);
41
for (sel->first(); !sel->done(); sel->next()) {
42
GShape *shape = sel->cur();
43
Subject *subject = shape->GetSubject();
45
cutShapes->add(shape);
46
if (shape->IsDuplicate()) {
47
// look whether all duplicates are selected.
48
// if so, subject should be cut too.
49
v->GetViewer()->GetShapes(subject, &tmpShapes);
50
if (check(tmpShapes.count() >= 2)) {
51
bool rmSubject = True;
52
for (tmpShapes.first(); !tmpShapes.done();
54
GShape *s = tmpShapes.cur();
55
if (selCopy.find(s) == -1)
59
if (cutSubjects->find(subject) == -1)
60
cutSubjects->add(subject);
63
if (updateSubjects->find(subject) == -1)
64
updateSubjects->add(subject);
68
else if (cutSubjects->find(subject) == -1)
69
cutSubjects->add(subject);
73
void CutShapesCmd::Execute() {
74
GetView()->RemoveShapes(cutShapes);
75
GetDiagram()->RemoveSubjects(cutSubjects);
76
GetView()->GetViewer()->UpdateDuplicationMarks(updateSubjects);
77
GetDiagram()->IncChanges();
78
CopyShapesCmd::Execute();
81
void CutShapesCmd::UnExecute() {
82
GetView()->AddShapes(cutShapes);
83
GetDiagram()->AddSubjects(cutSubjects);
84
GetView()->GetViewer()->UpdateDuplicationMarks(updateSubjects);
85
GetDiagram()->DecChanges();
86
CopyShapesCmd::UnExecute();
89
CutShapesCmd::~CutShapesCmd(){
93
updateSubjects->empty();
97
delete updateSubjects;