Classes | GUI > EZ-GUI

EZText : EZGui : Object

Wrapper class for a label, a text field and a value
Source: EZText.sc

Description

EZText is a wrapper class which creates an (optional) StaticText, and a TextField. The value is displayed as a compileString in the text field for editing.

Some Important Issues Regarding EZText

If the parent is nil, then EZText will create its own Window. See EZGui for more options.

Class Methods

Creation / Class Methods

EZText.new(parent, bounds, label, action, initVal, initAction: false, labelWidth: 60, textWidth, labelHeight: 20, layout: 'horz', gap, margin)

Arguments:

parent

The parent view or window. If the parent is nil, then EZText will create its own Window, and place it conveniently on the screen if the bounds are a Point. If the bounds are a Rect, then the Rect determines the window bounds.

bounds

An instance of Rect or Point. Default value is 160@20.

label

The label. Default value is nil. If nil, then no StaticText is created.

action

A Function called when the value changes. The function is passed the EZText instance as its argument.

initVal

The value to initialize the EZText with.

initAction

A Boolean indicating whether the action function should be called when setting the initial value. The default is false.

labelWidth

Number of pixels width for the label. The default is 60. In the \horz layout, if you specify the textWidth, then the labelWidth is ignored and is set to the bounds.width - textWidth.

textWidth

Number of pixels width for the number box. The default is 45. In \vert layout, textWidth defaults to the bounds.width.

labelHeight

Default is 20.

layout

\vert, or \horz. The default is \horz; \vert is a two line version.

gap

A Point. By default, the view tries to get its parent's gap, otherwise it defaults to 2@2. Setting it overrides these.

margin

A Point. This will inset the bounds occupied by the subviews of view.

Discussion:

Example:

(
w = Window("EZText", Rect(300, 300, 260, 60)).front;
g = EZText( w,          // parent
            250@50,     // bounds
            "testing",  // label
            { |ez| (ez.value.asString ++" is the value of " ++ ez).postln }, // action
            [1, 2, 3],  // initValue
            true        // initAction
);
g.setColors(Color.grey,Color.white);
);

// Simplest version, no parent view, so a window is created
(
    g = EZText(label:" test ");
    g.action_({ |ez| (ez.value.asString ++" is the value of " ++ ez).postln });
);

(
    g = EZText(bounds: Rect( 100, 200, 150, 50), label:" test ", layout: \vert);
    g.action_({ |ez| (ez.value.asString ++" is the value of " ++ ez).postln });
);

The contained views can be accessed via the EZText instance variables: labelView, textField.

Inherited class methods

Instance Methods

.textField

Returns the textField.

.action

.action = value

From superclass: EZGui

A Function to be evaluated when the value changes. Typical use is to type in a new value, and interpret it by hitting the evaluation shortcut. The first argument to the function will be the EZText.

.value

.value = inval

From superclass: EZGui

Gets/sets the value of the ezText. Does not perform the action.

Arguments:

inval

Any object.

.valueAction = val

From superclass: EZGui

Sets the value and performs the action.

Arguments:

val

Any object.

.doAction

From superclass: EZGui

Performs the action.

.enabled

.enabled = bool

From superclass: EZGui

Sets/gets whether the textfield is enabled.

Arguments:

bool

An instance of Boolean. Default is true.

Changing Appearance

.setColors(stringBackground, stringColor, textBackground, textStringColor, textNormalColor, textTypingColor, background)

Arguments:

stringBackground

An instance of Color. The background of the label and unit views.

stringColor

An instance of Color. The stringColor of the label and unit views.

textBackground

An instance of Color. The background of the textField.

textStringColor

An instance of Color. The stringColor of the textField.

textNormalColor

An instance of Color. The normalColor of the textField.

textTypingColor

An instance of Color. The typingColor of the textField.

background

An instance of Color. The background of the enclosing view.

.font = font

Set the Font used by all the views.

Arguments:

font

An instance of Font.

Inherited instance methods

Undocumented instance methods

.prSetViewParams

Examples

// Simplest version
(        // basic use
        w=Window("ez", Rect(300, 300, 300, 50)).front;
        g=EZText(w, 290@40," test  ", textWidth: 220,layout:\horz);
        g.setColors(Color.grey,Color.white);
);


// lots of textFields on one window
(
w=Window.new.front;
w.view.decorator=FlowLayout(w.view.bounds);
w.view.decorator.gap=2@2;

40.do{
        g=EZText(w, 170@16," test  ", textWidth: 120,layout:\horz);
        g.setColors(Color.grey, Color.white, Color.grey(0.8));
};
);


// click these parentheses to see three variants
(

m=nil;
m=2@2;        //comment for no margin

/////////////////
/// Layout \horz

(        // with label
        g=EZText(nil, 170@20," freq  ", textWidth:120,layout:\horz,margin:m);
        g.setColors(Color.grey,Color.white,background: Color.grey(0.7));
        g.window.bounds = g.window.bounds.moveBy(-180,50);
);

(        // no label. use window name as label
        g=EZText(nil, 120@20, layout:\horz,margin:m);
        g.setColors(Color.grey,Color.white,background: Color.grey(0.7));
        g.window.bounds = g.window.bounds.moveBy(-180, -90);
        g.window.name="Freq";
);

/////////////////
/// Layout \vert

(        // all features
        g=EZText(nil, 120@60," freq  ", textWidth: 120,layout: \vert, margin:m);
        g.setColors(Color.grey,Color.white,background: Color.grey(0.7));
        g.window.bounds = g.window.bounds.moveBy(100,50);
);

)



// Simplest sound example
(
Tdef(\text).set(\note, [0, 2, 7], \dur, { [0.1, 0.2].choose });

w = Window("EZTexts", Rect(200, 400, 304, 120)).front;
w.addFlowLayout;

TdefGui(Tdef(\text), 0, w);
Tdef(\text).envir.keysValuesDo { |k, v|
    EZText(w, Rect(0,0,300,40), k, { |ez|
        Tdef(\text).envir.put(*[k, ez.value].postcs);
    }, v);
};

Tdef(\text, { |ev|
    var mydur;
    loop {
        mydur = ev.dur;
        (note: ev.note, dur: mydur).postln.play;
        mydur.wait;
    }
}).play;
)

// type these or similar functions into dur and note fields and evaluate:

{ [0.1, 0.2, 0.3].choose }
{ [ 0, 2, 7, 10 ].scramble.keep(rrand(0, 4)) }