comparison doodle/fig/network.d @ 96:66210d8ea37a

Added some junk
author David Bryant <bagnose@gmail.com>
date Thu, 26 Aug 2010 16:32:07 +0930
parents
children dcd641209671
comparison
equal deleted inserted replaced
95:85589f7a3a28 96:66210d8ea37a
1 module doodle.fig.network;
2
3 public {
4 import doodle.fig.diagram_elements;
5 }
6
7 enum EdgeEnd {
8 Source,
9 Target
10 };
11
12 interface INetworkObserver {
13 // Node changes
14
15 void nodeAdded(GraphNode node,
16 GraphElement container);
17 void nodeChanged(GraphNode node);
18 void nodeRelocated(GraphNode node,
19 GraphElement container);
20 void nodeRemoved(GraphNode node,
21 GraphElement container);
22
23 // Edge changes
24
25 void edgeAdded(GraphEdge node,
26 GraphConnector anchor1, GraphConnector anchor2);
27 void edgeChanged(GraphEdge edge);
28 void edgeRerouted();
29 void edgeRemoved();
30 }
31
32 interface INetwork {
33 void addObserver(INetworkObserver observer);
34 void removeObserver(INetworkObserver observer);
35
36 //
37 // Interrogation:
38 //
39
40 GraphNode[] getRootNodes();
41
42 // Inquire whether in principle a node of node_type
43 // can be added at the given point, possibly nested
44 // within the nest node. The nest can be null.
45 bool canAdd(string node_type,
46 Point point, // necessary?
47 GraphNode nest);
48
49 bool canRelocate(GraphNode node);
50
51 bool canRemove(GraphNode node);
52
53 // Inquire whether in principle the source element can
54 // be connected to the target element using
55 // an edge of edge_type. This might return true even
56 // though the real operation would fail due to deeper checking.
57 bool canConnect(char[] edge_type,
58 GraphElement sourceElement, Point sourcePoint,
59 GraphElement targetElement, Point targetPoint);
60
61 // Inquire whether in principle a given end of an existing edge
62 // can be rerouted from old_element to new_element at new_point.
63 // old_element and new_element may be the same element.
64 bool canReroute(GraphEdge edge, EdgeEnd end,
65 GraphElement oldElement,
66 GraphElement newElement, Point newPoint);
67
68 bool canDisconnect(GraphEdge edge);
69
70 //
71 // Manipulation:
72 //
73
74 // Attempt to really add a node...
75 GraphNode add(char[] node_type, /* initial properties, */
76 Point point,
77 GraphNode nest);
78
79 void relocate(GraphNode node,
80 GraphElement oldContainer,
81 GraphElement newContainer, Point newPoint);
82
83 // Attempt to really remove a node
84 void remove(GraphNode node);
85
86 // Attempt to really connect the source element to the target element
87 // using an edge of the given type with the given initial properties.
88 GraphEdge connect(string edge_type, /* initial properties, */
89 GraphElement sourceElement, Point sourcePoint,
90 GraphElement targetElement, Point targetPoint);
91
92 // Attempt to really reroute..
93 void reroute(GraphEdge edge, EdgeEnd end,
94 GraphElement oldElement,
95 GraphElement newElement, Point newPoint);
96
97 // Attempt to really remove an edge...
98 void disconnect(GraphEdge edge);
99 }