package Ġcom . k ne el awk . pack vul can . ui . util . layout Ċ Ċ import Ġandroidx . compose . foundation . layout . Arrange ment Ċ import Ġandroidx . compose . foundation . layout . Layout Scope Marker Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . Immutable Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . layout .* Ċ import Ġandroidx . compose . ui . unit .* Ċ Ċ /** Ċ Ġ* ĠA Ġlayout Ġcomp osable Ġfor Ġcreating Ġform Ġlayouts . ĠThis Ġis Ġsimilar Ġto Ġa Ġgrid , Ġbut Ġwith Ġsome Ġmodifications . Ċ Ġ*/ Ċ @ Composable Ċ inline Ġfun ĠForm ( ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠ Ġsection Header Alignment : ĠAlignment . Horizontal Ġ= ĠAlignment . Start , ĊĠĠĠ Ġlabel Alignment : ĠAlignment Ġ= ĠAlignment . Center Start , ĊĠĠĠ Ġfield Alignment : ĠAlignment . Vertical Ġ= ĠAlignment . Center Vert ically , ĊĠĠĠ Ġconfigure Alignment : ĠAlignment Ġ= ĠAlignment . Center End , ĊĠĠĠ Ġrow Arrange ment : ĠArrange ment . Vertical Ġ= ĠArrange ment . Top , ĊĠĠĠ Ġcolumn Spacing : ĠD p Ġ= Ġ 0 . dp , ĊĠĠĠ Ġcontent : Ġ@ Composable ĠForm Scope . () Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġval Ġmeasure Policy Ġ= Ġremember ( ĊĠĠĠĠĠĠĠ Ġsection Header Alignment , Ġlabel Alignment , Ġfield Alignment , Ġconfigure Alignment , Ġrow Arrange ment , Ġcolumn Spacing ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠForm Measure Policy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsection Header Alignment , Ġlabel Alignment , Ġfield Alignment , Ġconfigure Alignment , Ġrow Arrange ment , Ġcolumn Spacing ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ ĠLayout ( ĊĠĠĠĠĠĠĠ Ġcontent Ġ= Ġ{ ĠForm Scope Instance . content () Ġ}, ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier , ĊĠĠĠĠĠĠĠ Ġmeasure Policy Ġ= Ġmeasure Policy ĊĠĠĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠScope Ġfor Ġthe Ġchildren Ġof Ġ[ Form ]. Ċ Ġ*/ Ċ @ Layout Scope Marker Ċ @ Immutable Ċ interface ĠForm Scope Ġ{ ĊĠĠĠ Ġfun ĠModifier . form Section (): ĠModifier ĊĊĠĠĠ Ġfun ĠModifier . form Label (): ĠModifier ĊĊĠĠĠ Ġfun ĠModifier . form Field (): ĠModifier ĊĊĠĠĠ Ġfun ĠModifier . form Configure (): ĠModifier Ċ } Ċ Ċ /* Ċ Ġ* Ġ== ĠImplementation Ġ== Ċ Ġ*/ Ċ Ċ object ĠForm Scope Instance Ġ: ĠForm Scope Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠModifier . form Section () Ġ= Ġthis . then ( Form Parent Data . SECTION ) ĊĊĠĠĠ Ġoverride Ġfun ĠModifier . form Label () Ġ= Ġthis . then ( Form Parent Data . LABEL ) ĊĊĠĠĠ Ġoverride Ġfun ĠModifier . form Field () Ġ= Ġthis . then ( Form Parent Data . FIELD ) ĊĊĠĠĠ Ġoverride Ġfun ĠModifier . form Configure () Ġ= Ġthis . then ( Form Parent Data . CONFIGURE ) Ċ } Ċ Ċ private Ġenum Ġclass ĠForm Parent Data Ġ: ĠParent Data Modifier Ġ{ ĊĠĠĠ ĠSECTION , ĠLABEL , ĠFIELD , ĠCONFIG URE ; ĊĊĠĠĠ Ġoverride Ġfun ĠD ensity . modify Parent Data ( parent Data : ĠAny ?): ĠAny ? Ġ= Ġthis @ Form Parent Data Ċ } Ċ Ċ private Ġsealed Ġclass ĠMe as ur able Form Line Ġ{ ĊĠĠĠ Ġdata Ġclass ĠSection Header ( val Ġheader : ĠMe as ur able ) Ġ: ĠMe as ur able Form Line () ĊĠĠĠ Ġdata Ġclass ĠField Line ( val Ġlabel : ĠMe as ur able ?, Ġval Ġfield : ĠMe as ur able ?, Ġval Ġconfigure : ĠMe as ur able ?) Ġ: ĊĠĠĠĠĠĠĠ ĠMe as ur able Form Line () Ċ } Ċ Ċ private Ġsealed Ġclass ĠPlace able Form Line Ġ{ ĊĠĠĠ Ġabstract Ġval Ġheight : ĠInt ĊĊĠĠĠ Ġdata Ġclass ĠSection Header ( val Ġheader : ĠPlace able ) Ġ: ĠPlace able Form Line () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġheight Ġ= Ġheader . height ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠField Line ( val Ġlabel : ĠPlace able ?, Ġval Ġfield : ĠPlace able ?, Ġval Ġconfigure : ĠPlace able ?) Ġ: ĊĠĠĠĠĠĠĠ ĠPlace able Form Line () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġheight Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel ?. height Ġ?: Ġthrow ĠIllegalStateException (" label Ġis Ġnull "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield ?. height Ġ?: Ġthrow ĠIllegalStateException (" field Ġis Ġnull "), Ġconfigure ?. height Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠForm Measure Policy ( ĊĠĠĠ Ġprivate Ġval Ġsection Header Alignment : ĠAlignment . Horizontal , Ġprivate Ġval Ġlabel Alignment : ĠAlignment , ĊĠĠĠ Ġprivate Ġval Ġfield Alignment : ĠAlignment . Vertical , Ġprivate Ġval Ġconfigure Alignment : ĠAlignment , ĊĠĠĠ Ġprivate Ġval Ġrow Arrange ment : ĠArrange ment . Vertical , Ġprivate Ġval Ġcolumn Spacing : ĠD p Ċ ) Ġ: ĠMeasure Policy Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠMeasure Scope . measure ( meas ur ables : ĠList < Meas ur able >, Ġconstraints : ĠConstraints ): ĠMeasure Result Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCollect Ġthe Ġmeas ur ables Ġinto Ġform Ġlines ĊĠĠĠĠĠĠĠ Ġval Ġmeas ur able Form Lines Ġ= Ġmutable ListOf < Meas ur able Form Line >() ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Field Line : ĠMe as ur able Form Line . Field Line ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( child Ġin Ġmeas ur ables ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Data Ġ= Ġchild . parent Data Ġas ? ĠForm Parent Data Ġ?: Ġthrow ĠIllegalStateException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Child Ġ$ child Ġmissing Ġform Ġparent Ġdata . ĠPlease Ġsupply Ġa Ġmodifier Ġof Ġone Ġof : Ġform Section (), Ġform Label (), Ġform Field (), Ġor Ġform Configure ()" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( parent Data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠForm Parent Data . SECTION Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcomplete Ġthe Ġprevious Ġfield Ġline ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Field Line Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeas ur able Form Lines . add ( current Field Line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Field Line Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeas ur able Form Lines . add ( Meas ur able Form Line . Section Header ( child )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠForm Parent Data . LABEL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Field Line Ġ= Ġif Ġ( current Field Line Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Field Line . label Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe Ġfield Ġline Ġis Ġfrom Ġa Ġprevious Ġline Ġand Ġneeds Ġto Ġbe Ġcompleted ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeas ur able Form Lines . add ( current Field Line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMe as ur able Form Line . Field Line ( child , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Field Line . copy ( label Ġ= Ġchild ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMe as ur able Form Line . Field Line ( child , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠForm Parent Data . FIELD Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Field Line Ġ= Ġif Ġ( current Field Line Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Field Line . field Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe Ġfield Ġline Ġis Ġfrom Ġa Ġprevious Ġline Ġand Ġneeds Ġto Ġbe Ġcompleted ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeas ur able Form Lines . add ( current Field Line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMe as ur able Form Line . Field Line ( null , Ġchild , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Field Line . copy ( field Ġ= Ġchild ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMe as ur able Form Line . Field Line ( null , Ġchild , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠForm Parent Data . CONFIGURE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Field Line Ġ= Ġif Ġ( current Field Line Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Field Line . configure Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe Ġfield Ġline Ġis Ġfrom Ġa Ġprevious Ġline Ġand Ġneeds Ġto Ġbe Ġcompleted ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeas ur able Form Lines . add ( current Field Line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMe as ur able Form Line . Field Line ( null , Ġnull , Ġchild ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Field Line . copy ( configure Ġ= Ġchild ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMe as ur able Form Line . Field Line ( null , Ġnull , Ġchild ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠComplete Ġthe Ġfinal Ġfield Ġline ĊĠĠĠĠĠĠĠ Ġif Ġ( current Field Line Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeas ur able Form Lines . add ( current Field Line ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcolumn Spacing Px Ġ= Ġcolumn Spacing . round To Px () ĊĊĠĠĠĠĠĠĠ Ġval Ġform Lines Ġ= ĠarrayOf Null s < Place able Form Line >( meas ur able Form Lines . size ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠMeasure Ġlabel Ġcolumn Ġand Ġsection Ġheaders ĊĠĠĠĠĠĠĠ Ġvar Ġsection Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġline Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġlabel Width Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġmeas ur able Form Lines . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġline Ġ= Ġmeas ur able Form Lines [ i ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMe as ur able Form Line . Field Line Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMeasure Ġthe Ġlabel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlabel Meas ur able Ġ= Ġline . label Ġ?: Ġthrow ĠIllegalStateException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Form Ġline Ġ$ i Ġmissing Ġlabel . ĠPlease Ġprovide Ġa Ġlabel Ġby Ġsupply ing Ġa ĠModifier Ġof Ġform Label () Ġto Ġone Ġof Ġthis Ġline 's Ġcontents ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlabel Ġ= Ġlabel Meas ur able . measure ( constraints . copy ( min Width Ġ= Ġ 0 , ĠminHeight Ġ= Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Lines [ i ] Ġ= ĠPlace able Form Line . Field Line ( label , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Width Ġ= Ġmax Of ( label Width , Ġlabel . width ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMe as ur able Form Line . Section Header Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMeasure Ġsection Ġheaders Ġhere Ġtoo ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheader Ġ= Ġline . header . measure ( constraints . copy ( min Width Ġ= Ġ 0 , ĠminHeight Ġ= Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Lines [ i ] Ġ= ĠPlace able Form Line . Section Header ( header ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsection Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠMeasure Ġthe Ġconfigure Ġwidgets ĊĠĠĠĠĠĠĠ Ġvar Ġconfigure Width Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġmeas ur able Form Lines . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Ġ= Ġmeas ur able Form Lines [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line Ġis ĠMe as ur able Form Line . Field Line ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMeasure Ġthe Ġconfigure Ġwidget Ġif Ġit Ġexists ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line . configure Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconfigure Ġ= Ġline . configure . measure ( constraints . copy ( min Width Ġ= Ġ 0 , ĠminHeight Ġ= Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġshould Ġalways Ġbe Ġa ĠField Line ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Line Ġ= Ġform Lines [ i ] Ġas ĠPlace able Form Line . Field Line ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Lines [ i ] Ġ= Ġold Line . copy ( configure Ġ= Ġconfigure ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure Width Ġ= Ġmax Of ( configure Width , Ġconfigure . width ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠMeasure Ġthe Ġfields ĊĠĠĠĠĠĠĠ Ġval Ġfield 1 Width Ġ= Ġconstraints . maxWidth Ġ- Ġlabel Width Ġ- Ġcolumn Spacing Px Ġ- Ġconfigure Width Ġ- Ġcolumn Spacing Px ĊĠĠĠĠĠĠĠ Ġval Ġfield 2 Width Ġ= Ġconstraints . maxWidth Ġ- Ġlabel Width Ġ- Ġcolumn Spacing Px ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġmeas ur able Form Lines . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Ġ= Ġmeas ur able Form Lines [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line Ġis ĠMe as ur able Form Line . Field Line ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfield Meas ur able Ġ= Ġline . field Ġ?: Ġthrow ĠIllegalStateException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Form Ġline Ġ$ i Ġmissing Ġfield . ĠPlease Ġprovide Ġa Ġfield Ġby Ġsupply ing Ġa ĠModifier Ġof Ġform Field () Ġto Ġone Ġof Ġthis Ġline 's Ġcontents ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠmaxWidth Ġ= Ġif Ġ( line . configure Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield 1 Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield 2 Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġforce Ġthe Ġfield Ġto Ġbe Ġthe Ġcorrect Ġwidth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfield Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Meas ur able . measure ( constraints . copy ( min Height Ġ= Ġ 0 , ĠminWidth Ġ= ĠmaxWidth , ĠmaxWidth Ġ= ĠmaxWidth )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġshould Ġalways Ġbe Ġa ĠField Line ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Line Ġ= Ġform Lines [ i ] Ġas ĠPlace able Form Line . Field Line ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Lines [ i ] Ġ= Ġold Line . copy ( field Ġ= Ġfield ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠLayout Ġthe Ġcomponents ĊĠĠĠĠĠĠĠ Ġval Ġlayout Width Ġ= Ġconstraints . maxWidth ĊĠĠĠĠĠĠĠ Ġval Ġlayout Height Ġ= Ġmax Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġform Lines . sum Of Ġ{ Ġit !!. height Ġ} Ġ+ Ġ( row Arrange ment . spacing Ġ* Ġ( section Count Ġ+ Ġline Count Ġ- Ġ 1 )). round To Px (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconstraints . min Height ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġlayout ( layout Width , Ġlayout Height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Height s Ġ= ĠInt Array ( form Lines . size ) Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Lines [ index ] !!. height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Positions Ġ= ĠInt Array ( form Lines . size ) Ġ{ Ġ 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( row Arrange ment ) Ġ{ Ġarrange ( layout Height , Ġline Height s , Ġline Positions ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġform Lines . forEach Indexed Ġ{ Ġindex , Ġline Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Y Ġ= Ġline Positions [ index ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( line ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPlace able Form Line . Field Line Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlabel Ġ= Ġline . label !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlabel Position Ġ= Ġlabel Alignment . align ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInt Size ( label . width , Ġlabel . height ), ĠInt Size ( label Width , Ġline . height ), ĠLayout Direction . L tr ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel . place ( label Position . x , Ġline Y Ġ+ Ġlabel Position . y ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfield Ġ= Ġline . field !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfield Position Ġ= Ġfield Alignment . align ( field . height , Ġline . height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . place ( label Width Ġ+ Ġcolumn Spacing Px , Ġline Y Ġ+ Ġfield Position ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline . configure ?. let Ġ{ Ġconfigure Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconfigure Position Ġ= Ġconfigure Alignment . align ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInt Size ( configure . width , Ġconfigure . height ), ĠInt Size ( configure Width , Ġline . height ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayout Direction . L tr ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure . place ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraints . maxWidth Ġ- Ġconfigure Width Ġ+ Ġconfigure Position . x , Ġline Y Ġ+ Ġconfigure Position . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPlace able Form Line . Section Header Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheader Ġ= Ġline . header ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheader Position Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsection Header Alignment . align ( header . width , Ġconstraints . maxWidth , ĠLayout Direction . L tr ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader . place ( header Position , Ġline Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ