The user may move wires or wire points by activating the
MOVE button on the toolbar and clicking on the desired item
and dragging it across the canvas. If the user clicked on a point,
then the procedure net_prepare_point_move is invoked
which determines if the point is connected to a component port. If it
is, then the procedure prepares the component attached to the point for
simultaneous movement; otherwise, only the point itself will be moved.
If the user clicked on a wire, then the procedure
net_prepare_wire_move is invoked. This procedure
determines the identifiers of the two end points of the wire and
ensures that the end points of the wire are not attached to any ports.
If the wire is attached to a component, then the GUI will not permit
the user to move the wire.
The motion of the mouse is then bound to the procedure net_do_move which moves the selected wire or point by calling the utility procedure net_do_move_point. This procedure moves a point, and any labels attached to it, while simultaneously stretching or shrinking all wires to which the point is connected. When moving a wire, net_do_move calls net_do_move_point twice every time the mouse is moved -- once for each of the two end points of the wire.