package Ġcom . xf ast games . w itness . items . data Ċ Ċ import Ġcom . google . common . graph . Graph Ċ import Ġcom . google . common . graph . Mutable Value Graph Ċ import Ġcom . google . common . graph . Value Graph Ċ import Ġcom . google . common . graph . Value Graph Builder Ċ import Ġcom . xf ast games . w itness . items . data . Panel . Companion . Type Ċ import Ġcom . xf ast games . w itness . utils . gu ava . empty Graph Ċ import Ġcom . xf ast games . w itness . utils . gu ava . mutable Graph Ċ import Ġcom . xf ast games . w itness . utils . pow Ċ import Ġnet . minecraft . nbt . N bt Compound Ċ import Ġnet . minecraft . util . D ye Color Ċ Ċ private Ġconst Ġval ĠKEY _ WIDTH Ġ= Ġ" width " Ċ private Ġconst Ġval ĠKEY _ HEIGHT Ġ= Ġ" height " Ċ private Ġconst Ġval ĠKEY _ LINE Ġ= Ġ" line " Ċ private Ġconst Ġval ĠKEY _ GRAPH Ġ= Ġ" graph " Ċ private Ġconst Ġval ĠKEY _ BACKGROUND _ COLOR Ġ= Ġ" backgroundColor " Ċ private Ġconst Ġval ĠKEY _ PANEL _ TYPE Ġ= Ġ" type " Ċ Ċ @ Suppress (" Un stable Api Usage ") Ċ sealed Ġclass ĠPanel ( val Ġtype : ĠType ) Ġ{ ĊĠĠĠ Ġabstract Ġval Ġline : ĠGraph < Node > ĊĠĠĠ Ġabstract Ġval Ġgraph : ĠValue Graph < Node , ĠEdge > ĊĠĠĠ Ġabstract Ġval ĠbackgroundColor : ĠD ye Color ĊĠĠĠ Ġabstract Ġval Ġwidth : ĠInt ĊĠĠĠ Ġabstract Ġval Ġheight : ĠInt ĊĊĠĠĠ Ġabstract Ġfun Ġresize ( length : ĠInt ): ĠPanel ĊĊĠĠĠ Ġdata Ġclass ĠGrid ( ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġline : ĠGraph < Node >, ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġgraph : ĠValue Graph < Node , ĠEdge >, ĊĠĠĠĠĠĠĠ Ġoverride Ġval ĠbackgroundColor : ĠD ye Color , ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġwidth : ĠInt , ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġheight : ĠInt , ĊĠĠĠ Ġ) Ġ: ĠPanel ( Type . Grid ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġof Size ( size : ĠInt ): ĠGrid Ġ= Ġgenerate Panel ( size , Ġsize ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġof Size ( width : ĠInt , Ġheight : ĠInt ): ĠGrid Ġ= Ġgenerate Panel ( width , Ġheight ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" Un stable Api Usage ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġgenerate Grid ( width : ĠInt , Ġheight : ĠInt ): ĠValue Graph < Node , ĠEdge > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgraph : ĠMutable Value Graph < Node , ĠEdge > Ġ= ĠValue Graph Builder . und irect ed (). build () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġx Offset Ġ= Ġ 0 . 5 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( width Ġ< Ġheight ) Ġx Offset Ġ+= Ġ 0 . 5 f Ġ* Ġ( height Ġ- Ġwidth ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġy Offset Ġ= Ġ 0 . 5 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( height Ġ< Ġwidth ) Ġy Offset Ġ+= Ġ 0 . 5 f Ġ* Ġ( width Ġ- Ġheight ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprevious Row : ĠMutable List < Node > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( width ) Ġ{ Ġx Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġprevious Node : ĠNode ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Row : ĠMutable List < Node > Ġ= Ġmutable ListOf () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( height ) Ġ{ Ġy Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( dx , Ġdy ) Ġ= Ġx . toFloat () Ġ+ Ġx Offset Ġto Ġy . toFloat () Ġ+ Ġy Offset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcurrentNode Ġ= ĠNode ( dx , Ġdy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgraph . add Node ( currentNode ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Row . add ( currentNode ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLink Ġhorizontal Ġneighbour ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Node ?. let Ġ{ Ġnode Ġ-> Ġgraph . put Edge Value ( node , ĠcurrentNode , ĠModifier . NORMAL ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLink Ġvertical Ġneighbour ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Row . take If Ġ{ Ġit . isNotEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġrow Ġ-> Ġgraph . put Edge Value ( row [ y ], ĠcurrentNode , ĠModifier . NORMAL ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Node Ġ= ĠcurrentNode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Node Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Row . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Row . addAll ( current Row ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Row . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġgraph ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun Ġgenerate Panel ( width : ĠInt , Ġheight : ĠInt ): ĠGrid Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgraph : ĠValue Graph < Node , ĠEdge > Ġ= Ġgenerate Grid ( width , Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline : ĠGraph < Node > Ġ= Ġempty Graph () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠGrid ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Ġ= Ġline , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgraph Ġ= Ġgraph , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= ĠD ye Color . WHITE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġwidth , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġheight , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġgrow ( by : ĠInt ): ĠGrid Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( by Ġ<= Ġ 0 ) Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO ĠImplement Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcopy () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġshrink ( by : ĠInt ): ĠGrid Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( by Ġ<= Ġ 0 ) Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO ĠImplement Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcopy () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġresize ( length : ĠInt ): ĠGrid Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( length Ġ> Ġwidth ) Ġgrow ( length Ġ- Ġwidth ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġshrink ( width Ġ- Ġlength ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠTree ( ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġline : ĠGraph < Node >, ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġgraph : ĠValue Graph < Node , ĠEdge >, ĊĠĠĠĠĠĠĠ Ġoverride Ġval ĠbackgroundColor : ĠD ye Color , ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġwidth : ĠInt , ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġheight : ĠInt , ĊĠĠĠ Ġ) Ġ: ĠPanel ( Type . Tree ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġof Size ( height : ĠInt ): ĠTree Ġ= ĠTree ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Ġ= Ġmutable Graph (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= ĠD ye Color . WHITE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgraph Ġ= Ġgenerate Tree ( height ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġheight , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" Un stable Api Usage ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġgenerate Tree ( size : ĠInt ): ĠValue Graph < Node , ĠEdge > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgraph : ĠMutable Value Graph < Node , ĠEdge > Ġ= ĠValue Graph Builder . und irect ed (). build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtree : ĠMutable Map < Int , ĠList < Node >> Ġ= Ġmutable Map Of () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( size Ġdown To Ġ 0 ). forEach Ġ{ Ġbranch Index Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleaves : ĠMutable List < Node > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleaf Count : ĠInt Ġ= Ġ 2 . pow ( branch Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( leaf Count ) Ġ{ Ġleaf Index Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd Y : ĠFloat Ġ= Ġ 1 f Ġ* Ġbranch Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcenter ing Ġhas Ġto Ġhappen Ġhere ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Offset Ġ= Ġ( size . toFloat () Ġ/ Ġ 2 ) Ġ/ Ġ( branch Index Ġ+ Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd X : ĠFloat Ġ= Ġleaf Index Ġ* Ġ( size . toFloat () Ġ/ Ġleaf Count ) Ġ+ Ġx Offset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleaf Ġ= ĠNode ( dX , Ġd Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgraph . add Node ( leaf ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleaves . add ( leaf ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tree . isEmpty ()) Ġreturn @ repeat Ġ// ĠNo Ġneed Ġto Ġconnect Ġbranches Ġon Ġthe Ġtop Ġrow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbranch Above : ĠInt Ġ= Ġbranch Index Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbranch : ĠList < Node > Ġ= Ġtree [ branch Above ]?. chunk ed ( 2 )?. get ( leaf Index ) Ġ?: Ġreturn @ repeat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbranch . forEach Ġ{ Ġthat Leaf Ġ-> Ġgraph . put Edge Value ( that Leaf , Ġleaf , ĠModifier . NORMAL ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtree [ branch Index ] Ġ= Ġleaves ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġgraph ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġresize ( length : ĠInt ): ĠTree Ġ= ĠTODO () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠFree form ( ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġline : ĠGraph < Node >, ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġgraph : ĠValue Graph < Node , ĠEdge >, ĊĠĠĠĠĠĠĠ Ġoverride Ġval ĠbackgroundColor : ĠD ye Color , ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġwidth : ĠInt , ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġheight : ĠInt , ĊĠĠĠ Ġ) Ġ: ĠPanel ( Type . Free form ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġresize ( length : ĠInt ): ĠFree form Ġ= ĠTODO () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT : ĠPanel Ġby Ġlazy Ġ{ ĠGrid . of Size ( 3 ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠTEST : ĠPanel Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgraph : ĠMutable Value Graph < Node , ĠEdge > Ġ= ĠValue Graph Builder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. und irect ed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbottom Right Ġ= ĠNode ( 0 . 5 f , Ġ 0 . 5 f , ĠModifier . START ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop Left Ġ= ĠNode ( 2 . 5 f , Ġ 2 . 5 f , ĠModifier . NORMAL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgraph . add Node ( bottom Right ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgraph . add Node ( top Left ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgraph . put Edge Value ( bottom Right , Ġtop Left , ĠModifier . NORMAL ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠFree form ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Ġ= Ġempty Graph (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgraph Ġ= Ġgraph , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= ĠD ye Color . CY AN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġenum Ġclass ĠType Ġ{ ĠGrid , ĠTree , ĠFree form Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Suppress (" Un stable Api Usage ") Ċ fun ĠNbt Compound . get Panel ( key : ĠString ): ĠPanel ? Ġ{ ĊĠĠĠ Ġif Ġ(! contains ( key )) Ġreturn Ġnull ĊĠĠĠ Ġreturn Ġget Compound ( key ). let Ġ{ Ġtag Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġtype : ĠType Ġ= ĠType . values ()[ tag . getInt ( KEY _ PANEL _ TYPE )] ĊĠĠĠĠĠĠĠ Ġval Ġline : ĠGraph < Node > Ġ= Ġtag . get Graph ( KEY _ LINE ) ĊĊĠĠĠĠĠĠĠ Ġval ĠbackgroundColor : ĠD ye Color Ġ= ĠD ye Color . values ()[ tag . getInt ( KEY _ BACKGROUND _ COLOR )] ĊĠĠĠĠĠĠĠ Ġval Ġgrid : ĠValue Graph < Node , ĠEdge > Ġ= Ġtag . getValue Graph ( KEY _ GRAPH ) ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠType . Grid Ġ-> ĠPanel . Grid ( line , Ġgrid , ĠbackgroundColor , Ġtag . getInt ( KEY _ WIDTH ), Ġtag . getInt ( KEY _ HEIGHT )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠType . Tree Ġ-> ĠPanel . Tree ( line , Ġgrid , ĠbackgroundColor , Ġtag . getInt ( KEY _ HEIGHT ), Ġtag . getInt ( KEY _ HEIGHT )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠType . Free form Ġ-> ĠPanel . Free form ( line , Ġgrid , ĠbackgroundColor , Ġtag . getInt ( KEY _ WIDTH ), Ġtag . getInt ( KEY _ HEIGHT )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠNbt Compound . put Panel ( key : ĠString , Ġpanel : ĠPanel ) Ġ{ ĊĠĠĠ Ġput ( key , ĠNbt Compound (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġput Int ( KEY _ PANEL _ TYPE , Ġpanel . type . ordinal ) ĊĠĠĠĠĠĠĠ Ġput Graph ( KEY _ LINE , Ġpanel . line ) ĊĠĠĠĠĠĠĠ Ġput Int ( KEY _ BACKGROUND _ COLOR , Ġpanel . backgroundColor . ordinal ) ĊĠĠĠĠĠĠĠ Ġput Value Graph ( KEY _ GRAPH , Ġpanel . graph ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( panel ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPanel . Grid , Ġis ĠPanel . Free form Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Int ( KEY _ WIDTH , Ġpanel . width ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Int ( KEY _ HEIGHT , Ġpanel . height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPanel . Tree Ġ-> Ġput Int ( KEY _ HEIGHT , Ġpanel . height ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) Ċ }