Examples under Synth:new should not use SynthDef:play to make nodes
[supercollider.git] / SCClassLibrary / QtCollider / QLayout.sc
blobdf7e5b0cd37ce0c43cddbedec5163e25ac03200a
1 QLayout : QObject {
2   spacing_ { arg spacing;
3     this.setProperty( \spacing, spacing );
4   }
6   margins_ { arg margins;
7     this.setProperty( \margins, margins + [0,0,0,0] );
8   }
11 // LINE LAYOUTS ///////////////////////////////////////////////////
13 QLineLayout : QLayout {
14   *new { arg ...items;
15     var serializedItems = items.collect( { |x| this.parse(x) } );
16     ^super.new( serializedItems );
17   }
19   *parse { arg in;
20     var out = [nil,0,0];
21     var key;
22     var i;
23     if( in.isKindOf(Array) ) {
24       out[0] = in[0];
25       i = 1;
26       while { i + 1 < in.size } {
27         key = in[i];
28         case (
29           { (key === \stretch) || (key === \s) }, { out[1] = in[i+1] },
30           { (key === \align) || (key === \a) }, { out[2] = QAlignment(in[i+1]) }
31         );
32         i = i + 2;
33       };
34     }{
35       out[0] = in;
36     };
37     ^out;
38   }
40   add { arg item, stretch = 0, align;
41     this.invokeMethod( \addItem, [[item, stretch, QAlignment(align)]], true );
42   }
44   setStretch { arg item, stretch;
45     this.invokeMethod( \setStretch, [item, stretch], true );
46   }
48   setStretchAt { arg index, stretch; this.setStretch( index, stretch ); }
50   setAlignment { arg item, align;
51     this.invokeMethod( \setAlignment, [item, QAlignment(align)], true );
52   }
54   setAlignmentAt { arg index, align; this.setAlignment( index, align ); }
57 QHLayout : QLineLayout {
58   *qtClass { ^'QcHBoxLayout'; }
61 QVLayout : QLineLayout {
62   *qtClass { ^'QcVBoxLayout'; }
65 // GRID LAYOUT ///////////////////////////////////////////////////
67 QGridLayout : QLayout {
68   *new {
69     // get rid of QObject's arguments
70     ^super.new;
71   }
73   *qtClass { ^'QcGridLayout' }
75   *parse { arg in, row, col;
76     var out = [nil,row,col,1,1,nil];
77     var key;
78     var i;
79     if( in.isKindOf(Array) ) {
80       out[0] = in[0];
81       i = 1;
82       while { i + 1 < in.size } {
83         key = in[i];
84         case (
85           { (key === \rows) || (key === \r) }, { out[3] = in[i+1] },
86           { (key === \columns) || (key === \c) }, { out[4] = in[i+1] },
87           { (key === \align) || (key === \a) }, { out[5] = QAlignment(in[i+1]) }
88         );
89         i = i + 2;
90       };
91     }{
92       out[0] = in;
93     };
94     ^out;
95   }
98   *rows { arg ...rows ;
99     var grid;
100     var data;
101     grid = this.new;
102     rows.do { |row, r|
103       if( row.size > 0 ) {
104         row.do { |item, c|
105           if( item.notNil ) {
106             data = this.parse( item, r, c );
107             grid.invokeMethod( \addItem, [data], true );
108           };
109         };
110       };
111     }
112     ^grid;
113   }
115   *columns { arg ...cols;
116     var grid;
117     var data;
118     grid = this.new;
119     cols.do { |col, c|
120       if( col.size > 0 ) {
121         col.do { |item, r|
122           if( item.notNil ) {
123             data = this.parse( item, r, c );
124             grid.invokeMethod( \addItem, [data], true );
125           };
126         };
127       };
128     }
129     ^grid;
130   }
132   add { arg item, row, column, align;
133     this.invokeMethod( \addItem, [[item, row, column, 1, 1, QAlignment(align)]], true );
134   }
136   addSpanning { arg item, row, column, rowSpan=1, columnSpan=1, align;
137     this.invokeMethod( \addItem, [[item, row, column,
138                                    rowSpan, columnSpan,
139                                    QAlignment(align)
140                                  ]], true );
141   }
143   hSpacing_ { arg spacing;
144     this.setProperty( \horizontalSpacing, spacing );
145   }
147   vSpacing_ { arg spacing;
148     this.setProperty( \verticalSpacing, spacing );
149   }
151   setRowStretch{ arg row, factor;
152     this.invokeMethod( 'setRowStretch', [row, factor], true );
153   }
155   setColumnStretch{ arg column, factor;
156     this.invokeMethod( 'setColumnStretch', [column, factor], true );
157   }
159   setAlignment { arg item, align;
160     this.invokeMethod( \setAlignment, [item, QAlignment(align)], true );
161   }
163   setAlignmentAt { arg row, column, align;
164     this.invokeMethod( \setAlignment, [row, column, QAlignment(align)], true );
165   }
167   minRowHeight { arg row; ^this.invokeMethod( \minRowHeight, row ); }
169   setMinRowHeight { arg row, height;
170     this.invokeMethod( \setMinRowHeight, [row, height] );
171   }
173   minColumnWidth { arg column; ^this.invokeMethod( \minColumnWidth, column ); }
175   setMinColumnWidth { arg column, width;
176     this.invokeMethod( \setMinColumnWidth, [column, width] );
177   }