SCDoc: Use proper static string constants instead of comparing string literals.
[supercollider.git] / SCClassLibrary / QtCollider / BasicViews.sc
blob7fc37f1f345a81ed44fb091e5f2170f7dc7073a9
1 /////////////////////// ABSTRACT CLASSES ////////////////////////////
3 QTextViewBase : QView {
4   var <object, <>setBoth = true;
5   var <align;
7   object_  { arg obj;
8     if( setBoth ) { this.string = obj.asString };
9     object = obj
10   }
12   align_ { arg aSymbol;
13     align = aSymbol;
14     this.setProperty( \alignment, QAlignment(aSymbol) );
15   }
18 QItemViewBase : QView
20   var <items;
22   items_ { arg stringArray;
23     items = stringArray;
24     this.setProperty( \items, stringArray);
25   }
27   item {
28     ^items.at( this.value );
29   }
31   valueAction_ { arg val;
32     this.value_(val);
33     action.value(this);
34   }
37 QAbstractScroll : QView {
38   var <hasHorizontalScroller = true, <hasVerticalScroller = true;
39   var <autohidesScrollers = true;
41   autohidesScrollers_ { arg aBool;
42     if( aBool ) {
43       if( hasHorizontalScroller ) {
44         this.setProperty( \horizontalScrollBarPolicy, 0 );
45       };
46       if( hasVerticalScroller ) {
47         this.setProperty( \verticalScrollBarPolicy, 0 );
48       };
49     } {
50       if( hasHorizontalScroller ) {
51         this.setProperty( \horizontalScrollBarPolicy, 2 )
52       };
53       if( hasVerticalScroller ) {
54         this.setProperty( \verticalScrollBarPolicy, 2 );
55       };
56     };
57     autohidesScrollers = aBool;
58   }
60   hasHorizontalScroller_ { arg aBool;
61     var policy;
62     if( aBool ) {
63       if( autohidesScrollers ) { policy = 0 } { policy = 2 };
64       this.setProperty( \horizontalScrollBarPolicy, policy );
65     } {
66       this.setProperty( \horizontalScrollBarPolicy, 1 );
67     };
68     hasHorizontalScroller = aBool;
69   }
71   hasVerticalScroller_ { arg aBool;
72     var policy;
73     if( aBool ) {
74       if( autohidesScrollers ) { policy = 0 } { policy = 2 };
75       this.setProperty( \verticalScrollBarPolicy, policy );
76     } {
77       this.setProperty( \verticalScrollBarPolicy, 1 );
78     };
79     hasVerticalScroller = aBool;
80   }
83 QAbstractStepValue : QView {
84   var <step = 0.1, <shift_scale = 100.0, <ctrl_scale = 10.0, <alt_scale = 0.1;
86   step_ { arg aFloat;
87     step = aFloat;
88     this.setProperty( \step, aFloat );
89   }
91   shift_scale_ { arg aFloat;
92     shift_scale = aFloat;
93     this.setProperty( \shiftScale, aFloat );
94   }
96   ctrl_scale_ { arg aFloat;
97     ctrl_scale = aFloat;
98     this.setProperty( \ctrlScale, aFloat );
99   }
101   alt_scale_ { arg aFloat;
102     alt_scale = aFloat;
103     this.setProperty( \altScale, aFloat );
104   }
106   getScale { |modifiers|
107     ^case
108       { modifiers.isShift } { shift_scale }
109       { modifiers.isCtrl } { ctrl_scale }
110       { modifiers.isAlt } { alt_scale }
111       { 1 };
112   }
114   increment { arg factor = 1.0; this.invokeMethod( \increment, factor.asFloat ); }
115   decrement { arg factor = 1.0; this.invokeMethod( \decrement, factor.asFloat ); }
118 /////////////////////// CONTAINERS ////////////////////////////////
120 QHLayoutView : QView {
121   *qtClass { ^'QcHLayoutWidget' }
124 QVLayoutView : QView {
125   *qtClass { ^'QcVLayoutWidget' }
128 QScrollCanvas : QObject {
129   *qtClass { ^'QcScrollWidget' }
131   background { ^this.getProperty(\background); }
132   background_ { arg color; this.setProperty(\background, color); }
135 QScrollView : QAbstractScroll {
136   var <canvas;
137   var <hasBorder=true;
138   var actionConnected=false;
140   *new { arg parent, bounds;
141     ^super.new( parent, bounds ).initQScrollView;
142   }
144   *qtClass { ^'QcScrollArea' }
146   children { arg class = QView;
147     ^canvas.children( class );
148   }
150   background { ^canvas.background }
151   background_ { arg color; canvas.background = color }
153   hasBorder_ { arg aBool;
154     hasBorder = aBool;
155     this.setProperty( \hasBorder, aBool );
156   }
158   innerBounds {
159     ^this.getProperty( \innerBounds );
160   }
162   visibleOrigin {
163     ^this.getProperty( \visibleOrigin );
164   }
166   visibleOrigin_ { arg point;
167     this.setProperty( \visibleOrigin, point );
168     this.doAction;
169   }
171   canvas_ { arg view;
172     canvas = view;
173     this.invokeMethod( \setWidget, view, true );
174   }
176   action_ { arg handler;
177     action = handler;
178     if(actionConnected.not) { this.connectMethod( 'scrolled()', \doAction ) };
179     actionConnected = true;
180   }
182   initQScrollView {
183     // NOTE: The canvas widget must not be a QView, so that asking its
184     // children for parent will skip it and hit this view instead.
185     this.canvas = QScrollCanvas();
186   }
189 /////////////////////////// WIDGETS ///////////////////////////////
191 QStaticText : QTextViewBase {
192   *qtClass { ^'QLabel' }
194   *new { arg aParent, aBounds;
195     var obj = super.new( aParent, aBounds );
196     obj.setProperty(\wordWrap, true);
197     ^obj;
198   }
200   background {
201     var p = this.palette;
202     ^if(p.hasColor(\window)) {p.window} {nil}
203   }
205   background_ { arg color;
206     var p = this.palette;
207     if(p.hasColor(\window).not)
208       { this.setProperty( \autoFillBackground, true) };
209     this.palette = p.window_(color);
210   }
212   string { ^this.getProperty(\text) }
213   string_ { arg text; this.setProperty( \text, text.asString ) }
215   stringColor {
216     ^this.palette.windowText;
217   }
219   stringColor_ { arg color;
220     this.palette = this.palette.windowText_(color);
221   }
224 QTextField : QTextViewBase {
225   *qtClass { ^'QcTextField' }
227   string {
228     ^this.getProperty( \text );
229   }
231   string_ { arg text;
232     this.setProperty( \text, text );
233   }
235   stringColor {
236     ^this.palette.baseText;
237   }
239   stringColor_ { arg color;
240     this.palette = this.palette.baseText_(color);
241   }
243   background {
244     ^this.palette.base;
245   }
247   background_ { arg color;
248     this.palette = this.palette.base_(color);
249   }
251   value {
252     ^this.string;
253   }
255   value_ { arg val;
256     this.string_( val.asString );
257   }
259   valueAction_ { arg val;
260     this.string_( val.asString );
261     this.doAction;
262   }
264   defaultGetDrag { ^this.string; }
265   defaultCanReceiveDrag { ^true; }
266   defaultReceiveDrag {
267     this.valueAction = QView.currentDrag;
268   }
271 QButton : QView {
272   var <states;
274   *qtClass { ^'QcButton' }
276   value {
277     ^this.getProperty( \value );
278   }
280   value_ { arg argVal;
281     this.setProperty( \value, argVal );
282   }
284   valueAction_ { arg anInt;
285     this.value_( anInt );
286     action.value(this);
287   }
289   states_ { arg stateArray;
290     states = stateArray;
291     super.setProperty( \states, stateArray );
292   }
294   action_ { arg func;
295     this.manageMethodConnection( action, func, 'action(int)', \prDoAction );
296     action = func;
297   }
299   doAction { arg modifiers;
300     action.value(this, modifiers);
301   }
303   defaultGetDrag { ^this.value; }
304   defaultCanReceiveDrag { ^true; }
305   defaultReceiveDrag {
306     if( QView.currentDrag.isNumber )
307       { this.valueAction = QView.currentDrag; }
308       { this.action = QView.currentDrag; };
309   }
311   prDoAction { arg mods;
312     this.doAction(QKeyModifiers.toCocoa(mods));
313   }
316 QCheckBox : QView {
318   *qtClass { ^'QcCheckBox' }
320   *new{ |parent,bounds,text|
321     ^super.new(parent,bounds).init(text)
322   }
324   init{ |text|
325     this.string_(text)
326   }
328   value{
329     ^this.getProperty(\value)
330   }
332   value_{ |val|
333     this.setProperty(\value,val)
334   }
336   valueAction_ { |val|
337     this.value_(val);
338     this.doAction;
339   }
341   string_{ |string|
342     this.setProperty(\text,string)
343   }
345   string{
346     ^this.getProperty(\text)
347   }
349   defaultGetDrag { ^this.value; }
350   defaultCanReceiveDrag { ^((QView.currentDrag == true) || (QView.currentDrag == false)); }
351   defaultReceiveDrag {
352     this.valueAction = QView.currentDrag;
353   }
356 QPopUpMenu : QItemViewBase {
358   *qtClass { ^'QcPopUpMenu' }
360   allowsReselection { ^this.getProperty( \reactivationEnabled ) }
362   allowsReselection_ { arg flag; ^this.setProperty( \reactivationEnabled, flag ) }
364   value {
365     var v = this.getProperty( \currentIndex );
366     if( v < 0 ) { ^nil } { ^v };
367   }
369   value_ { arg val;
370     this.setProperty( \currentIndex, val ? -1 );
371   }
373   background { ^this.palette.button; }
375   background_ { arg color; this.palette = this.palette.button_(color); }
377   stringColor {
378     ^this.palette.buttonText;
379   }
381   stringColor_ { arg color;
382     this.palette = this.palette.buttonText_(color);
383   }
385   defaultGetDrag { ^this.value; }
386   defaultCanReceiveDrag { ^QView.currentDrag.isNumber; }
387   defaultReceiveDrag {
388     this.valueAction = QView.currentDrag;
389   }