diff options
author | randomguy3 <randomguy3@7c02a99a-9b00-45e3-bf44-6f3dd7fddb64> | 2012-01-09 11:00:50 +0000 |
---|---|---|
committer | randomguy3 <randomguy3@7c02a99a-9b00-45e3-bf44-6f3dd7fddb64> | 2012-01-09 11:00:50 +0000 |
commit | a8a8dfb90d6a51ae369c042c95162f45754c7c4b (patch) | |
tree | 0e7a5f82febebe7129ebfb015f05b114064c39fd /tikzit/src/common/GraphChange.m | |
parent | e1cf0babff63e670e0d550b4072c22649a117fa7 (diff) |
Move tikzit into "trunk" directory
git-svn-id: https://tikzit.svn.sourceforge.net/svnroot/tikzit/trunk@365 7c02a99a-9b00-45e3-bf44-6f3dd7fddb64
Diffstat (limited to 'tikzit/src/common/GraphChange.m')
-rw-r--r-- | tikzit/src/common/GraphChange.m | 324 |
1 files changed, 324 insertions, 0 deletions
diff --git a/tikzit/src/common/GraphChange.m b/tikzit/src/common/GraphChange.m new file mode 100644 index 0000000..d09e732 --- /dev/null +++ b/tikzit/src/common/GraphChange.m @@ -0,0 +1,324 @@ +// +// GraphChange.m +// TikZiT +// +// Copyright 2010 Aleks Kissinger. All rights reserved. +// +// +// This file is part of TikZiT. +// +// TikZiT is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// TikZiT is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with TikZiT. If not, see <http://www.gnu.org/licenses/>. +// + + +// GraphChange : store the data associated to a single, undo-able change +// to a graph. An undo manager should maintain a stack of such changes +// and undo/redo them on request using [graph applyGraphChange:...]. + +#import "GraphChange.h" + + +@implementation GraphChange + +- (id)init { + [super init]; + return self; +} + +- (ChangeType)changeType { return changeType; } + +- (void)setChangeType:(ChangeType)ct { + changeType = ct; +} + +- (BOOL)horizontal { return horizontal; } +- (void)setHorizontal:(BOOL)b { + horizontal = b; +} + +- (NSPoint)shiftPoint { return shiftPoint; } +- (void)setShiftPoint:(NSPoint)p { + shiftPoint = p; +} + +- (NSSet*)affectedNodes { return affectedNodes; } + +- (void)setAffectedNodes:(NSSet*)set { + if (affectedNodes != set) { + [affectedNodes release]; + affectedNodes = [[NSSet alloc] initWithSet:set]; + } +} + +- (NSSet*)affectedEdges { return affectedEdges; } + +- (void)setAffectedEdges:(NSSet*)set { + if (affectedEdges != set) { + [affectedEdges release]; + affectedEdges = [[NSSet alloc] initWithSet:set]; + } +} + +- (Node*)nodeRef { return nodeRef; } + +- (void)setNodeRef:(Node*)nd { + if (nodeRef != nd) { + [nodeRef release]; + nodeRef = [nd retain]; + } +} + +- (Node*)oldNode { return oldNode; } + +- (void)setOldNode:(Node*)nd { + if (oldNode != nd) { + [oldNode release]; + oldNode = [nd copy]; + } +} + +- (Node*)nwNode { return nwNode; } + +- (void)setNwNode:(Node*)nd { + if (nwNode != nd) { + [nwNode release]; + nwNode = [nd copy]; + } +} + +- (Edge*)edgeRef { return edgeRef; } + +- (void)setEdgeRef:(Edge*)ed { + if (edgeRef != ed) { + [edgeRef release]; + edgeRef = [ed retain]; + } +} + +- (Edge*)oldEdge { return oldEdge; } + +- (void)setOldEdge:(Edge*)ed { + if (oldEdge != ed) { + [oldEdge release]; + oldEdge = [ed copy]; + } +} + +- (Edge*)nwEdge { return nwEdge; } + +- (void)setNwEdge:(Edge*)ed { + if (nwEdge != ed) { + [nwEdge release]; + nwEdge = [ed copy]; + } +} + +- (BasicMapTable*)oldNodeTable { return oldNodeTable; } + +- (void)setOldNodeTable:(BasicMapTable*)tab { + if (oldNodeTable != tab) { + [oldNodeTable release]; + oldNodeTable = [tab retain]; + } +} + +- (BasicMapTable*)nwNodeTable { return nwNodeTable; } + +- (void)setNwNodeTable:(BasicMapTable*)tab { + if (nwNodeTable != tab) { + [nwNodeTable release]; + nwNodeTable = [tab retain]; + } +} + +- (NSRect)oldBoundingBox { return oldBoundingBox; } + +- (void)setOldBoundingBox:(NSRect)bbox { + oldBoundingBox = bbox; +} + +- (NSRect)nwBoundingBox { return nwBoundingBox; } + +- (void)setNwBoundingBox:(NSRect)bbox { + nwBoundingBox = bbox; +} + +- (GraphElementData*)oldGraphData { + return oldGraphData; +} + +- (void)setOldGraphData:(GraphElementData*)data { + id origOGD = oldGraphData; + oldGraphData = [data copy]; + [origOGD release]; +} + +- (GraphElementData*)nwGraphData { + return nwGraphData; +} + +- (void)setNwGraphData:(GraphElementData*)data { + id origNGD = nwGraphData; + nwGraphData = [data copy]; + [origNGD release]; +} + +- (GraphChange*)invert { + GraphChange *inverse = [[GraphChange alloc] init]; + switch ([self changeType]) { + case GraphAddition: + [inverse setChangeType:GraphDeletion]; + [inverse setAffectedNodes:[self affectedNodes]]; + [inverse setAffectedEdges:[self affectedEdges]]; + break; + case GraphDeletion: + [inverse setChangeType:GraphAddition]; + [inverse setAffectedNodes:[self affectedNodes]]; + [inverse setAffectedEdges:[self affectedEdges]]; + break; + case NodePropertyChange: + [inverse setChangeType:NodePropertyChange]; + [inverse setNodeRef:[self nodeRef]]; + [inverse setOldNode:[self nwNode]]; + [inverse setNwNode:[self oldNode]]; + break; + case NodesPropertyChange: + [inverse setChangeType:NodesPropertyChange]; + [inverse setOldNodeTable:[self nwNodeTable]]; + [inverse setNwNodeTable:[self oldNodeTable]]; + break; + case EdgePropertyChange: + [inverse setChangeType:EdgePropertyChange]; + [inverse setEdgeRef:[self edgeRef]]; + [inverse setOldEdge:[self nwEdge]]; + [inverse setNwEdge:[self oldEdge]]; + break; + case NodesShift: + [inverse setChangeType:NodesShift]; + [inverse setAffectedNodes:[self affectedNodes]]; + [inverse setShiftPoint:NSMakePoint(-[self shiftPoint].x, + -[self shiftPoint].y)]; + break; + case NodesFlip: + [inverse setChangeType:NodesFlip]; + [inverse setAffectedNodes:[self affectedNodes]]; + [inverse setHorizontal:[self horizontal]]; + break; + case BoundingBoxChange: + [inverse setChangeType:BoundingBoxChange]; + [inverse setOldBoundingBox:[self nwBoundingBox]]; + [inverse setNwBoundingBox:[self oldBoundingBox]]; + break; + case GraphPropertyChange: + [inverse setChangeType:GraphPropertyChange]; + [inverse setOldGraphData:[self nwGraphData]]; + [inverse setNwGraphData:[self oldGraphData]]; + break; + } + + return [inverse autorelease]; +} + +- (void)dealloc { + [affectedNodes release]; + [affectedEdges release]; + [nodeRef release]; + [oldNode release]; + [nwNode release]; + [edgeRef release]; + [oldEdge release]; + [oldNodeTable release]; + [nwNodeTable release]; + + [super dealloc]; +} + ++ (GraphChange*)graphAdditionWithNodes:(NSSet *)ns edges:(NSSet *)es { + GraphChange *gc = [[GraphChange alloc] init]; + [gc setChangeType:GraphAddition]; + [gc setAffectedNodes:ns]; + [gc setAffectedEdges:es]; + return [gc autorelease]; +} + ++ (GraphChange*)graphDeletionWithNodes:(NSSet *)ns edges:(NSSet *)es { + GraphChange *gc = [[GraphChange alloc] init]; + [gc setChangeType:GraphDeletion]; + [gc setAffectedNodes:ns]; + [gc setAffectedEdges:es]; + return [gc autorelease]; +} + ++ (GraphChange*)propertyChangeOfNode:(Node*)nd fromOld:(Node*)old toNew:(Node*)nw { + GraphChange *gc = [[GraphChange alloc] init]; + [gc setChangeType:NodePropertyChange]; + [gc setNodeRef:nd]; + [gc setOldNode:old]; + [gc setNwNode:nw]; + return [gc autorelease]; +} + ++ (GraphChange*)propertyChangeOfNodesFromOldCopies:(BasicMapTable*)oldC + toNewCopies:(BasicMapTable*)newC { + GraphChange *gc = [[GraphChange alloc] init]; + [gc setChangeType:NodesPropertyChange]; + [gc setOldNodeTable:oldC]; + [gc setNwNodeTable:newC]; + return [gc autorelease]; +} + ++ (GraphChange*)propertyChangeOfEdge:(Edge*)e fromOld:(Edge *)old toNew:(Edge *)nw { + GraphChange *gc = [[GraphChange alloc] init]; + [gc setChangeType:EdgePropertyChange]; + [gc setEdgeRef:e]; + [gc setOldEdge:old]; + [gc setNwEdge:nw]; + return [gc autorelease]; +} + ++ (GraphChange*)shiftNodes:(NSSet*)ns byPoint:(NSPoint)p { + GraphChange *gc = [[GraphChange alloc] init]; + [gc setChangeType:NodesShift]; + [gc setAffectedNodes:ns]; + [gc setShiftPoint:p]; + return [gc autorelease]; +} + ++ (GraphChange*)flipNodes:(NSSet*)ns horizontal:(BOOL)b { + GraphChange *gc = [[GraphChange alloc] init]; + [gc setChangeType:NodesFlip]; + [gc setAffectedNodes:ns]; + [gc setHorizontal:b]; + return [gc autorelease]; +} + ++ (GraphChange*)changeBoundingBoxFrom:(NSRect)oldBB to:(NSRect)newBB { + GraphChange *gc = [[GraphChange alloc] init]; + [gc setChangeType:BoundingBoxChange]; + [gc setOldBoundingBox:oldBB]; + [gc setNwBoundingBox:newBB]; + return [gc autorelease]; +} + ++ (GraphChange*)propertyChangeOfGraphFrom:(GraphElementData*)oldData to:(GraphElementData*)newData { + GraphChange *gc = [[GraphChange alloc] init]; + [gc setChangeType:GraphPropertyChange]; + [gc setOldGraphData:oldData]; + [gc setNwGraphData:newData]; + return [gc autorelease]; +} + +@end + +// vi:ft=objc:ts=4:noet:sts=4:sw=4 |