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