class library: DUGen - the server now handles audio-rate inputs correctly
[supercollider.git] / SCClassLibrary / Common / GUI / ViewRedirect.sc
blobe3874d011b25acc91f0dc7734b6ac8b08514d085
1 GuiRedirect { // Abstract
2         classvar <>redirectQueries = false;
4         *implScheme{
5                 ^GUI.scheme
6         }
8         *implClass {
9                 var scheme, key, target;
10                 scheme = GUI.scheme;
11                 if (scheme.isNil) {
12                         Error("No GUI scheme active.", this).throw
13                 };
14                 key = this.key;
15                 target = key !? {GUI.scheme.tryPerform(key)};
16                 if (target.isNil) {
17                         Error("No redirection for" + this.name + "available in the active GUI scheme:" +
18                                 scheme.id ++ ".", this).throw;
19                 }
20                 ^target;
21         }
23         *classRedirect { ^redirectQueries.if({this.implClass ? this}, this)}
25         *key { ^nil }
27         *new { arg ...args;
28                 ^this.implClass.new(*args);
29         }
31         *doesNotUnderstand{|selector ... args|
32                 var impl;
33                 ^this.implClass.perform(selector, *args);
34         }
36         *browse { ^ClassBrowser( this.key !? {this.implClass} ? this ) }
39 ViewRedirect : GuiRedirect { // Abstract class
40         *new { arg parent, bounds;
41                 ^super.new(parent, bounds);
42         }
45 Window : GuiRedirect {
46         *key { ^\window }
47         *new { arg name = "panel", bounds, resizable = true, border = true, server, scroll = false;
48                 ^super.new(name, bounds, resizable, border, server, scroll)
49         }
52 CompositeView : ViewRedirect { *key { ^\compositeView }}
53 ScrollView : ViewRedirect { *key { ^\scrollView }}
54 HLayoutView : ViewRedirect { *key { ^\hLayoutView }}
55 VLayoutView : ViewRedirect { *key { ^\vLayoutView }}
57 Slider : ViewRedirect { *key { ^\slider }}
59 Pen : GuiRedirect { *key { ^\pen }}
61 Stethoscope : GuiRedirect {
62         *new {  arg server, numChannels = 2, index, bufsize = 4096, zoom, rate, view, bufnum;
63                 index = index.asControlInput;
64                 if(server.hasShmInterface and: { GUI.current.respondsTo(\stethoscope2) }) {
65                         ^Stethoscope2(server, numChannels, index, bufsize, zoom, rate, view, bufnum)
66                 } {
67                         // if server has shared mem but current gui doesn't support,
68                         // this should show the "scoping on internal server only" message
69                         ^super.new(server, numChannels, index, bufsize, zoom, rate, view, bufnum)
70                 };
71         }
72         *key { ^\stethoscope }
74 Stethoscope2 : GuiRedirect {
75         *new {  arg server, numChannels = 2, index, bufsize = 4096, zoom, rate, view, bufnum;
76                 index = index.asControlInput;
77                 if(server.hasShmInterface) {
78                         ^super.new(server, numChannels, index, bufsize, zoom, rate, view, bufnum)
79                 } {
80                         ^Stethoscope(server, numChannels, index, bufsize, zoom, rate, view, bufnum)
81                 };
82         }
83         *key { ^\stethoscope2 }
85 ScopeView : ViewRedirect { *key { ^\scopeView }}
86 FreqScopeView : ViewRedirect { *key { ^\freqScopeView }} // redirects to FreqScope
88 FreqScope : GuiRedirect { // redirects to FreqScopeWindow
89         *new { arg width=512, height=300, busNum=0, scopeColor, bgColor;
90                 busNum = busNum.asControlInput;
91                 ^super.new(width, height, busNum, scopeColor)
92         }
93         *key { ^\freqScope }
96 Dialog : GuiRedirect {
97         *key { ^\dialog }
98         *openPanel { arg okFunc, cancelFunc, multipleSelection=false;
99                 ^super.openPanel(okFunc, cancelFunc, multipleSelection)
100         }
101         *savePanel { arg okFunc, cancelFunc;
102                 ^super.savePanel(okFunc, cancelFunc)
103         }
106 View : ViewRedirect { *key { ^\view }}
108 RangeSlider : ViewRedirect { *key { ^\rangeSlider }}
109 Slider2D : ViewRedirect { *key { ^\slider2D }}
110 TabletSlider2D : ViewRedirect { *key { ^\tabletSlider2D }}
111 Button : ViewRedirect { *key { ^\button }}
113 PopUpMenu : ViewRedirect { *key { ^\popUpMenu }}
114 StaticText : ViewRedirect { *key { ^\staticText }}
115 NumberBox : ViewRedirect { *key { ^\numberBox }}
116 ListView : ViewRedirect { *key { ^\listView }}
118 DragSource : ViewRedirect { *key { ^\dragSource }}
119 DragSink : ViewRedirect { *key { ^\dragSink }}
120 DragBoth : ViewRedirect { *key { ^\dragBoth }}
122 UserView : ViewRedirect { *key { ^\userView }}
123 MultiSliderView : ViewRedirect { *key { ^\multiSliderView }}
124 EnvelopeView : ViewRedirect { *key { ^\envelopeView }}
126 TextField : ViewRedirect  { *key { ^\textField }}
129 TabletView : ViewRedirect { *key { ^\tabletView }}
130 SoundFileView : ViewRedirect { *key { ^\soundFileView }}
131 MovieView : ViewRedirect { *key { ^\movieView }}
132 TextView : ViewRedirect  { *key { ^\textView }}
134 Font : GuiRedirect  {
135         *key { ^\font }
136         *findFirstAvailable { |fontNames, action|
137                 Routine {
138                         fontNames.do { |name|
139                                 if(this.availableFonts.any(_.contains(name))) {
140                                         action.value(name);
141                                         nil.alwaysYield;
142                                 }
143                         }
144                 }.play(AppClock)
145         }
146         *new { arg name, size, bold = false, italic = false, isPointSize = false;
147                 ^super.new(name, size, bold, italic, isPointSize)
148         }
151 Knob : ViewRedirect  { *key { ^\knob }}
153 LevelIndicator : ViewRedirect  { *key { ^\levelIndicator }}
155 Image : ViewRedirect { *key { ^\image }}
157 WebView : ViewRedirect { *key { ^\webView }}
159 CheckBox : ViewRedirect { *key { ^\checkBox }}
161 TreeView : ViewRedirect { *key { ^\treeView }}
163 HLayout : GuiRedirect { *key { ^\hLayout }}
164 VLayout : GuiRedirect { *key { ^\vLayout }}
165 GridLayout : GuiRedirect { *key { ^\gridLayout }}
166 StackLayout : GuiRedirect { *key { ^\stackLayout } }