Merge pull request #506 from andrewcsmith/patch-2
[supercollider.git] / HelpSource / Classes / StackLayout.schelp
blob6acd552d89a0c58e13ab7622e3d5e2d0dddd7caa
1 CLASS:: StackLayout
2 summary:: A layout that stacks views on top of each other
3 categories:: GUI>Layout
4 related:: Classes/HLayout, Classes/VLayout, Classes/GridLayout, Guides/GUI-Layout-Management
5 redirect:: implClass
7 DESCRIPTION::
9 note:: StackLayout is only implemented in strong::Qt GUI:: ::
11 StackLayout manages several views stacked into the same space. It has two modes: it can either switch the view that is visible, hiding the others, or it can keep all of them visible, switching the one that is on top.
13 The second mode is useful for example for overlaying a view with a link::Classes/UserView::, on which you can then draw additional information. If you still want to be able to interact with the view below using the mouse, you can make the one above ignore the mouse using link::Classes/View#-acceptsMouse::. See the link::#examples#example:: below.
15 Views can be added to the layout immediately at link::#*new#construction::, or you can link::#-add#add:: or link::#-insert#insert:: them after. To remove a view, you simply call link::Classes/View#-remove::.
17 You can change the current view (the one visible / on top) using link::#-index::, while link::#-count:: tells you how many views are managed by the layout.
19 To switch between the two modes use link::#-mode::.
21 note::
22 Unlike other layouts, StackLayout can not contain another layout, but only subclasses of View.
26 CLASSMETHODS::
28 PRIVATE:: key
29 PRIVATE:: qtClass
31 METHOD:: new
33     Creates a StackLayout and fills it with the items given as arguments. The first view becomes the current one, i.e. visible and on top of others.
35     argument:: ... views
36     A sequence of strong::views::. Unlike other layouts, StackLayout can not contain another layout.
38     discussion::
40     In the example below, the button will switch between the three text editing areas:
41 code::
43 var stack;
44 w = Window().layout_( VLayout(
45     Button().states_([["One"],["Two"],["Three"]]).action_({ |b| stack.index = b.value }),
46     stack = StackLayout(
47         TextView().string_("This is a chunk of text..."),
48         TextView().string_("...and this is another..."),
49         TextView().string_("...and another.")
50     );
51 )).front;
55 INSTANCEMETHODS::
57 METHOD:: add
58     Adds a view at the last index. This does not affect the current link::#-index::.
60     argument:: view
61     A View.
63 METHOD:: insert
64     Inserts a view at the specific index. This does not affect the current link::#-index::.
66     argument:: view
67     A View.
69     argument:: index
70     An integer. If it is less than 0 or more than link::#-count::, the view will always be inserted as last.
72 METHOD:: count
73     The number of views managed by the layout.
75 METHOD:: index
76     Sets or gets the index of the current view. The current view is placed on top of others, and if link::#-mode:: is 0, all the others are hidden.
78 METHOD:: mode
79     Sets or gets the current mode: in mode 0, the layout only displays the current view; in mode 1, the layout displays all the views. In both modes, the current view will be placed on top of others.
81     See also: link::#-index::.
83     argument:: value
84         0 or 1. Instead of an integer you can also use symbols \stackOne or \stackAll.
85     returns::
86         0 or 1.
88 EXAMPLES::
90 Overlaying a TextView with a UserView to do additional drawing on top, while still allowing the interaction with the text:
92 code::
94 var text, canvas;
95 text = TextView().string_("Hello world!").keyDownAction_({canvas.refresh});
96 canvas = UserView().acceptsMouse_(false).drawFunc_({
97     var b = canvas.bounds();
98     var str = text.string;
99     Pen.translate( b.center.x, b.center.y );
100     Pen.fillColor = text.palette.baseText.alpha_(0.1);
101     str.do { |c|
102         var x = 40.0.rand + 10.0;
103         var r = c.asString.bounds.center_(0@0);
104         Pen.push;
105         Pen.rotate( 1.0.rand );
106         Pen.translate( rand2(-0.3,0.3) * b.width, rand2(-0.3,0.3) * b.width );
107         Pen.scale( x, x );
108         Pen.stringCenteredIn(c.asString, r);
109         Pen.pop;
110     }
111 }).refresh;
112 w=Window().layout_( StackLayout( canvas, text ).mode_(\stackAll) ).front;