summaryrefslogtreecommitdiff
path: root/tikzit/src/common
diff options
context:
space:
mode:
authorrandomguy3 <randomguy3@7c02a99a-9b00-45e3-bf44-6f3dd7fddb64>2012-01-10 15:40:11 +0000
committerrandomguy3 <randomguy3@7c02a99a-9b00-45e3-bf44-6f3dd7fddb64>2012-01-10 15:40:11 +0000
commit87294b7ebc03156f223052ca2a6c70463df568f0 (patch)
tree7200a2cb348b18c8d255931058ffab260f4225c3 /tikzit/src/common
parentc372b719b84a320f6fb7cab6dc0d1ab94beacd78 (diff)
GTK: Edge style support
git-svn-id: https://tikzit.svn.sourceforge.net/svnroot/tikzit/trunk@375 7c02a99a-9b00-45e3-bf44-6f3dd7fddb64
Diffstat (limited to 'tikzit/src/common')
-rw-r--r--tikzit/src/common/Graph.m19
-rw-r--r--tikzit/src/common/GraphChange.h27
-rw-r--r--tikzit/src/common/GraphChange.m34
3 files changed, 76 insertions, 4 deletions
diff --git a/tikzit/src/common/Graph.m b/tikzit/src/common/Graph.m
index 62774f5..4250f7f 100644
--- a/tikzit/src/common/Graph.m
+++ b/tikzit/src/common/Graph.m
@@ -425,15 +425,26 @@
[[ch nodeRef] setPropertiesFromNode:[ch nwNode]];
break;
case NodesPropertyChange:
- en = [[ch nwNodeTable] keyEnumerator];
- Node *key;
- while ((key = [en nextObject])) {
- [key setPropertiesFromNode:[[ch nwNodeTable] objectForKey:key]];
+ {
+ en = [[ch nwNodeTable] keyEnumerator];
+ Node *key;
+ while ((key = [en nextObject])) {
+ [key setPropertiesFromNode:[[ch nwNodeTable] objectForKey:key]];
+ }
}
break;
case EdgePropertyChange:
[[ch edgeRef] setPropertiesFromEdge:[ch nwEdge]];
break;
+ case EdgesPropertyChange:
+ {
+ en = [[ch nwEdgeTable] keyEnumerator];
+ Edge *key;
+ while ((key = [en nextObject])) {
+ [key setPropertiesFromEdge:[[ch nwEdgeTable] objectForKey:key]];
+ }
+ }
+ break;
case NodesShift:
en = [[ch affectedNodes] objectEnumerator];
NSPoint newLoc;
diff --git a/tikzit/src/common/GraphChange.h b/tikzit/src/common/GraphChange.h
index 0ad0c97..63bdfad 100644
--- a/tikzit/src/common/GraphChange.h
+++ b/tikzit/src/common/GraphChange.h
@@ -31,6 +31,7 @@ typedef enum {
NodePropertyChange,
EdgePropertyChange,
NodesPropertyChange,
+ EdgesPropertyChange,
NodesShift,
NodesFlip,
BoundingBoxChange,
@@ -63,6 +64,7 @@ typedef enum {
Node *oldNode, *nwNode;
Edge *oldEdge, *nwEdge;
BasicMapTable *oldNodeTable, *nwNodeTable;
+ BasicMapTable *oldEdgeTable, *nwEdgeTable;
NSRect oldBoundingBox, nwBoundingBox;
GraphElementData *oldGraphData, *nwGraphData;
}
@@ -146,6 +148,18 @@ typedef enum {
@property (retain) BasicMapTable *nwNodeTable;
/*!
+ @property oldEdgeTable
+ @brief A a table containing copies of a set of edges pre-change.
+ */
+@property (retain) BasicMapTable *oldEdgeTable;
+
+/*!
+ @property nwEdgeTable
+ @brief A a table containing copies of a set of edges post-change.
+ */
+@property (retain) BasicMapTable *nwEdgeTable;
+
+/*!
@property oldBoundingBox
@brief The old bounding box.
*/
@@ -227,6 +241,19 @@ typedef enum {
+ (GraphChange*)propertyChangeOfNodesFromOldCopies:(BasicMapTable*)oldC
toNewCopies:(BasicMapTable*)newC;
+/*!
+ @brief Construct a property change of set of edges.
+ @details Construct a property change of set of edges. oldC and newC should be
+ constructed using the class method [Graph edgeTableForEdges:] before
+ and after the property change, respectively. The affected edges are
+ keys(oldC) = keys(newC).
+ @param oldC a table of copies of edges pre-change
+ @param newC a table of copies of edges post-change
+ @result A property change of a set of edges.
+ */
++ (GraphChange*)propertyChangeOfEdgesFromOldCopies:(BasicMapTable*)oldC
+ toNewCopies:(BasicMapTable*)newC;
+
/*!
@brief Construct a shift of a set of nodes by a given point.
diff --git a/tikzit/src/common/GraphChange.m b/tikzit/src/common/GraphChange.m
index d09e732..3635383 100644
--- a/tikzit/src/common/GraphChange.m
+++ b/tikzit/src/common/GraphChange.m
@@ -142,6 +142,24 @@
}
}
+- (BasicMapTable*)oldEdgeTable { return oldEdgeTable; }
+
+- (void)setOldEdgeTable:(BasicMapTable*)tab {
+ if (oldEdgeTable != tab) {
+ [oldEdgeTable release];
+ oldEdgeTable = [tab retain];
+ }
+}
+
+- (BasicMapTable*)nwEdgeTable { return nwEdgeTable; }
+
+- (void)setNwEdgeTable:(BasicMapTable*)tab {
+ if (nwEdgeTable != tab) {
+ [nwEdgeTable release];
+ nwEdgeTable = [tab retain];
+ }
+}
+
- (NSRect)oldBoundingBox { return oldBoundingBox; }
- (void)setOldBoundingBox:(NSRect)bbox {
@@ -204,6 +222,11 @@
[inverse setOldEdge:[self nwEdge]];
[inverse setNwEdge:[self oldEdge]];
break;
+ case EdgesPropertyChange:
+ [inverse setChangeType:EdgesPropertyChange];
+ [inverse setOldEdgeTable:[self nwEdgeTable]];
+ [inverse setNwEdgeTable:[self oldEdgeTable]];
+ break;
case NodesShift:
[inverse setChangeType:NodesShift];
[inverse setAffectedNodes:[self affectedNodes]];
@@ -240,6 +263,8 @@
[oldEdge release];
[oldNodeTable release];
[nwNodeTable release];
+ [oldEdgeTable release];
+ [nwEdgeTable release];
[super dealloc];
}
@@ -287,6 +312,15 @@
return [gc autorelease];
}
++ (GraphChange*)propertyChangeOfEdgesFromOldCopies:(BasicMapTable*)oldC
+ toNewCopies:(BasicMapTable*)newC {
+ GraphChange *gc = [[GraphChange alloc] init];
+ [gc setChangeType:EdgesPropertyChange];
+ [gc setOldEdgeTable:oldC];
+ [gc setNwEdgeTable:newC];
+ return [gc autorelease];
+}
+
+ (GraphChange*)shiftNodes:(NSSet*)ns byPoint:(NSPoint)p {
GraphChange *gc = [[GraphChange alloc] init];
[gc setChangeType:NodesShift];