SCDoc: Use proper static string constants instead of comparing string literals.
[supercollider.git] / SCClassLibrary / QtCollider / QLayout.sc
blob9d2f969bbc216d70ca4b5a437ba4c20780f8a771
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   insert { arg item, index=0, stretch = 0, align;
45     this.invokeMethod( \insertItem, [[item, index, stretch, QAlignment(align)]], true );
46   }
48   setStretch { arg item, stretch;
49     this.invokeMethod( \setStretch, [item, stretch], true );
50   }
52   setAlignment { arg item, align;
53     this.invokeMethod( \setAlignment, [item, QAlignment(align)], true );
54   }
57 QHLayout : QLineLayout {
58   *implementsClass {^'HLayout'}
59   *qtClass { ^'QcHBoxLayout' }
62 QVLayout : QLineLayout {
63   *implementsClass {^'VLayout'}
64   *qtClass { ^'QcVBoxLayout' }
67 // GRID LAYOUT ///////////////////////////////////////////////////
69 QGridLayout : QLayout {
70   *implementsClass {^'GridLayout'}
72   *new {
73     // get rid of QObject's arguments
74     ^super.new;
75   }
77   *qtClass { ^'QcGridLayout' }
79   *parse { arg in, row, col;
80     var out = [nil,row,col,1,1,nil];
81     var key;
82     var i;
83     if( in.isKindOf(Array) ) {
84       out[0] = in[0];
85       i = 1;
86       while { i + 1 < in.size } {
87         key = in[i];
88         case (
89           { (key === \rows) || (key === \r) }, { out[3] = in[i+1] },
90           { (key === \columns) || (key === \c) }, { out[4] = in[i+1] },
91           { (key === \align) || (key === \a) }, { out[5] = QAlignment(in[i+1]) }
92         );
93         i = i + 2;
94       };
95     }{
96       out[0] = in;
97     };
98     ^out;
99   }
102   *rows { arg ...rows ;
103     var grid;
104     var data;
105     grid = this.new;
106     rows.do { |row, r|
107       if( row.size > 0 ) {
108         row.do { |item, c|
109           if( item.notNil ) {
110             data = this.parse( item, r, c );
111             grid.invokeMethod( \addItem, [data], true );
112           };
113         };
114       };
115     }
116     ^grid;
117   }
119   *columns { arg ...cols;
120     var grid;
121     var data;
122     grid = this.new;
123     cols.do { |col, c|
124       if( col.size > 0 ) {
125         col.do { |item, r|
126           if( item.notNil ) {
127             data = this.parse( item, r, c );
128             grid.invokeMethod( \addItem, [data], true );
129           };
130         };
131       };
132     }
133     ^grid;
134   }
136   add { arg item, row, column, align;
137     this.invokeMethod( \addItem, [[item, row, column, 1, 1, QAlignment(align)]], true );
138   }
140   addSpanning { arg item, row, column, rowSpan=1, columnSpan=1, align;
141     this.invokeMethod( \addItem, [[item, row, column,
142                                    rowSpan, columnSpan,
143                                    QAlignment(align)
144                                  ]], true );
145   }
147   hSpacing_ { arg spacing;
148     this.setProperty( \horizontalSpacing, spacing );
149   }
151   vSpacing_ { arg spacing;
152     this.setProperty( \verticalSpacing, spacing );
153   }
155   setRowStretch{ arg row, factor;
156     this.invokeMethod( 'setRowStretch', [row, factor], true );
157   }
159   setColumnStretch{ arg column, factor;
160     this.invokeMethod( 'setColumnStretch', [column, factor], true );
161   }
163   setAlignment { arg item, align;
164     var args = if( item.class === Point )
165       { [item.y, item.x, QAlignment(align)] }
166       { [item, QAlignment(align)] };
168     this.invokeMethod( \setAlignment, args, true );
169   }
171   minRowHeight { arg row; ^this.invokeMethod( \minRowHeight, row ); }
173   setMinRowHeight { arg row, height;
174     this.invokeMethod( \setMinRowHeight, [row, height] );
175   }
177   minColumnWidth { arg column; ^this.invokeMethod( \minColumnWidth, column ); }
179   setMinColumnWidth { arg column, width;
180     this.invokeMethod( \setMinColumnWidth, [column, width] );
181   }
184 QStackLayout : QLayout
186   *implementsClass {^'StackLayout'}
188   *qtClass { ^'QcStackLayout' }
190   *new { arg ...views; ^super.new([views]) }
192   add { arg view; this.insert(view, -1) }
194   insert { arg view, index = 0; this.invokeMethod( \insertWidget, [index, view] ) }
196   index { ^this.getProperty(\currentIndex) }
197   index_ { arg value; this.setProperty(\currentIndex, value) }
199   count { ^this.getProperty(\count) }
201   mode { ^this.getProperty(\stackingMode) }
202   mode_ { arg value;
203     value = value.switch(
204       \stackOne, 0,
205       \stackAll, 1,
206       value
207     );
208     value = value.clip(0, 1).asInteger;
209     this.setProperty(\stackingMode, value)
210   }