gui make a graphical user interface for an object

Anything can be gui-ed.

nil.gui;

"2".gui;

2.gui;

[1,nil,"tree"].gui;

Add yourself to a page (window)

(

f = MultiPageLayout.new;

nil.gui(f);

"2".gui(f);

2.gui(f);

Object.dependantsDictionary.gui(f);

)

gui(parent,bounds)

parent -

a View, FlowView, MultiPageLayout or SCWindow

bounds -

Usually the bounds are not specified. The object's gui class first adds a container,

lays its things inside that container and then shrinks the container to fit it.

If you specify a bounds, the container will be set to that size and will stay that way.

You can put 'gui' style objects onto any 'normal' window just as you would any

view.

(

w = GUI.window.new;

w.front;

SFP.new.gui(w,Rect(100,200,100,300));

SFP.new.gui(w,Rect(2,2,500,200));

)

(

i = Instr([\test, \envtest], { arg freq, gate,envadsr;

var out;

out = EnvGen.ar(envadsr, gate, doneAction:0)

* SinOsc.ar(freq);

[out,out]

});

p = Patch(i);

// instead of using the .gui method of the Patch

// take all the args out and add them to a window

// yourself to format it any way you choose to

w = GUI.window.new(bounds:Rect(10,10,800,500));

w.front;

c = p.args.collect({ arg ag,i;

ag.gui(w,Rect(0,50 * i,600,50));

});

)

c is now an array of gui objects: subclasses of ObjectGui

As per normal views, you can make them invisible:

c.at(0).visible = false;

c.at(0).visible = true;

Each class specifies its associated guiClass, a subclass of ObjectGui

Object-guiClass { ^ObjectGui }

AbstractPlayer-guiClass { ^AbstractPlayerGui }

Patch-guiClass { ^PatchGui }

For any class where it is appropriate, a separate gui class is implemented, usually inheriting much of its behavior from the gui class of the superclass.

//ControlSpecGui

ControlSpec.new.gui

see also [ObjectGui]