Merge pull request #506 from andrewcsmith/patch-2
[supercollider.git] / SCClassLibrary / QtCollider / QNumberBox.sc
blobb488ef53672eff99ea19b02ae76a6759dcca9572
1 QNumberBox : QAbstractStepValue {
2   var <scroll, <scroll_step;
3   var <align, <buttonsVisible = false;
4   var <normalColor, <typingColor;
5   var <object, <>setBoth = true;
7   *qtClass { ^'QcNumberBox' }
9   *new { arg aParent, aBounds;
10     var obj = super.new( aParent, aBounds );
11     obj.initQNumberBox;
12     ^obj;
13   }
15   initQNumberBox {
16     scroll = true;
17     scroll_step = 1;
18     normalColor = Color.black;
19     typingColor = Color.red;
20   }
22   object_  { arg obj;
23     if( setBoth ) {
24       if( obj.isNumber ) { this.value = obj } { this.string = obj.asString }
25     };
26     object = obj
27   }
29   value {
30     var type = this.getProperty( \valueType );
31     var val;
32     switch( type,
33       0 /* Number */, { val = this.getProperty( \value ) },
34       1 /* Inf */, { val = inf },
35       2 /* -Inf */, { val = -inf },
36       3 /* NaN */, { val = 0 },
37       4 /* Text */, { val = 0 }
38     );
39     ^val;
40   }
42   value_ { arg value;
43     case
44       // isNaN has to be on the first plase, because a NaN is also equal to inf and -inf
45       { value.isNaN } { this.invokeMethod( \setNaN ); }
46       { value == inf } { this.invokeMethod( \setInfinite, true ); }
47       { value == -inf } { this.invokeMethod( \setInfinite, false ); }
48       { this.setProperty( \value, value.asFloat ); }
49     ;
50   }
52   valueAction_ { arg val;
53     this.value_(val);
54     action.value(this);
55   }
57   string { ^this.getProperty( \text ); }
59   string_ { arg string; this.setProperty( \text, string ); }
61   clipLo { ^this.getProperty(\minimum) }
62   clipLo_ { arg aFloat; this.setProperty( \minimum, aFloat ) }
64   clipHi { ^this.getProperty(\maximum) }
65   clipHi_ { arg aFloat; this.setProperty( \maximum, aFloat ) }
67   scroll_ { arg aBool;
68     scroll = aBool;
69     this.setProperty( \scroll, aBool );
70   }
72   scroll_step_ { arg aFloat;
73     scroll_step = aFloat;
74     this.setProperty( \scrollStep, aFloat );
75   }
77   decimals { ^this.getProperty(\decimals); }
78   minDecimals { ^this.getProperty(\minDecimals); }
79   maxDecimals { ^this.getProperty(\maxDecimals); }
81   decimals_ {  arg decimals; this.setProperty( \decimals, decimals ); }
82   minDecimals_ { arg decimals; this.setProperty( \minDecimals, decimals ); }
83   maxDecimals_ { arg decimals; this.setProperty( \maxDecimals, decimals ); }
85   align_ { arg alignment;
86     align = alignment;
87     this.setProperty( \alignment, QAlignment(alignment));
88   }
90   stringColor {
91     ^this.palette.baseText;
92   }
94   stringColor_ { arg color;
95     this.palette = this.palette.baseText_(color);
96   }
98   normalColor_ { arg aColor;
99     normalColor = aColor;
100     this.setProperty( \normalColor, aColor );
101   }
103   typingColor_ { arg aColor;
104     typingColor = aColor;
105     this.setProperty( \editingColor, aColor );
106   }
108   background {
109     ^this.palette.base;
110   }
112   background_ { arg color;
113     this.palette = this.palette.base_(color);
114   }
116   buttonsVisible_ { arg aBool;
117     buttonsVisible = aBool;
118     this.setProperty( \buttonsVisible, aBool );
119   }
121   defaultGetDrag { ^this.value; }
122   defaultCanReceiveDrag { ^QView.currentDrag.isNumber; }
123   defaultReceiveDrag {
124     this.valueAction = QView.currentDrag;
125   }