package Ġcom . wh iz sid . sand paper . api Ċ Ċ class ĠColumn Ġ{ ĊĠĠĠ Ġvar Ġindex : Int Ġ= Ġ 0 ĊĊĠĠĠ Ġvar Ġwidth : Int Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar Ġworkspace : Workspace ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġset Workspace ( workspace : ĠWorkspace ): void { ĊĠĠĠĠĠĠĠ Ġthis . workspace Ġ= Ġworkspace ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġprivate Ġvar Ġrows : Mutable List < Row > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġprivate Ġvar Ġactive Row : Row ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġfun Ġindex (): void { ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= 0 ĊĊĠĠĠĠĠĠĠ Ġthis . rows . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġother Row -> other Row . index = i ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠChange Ġthe Ġactive Ġrow ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġrow Ġinstance Ġto Ġactive ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġchange Row ( row : Row ): void { ĊĠĠĠĠĠĠĠ Ġthis . active Row Ġ= Ġrow ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdding Ġa Ġrow ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġrow Ġto Ġadd ĊĠĠĠĠ Ġ* Ġ@ param Ġindex ĠPlace Ġof Ġthe Ġnew Ġrow ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Row ( row : Row , index : Int Ġ= Ġ 0 ): void { ĊĠĠĠĠĠĠĠ Ġthis . rows . add ( index , row ) ĊĊĠĠĠĠĠĠĠ Ġrow . set Column ( this ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠIndex ing Ġagain ĊĠĠĠĠĠĠĠ Ġthis . index () ĊĊĠĠĠĠĠĠĠ Ġ// ĠChanging Ġwidth Ġof Ġthe Ġrows ĊĠĠĠĠĠĠĠ Ġif ( index > 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop Row Ġ= Ġthis . rows [ index - 1 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Row . height Ġ/= Ġ 2 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrow . height Ġ= Ġtop Row . height ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbottom Row Ġ= Ġthis . rows [ index + 1 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Row . height /= 2 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrow . height Ġ= Ġbottom Row . height ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemoving Ġa Ġrow ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġrow ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠWeather Ġthat Ġcolumn Ġis Ġremoved Ġor Ġnot ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Row ( row : Row ): Boolean { ĊĊĠĠĠĠĠĠĠ Ġ// ĠNot Ġremoving Ġif Ġone Ġand Ġonly Ġrow ĊĠĠĠĠĠĠĠ Ġif ( this . rows . size == 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ// ĠRemoving Ġthe Ġrow ĊĠĠĠĠĠĠĠ Ġthis . rows . remove At ( column . index ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdjust ing Ġthe Ġwidth Ġof Ġother Ġrow ĊĠĠĠĠĠĠĠ Ġif ( row . index != 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop Row Ġ= Ġthis . rows [ row . index - 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Row . height Ġ+= Ġrow . height ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbottom Row Ġ= Ġthis . rows [ row . index + 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Row . height Ġ+= Ġrow . height ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠIndex ing Ġagain ĊĠĠĠĠĠĠĠ Ġthis . index () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSh rink Ġa Ġrow ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġfunction Ġwill Ġshrink Ġone Ġrow Ġand Ġadding Ġfree Ġspace Ġto Ġsibling Ġrow ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġrow ĠRow Ġto Ġshrink ĊĠĠĠĠ Ġ* Ġ@ param Ġvalue Ġamount Ġof Ġshrink ing ĊĠĠĠĠ Ġ* Ġ@ param Ġdirection ĠDirection Ġthat Ġshrink ing ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠOrigin ally Ġsh rank Ġamount ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġshrink ( row : Row , value : Int , direction : ĠDirection ): Int { ĊĠĠĠĠĠĠĠ Ġvar Ġshrink : ĠInt ĊĊĠĠĠĠĠĠĠ Ġif ( direction Ġ== ĠDirection . TOP ){ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( row . index == this . rows . size - 1 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbottom Row Ġ= Ġthis . rows [ row . index + 1 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( row . height - value <= 1 ){ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshrink Ġ= Ġrow . height Ġ- 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow . height Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Row . height Ġ+= Ġshrink ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Row . height Ġ+= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow . height Ġ-= Ġvalue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshrink Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġshrink ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif ( Ġdirection Ġ== ĠDirection . BOTTOM ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( row . index == 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop Row Ġ= Ġthis . rows [ row ]. index - 1 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( top Row . height - value <= 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshrink Ġ= Ġtop Row . height Ġ- Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Row . height Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow . height Ġ+= Ġshrink ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Row . height Ġ-= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow . height Ġ+= Ġvalue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshrink Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġshrink ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturn ing Ġa Ġrow Ġby Ġits Ġindex ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġindex ĠWhat Ġrow Ġto Ġreturn ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠReturn ing Ġrow Ġif Ġfound Ġa Ġrow Ġfor Ġthe Ġgiven Ġindex . ĠOtherwise Ġnull ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Row ( index : Int ): Row ? { ĊĠĠĠĠĠĠĠ Ġif ( index < 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġif ( index > this . rows . size - 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis . rows [ index ] ĊĠĠĠ Ġ} Ċ } Ċ