SCHLayoutView a container that automatically places widgets in rows
Inherits from: Object : SCView : SCContainerView : SCLayoutView
SCHLayoutView automatically arranges its sub-views in horizontal order, expanding their height to the bounds of the SCHLayoutView. Only the bounds.width of the sub-view is relevant. Its abstract superclass, SCLayoutView, provides some important formatting methods.
See also: SCVLayoutView, SCCompositeView
Some Important Issues Regarding SCHLayoutView
SCHLayoutView is designed mainly for grouping and placing widgets. While you can set it to accept key strokes, it does not itself accept mouse clicks or drags.
SCHLayoutView responds to the minWidth and maxWidth properties in its child views. This is useful when resize is set to 2, 5, or 8. See examples below.
Creation / Class Methods
*new (parent, bounds)
parent - The parent view.
bounds - An instance of Rect, or a Point indicating width@height.
(
w = Window.new;
v = HLayoutView(w, Rect(10,10,300,300) );
Array.fill( 10, { arg i;
Slider( v, Rect(0,0,20,75) ).value_(i / 10)
});
w.front;
)
Examples
// Childview height fills the View automatically
(
q = 10;
w = Window.new;
h = HLayoutView(w,Rect(0,0,300,300));
Array.fill(q,{ arg i;
Slider(h,Rect(0,0,20,75)).value_(i / q)
});
h.background_(Color.rand);
w.front
)
// Stretching the layout view. Slider height fills the View automatically.
(
q = 8;
w = Window.new;
h = HLayoutView(w,Rect(0,0,300,300));
h.background = Color.rand;
h.resize = 5; // elastic
Array.fill(q,{ arg i;
var s;
s = Slider(h,Rect(0,0,20,75)).background_(Color.grey.alpha_(0.4));
s.value = i / q;
s
});
StaticText(h, Rect(0,0,105,20)).background_(Color.rand).string_(" Some Example\n Text");
w.front
)
// Stretching the layout view and the contents.
// If all the contents are elastic, the widths of the contents are perfectly divided up:
// in this example, the StaticText is not elastic in order to preserv its width.
(
q = 10;
w = Window.new;
h = HLayoutView(w,Rect(0,0,300,300));
h.resize = 5; // elastic
h.background = Color.rand;
Array.fill(q,{ arg i;
var s;
s = Slider(h,Rect(0,0,20,75));
s.resize = 5; // elastic
s.value = i / q;
s
});
StaticText(h, Rect(0,0,105,20)).background_(Color.rand).string_(" Some Example\n Text");
w.front
)
// set minWidth on contents
// beware that if the layout view width is smaller than the combined width of all the contents,
// things might disappear when you try to handle them with the mouse.
(
q = 5;
w = Window.new;
h = HLayoutView(w,Rect(0,0,300,300));
h.background = Color.rand;
h.resize = 5; // elastic
Array.fill(q,{ arg i;
var s;
s = Slider(h,Rect(0,0,20,75));
s.value = i / 5;
if(i < 2,{
s.resize = 5; // some elastic
s.setProperty(\minWidth,20);
},{
s.resize = 1; // some not elastic
});
s
});
StaticText(h, Rect(0,0,105,20)).background_(Color.rand).string_(" Some Example\n Text");
w.front
)
(
q = 5;
w = Window.new;
h = HLayoutView(w,Rect(0,0,300,300));
h.resize = 5; // elastic
h.background = Color.rand;
Array.fill(q,{ arg i;
var s;
s = Slider(h,Rect(0,0,20,75));
s.value = i / 5;
s.resize = 5;
s.setProperty(\minWidth,20);
s.setProperty(\maxWidth,40);
s
});
w.front
)
// Text flows
(
q = 5;
w = Window.new;
h = HLayoutView(w,Rect(0,0,300,300));
h.resize = 5; // elastic
Array.fill(q,{ arg i;
var s;
s = StaticText(h,120@20).string_("Some short text which wraps around");
s.resize = 5;
s.setProperty(\minWidth,10);
s.setProperty(\maxWidth,120);
// not working
s.setProperty(\maxHeight,10);
s.setProperty(\minHeight,10);
s.background = Color.white;
s
});
w.front
)
// Spacing
(
q = 10;
w = Window.new;
h = HLayoutView(w,Rect(0,0,300,300));
h.setProperty(\spacing,0);
Array.fill(q,{
Slider(h,Rect(0,0,20,75))
});
w.front
)