CLASS:: StaticText
summary:: A view displaying non-editable text
categories:: GUI>Views

DESCRIPTION::
A view displaying non-editable text


CLASSMETHODS::

PRIVATE:: key



INSTANCEMETHODS::

SUBSECTION:: Data

METHOD:: string
	The text displayed by the view.

	argument::
		A String.

METHOD:: object
	If link::#-setBoth:: is true, setting this variable also sets link::#-string:: to the value interpreted link::Classes/Object#-asString#as String::.

	argument::
		Any object, typically one which makes sense to display as a string, such as a Float.

METHOD:: setBoth
	A variable stating whether setting link::#-object:: will also set link::#-string::.

	argument::
		A Boolean.

SUBSECTION:: Appearance

METHOD:: align
	The alignment of the displayed text. See link::Reference/gui_alignments:: for possible values.

METHOD:: font
	The font used to display the text.

	argument::
		A Font.

METHOD:: stringColor
	The color used to display the text.

	argument::
		A Color.

METHOD:: background
	Setting this variable colors the whole area occupied by the view under the text with the given color.

	argument::
		A Color.


EXAMPLES::

subsection:: Basic Example

code::
(
w = Window.new.front;
a = StaticText(w, Rect(10, 10, 200, 20));
a.string = "Rolof's Rolex";
)

// adjust look , alignment and content
a.background=Color.grey;
a.align = \center;
a.font = Font("Monaco", 11);
a.string = "Your Rolex";
::


subsection:: Monitoring Values in a Synth

code::
(
var w, a, r, b, q;
w = Window("Frequency Monitor", Rect(200, Window.screenBounds.height - 200, 300, 150)).front;

a = StaticText(w, Rect(45, 10, 200, 20)).background_(Color.rand);
a.string = " Current Frequency ";

Button.new(w, Rect(45, 70, 200, 20)).states_([[ "close", Color.black, Color.rand ]]).action_({ w.close });

s.waitForBoot({

    b = Bus.new(\control, 0, 1);

    q = SynthDef(\Docs_FreqMonitor, {
		var freq, snd;
        freq = LFNoise0.ar(2, 400, 650);
        snd = SinOsc.ar(freq, 0, 0.2);
        Out.ar(0, snd);
        Out.kr(b.index, freq); // output the frequency to a control bus
    }).play;

    r = Routine {
		{
			// Set the value of the StaticText to the value in the control bus.
			// Setting GUI values is asynchronous, so you must use .defer in the system clock.
			// Also you must check if the window is still open, since Routine will continue for at least
			// one step after you close the window.
			b.get({ |v|
				{
					if(w.isClosed.not) {
						a.string = " Current Frequency: " ++ v.round(0.01)
					}
				}.defer
			});

			0.01.wait;
		}.loop

    }.play
});

CmdPeriod.doOnce({ w.close });
w.onClose = { r.stop; q.free; b.free }; // clean up if the window closes
)
::


subsection:: Dynamic Text

code::
(
w = Window.new.front;
w.view.background=Color.white;
a = Array.fill(20, { StaticText(w, Rect(w.bounds.extent.x.rand, w.bounds.extent.y.rand, 160, 16))
	.string_("Rolof's Rolex".scramble)
	.align_(\center)
	.stringColor_(Color.rand)
	.font_(Font([
		"Helvetica-Bold",
		"Helvetica",
		"Monaco",
		"Arial",
		"Gadget",
		"MarkerFelt-Thin"
	].choose, 11))
});

r = {
	inf.do { |i|
		thisThread.randSeed_(1284);
		a.do { |item|
			// setting GUI values is asynchronous, so you must use .defer
			{
				item.bounds = Rect(
					5 + w.bounds.extent.x.rand * abs(cos(i * 0.01)),
					w.bounds.extent.y.rand * sin(i * 0.01),
					160,
					20
				)
			}.defer;
		};
		0.15.wait;
	}
}.fork;
CmdPeriod.doOnce({ w.close });
w.onClose_({ r.stop });
)
::
