package Ġtriple k lay . ui . layout Ċ Ċ import Ġe uk lid . f . Dimension Ċ import Ġe uk lid . f . ID imension Ċ import Ġe uk lid . f . Rectangle Ċ import Ġtriple k lay . ui . Container Ċ import Ġtriple k lay . ui . Element Ċ import Ġtriple k lay . ui . Layout Ċ import Ġtriple k lay . ui . Style Ċ Ċ /** Ċ Ġ* ĠArrange s Ġup Ġto Ġ 5 Ġelements , Ġone Ġcentral Ġand Ġone Ġon Ġeach Ġedge . ĠAdded Ġelements Ġmust Ġhave Ġa Ċ Ġ* Ġconstraint Ġfrom Ġthe Ġclass ' Ġlisting Ġ( e . g . Ġ[ Border Layout . CENTER ]), Ġwhich Ġdetermines Ġthe Ċ Ġ* Ġposition Ġin Ġthe Ġlayout Ġand Ġstretch ing . ĊĊ Ġ* Ċ Ġ* ĠThis Ġis Ġhow Ġthe Ġlayout Ġlooks . ĠNote Ġnorth / south Ġand Ġeast / west Ġbehavior Ġis Ġnot Ġquite Ġsymmetric Ċ Ġ* Ġbecause Ġeast Ġand Ġwest Ġfit Ġbetween Ġthe Ġbottom Ġof Ġthe Ġnorth Ġand Ġtop Ġof Ġthe Ġsouth : ĊĊ Ġ* Ġ< pre > Ċ Ġ* Ġ| ---------------- -------------| Ċ Ġ* Ġ| ĠĠĠĠĠĠĠĠĠĠĠ Ġnorth ĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ċ Ġ* Ġ| ---------------- -------------| Ċ Ġ* Ġ| ĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġ| Ċ Ġ* Ġ| ĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġ| Ċ Ġ* Ġ| ĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġ| Ċ Ġ* Ġ| Ġwest Ġ| ĠĠĠ Ġcenter ĠĠĠĠ Ġ| Ġeast Ġ| Ċ Ġ* Ġ| ĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġ| Ċ Ġ* Ġ| ĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġ| Ċ Ġ* Ġ| ---------------- -------------| Ċ Ġ* Ġ| ĠĠĠĠĠĠĠĠĠĠĠ Ġsouth ĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ċ Ġ* Ġ| ---------------- -------------| Ċ </ pre > Ġ* ĊĊ Ġ* ĠWhen Ġan Ġelement Ġis Ġnot Ġst ret ched , Ġit Ġo be ys Ġthe Ġ[ triple play . ui . Style . H Align ] Ġand Ġ[ Ġ] Ġbindings . Ċ Ġ*/ Ċ class ĠBorderLayout Ċ /** Ċ Ġ* ĠConstructs Ġa Ġnew Ġborder Ġlayout Ġwith Ġthe Ġspecified Ġhorizontal Ġand Ġvertical Ġg aps Ġbetween Ċ Ġ* Ġcomponents . Ċ Ġ*/ Ċ ( ĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġhorizontal Ġgap Ġbetween Ġcomponents . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġh gap : ĠFloat , ĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġvertical Ġgap Ġbetween Ġcomponents . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġv gap : ĠFloat ) Ġ: ĠLayout () Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠImplements Ġthe Ġconstraints . ĠCall ers Ġdo Ġnot Ġneed Ġto Ġconstruct Ġinstances , Ġbut Ġinstead Ġuse Ġthe ĊĠĠĠĠ Ġ* Ġdeclared Ġconstants Ġand Ġselect Ġor Ġde select Ġthe Ġstretch ing Ġoption . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠConstraint ( private Ġval Ġ_ pos : ĠPosition , Ġval Ġ_ stretch : ĠBoolean ) Ġ: ĠLayout . Constraint () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġa Ġnew Ġconstraint Ġspecifying Ġthe Ġsame Ġposition Ġas Ġthis , Ġand Ġwith Ġstretch ing . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġst ret ched (): ĠConstraint Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ_ pos . stret ched ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġa Ġnew Ġconstraint Ġspecifying Ġthe Ġsame Ġposition Ġas Ġthis , Ġand Ġwith Ġno Ġstretch ing . ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġelement 's Ġpreferred Ġsize Ġwill Ġbe Ġused Ġand Ġan Ġappropriate Ġalignment . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġun stret ched (): ĠConstraint Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ_ pos . un stret ched ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġadjust ( pref : ĠID imension , Ġboundary : ĠRectangle ): ĠDimension Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdim Ġ= ĠDimension ( pref ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(_ stretch ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(_ pos . orient Ġand Ġ 1 Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdim . width Ġ= Ġboundary . width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(_ pos . orient Ġand Ġ 2 Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdim . height Ġ= Ġboundary . height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdim . width Ġ= Ġmin Of ( dim . width , Ġboundary . width ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdim . height Ġ= Ġmin Of ( dim . height , Ġboundary . height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdim ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġalign ( origin : ĠFloat , Ġoffset : ĠFloat ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ(_ stretch ) Ġorigin Ġelse Ġorigin Ġ+ Ġoffset ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstructs Ġa Ġnew Ġborder Ġlayout Ġwith Ġthe Ġspecified Ġgap Ġbetween Ġcomponents . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( g aps : ĠFloat Ġ= Ġ 0 f ) Ġ: Ġthis ( g aps , Ġg aps ) ĊĊĠĠĠ Ġoverride Ġfun Ġcompute Size ( elems : ĠContainer <* >, Ġhint X : ĠFloat , Ġhint Y : ĠFloat ): ĠDimension Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠS lots ( elems ). compute Size ( hint X , Ġhint Y ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlayout ( elems : ĠContainer <* >, Ġleft : ĠFloat , Ġtop : ĠFloat , Ġwidth : ĠFloat , Ġheight : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhalign Ġ= Ġresolve Style ( elems , ĠStyle . H ALIGN ) ĊĠĠĠĠĠĠĠ Ġval Ġvalign Ġ= Ġresolve Style ( elems , ĠStyle . VAL IGN ) ĊĠĠĠĠĠĠĠ Ġval Ġslots Ġ= ĠS lots ( elems ) ĊĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= ĠRectangle ( left , Ġtop , Ġwidth , Ġheight ) ĊĠĠĠĠĠĠĠ Ġslots . layout Ns ( Position . NORTH , Ġhalign , Ġbounds ) ĊĠĠĠĠĠĠĠ Ġslots . layout Ns ( Position . SO UTH , Ġhalign , Ġbounds ) ĊĠĠĠĠĠĠĠ Ġslots . layout We ( Position . WEST , Ġvalign , Ġbounds ) ĊĠĠĠĠĠĠĠ Ġslots . layout We ( Position . EAST , Ġvalign , Ġbounds ) ĊĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= ĠPosition . CENTER ĊĠĠĠĠĠĠĠ Ġvar Ġdim : ĠID imension Ġ= Ġslots . size ( p , Ġbounds . width , Ġbounds . height ) Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġslots . constraint ( p ) ĊĠĠĠĠĠĠĠ Ġdim Ġ= Ġc . adjust ( dim , Ġbounds ) ĊĠĠĠĠĠĠĠ Ġslots . setBounds ( p , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . align ( bounds . x , Ġhalign . offset ( dim . width , Ġbounds . width )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . align ( bounds . y , Ġvalign . offset ( dim . height , Ġbounds . height )), Ġdim ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠS lots Ġinternal Ġconstructor ( elems : ĠContainer <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġelements : ĠMutable Map < Position , ĠElement <* >> Ġ= ĠHashMap () ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( elem Ġin Ġelems ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! elem . isVisible ) Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp Ġ= ĠPosition . position Of ( elem . constraint () !! ) Ġ?: Ġthrow ĠIllegalStateException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Element Ġwith Ġa Ġnon - Border Layout Ġconstraint : Ġ" Ġ+ Ġelem ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexisting Ġ= Ġelements . put ( p , Ġelem ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( existing Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Multiple Ġelements : Ġ" Ġ+ Ġelem Ġ+ Ġ" Ġand Ġ" Ġ+ Ġexisting Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġwith Ġthe Ġsame ĠBorderLayout Ġconstraint : Ġ" Ġ+ Ġp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġcompute Size ( hint X : ĠFloat , Ġhint Y : ĠFloat ): ĠDimension Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġw ce Ġ= Ġcount (* W CE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġns Size Ġ= ĠDimension () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( pos Ġin ĠNS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdim Ġ= Ġsize ( pos , Ġhint X , Ġ 0 f ) Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġns Size . height Ġ+= Ġdim . height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġns Size . width Ġ= Ġmax Of ( ns Size . width , Ġdim . width ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( w ce Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġns Size . height Ġ+= Ġv gap ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe hint Y Ġ= Ġmax Of ( 0 f , Ġhint Y Ġ- Ġns Size . height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwe Size Ġ= ĠDimension () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( pos Ġin ĠWE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdim Ġ= Ġsize ( pos , Ġ 0 f , Ġe hint Y ) Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwe Size . width Ġ+= Ġdim . width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwe Size . height Ġ= Ġmax Of ( we Size . height , Ġdim . height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwe Size . width Ġ+= Ġmax Of ( w ce Ġ- Ġ 1 , Ġ 0 ) Ġ* Ġh gap ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe hint X Ġ= Ġmax Of ( 0 f , Ġhint X Ġ- Ġwe Size . width ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc size Ġ= Ġsize ( Position . CENTER , Ġe hint X , Ġe hint Y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( c size Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwe Size . width Ġ+= Ġc size . width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġns Size . height Ġ+= Ġc size . height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDimension ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Of ( we Size . width , Ġns Size . width ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Of ( we Size . height , Ġns Size . height )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġlayout Ns ( p : ĠPosition , Ġhalign : ĠStyle . H Align , Ġbounds : ĠRectangle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdim : ĠID imension Ġ= Ġsize ( p , Ġbounds . width , Ġ 0 f ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġconstraint ( p ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdim Ġ= Ġc . adjust ( dim , Ġbounds ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġy Ġ= Ġbounds . y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p Ġ== ĠPosition . NORTH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbounds . y Ġ+= Ġdim . height Ġ+ Ġv gap ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ+= Ġbounds . height Ġ- Ġdim . height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbounds . height Ġ-= Ġdim . height Ġ+ Ġv gap ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Bounds ( p , Ġc . align ( bounds . x , Ġhalign . offset ( dim . width , Ġbounds . width )), Ġy , Ġdim ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġlayout We ( p : ĠPosition , Ġvalign : ĠStyle . V Align , Ġbounds : ĠRectangle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdim : ĠID imension Ġ= Ġsize ( p , Ġ 0 f , Ġbounds . height ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġconstraint ( p ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdim Ġ= Ġc . adjust ( dim , Ġbounds ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġx Ġ= Ġbounds . x ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p Ġ== ĠPosition . WEST ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbounds . x Ġ+= Ġdim . width Ġ+ Ġh gap ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ+= Ġbounds . width Ġ- Ġdim . width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbounds . width Ġ-= Ġdim . width Ġ+ Ġh gap ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Bounds ( p , Ġx , Ġc . align ( bounds . y , Ġvalign . offset ( dim . height , Ġbounds . height )), Ġdim ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġset Bounds ( p : ĠPosition , Ġx : ĠFloat , Ġy : ĠFloat , Ġdim : ĠID imension ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Border Layout . setBounds ( get ( p ), Ġx , Ġy , Ġdim . width , Ġdim . height ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġcount ( var arg Ġps : ĠPosition ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( p Ġin Ġps ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( elements . containsKey ( p )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcount ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġstretch ( p : ĠPosition ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( get ( p ). constraint () Ġas ĠConstraint )._ stretch ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġoperator Ġfun Ġget ( p : ĠPosition ): ĠElement < *> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġelements [ p ] !! ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġconstraint ( p : ĠPosition ): ĠConstraint Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget ( p ). constraint () Ġas ĠConstraint ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġsize ( p : ĠPosition , Ġhint X : ĠFloat , Ġhint Y : ĠFloat ): ĠID imension ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe Ġ= Ġelements [ p ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( e Ġ== Ġnull ) Ġnull Ġelse Ġpreferred Size ( e , Ġhint X , Ġhint Y ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠPosition ( internal Ġval Ġorient : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠC ENTER ( 3 ), ĠNOR TH ( 1 ), ĠS OUT H ( 1 ), ĠE AST ( 2 ), ĠW EST ( 2 ); ĊĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġun stret ched : ĠConstraint Ġ= ĠConstraint ( this , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġst ret ched : ĠConstraint Ġ= ĠConstraint ( this , Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġfun Ġposition Of ( c : ĠLayout . Constraint ): ĠPosition ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( p Ġin Ġvalues ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p . un stret ched Ġ=== Ġc Ġ|| Ġp . stret ched Ġ=== Ġc ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġp ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĠConstraint Ġto Ġposition Ġan Ġelement Ġin Ġthe Ġcenter Ġof Ġits Ġparent . ĠThe Ġelement Ġis Ġst ret ched Ġin ĊĠĠĠĠĠĠĠĠ Ġ* Ġboth Ġdirections Ġto Ġtake Ġup Ġavailable Ġspace . ĠIf Ġ[ Constraint . un stret ched ] Ġis Ġused , Ġthe ĊĠĠĠĠĠĠĠĠ Ġ* Ġelement Ġwill Ġbe Ġaligned Ġin Ġboth Ġdirections Ġusing Ġits Ġpreferred Ġsize Ġand Ġthe Ġ[ Ġ] Ġand Ġ[ triple play . ui . Style . V Align ] Ġbindings . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval ĠC ENTER Ġ= ĠPosition . CENTER . stret ched ĊĊĠĠĠĠĠĠĠ Ġ/** ĠConstraint Ġto Ġposition Ġan Ġelement Ġalong Ġthe Ġtop Ġedge Ġof Ġits Ġparent . ĠThe Ġelement Ġis ĊĠĠĠĠĠĠĠĠ Ġ* Ġst ret ched Ġh orizontally Ġand Ġuses Ġits Ġpreferred Ġheight . ĠIf Ġ[ Constraint . un stret ched ] Ġis ĊĠĠĠĠĠĠĠĠ Ġ* Ġused , Ġthe Ġelement Ġwill Ġbe Ġaligned Ġh orizontally Ġusing Ġits Ġpreferred Ġsize Ġaccording Ġto Ġthe ĊĠĠĠĠĠĠĠĠ Ġ* Ġ[ triple play . ui . Style . H Align ] Ġbinding . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval ĠNOR TH Ġ= ĠPosition . NORTH . stret ched ĊĊĠĠĠĠĠĠĠ Ġ/** ĠConstraint Ġto Ġposition Ġan Ġelement Ġalong Ġthe Ġbottom Ġedge Ġof Ġits Ġparent . ĠThe Ġelement Ġis ĊĠĠĠĠĠĠĠĠ Ġ* Ġst ret ched Ġh orizontally Ġand Ġuses Ġits Ġpreferred Ġheight . ĠIf Ġ[ Constraint . un stret ched ] Ġis ĊĠĠĠĠĠĠĠĠ Ġ* Ġused , Ġthe Ġelement Ġwill Ġbe Ġaligned Ġh orizontally Ġusing Ġits Ġpreferred Ġsize Ġaccording Ġto Ġthe ĊĠĠĠĠĠĠĠĠ Ġ* Ġ[ triple play . ui . Style . H Align ] Ġbinding . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval ĠS OUT H Ġ= ĠPosition . SO UTH . stret ched ĊĊĠĠĠĠĠĠĠ Ġ/** ĠConstraint Ġto Ġposition Ġan Ġelement Ġalong Ġthe Ġright Ġedge Ġof Ġits Ġparent . ĠThe Ġelement Ġis ĊĠĠĠĠĠĠĠĠ Ġ* Ġst ret ched Ġvert ically Ġand Ġuses Ġits Ġpreferred Ġwidth . ĠIf Ġ[ Constraint . un stret ched ] Ġis ĊĠĠĠĠĠĠĠĠ Ġ* Ġused , Ġthe Ġelement Ġwill Ġbe Ġaligned Ġvert ically Ġusing Ġits Ġpreferred Ġsize Ġaccording Ġto Ġthe ĊĠĠĠĠĠĠĠĠ Ġ* Ġ[ triple play . ui . Style . V Align ] Ġbinding . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval ĠE AST Ġ= ĠPosition . EAST . stret ched ĊĊĠĠĠĠĠĠĠ Ġ/** ĠConstraint Ġto Ġposition Ġan Ġelement Ġalong Ġthe Ġright Ġedge Ġof Ġits Ġparent . ĠThe Ġelement Ġis ĊĠĠĠĠĠĠĠĠ Ġ* Ġst ret ched Ġvert ically Ġand Ġuses Ġits Ġpreferred Ġwidth . ĠIf Ġ[ Constraint . un stret ched ] Ġis ĊĠĠĠĠĠĠĠĠ Ġ* Ġused , Ġthe Ġelement Ġwill Ġbe Ġaligned Ġvert ically Ġusing Ġits Ġpreferred Ġsize Ġaccording Ġto Ġthe ĊĠĠĠĠĠĠĠĠ Ġ* Ġ[ triple play . ui . Style . V Align ] Ġbinding . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval ĠW EST Ġ= ĠPosition . WEST . stret ched ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠNS Ġ= ĠarrayOf ( Position . NORTH , ĠPosition . SO UTH ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠWE Ġ= ĠarrayOf ( Position . WEST , ĠPosition . EAST ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠW CE Ġ= ĠarrayOf ( Position . WEST , ĠPosition . CENTER , ĠPosition . EAST ) ĊĠĠĠ Ġ} Ċ } Ċ /** Ċ Ġ* ĠConstructs Ġa Ġnew Ġborder Ġlayout Ġwith Ġno Ġg aps . Ċ Ġ*/ Ċ