annotate doodle/fig/network.d @ 97:dcd641209671

What to do...
author David Bryant <bagnose@gmail.com>
date Fri, 27 Aug 2010 18:01:33 +0930
parents 66210d8ea37a
children
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
97
dcd641209671 What to do...
David Bryant <bagnose@gmail.com>
parents: 96
diff changeset
25 void edgeAdded(GraphEdge edge);
96
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
26 void edgeChanged(GraphEdge edge);
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
27 void edgeRerouted();
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
28 void edgeRemoved();
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
29 }
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 interface INetwork {
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
32 void addObserver(INetworkObserver observer);
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
33 void removeObserver(INetworkObserver observer);
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
34
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 // Interrogation:
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
37 //
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 GraphNode[] getRootNodes();
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
40
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
41 // Inquire whether in principle a node of node_type
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
42 // can be added at the given point, possibly nested
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
43 // within the nest node. The nest can be null.
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
44 bool canAdd(string node_type,
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
45 Point point, // necessary?
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
46 GraphNode nest);
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
47
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
48 bool canRelocate(GraphNode node);
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
49
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
50 bool canRemove(GraphNode node);
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
51
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
52 // Inquire whether in principle the source element can
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
53 // be connected to the target element using
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
54 // an edge of edge_type. This might return true even
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
55 // though the real operation would fail due to deeper checking.
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
56 bool canConnect(char[] edge_type,
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
57 GraphElement sourceElement, Point sourcePoint,
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
58 GraphElement targetElement, Point targetPoint);
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
59
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
60 // Inquire whether in principle a given end of an existing edge
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
61 // can be rerouted from old_element to new_element at new_point.
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
62 // old_element and new_element may be the same element.
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
63 bool canReroute(GraphEdge edge, EdgeEnd end,
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
64 GraphElement oldElement,
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
65 GraphElement newElement, Point newPoint);
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
66
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
67 bool canDisconnect(GraphEdge edge);
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
68
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 // Manipulation:
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
71 //
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 // Attempt to really add a node...
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
74 GraphNode add(char[] node_type, /* initial properties, */
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
75 Point point,
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
76 GraphNode nest);
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
77
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
78 void relocate(GraphNode node,
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
79 GraphElement oldContainer,
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
80 GraphElement newContainer, Point newPoint);
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
81
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
82 // Attempt to really remove a node
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
83 void remove(GraphNode node);
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
84
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
85 // Attempt to really connect the source element to the target element
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
86 // using an edge of the given type with the given initial properties.
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
87 GraphEdge connect(string edge_type, /* initial properties, */
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
88 GraphElement sourceElement, Point sourcePoint,
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
89 GraphElement targetElement, Point targetPoint);
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
90
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
91 // Attempt to really reroute..
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
92 void reroute(GraphEdge edge, EdgeEnd end,
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
93 GraphElement oldElement,
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
94 GraphElement newElement, Point newPoint);
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
95
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
96 // Attempt to really remove an edge...
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
97 void disconnect(GraphEdge edge);
66210d8ea37a Added some junk
David Bryant <bagnose@gmail.com>
parents:
diff changeset
98 }