File: ListView.schelp

package info (click to toggle)
supercollider 1%3A3.13.0%2Brepack-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 80,292 kB
  • sloc: cpp: 476,363; lisp: 84,680; ansic: 77,685; sh: 25,509; python: 7,909; makefile: 3,440; perl: 1,964; javascript: 974; xml: 826; java: 677; yacc: 314; lex: 175; objc: 152; ruby: 136
file content (196 lines) | stat: -rw-r--r-- 5,977 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
CLASS:: ListView
summary:: A view displaying a list of text items.
categories:: GUI>Views

DESCRIPTION::

A view that displays a list of text items and allows one or more of them to be selected, depending on link::#-selectionMode::.

In default selection mode (single item selection), clicking on an item will select it, and pressing the up or down arrow keys will move selection to previous or next item, respectively. Other selection modes allow more complex interaction.

There is a difference between the concepts of link::#-value#current:: item, end link::#-selection#selected:: items. In default selection mode they will always be the same, but not so in other modes.


CLASSMETHODS::

PRIVATE:: key




INSTANCEMETHODS::



SUBSECTION:: Data

METHOD:: items
	The list of items displayed by the view.

	argument::
		An Array of Strings, each String defining the text to represent an item.

METHOD:: clear
    Removes all items.

METHOD:: value
	The index of the current item, or nil when there is no current item. Note that this may be different than link::#-selection:: when link::#-selectionMode:: allows multiple items to be selected.

	argument::
		An Integer or nil.

METHOD:: valueAction
	Sets link::#-value:: and triggers the link::#-action::.

METHOD:: selection
	An array of all selected indexes. When setting selection, either an array or a single integer may be used.

	Note that this may be different than link::#-value:: when link::#-selectionMode:: allows multiple items to be selected. When setting selection in single-item selection mode, only the last index will remain selected.


SUBSECTION:: Appearance

METHOD:: colors
	The background colors of the items.

	argument::
		An Array of Colors, one Color for each item.

METHOD:: stringColor
	The color used to display all the text of all unselected items.

	argument::
		A Color.

METHOD:: selectedStringColor
	The color used to display the selected item's text.

	argument::
		A Color.

METHOD:: hiliteColor
	The color used to indicate the selected item (aside from the color of its text).

	argument::
		A Color.




SUBSECTION:: Interaction

METHOD:: selectionMode

	The allowed mode of item selection, according to the following table:

	table::
	## strong::Value::  || strong::Meaning::
	## \none            || No item can be selected.
	## \single          || Only a single item can be selected at once.
	## \multi           || Multiple items can be selected. An item's selection is toggled when clicked.
	## \extended        || Multiple items can be selected, individually by holding the Ctrl key, and in a batch by holding the Shift key.
	## \contiguous      || Multiple neighbouring items can be selected by holding the Shift key.
	::

	argument::
		One of the Symbols listed in the table above.



SUBSECTION:: Actions

METHOD:: action
	The action object evaluated whenever the user changes the emphasis::current:: item, i.e. when link::#-value:: changes as a result of GUI interaction.

METHOD:: selectionAction

The action object evaluated whenever link::#-selection:: changes.

METHOD:: enterKeyAction
	The action object evaluated whenever the user presses the Enter (Return) key.

METHOD:: defaultKeyDownAction

	Implements the default effects of key presses as follows:

	table::
	## strong::Key::   || strong::Effect::
	## space           || select next item and trigger action
	## r               || trigger enterKeyAction
	## n               || trigger enterKeyAction
	## a number        || trigger enterKeyAction
	## up arrow        || select previous item and trigger action
	## down arrow      || select next item and trigger action
	## left arrow      || select previous item and trigger action
	## right arrow     || select next item and trigger action
	::



SUBSECTION:: Drag and drop

METHOD:: defaultGetDrag
	returns::
		The link::#-value::.

METHOD:: defaultCanReceiveDrag
	returns::
		True if the current drag data is a number.

METHOD:: defaultReceiveDrag
	Sets link::#-valueAction:: to the current drag data.


EXAMPLES::

subsection:: Basic Example

code::
(
w = Window.new.front;

v = ListView(w,Rect(10,10,120,70))
    .items_([ "SinOsc", "Saw", "LFSaw", "WhiteNoise", "PinkNoise", "BrownNoise", "Osc" ])
    .background_(Color.clear)
    .hiliteColor_(Color.green(alpha:0.6))
    .action_({ arg sbs;
        [sbs.value, v.items[sbs.value]].postln; // .value returns the integer
    });
)
::


subsection:: Sound Example

Use ListView to switch filters:
code::
(
s.waitForBoot({
    var f, freq, ww;
    n={r=LFSaw.ar([220, 530],0,0.3)*LFPulse.ar(12,0,0.3,0.4); [r[0],Delay2.ar(r[1])]}.play;
    freq={SinOsc.kr(0.5,0,4000,4200)}.play;
    w=Window("Filters").front;
    v = ListView(w,Rect(10,10,180,120))
        .items_([ "No Filter","RLPF", "RHPF", "BPF", "Resonz", "MoogFF" ])
        .background_(Color.clear)
        .hiliteColor_(Color.green(alpha:0.6))
        .action_({arg v;
            v.value.switch(
            0,{try{f.free};"test".postln},
            1,{try{f.free};f={ReplaceOut.ar(0,RLPF.ar(In.ar(0,2),In.kr(0,1),0.2,0.3))}.play(addAction:\addToTail)},
            2,{try{f.free};f={ReplaceOut.ar(0,RHPF.ar(In.ar(0,2),In.kr(0,1),0.2,0.3))}.play(addAction:\addToTail)},
            3,{try{f.free};f={ReplaceOut.ar(0,BPF.ar(In.ar(0,2),In.kr(0,1),0.2,1.5))}.play(addAction:\addToTail)},
            4,{try{f.free};f={ReplaceOut.ar(0,Resonz.ar(In.ar(0,2),In.kr(0,1),0.2,2))}.play(addAction:\addToTail)},
            5,{try{f.free};f={ReplaceOut.ar(0,MoogFF.ar(In.ar(0,2),In.kr(0,1),1.5))}.play(addAction:\addToTail)}
            );
        });

    ww=FreqScope.new(400, 200, 0);
    w.bounds=Rect(50,Window.screenBounds.height-300,200,200);
    ww.window.bounds=ww.window.bounds.moveTo(255,Window.screenBounds.height-328);
    CmdPeriod.doOnce({{ww.window.close}.defer(0.5);w.close;});
            //defer or crash, because FreqScopeWindow Class contains its own routine for cleaning up on CmdPeriod
    w.onClose_({n.free;f.free;freq.free});
});
)
::