class:: PdefGui summary:: a line of editing controls for a Pdef, and optionally its envir categories:: Libraries>JITLib>GUI, Live Coding related:: Classes/PdefAllGui, Classes/TdefGui, Classes/TdefAllGui, Classes/EnvirGui description:: A gui showing the link::Classes/Pdef::'s name, playing state, source state, and envir state. Optionally, its envir can also be edited. subsection::First example code:: g = PdefGui(); // make a PdefGui g.object = Pdef(\a); // show when a Pdef is put in Pdef(\a, Pbind(\note, 12)); // show whether it has a source Pdef(\a).play; // show whether playing, stopped, or ended, and pausable Pdef(\a).set(\dur, 0.25); // show whether the Pdef has an envir g.close; g = PdefGui(Pdef(\a), 3); // with an envirgui for 3 items Pdef(\a).set(\lofreq, [1, 10], \str, "someString", \oops, \oneSymbolTooMany); Pdef(\a).clear; Pdef(\a).envir.clear; g.close; ( // put it in an existing window - margin is 0@0 w = Window("my win", Rect(200, 200, 300, 200)).front; w.addFlowLayout; PdefGui(Pdef(\a), 0, w); PdefGui(Pdef(\a), 3, w); ) :: subsection::Details on the GUI elements definitionList:: ## name button || when selected, typing the delete key will delete its Pdef. ## play/stop button || indicates whether the Pdef is playing: table:: ## " >" || if stopped, ## " _" || if playing and active, ## " |" || if it is playing, but the stream has ended. :: ## pause/resume button || only visible if one can pause or resume the Pdef, i.e. while it is playing. table:: ## "paus" || shown when you can pause it, ## "rsum" || shown when you can resume it. :: ## src button || opens a document to edit the source (function) of the Pdef. table:: ## green || a source exists, ## white || the source is nil. :: ## env button || opens a document to edit the environment of the Pdef, which is where one can keep all variables the Pdef uses for easy access. table:: ## green || the Pdef has an envir, ## white || the envir is nil. :: :: ClassMethods:: subsection::Creation Methods method::new Create a new link::Classes/JITGui:: that will be watching an object and display its state. argument::object the object to watch argument::numItems the number of display items to use, e.g. how many fields for text, or how many EZSliders for single-number parameters. argument::parent a parent view on which to display. If nil, a new window is created; strong::parent:: can also be an existing window or a composite view. argument::bounds a desired size and position where to display a JITGui. can be nil, a link::Classes/Point::, or a link::Classes/Rect::. JITGuis know their minimum size ( strong::minSize:: ), and if bounds is nil, minSize is used. if bounds is a link::Classes/Point:: or link::Classes/Rect::, it will be set to at least minSize. With a rect one can also supply a position where to display. If a point,shown size is the maximum of bounds and minSize. argument::makeSkip A flag whether to make a skipjack. argument::options a list of additional information, e.g. flags about optional buttons. (this is used is some subclasses) InstanceMethods:: method::object a link::Classes/Pdef::, or nil method::numItems the number of items in the envirGui method::parent the parent view method::bounds the bounds of the link::#-zone:: method::zone the link::Classes/CompositeView:: within which the PdefGui is shown method::nameBut, playBut, pauseBut, srcBut, envBut the buttons method::envirGui the gui for the Pdef's envir - nil if numItems is 0. method::object put an object in the gui. method::moveTo (if the jitGui is in its own window) move it to some specific location. method::clear (if the jitGui is in its own window) set the PdefGui's object to nil method::close (if the jitGui is in its own window) and close its window. subsection::Internal methods method::srcString a compileString that recreates the Pdef. code:: // assume g from above is still there g.srcString; :: method::editString a compileString that recreates the Pdef's envir at edKey. method::editStrings a compileString that recreates the Pdef's envir at edKeys. argument::edKeys Default value is nil. code:: // assume g from above is still there g.editString; Pdef(\a).set(\foo, \bar); g.editString(\foo); g.editStrings; :: method::getUsedKeys the keys in use in the envir code:: g.getUsedKeys; :: method::openDoc open a document with some strings at some location code:: g.openDoc(g.editStrings); :: method::makeEnvirGui make an envirGui within zone - called internally. Examples:: code:: Pdef(\a, Pbind(\freq, Prand((1..16) * 55, inf))); Pdef(\a).play; t = PdefGui(Pdef(\a), 4); Pdef(\a).set(\dur, 0.125, \amp, 0.05); Pdef(\a).stop; Pdef(\a).play; Pdef(\a).pause; Pdef(\a).resume; t.object_(nil); t.object_(Pdef(\a)); ( w = Window("put it in a selfmade window").front; w.addFlowLayout; w.view.decorator.shift(50, 50); PdefGui(Pdef(\a), 12, w); ) Pdef(\b, Pbind(\note, Pxrand((0..7), inf), \dur, 0.125)); Pdef(\b).play; PdefGui(Pdef(\b)); // see all Pdefs: PdefAllGui(16); ::