:: JGOODIES :: Forms

:: Reference :: Layout Variables ::

Layout variables are used to use improve the design consistency.

Predefined and custom variables start with a dollar sign ($) and can be surrounded by braces ({ … }). For example $lcgap, ${label-component-gap}, $myvariable1, ${myvariable1}, ${my variable with white space}. If surrounded by braces the variable name can contain hyphens and white-space.

variable ::= $<alphanumeric> | ${<string>}

Predefined Variables

Predefined variables provide access to logical sizes in the Forms' string language. Their values are requested from the current Layout Style.
columnVariable ::= ${label-component-gap}  | $lcgap    | $lcg
                   ${related-gap}          | $rgap     | $rg
                   ${unrelated-gap}        | $ugap     | $ug
                   $button                 | $b
                   ${growing-button}       | $gb
                   ${dialog-margin}        | $dmargin  | $dm
                   ${tabbed-dialog-margin} | $tdmargin | $tdm
                   $glue

rowVariable ::=    ${related-gap}          | $rgap     | $rg
                   ${unrelated-gap}        | $ugap     | $ug
                   ${narrow-line-gap}      | $nlgap    | $nlg
                   ${line-gap}             | $lgap     | $lg
                   ${paragaph-gap}         | $pgap     | $pg
                   ${dialog-margin}        | $dmargin  | $dm
                   ${tabbed-dialog-margin} | $tdmargin | $tdm
                   $button                 | $b
                   $glue

Custom Variables

Custom variables further reduce the costs to achieve consistent design in teams and when implementing many screens. Let's say you want right-aligned labels in all your screens. You would repeat "right:pref" in every individual FormLayout construction. If you introduce a custom variable $label by setting it in the shared root LayoutMap you could later refer to it in the FormLayout constructor
LayoutMap.getRoot().columnPut("label", "right:pref");

new FormLayout("$label, $lcgap, pref", …);
	
If you setup custom variables, you can honor the platform, locale, and other context information. Let's say you want to ensure a consistent width of all label columns using "right:[85dlu,pref]". The 85dlu will likely waste space in Chinese.
String width = <compute width per Locale>; // e.g. "85dlu" vs. "25dlu"
LayoutMap.getRoot().columnPut("label", "right:[" + width + ", pref]");
	

Overriding and Changing Variable Values

You can change a predefined variable value globally or locally. Layout variable values are requested from LayoutMaps. There's a shared root LayoutMap available via LayoutMap.getRoot() that is used by default by the FormLayout constructor and other methods that use encoded column and row specifications.

If you re-define a variable value in the root LayoutMap, the change will affect all layouts that use the default LayoutMap. For example: LayoutMap.getRoot().columnPut("lcgap", "1dlu");.

As an alternative you can create a child LayoutMap and use this change locally.

LayoutMap childMap = new LayoutMap();   // has the root map as parent
childMap.columnPut("lcgap", "1dlu");
new FormLayout("&hellip", "&hellip", childMap);     // uses the child map

Examples

LayoutMap map = LayoutMap.getRoot();
map.columnPut("label", "right:[85dlu,pref]");
map.rowPut   ("table", "fill:100dlu:grow");

new FormLayout("right:[85dlu,pref], 3dlu, pref, 3dlu, 50dlu",      // no var
               "p, 3dlu, p, 3dlu, fill:100dlu:grow");
               
new FormLayout("right:[85dlu,pref], $lcgap, pref, $rgap, $button", // vars
               "p, $lgap, p, $lgap, fill:100dlu:grow");
               
new FormLayout("right:[85dlu,pref], $lcg, pref, $rg, $b",          // short
               "p, $lg, p, $lg, fill:100dlu:grow");
               
new FormLayout("$label, $lcgap, pref, $rgap, $button",             // custom vars
               "p, $lgap, p, $lgap, $table");
(c) 2009 JGoodies