diff options
author | Alex Merry <dev@randomguy3.me.uk> | 2012-04-19 13:22:42 +0100 |
---|---|---|
committer | Alex Merry <dev@randomguy3.me.uk> | 2012-05-04 10:14:38 +0100 |
commit | f819c5ba44023769d5c8512cdf489d001c1da09d (patch) | |
tree | 7fc1d801672e04b40ee6f82f2409adea4c2a780f /tikzit/src/common | |
parent | ec48fc2bcce2483d89eb51a185c5826a8fcc7c6c (diff) |
Edges can now be reversed easily
Diffstat (limited to 'tikzit/src/common')
-rw-r--r-- | tikzit/src/common/Graph.h | 7 | ||||
-rw-r--r-- | tikzit/src/common/Graph.m | 19 | ||||
-rw-r--r-- | tikzit/src/common/GraphChange.h | 9 | ||||
-rw-r--r-- | tikzit/src/common/GraphChange.m | 10 |
4 files changed, 41 insertions, 4 deletions
diff --git a/tikzit/src/common/Graph.h b/tikzit/src/common/Graph.h index c680219..f5d8bed 100644 --- a/tikzit/src/common/Graph.h +++ b/tikzit/src/common/Graph.h @@ -278,6 +278,13 @@ - (GraphChange*)shiftNodes:(id<NSFastEnumeration>)ns byPoint:(NSPoint)p; /*! + @brief Reverse the given edges + @param es the edges to reverse + @result A <tt>GraphChange</tt> recording this action. + */ +- (GraphChange*)reverseEdges:(NSSet *)es; + +/*! @brief Insert the given graph into this one. Used for copy and paste. @param g a graph. diff --git a/tikzit/src/common/Graph.m b/tikzit/src/common/Graph.m index d04751a..27c2ebb 100644 --- a/tikzit/src/common/Graph.m +++ b/tikzit/src/common/Graph.m @@ -247,9 +247,7 @@ - (GraphChange*)removeEdges:(NSSet *)es { [graphLock lock]; - NSEnumerator *en = [es objectEnumerator]; - Edge *e; - while ((e = [en nextObject])) { + for (Edge *e in es) { [edges removeObject:e]; } dirty = YES; @@ -272,6 +270,16 @@ return [GraphChange shiftNodes:nodeSet byPoint:p]; } +- (GraphChange*)reverseEdges:(NSSet *)es { + [graphLock lock]; + for (Edge *e in es) { + [e reverse]; + } + dirty = YES; + [graphLock unlock]; + return [GraphChange reverseEdges:es]; +} + - (int)indexOfNode:(Node *)node { return [nodes indexOfObject:node]; } @@ -633,6 +641,11 @@ case NodesFlip: [self flipNodes:[ch affectedNodes] horizontal:[ch horizontal]]; break; + case EdgesReverse: + for (Edge *e in [[ch affectedEdges] objectEnumerator]) { + [e reverse]; + } + break; case BoundingBoxChange: [self setBoundingBox:[ch nwBoundingBox]]; break; diff --git a/tikzit/src/common/GraphChange.h b/tikzit/src/common/GraphChange.h index cb4ca09..ef56005 100644 --- a/tikzit/src/common/GraphChange.h +++ b/tikzit/src/common/GraphChange.h @@ -33,6 +33,7 @@ typedef enum { EdgesPropertyChange, NodesShift, NodesFlip, + EdgesReverse, BoundingBoxChange, GraphPropertyChange, NodeOrderChange, @@ -291,7 +292,6 @@ typedef enum { */ + (GraphChange*)shiftNodes:(NSSet*)ns byPoint:(NSPoint)p; - /*! @brief Construct a horizontal or vertical flip of a set of nodes. @param ns the affected nodes. @@ -301,6 +301,13 @@ typedef enum { + (GraphChange*)flipNodes:(NSSet*)ns horizontal:(BOOL)b; /*! + @brief Construct a reversal of a set of edges. + @param es the affected edges. + @result A reverse of a set of edges. + */ ++ (GraphChange*)reverseEdges:(NSSet*)es; + +/*! @brief Construct a bounding box change @param oldBB the old bounding box @param newBB the new bounding box diff --git a/tikzit/src/common/GraphChange.m b/tikzit/src/common/GraphChange.m index 9707a19..c52a46d 100644 --- a/tikzit/src/common/GraphChange.m +++ b/tikzit/src/common/GraphChange.m @@ -90,6 +90,9 @@ inverse->affectedNodes = [affectedNodes retain]; [inverse setHorizontal:[self horizontal]]; break; + case EdgesReverse: + inverse->affectedEdges = [affectedEdges retain]; + break; case BoundingBoxChange: inverse->oldBoundingBox = nwBoundingBox; inverse->nwBoundingBox = oldBoundingBox; @@ -197,6 +200,13 @@ return [gc autorelease]; } ++ (GraphChange*)reverseEdges:(NSSet*)es { + GraphChange *gc = [[GraphChange alloc] init]; + [gc setChangeType:EdgesReverse]; + [gc setAffectedEdges:es]; + return [gc autorelease]; +} + + (GraphChange*)changeBoundingBoxFrom:(NSRect)oldBB to:(NSRect)newBB { GraphChange *gc = [[GraphChange alloc] init]; [gc setChangeType:BoundingBoxChange]; |