SCEnvelopeView a configurable view with nodes and connections
Inherits from: Object : SCView
A view which can grapically display nodes at x/y coordinates, connection lines, cross-connections, node markers, and labels. All of the values for these are stored in arrays. While this view is typically used to make editable envelopes interfaces, it can be used to draw very complex interconnection graphs as well.
Some Important Issues Regarding SCEnvelopeView
The instance variable step must be explicitly set for the defautlKeyDownAction to work.
See also: SCMultiSliderView, SCEnvelopeEdit
Creation / Class Methods
*new (parent, bounds)
parent - The parent view.
bounds - An instance of Rect, or a Point indicating width@height.
(
w = Window("envelope", Rect(150 , Window.screenBounds.height-250, 250, 100)).front;
b = EnvelopeView(w, Rect(10, 10, 230, 70))
.resize_(5)
.action_({arg b; [b.index,b.value].postln})
.value_([[0.0, 0.15, 0.5, 1.0],[0.1,1.0,0.7,0.0]])
.curves_([5,5,-5]);
)
Accessing Instance and Class Variables
editable
editable_ (val)
Determines if the any node is editable.
val - An instance of Boolean.
setEditable (index, boolean)
Determines if the the node at index is editable.
index -an integer.
boolean - An instance of Boolean.
step
step_ (stepSize)
Quantizes the values to the nearest multiple of stepSize.
stepSize - An instance of Float.
value
value_ (val)
Gets/sets the property, \value, by calling get/setProperty(\value, val). The setter also sets size to the size of val. This will not do the action of the slider.
val - An instance of Array. The values mus be between 0 and 1. The form of the array must be:
[ [ x1, x2, x3, ... ], [ y1, y2, y3, ... ] ]
valueAction_ (val)
Sets the property, \value, by calling (\value, val). Also sets size to the size of val. Does the sliders action.
val - An instance of Array. The values mus be between 0 and 1 . The form of the array must be:
[ [ x1, x2, x3, ... ], [ y1, y2, y3, ... ] ]
index
Gets theselected index. -1 if none selected.
inx - an integer.
lastIndex
Returns the index last selected.
selectIndex (index)
Selects the node at index, and refreshes the view.
index - An integer.
x
y
x_ (ax)
y_ (ay)
Get/set the x or y value at the selected index.
ay - An instance of Float, between 0 and 1
currentvalue
currentvalue_ (iny)
Gets/sets the y - value at the current index.
iny - A float between 0 and 1.
setString (index, astring)
Draw the string inside the thumb at index. Make sure that ths stroke color contrasts the fill color.
index - An integer.
astring - An instance of String.
strings_ (astrings)
Draw a string inside the thumb at the corresponding index in the array. Make sure that ths stroke color contrasts the fill color.
astrings - An Array of Strings;
curves
curves_(incurves)
Set a shape to draw the connection between points. The shapes defined by Env are accepted.
incurves - An Array of Symbols, An Array of SimpleNumbers, a Symbol or a SimpleNumber
setEnv_(env)
Set an Env to be shown in the view.
grid
grid_(point)
Set a grid using a Point. x and y correspond to times and levels respectively. Specify a value of 0.0 if you do not want that axis to be drawn.
gridOn
gridOn_(flag)
Show a grid.
flag - a false or true
gridColor
gridColor_
Set the Color of the grid.
connect (from, aconnections)
Replaces the connections which were drawn at init time, and then draws new ones from the index, from, to the each of the aconnections indexes .
from - An integer. The index form which the lines originate.
aconnections - An Array of numbers. The indexes to which the lines are drawn.
metaAction_(arg1)
metaAction
Gets/sets a function to be evaluate on Ctrl-click
arg1 - An instance of Function. Default value is nil.
Customizing Appearance
strokeColor_ (acolor)
The line and text color of the view.
acolor - An instance of Color.
colors_ (strokec, fillc)
Sets the stroke and fill colors of the view.
strokec - An instance of Color.
fillc - An instance of Color.
drawLines (abool)
drawLines_ (abool)
Draws connecting lines between the nodes.
abool - An instance of Boolean. default is false.
drawRects_ (abool)
Draws rectangles (thumbs) at the nodes .
abool - An instance of Boolean. default is true.
fillColor_ (color)
setFillColor (index, color)
The line and text color of the all the nodex (and their text), or of a specific node at indes.
index - An integer.
color - An instance of Color.
thumbWidth_ (width)
thumbHeight_ (height)
thumbSize_ (size)
Set the width, height, or size(both) of all th thumbs.
width, height, size - The number of pixels.
setThumbWidth (index, width)
setThumbHeight (index, height)
setThumbSize (index, size)
Set the thumb width, height, or size(both) at a certain index.
index - An integer.
width, height, size - The number of pixels.
selectionColor_ (acolor)
Set the color a thumb has when selected.
acolor - An instance of Color.
Subclassing and Internal Methods
The following methods are usually not used directly or are called by a primitive. Programmers can still call or override these as needed.
defaultKeyDownAction (char, modifiers, unicode)
The default keydown actions are:
key action comment
shift+unicode 16rF703, increment x by step shift + right arrow
shift+unicode 16rF702, decrement x by step shift + left arrow
unicode 16rF703, select next index right arrow
unicode 16rF702, select previous index left arrow
unicode 16rF700, increment y by step up arrow
unicode 16rF701, decrement y by step down arrow
note: step must be explicitly set fro this to work.
defaultGetDrag
Returns this.value.
defaultCanReceiveDrag
The method called by default when attempting to place a drag in this object. Will recieve any drag, but the drag should be an array of values of the form:
[ [ x1, x2, x3, ... ], [ y1, y2, y3, ... ] ]
defaultReceiveDrag
The default method called when a drag has been received. Performs value_() and reference_() using currentDrag as an argument. Does not perform the action.
properties
A list of properties to which this view responds. See SCView.
[ \bounds, \visible, \enabled, \canFocus, \resize, \background, \minWidth, \maxWidth, \minHeight, \maxHeight, \value, \thumbSize, \fillColor, \strokeColor, \xOffset, \x, \y, \showIndex, \drawLines, \drawRects, \selectionSize, \startIndex, \thumbWidth, \absoluteX, \isFilled, \step ]
size_(arg1)
size
called by value_
items_(arg1)
items
Returns an Array
doMetaAction
Not normally called directly (called by the primitive).
select (index)
Selects the node at index, without refreshing the view
index - An integer.
addValue (xval, yval)
fixedSelection_ (bool)
allConnections_(arg1)
allConnections
doMetaAction
Examples
// use as envelope view
(
//use shift-click to keep a node selected
w = Window("envelope", Rect(150 , Window.screenBounds.height-250, 250, 100)).front;
w.view.decorator = FlowLayout(w.view.bounds);
b = EnvelopeView(w, Rect(0, 0, 230, 80))
.drawLines_(true)
.selectionColor_(Color.red)
.drawRects_(true)
.resize_(5)
.step_(0.05)
.action_({arg b; [b.index,b.value].postln})
.thumbSize_(5)
.value_([[0.0, 0.1, 0.5, 1.0],[0.1,1.0,0.8,0.0]]);
w.front;
)
// show grid
b.gridOn_(true);
// show Env
b.setEnv(Env.asr(0.5,1, 0.2));
// make the first point unmoveable
(
b.setEditable(0,false);
)
// use shift click to select/unselect the points
(
w = Window("envelope", Rect(150 , Window.screenBounds.height-250, 400, 150)).front;
w.view.decorator = FlowLayout(w.view.bounds);
b = EnvelopeView(w, Rect(0, 0, 350, 100))
.thumbSize_(5)
.drawLines_(true)
.fillColor_(Color.green)
.selectionColor_(Color.red)
.drawRects_(true)
.value_([(0.0, 0.1 .. 1.0), (0.0, 0.1 .. 1.0)])
.setEditable(0,false);
)
(
r = Routine({
var j = 0;
20.do({ arg i;
b.select((b.size -1).rand.abs);
0.1.wait;
b.x_(1.0.rand.abs);
b.y_(1.0.rand.abs);
});
b.select(-1);
});
AppClock.play(r);
)
//show boxes with a string in it:
(
a = Window("text-boxes", Rect(200 , 450, 450, 450));
a.view.decorator = FlowLayout(a.view.bounds);
b = EnvelopeView(a, Rect(0, 0, 440, 440))
.thumbWidth_(60.0)
.thumbHeight_(15.0)
.drawLines_(true)
.drawRects_(true)
.selectionColor_(Color.red)
.value_([[0.1, 0.4, 0.5, 0.3], [0.1, 0.2, 0.9, 0.7]]);
4.do({arg i;
b.setString(i, ["this", "is", "so much", "fun"].at(i));
b.setFillColor(i,[Color.yellow, Color.white, Color.green].choose);
});
a.front;
)
(
b.connect(3, [2.0,0.0,1.0]); // the text objects can be connected
b.connect(0,[2.0,3.0,1.0]);
)