I thought I'd try to not reinvent the wheel here..
I'm working on a UI for a plugin, and noticed several on the homepage that appear to be doing what I want.
What I am trying to do can be seen in this video of the Copperlan Manager here.
http://youtu.be/kMmsS3TMtHM?t=1m36s
I'd like to create a UI that has the similar wires that link components together, and I was wondering if such a thing already existed in juce. I did some searching, but wasn't sure what this was called (the only thing that seemed to come to mind in describing it was "linked components").
This GUI is based on standard Juce mechanisms, mainly the ComponentListener. It is not so complicated to reproduce. I just created a custom component (the View) displaying a collection of components inheriting from ViewItem, a virtual class handling the common features for each kind of item and having a set of pure virtual methods to get information or order painting or whatever from the inherited dedicated code. ViewItem objects are organized in a tree, each item knows its parent, first child and next sibling. When you move an item, the sub-items are automatically moved following a rule depending on the context (in the Overview tab, the sub-items are placed under their parent, in the other tabs their are deployed on the right). It is quite easy to do using the ComponentListener (each item watches its parent in the tree).The View knows only one invisible root ViewItem, which is used for global scrolling (moving the root item moves all the sub-items). Scrolling is probably the most tricky. Drag the View -> global scrolling (moving main invisible root). Draging a ViewItem: you have to scroll only the pseudo-root (first level behind the main invisible root) -> dragging a ViewItem, transfer drag info to the pseudo-root related to the branch containing it.
For the links, I have a Link component following automatically (again, using the ComponentListener) two ViewItems components. The Link is changing its bounds in order to encompass a spline connecting both anchor points (local coordinate relative to the ViewItem obtained using a ViewItem::GetAnchorPoint method).
Recently I've also included Box2D to this model in order to manage item collisions and avoid overlay.