summaryrefslogtreecommitdiff
path: root/tikzit/src/common
diff options
context:
space:
mode:
authorAlex Merry <dev@randomguy3.me.uk>2012-04-19 13:22:42 +0100
committerAlex Merry <dev@randomguy3.me.uk>2012-05-04 10:14:38 +0100
commitf819c5ba44023769d5c8512cdf489d001c1da09d (patch)
tree7fc1d801672e04b40ee6f82f2409adea4c2a780f /tikzit/src/common
parentec48fc2bcce2483d89eb51a185c5826a8fcc7c6c (diff)
Edges can now be reversed easily
Diffstat (limited to 'tikzit/src/common')
-rw-r--r--tikzit/src/common/Graph.h7
-rw-r--r--tikzit/src/common/Graph.m19
-rw-r--r--tikzit/src/common/GraphChange.h9
-rw-r--r--tikzit/src/common/GraphChange.m10
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];