Does this UI component already exist?


#1

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").

 

Thanks!

 


#2

Have you tried building the audio plugin host / audio plugin demo s?

{Will need a copy of VST/SDK or AU SDK - read around forum/juce site}


#3

Hi, I'm the guy behind the CopperLan Manager :-)

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.

Hope this helps :-)


#4

Wow, wow... I had built the host, but neglected to mess around with the routing in it.

This is exactly what I was looking for.

 

In looking through the source of the host project some, the geometry piece that I think will be the most useful for me is the "Path" object.

 

 

 


#5

Pub/sub will definitely be needed for this, so I'll definitely take a look at the ComponentListener

It's insane how much this library does as far as DSP and DIP are concerned.. makes me sad to have written my own code XD

@CopperPhil

Pub/sub will definitely be needed for this, so I'll definitely take a look at the ComponentListener

It's insane how much this library does as far as DSP and DIP are concerned.. makes me sad to have written my own code XD