SwingOSC – Java-based GUI classes

This class is meant as an emulation of SCHLayoutView. last mod: 17-jul-09 sciss
Also refer to JSCView for different behaviour affecting all widgets

JSCHLayoutView

Note: please use the abstraction layer HLayoutView if possible!

A container view that lays out all its children horizontally from left to right. For the vertical version, see JSCVLayoutView.

(
q = 10;
w = JSCWindow.new;

h = JSCHLayoutView(w,Rect(0,0,300,300));

Array.fill(q,{ arg i;
    JSCRangeSlider(h,Rect(0,0,20,75)).hi_(i / q); // .step_( 0.1 );
});

w.front
)

elastic

// note: children can never exceed the bounds
// of their parent container in swing !!
(
q = 10;
w = JSCWindow.new;

h = JSCHLayoutView(w,Rect(0,0,300,300));
h.background = Color.red(alpha:0.2);
h.resize = 5; // elastic
Array.fill(q,{  arg i;
    var s;
    s = JSCRangeSlider(h,Rect(0,0,20,75)).hi_( i / q );
    s
});

w.front
)

//Contents are elastic
(
q = 10;
w = JSCWindow.new;
h = JSCHLayoutView(w,Rect(0,0,300,300));
h.background = Color.red(alpha:0.2);
h.resize = 5; // elastic
Array.fill(q,{  arg i;
    var s;
    s = JSCRangeSlider(h,Rect(0,0,20,75)).hi_( i / q );
    s.resize = 5; // elastic
    s
});

w.front
)

//set minWidth on contents
(
q = 5;
w = JSCWindow.new;

h = JSCHLayoutView(w,Rect(0,0,300,300));
h.background = Color.red(alpha:0.2);
h.resize = 5; // elastic

Array.fill(q,{  arg i;
    var s;
    s = JSCRangeSlider(h,Rect(0,0,20,75)).hi_( i / 5 );
    if(i < 2,{
        s.resize = 5; // some elastic
        s.setProperty(\minWidth,20);
    },{
        s.resize = 1; // some not elastic
    });
    s
});

w.front
)

(
q = 5;
w = JSCWindow.new;

h = JSCHLayoutView(w,Rect(0,0,300,300));
h.background = Color.red(alpha:0.2);
h.resize = 5; // elastic

Array.fill(q,{  arg i;
	var s;
	s = JSCRangeSlider(h,Rect(0,0,20,75));
	
	s.hi = i / 5;
	s.resize = 5;
	s.setProperty(\minWidth,20);
	s.setProperty(\maxWidth,40);
	s
});

w.front
)

Text flows

Note: JSCStaticText doesn't do line wrapping as its cocoa counterpart!

(
q = 5;
w = JSCWindow.new;

h = JSCHLayoutView(w,Rect(0,0,300,300));
h.resize = 5; // elastic

Array.fill(q,{  arg i;
    var s;
    s =     JSCStaticText(h,120@20).string_("abcdefg");

    s.resize = 5;
    s.setProperty(\minWidth,10);
    s.setProperty(\maxWidth,80);

    // not working
    s.setProperty(\maxHeight,10);
    s.setProperty(\minHeight,10);

    s.background = Color.white;
    s
});

w.front
)

spacing

Default spacing between components is 4 pixels. You can alter this value but setting the 'spacing' property:

(
q = 10;
w = JSCWindow.new;

h = JSCHLayoutView(w,Rect(0,0,300,300));
h.spacing = 0;  // no padding

Array.fill(q,{ 
    JSCRangeSlider(h,Rect(0,0,20,75))
});

w.front
)

h.spacing = 8;