Classes | GUI > Views

Slider : QAbstractStepValue : AbstractStepValue : View : QObject : Object

A view consisting of a sliding handle.
Source: QSlider.sc
Subclasses: QSlider

Description

A view that allows setting a numerical value by means of moving a sliding handle. It can have horizontal or vertical orientation, meaning the direction in which the handle moves.

Class Methods

Slider.new(parent, bounds)

When a new Slider is created, its -orientation is determined by the initial size: if it is wider than high, the orientation will be horizontal, otherwise it will be vertical.

Inherited class methods

Undocumented class methods

Slider.qtClass

Instance Methods

Data

.value

.value = argVal

Numerical value between 0 and 1, represented by the handle position within the groove.

Arguments:

argVal

A Float.

.valueAction = val

Sets -value and triggers -action.

.increment(factor: 1)

From superclass: AbstractStepValue

Increments the value by -step multiplied by 'factor'.

Arguments:

factor

Any number.

.decrement(factor: 1)

From superclass: AbstractStepValue

Decrements the value by -step multiplied by 'factor'.

Arguments:

factor

Any number.

Appearance

.orientation

.orientation = aSymbol

The orientation of the Slider - the direction in which the handle moves. The default value depends on the size of the view when created.

Arguments:

aSymbol

One of the two Symbols: \horizontal or \vertical.

.thumbSize

.thumbSize = pixels

The size of the handle - its width or height, depending on -orientation.

Arguments:

pixels

An Integer amount of pixels.

.knobColor

.knobColor = color

The color of the handle.

Arguments:

color

A Color.

Interaction

.step

.step = aFloat

The amount by which the value will changed when -increment or -decrement is called, or when related keys are pressed.

Arguments:

aFloat

A Float.

.pixelStep

The absolute amount by which the value would change if the handle moved by one pixel.

Returns:

A Float.

.shift_scale

.shift_scale = aFloat

From superclass: AbstractStepValue

The factor by which -step is multiplied when incrementing or decrementing the value by keyboard while the Shift key is pressed.

Arguments:

aFloat

A Float.

.ctrl_scale

.ctrl_scale = aFloat

From superclass: AbstractStepValue

The factor by which -step is multiplied when incrementing or decrementing the value by keyboard while the Ctrl key is pressed.

Arguments:

aFloat

A Float.

.alt_scale

.alt_scale = aFloat

From superclass: AbstractStepValue

The factor by which -step is multiplied when incrementing or decrementing the value by keyboard while the Alt key is pressed.

Arguments:

aFloat

A Float.

Actions

.action

.action = func

From superclass: View

The action object evaluated whenever the user moves the handle.

.defaultKeyDownAction(char, modifiers, unicode, keycode, key)

Implements the default effects of key presses as follows:

KeyEffect
rvalueAction_(1.0.rand)
nvalueAction_(0)
xvalueAction_(1)
cvalueAction_(0.5)
]increment
[decrement
up arrowincrement
down arrowdecrement
right arrowincrement
left arrowdecrement

Drag and drop

.defaultGetDrag

Returns:

The -value.

.defaultCanReceiveDrag

Returns:

True if the current drag data is a number.

.defaultReceiveDrag

Sets -valueAction to the current drag data.

Inherited instance methods

Undocumented instance methods

.background

.background = color

.initSlider(bounds)

Examples

Show the slider value in a NumberBox

(
w = Window.new.front;
c = NumberBox(w, Rect(20, 20, 150, 20));
a = Slider(w, Rect(20, 60, 150, 20))
    .action_({
        c.value_(a.value)
        });
a.action.value;
)

( // change the bounds to become vertical
w = Window.new.front;
c = NumberBox(w, Rect(20, 20, 150, 20));
a = Slider(w, Rect(200, 60, 20, 150))
    .action_({
        c.value_(a.value)
    });
a.action.value;
)

Use a Spec to round and map the output range

(
w = Window.new.front;
b = ControlSpec(-50, 50, \linear, 0.01); // min, max, mapping, step
c = StaticText(w, Rect(20, 20, 150, 20)).align_(\center).background_(Color.rand);
a = Slider(w, Rect(20, 50, 150, 20))
    .focusColor_(Color.red(alpha:0.2))
    .background_(Color.rand)
    .value_(0.5)
    .action_({
        c.string_(b.map(a.value).asString)
        // round the float so it will fit in the NumberBox
        });
a.action.value;
)

Change the stepsize of the slider, selected via a PopUpMenu

(
w = Window.new.front;
a = ["0", "0.0625", "0.125", "0.25", "0.5", "1"];
b = Slider(w, Rect(20, 100, 100, 20))
    .action_({
        c.value_(b.value)
        }).background_(Color.rand);
d = PopUpMenu(w, Rect(20, 60, 100, 20))
    .items_(a)
    .action_({
        b.step_((a.at(d.value)).asFloat);
    });
StaticText(w, Rect(130, 60, 100, 20)).string_("change step");
c = NumberBox(w, Rect(20, 20, 100, 20));
)

Use the slider view to accept key actions

( // select the slider, type something and watch the post window
w = Window.new;
c = Slider(w, Rect(0,0,100,30));
c.keyDownAction = { |view, char, modifiers, unicode, keycode|
    [char, modifiers, unicode, keycode].postln
};
w.front;
)

Adding functionality to a view by the method addAction

This is useful for adding things to existing frameworks that have action functions already.

(
w = Window.new("A Slider");
a = Slider.new(w, Rect(40, 10, 300, 30));
w.front
);

// now incrementally add some action to the slider
a.addAction({ |sl| sl.value.postln });
a.addAction({ |sl| w.view.background = Color.green(sl.value) });
a.addAction({ |sl| sl.background = Color.red(1 - sl.value) });

// adding and removing an action:
f = { |sl| "--------*******-------".postln; };
a.addAction(f);
a.removeAction(f);

// or remove all, of course
a.action = nil;

Use Slider for triggering sounds

    (
        s.waitForBoot({
            
            SynthDef(\pluck, { |out, freq=55|
                Out.ar(out,
                    Pluck.ar(WhiteNoise.ar(0.06),
                        EnvGen.kr(Env.perc(0,4), 1.0, doneAction: Done.freeSelf),
                        freq.reciprocal,
                        freq.reciprocal,
                        10,
                        coef:0.1)
                );
            }).add;


            w = Window.new("Hold arrow keys to trigger sound",
                Rect(300, Window.screenBounds.height - 300, 400, 100)).front;
            a = Slider(w, Rect(50, 20, 300, 40)).value_(0.5).step_(0.05).focus
            .action_({
                // trigger a synth with varying frequencies
                Synth(\pluck, [\freq, 55 + (1100 * a.value)]);
                w.view.background_(Gradient(Color.rand,Color.rand));
            })
        });

    )

Change background color of Window

(
w = Window("RGB fader", Rect(100, 500, 400, 400))
    .front;
f = { w.view.background_(Color.new(r.value, g.value, b.value, 1)) };
r = Slider(w, Rect(100, 140, 200, 20))
    .value_(0.5)
    .action_({ f.value });
g = Slider(w, Rect(100, 170, 200, 20))
    .value_(0.5)
    .action_({ f.value });
b = Slider(w, Rect(100, 200, 200, 20))
    .value_(0.5)
    .action_({ f.value });
f.value;
);