package Ġcom . and res _ k . lib . library . core . component . container Ċ Ċ import Ġcom . and res _ k . lib . library . core . component . Component TypeCode Ċ import Ġcom . and res _ k . lib . library . core . component . Pdf Component Ċ import Ġcom . and res _ k . lib . library . core . property .* Ċ import Ġcom . and res _ k . lib . library . utils .* Ċ import Ġcom . and res _ k . lib . library . utils . config . Pdf Context Ċ import Ġcom . and res _ k . lib . library . utils . config . Pdf Properties Ċ import Ġcom . and res _ k . lib . library . utils . data . Pdf Over draw Result Ċ import Ġjava . awt . Color Ċ Ċ /** Ċ Ġ* ĠCreated Ġon Ġ 2 0 2 0 / 0 7 / 2 0 . Ċ Ġ* Ċ Ġ* Ġ@ author ĠKevin ĠAnd res Ċ Ġ*/ Ċ @ Suppress (" Data Class Private Constructor ") Ċ data Ġclass ĠPdf List Ġprivate Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġinter Line : ĠFloat ?, ĊĠĠĠ Ġoverride Ġval Ġelements : ĠList < Pdf Row >, ĊĠĠĠ Ġoverride Ġval Ġidentifier : ĠString ?, ĊĠĠĠ Ġoverride Ġval Ġposition : ĠPosition , ĊĠĠĠ Ġoverride Ġval Ġsize : ĠSize , ĊĠĠĠ Ġoverride Ġval Ġbody Align : ĠBody Align ?, ĊĠĠĠ Ġoverride Ġval Ġpadding : ĠSp acing , ĊĠĠĠ Ġoverride Ġval Ġmargin : ĠSp acing , ĊĠĠĠ Ġoverride Ġval Ġsplit On Over draw : ĠBoolean , ĊĠĠĠ Ġoverride Ġval Ġcolor : ĠColor ?, ĊĠĠĠ Ġoverride Ġval Ġbackground : ĠBackground , ĊĠĠĠ Ġoverride Ġval Ġborders : ĠB orders , ĊĠĠĠ Ġoverride Ġval Ġis Built : ĠBoolean Ċ ) Ġ: ĠPdf Container ( elements , Ġsplit On Over draw , Ġidentifier , Ġposition , Ġsize , Ġbody Align , Ġpadding , Ġmargin , Ġcolor , Ġbackground , Ġborders , Ġis Built , ĠComponent TypeCode . LIST . type ) Ġ{ ĊĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġelements : ĠList < Pdf Component >, ĊĠĠĠĠĠĠĠ Ġinter Line : ĠFloat ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġidentifier : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġposition : ĠPosition Ġ= ĠPosition . ORIGIN , ĊĠĠĠĠĠĠĠ Ġbody Align : ĠBody Align ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġpadding : ĠSp acing Ġ= ĠSp acing . NONE , ĊĠĠĠĠĠĠĠ Ġmargin : ĠSp acing Ġ= ĠSp acing . NONE , ĊĠĠĠĠĠĠĠ Ġsplit On Over draw : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġcolor : ĠColor ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġbackground : ĠBackground Ġ= ĠBackground . NONE , ĊĠĠĠĠĠĠĠ Ġborders : ĠB orders Ġ= ĠB orders . NONE ĊĠĠĠ Ġ) Ġ: Ġthis ( inter Line , Ġelements . map Ġ{ ĠPdf Row ( array ListOf ( it )) Ġ}, Ġidentifier , Ġposition , ĠSize . NULL , Ġbody Align , Ġpadding , Ġmargin , Ġsplit On Over draw , Ġcolor , Ġbackground , Ġborders , Ġfalse ) ĊĊĠĠĠ Ġfun Ġrows (): ĠList < Pdf Row > Ġ= Ġelements ĊĊĠĠĠ Ġoverride Ġfun Ġpre Render Content ( context : ĠPdf Context , Ġbody : ĠBox 2 d ): ĠPdf Over draw Result Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĠTry Ġrender Ġelements Ġ**/ ĊĠĠĠĠĠĠĠ Ġvar Ġover draw Index : ĠInt ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġdraw Row @ Ġfor Ġ( i Ġin Ġelements . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( elements [ i ]. has Over draw Y ( body , Ġcontext . view Body )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġover draw Index Ġ= Ġif Ġ( split On Over draw ) Ġi Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak @ draw Row ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĠBuild ĠList Ġof Ġover draw Ġelements Ġ**/ ĊĠĠĠĠĠĠĠ Ġif Ġ( over draw Index Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! split On Over draw Ġ&& Ġthis . height (). eq Or Big ger ( context . view Body . height )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ("[ Pdf List ] ĠThe Ġheight Ġof Ġthe ĠList Ġis Ġsuperior Ġto Ġa Ġpage 's Ġheight . Ġsplit On Over draw Ġhas Ġto Ġbe Ġset Ġto ĠTrue ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġover draw Rows Ġ= Ġelements . sub List ( over draw Index , Ġelements . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcursor Y Ġ= Ġ 0 f ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcalc Over draw Elements Ġ= Ġover draw Rows . map Ġ{ Ġrow Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult : ĠPdf Row Ġ= Ġrow . copy Abs ( Position ( row . position . x , Ġcursor Y ), Ġis Built Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor Y Ġ+= Ġrow . height () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmain List Ġ= Ġif Ġ( over draw Index Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . copy ( elements Ġ= Ġelements . sub List ( 0 , Ġover draw Index ), Ġsize Ġ= ĠSize ( size . width ?. v , Ġcontent Height () Ġ- Ġcursor Y )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPdf Over draw Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Ġ= Ġmain List , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġover draw Ġ= Ġthis . copy ( elements Ġ= Ġcalc Over draw Elements , Ġsize Ġ= ĠSize ( size . width ?. v , Ġcursor Y Ġ+ Ġpadding . spacing Y ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠPdf Over draw Result ( main Ġ= Ġthis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbuild Content ( context : ĠPdf Context , Ġrequest : ĠBox 2 d Request , Ġparent : ĠBox Size ): ĠPdf Component Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcalc Pos Ġ= ĠPosition ( calc X ( request , Ġparent ), Ġcalc Y ( request , Ġparent ), ĠPos Property . FIXED ) ĊĠĠĠĠĠĠĠ Ġval Ġcalc Width : ĠFloat ? Ġ= Ġcalc Width ( request , Ġparent ) ĊĠĠĠĠĠĠĠ Ġval Ġcalc Height : ĠFloat ? Ġ= Ġcalc Height ( request , Ġparent ) ĊĠĠĠĠĠĠĠ Ġval Ġcontainer Width : ĠFloat ? Ġ= Ġif Ġ( calc Width Ġ!= Ġnull ) Ġcalc Width Ġ- Ġpadding . spacing X () Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġcontainer Height : ĠFloat ? Ġ= Ġif Ġ( calc Height Ġ!= Ġnull ) Ġcalc Height Ġ- Ġpadding . spacing Y () Ġelse Ġnull ĊĊĠĠĠĠĠĠĠ Ġvar Ġcursor Y Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġvar ĠmaxWidth Ġ= Ġ 0 f ĊĊĠĠĠĠĠĠĠ Ġ/** ĠCAL C UL ATE Ġmax ĠHeight Ġ& ĠWidth Ġfor Ġeach ĠRow Ġ**/ ĊĠĠĠĠĠĠĠ Ġrows (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġit Size Ġ= Ġit . calc MaxSize ( context Ġ= Ġcontext , Ġparent Ġ= ĠBox Size ( container Width , Ġcontainer Height , Ġtype )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Size . width . big ger ( maxWidth )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmaxWidth Ġ= Ġit Size . width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĠCAL C UL ATE Ġposition Ġfor Ġeach ĠRow Ġ**/ ĊĠĠĠĠĠĠĠ Ġval Ġcalc Elements : ĠMutable List < Pdf Row > Ġ= Ġarray ListOf () ĊĠĠĠĠĠĠĠ Ġrows (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem : ĠPdf Row Ġ= Ġit . build ( context , ĠBox 2 d Request ( y Ġ= Ġcursor Y ), ĠBox Size ( container Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠmaxWidth , Ġcontainer Height , Ġtype )) Ġas ĠPdf Row ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalc Elements . add ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor Y Ġ+= Ġitem . height () Ġ+ Ġget Inter Line ( context . properties ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠmaxWidth Ġ= Ġcalc Width Ġ?: ĠmaxWidth Ġ+ Ġpadding . spacing X () ĊĠĠĠĠĠĠĠ Ġval ĠmaxHeight Ġ= Ġcalc Height Ġ?: Ġcursor Y Ġ+ Ġpadding . spacing Y () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis . copy ( elements Ġ= Ġcalc Elements , Ġposition Ġ= Ġcalc Pos , Ġsize Ġ= ĠSize ( maxWidth , ĠmaxHeight ), Ġis Built Ġ= Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcalc MaxSize ( context : ĠPdf Context , Ġparent : ĠBox Size ): ĠSize Result Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcalc Width : ĠFloat ? Ġ= Ġcalc Width ( null , Ġparent , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġcalc Height : ĠFloat ? Ġ= Ġcalc Height ( null , Ġparent , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġcontainer Width : ĠFloat ? Ġ= Ġif Ġ( calc Width Ġ!= Ġnull ) Ġcalc Width Ġ- Ġpadding . spacing X () Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġcontainer Height : ĠFloat ? Ġ= Ġif Ġ( calc Height Ġ!= Ġnull ) Ġcalc Height Ġ- Ġpadding . spacing Y () Ġelse Ġnull ĊĊĠĠĠĠĠĠĠ Ġvar ĠmaxWidth Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġvar ĠmaxHeight Ġ= Ġ 0 f ĊĊĠĠĠĠĠĠĠ Ġrows (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġit Size Ġ= Ġit . calc MaxSize ( context Ġ= Ġcontext , Ġparent Ġ= ĠBox Size ( container Width , Ġcontainer Height , Ġtype )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Size . width . big ger ( maxWidth )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmaxWidth Ġ= Ġit Size . width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmaxHeight Ġ+= Ġit Size . height Ġ+ Ġget Inter Line ( context . properties ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠSize Result ( maxWidth Ġ+ Ġpadding . spacing X () Ġ+ Ġmargin . spacing X (), ĠmaxHeight Ġ+ Ġpadding . spacing Y () Ġ+ Ġmargin . spacing Y ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Inter Line ( properties : ĠPdf Properties ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinter Line Ġ?: Ġproperties . default Inter line ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠPdf Component > Ġcopy Abs ( ĊĠĠĠĠĠĠĠ Ġposition : ĠPosition ?, ĊĠĠĠĠĠĠĠ Ġsize : ĠSize ?, ĊĠĠĠĠĠĠĠ Ġbody Align : ĠBody Align ?, ĊĠĠĠĠĠĠĠ Ġpadding : ĠSp acing ?, ĊĠĠĠĠĠĠĠ Ġmargin : ĠSp acing ?, ĊĠĠĠĠĠĠĠ Ġcolor : ĠColor ?, ĊĠĠĠĠĠĠĠ Ġfont : ĠFont Code ?, ĊĠĠĠĠĠĠĠ Ġbackground : ĠBackground ?, ĊĠĠĠĠĠĠĠ Ġborders : ĠB orders ?, ĊĠĠĠĠĠĠĠ Ġis Built : ĠBoolean ĊĠĠĠ Ġ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ= Ġposition Ġ?: Ġthis . position , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= Ġsize Ġ?: Ġthis . size , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbody Align Ġ= Ġbody Align Ġ?: Ġthis . body Align , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpadding Ġ= Ġpadding Ġ?: Ġthis . padding , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmargin Ġ= Ġmargin Ġ?: Ġthis . margin , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġcolor Ġ?: Ġthis . color , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Ġ= Ġbackground Ġ?: Ġthis . background , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġborders Ġ= Ġborders Ġ?: Ġthis . b orders , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Built Ġ= Ġis Built ĊĠĠĠĠĠĠĠ Ġ) Ġas ĠT ĊĠĠĠ Ġ} Ċ } Ċ