package Ġkb . core . bow line Ċ Ċ /** Ċ Ġ* ĠPure Ġimplementation Ġof ĠVirtual Flow Ġthat Ġis Ġindependent Ġof Ġcells Ċ Ġ* Ġor Ġscroll Ġbars ; Ġthose Ġcan Ġbe Ġhandled Ġin Ġanother Ġclass Ċ Ġ* Ċ Ġ* Ġ[ Linear Virtual Flow ] Ġrepresents Ġthe Ġview Ġin Ġ 1 D . Ġ 2 Ġinstances Ġof Ġthis Ċ Ġ* Ġclass Ġcan Ġbe Ġused Ġto Ġconstruct Ġa Ġvirtual Ġflow Ġmechanism Ġfor Ġan Ċ Ġ* Ġactual Ġtable / grid Ċ Ġ* Ċ Ġ* ĠThe Ġclass Ġalso Ġincludes Ġsome Ġfine Ġt uned Ġcalculations Ġfor Ċ Ġ* ĠJava FX Ġlayout . Ċ Ġ* Ċ Ġ* ĠUsage Ġof Ġthis Ġclass Ġrequires Ġcalling Ġthe Ġright Ġmethods Ġafter Ċ Ġ* Ġchanging Ġparameters , Ġbecause Ġit 's Ġtoo Ġcomplex Ġto Ġlisten Ġfor Ġchanges . Ċ Ġ*/ Ċ Ċ @ Suppress (" D uplicated Code ", Ġ" Member Visibility Can Be Private ", Ġ" unused ") Ċ class ĠLinear Virtual Flow Ġ{ ĊĊĠĠĠ Ġ// Ġ=== ĠMIN - MAX ĠDIM ENSION S Ġ=== ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġminimum Ġsize Ġof Ġeach Ġcell ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġvalue Ġis Ġused Ġto Ġpopulate Ġ[ cell Sizes ] Ġif ĊĠĠĠĠ Ġ* Ġeither Ġthe Ġsize Ġof Ġ[ cell Sizes ] Ġis Ġsmaller Ġthan ĊĠĠĠĠ Ġ* Ġ[ cell Count ] Ġor Ġif Ġthe Ġcomputed Ġ[ total Size ] Ġis ĊĠĠĠĠ Ġ* Ġsmaller Ġthan Ġ[ clip Size ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġmin Size Ġ= Ġ 0 . 0 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġtotal Ġnumber Ġof Ġsections Ġto Ġdisplay ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġcell Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġsize Ġof Ġeach Ġindividual Ġcell ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġcell Sizes Ġ= ĠDouble Array ( 0 ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġposition Ġof Ġlines Ġsepar ating Ġcells ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġcell Pos Ġ= ĠDouble Array ( 0 ) ĊĊĠĠĠ Ġ// ĠThe Ġtotal Ġdimensions Ġof Ġthe Ġentire Ġgrid ĊĠĠĠ Ġ// ĠEqual Ġto Ġthe Ġsum Ġof Ġthe Ġindividual Ġdimensions Ġup Ġto Ġthe Ġspecified Ġsize ĊĊĠĠĠ Ġvar Ġtotal Size Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġ// Ġ=== ĠV IRTUAL ĠDIM ENSION S Ġ=== ĊĊĠĠĠ Ġ// ĠThe Ġnumber Ġof Ġlines Ġthat Ġneed Ġto Ġshow Ġon Ġthe Ġscreen ĊĊĠĠĠ Ġvar Ġvirtual Cell Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġ// ĠThe Ġposition Ġof Ġgrid Ġlines ĊĊĠĠĠ Ġvar Ġvirtual Cell Pos Ġ= ĠDouble Array ( 0 ) ĊĊĠĠĠ Ġ// ĠThe Ġsize Ġof Ġthe Ġvirtual Ġbox ĊĊĠĠĠ Ġvar Ġclip Size Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġ// Ġ=== ĠVIEW ĠCONFIG URATION Ġ=== ĊĊĠĠĠ Ġ// ĠThe Ġzoom Ġfactor Ġ-- ĠEverything Ġelse Ġis Ġinvariant Ġto Ġthe Ġzoom Ġfactor ĊĠĠĠ Ġ// ĠMust Ġapply Ġit Ġin Ġevery Ġcalculation Ġto Ġavoid Ġchanging Ġother Ġparameters ĊĊĠĠĠ Ġvar Ġzoom Factor Ġ= Ġ 1 . 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġ// ĠThe Ġcurrent Ġposition Ġin Ġ[ 0 , Ġ 1 ] Ġrepresenting ĠMIN / MAX ĊĊĠĠĠ Ġvar Ġscroll Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġ// Ġ=== ĠCOMP UTE ĠSTATE / MARK ERS Ġ=== ĊĊĠĠĠ Ġ// ĠState Ġmarkers ĊĠĠĠ Ġvar Ġrequires Layout Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġthe Ġcontent Ġsize Ġto Ġ[ new Count ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Cell Count ( new Count : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġrequire ( new Count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Dimensions Ġcannot Ġbe Ġless Ġthan Ġ 0 " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( new Count Ġ> Ġcell Sizes . size ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Count Ġ= Ġcell Sizes . size ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell Sizes Ġ= Ġcell Sizes . copyOf ( new Count ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġold Count Ġuntil Ġnew Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell Sizes [ i ] Ġ= Ġmin Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell Pos Ġ= Ġsum Into Or Expand ( cell Sizes , Ġcell Pos ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcell Count Ġ= Ġnew Count ĊĊĠĠĠĠĠĠĠ Ġtotal Size Ġ= Ġ 0 . 0 ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġcell Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Size Ġ+= Ġcell Sizes [ i ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSum Ġan Ġarray Ġof Ġvalues Ġinto Ġanother Ġarray , ĊĠĠĠĠ Ġ* Ġsuch Ġthat Ġthe Ġi - th Ġitem Ġin Ġthe Ġresulting Ġarray Ġis Ġthe ĊĠĠĠĠ Ġ* Ġsum Ġof Ġall Ġvalues Ġbetween Ġthe Ġindex Ġof Ġ[ 0 , Ġi ] Ġin Ġthe Ġinput ĊĠĠĠĠ Ġ* Ġarray . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsum Cache Ġaccepts Ġa Ġcached Ġarray Ġto Ġreuse Ġmemory . ĠThis ĊĠĠĠĠ Ġ* Ġarray Ġis Ġexpanded Ġas Ġneeded Ġto Ġfit Ġthe Ġsize Ġof Ġ[ values ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġsum Ġarray ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsum Into Or Expand ( values : ĠDouble Array , Ġsum Cache : ĠDouble Array ): ĠDouble Array Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsum Ġ= Ġif Ġ( values . size Ġ< Ġsum Cache . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsum Cache ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDouble Array ( values . size Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsum [ 0 ] Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġvalues . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsum [ i Ġ+ Ġ 1 ] Ġ= Ġsum [ i ] Ġ+ Ġvalues [ i ] ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsum ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMark s Ġfor Ġre layout ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmark StateChanged () Ġ{ ĊĠĠĠĠĠĠĠ Ġrequires Layout Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCon str ains Ġ[ scroll ] Ġbetween Ġ[ 0 , Ġ 1 ] Ġand Ġupdates Ġthe Ġstate ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġconstr ain Scroll AndUpdate () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( scroll Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( scroll Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Ġ= Ġ 1 . 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġupdate Virtual Cell Pos () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠScroll s Ġto Ġa Ġspecific Ġpoint Ġbetween Ġ[ 0 , Ġ 1 ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġscroll To ( new Scroll : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( new Scroll Ġ!= Ġscroll ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Ġ= Ġnew Scroll ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconstr ain Scroll AndUpdate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġeffective Ġclip Ġsize ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcompute Effective Clip Size (): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġclip Size Ġ/ Ġzoom Factor ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠScroll Ġthe Ġgrid Ġby Ġ([ ds ]) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠShould Ġbe Ġcalled Ġfrom Ġa Ġscroll Ġevent Ġlistener ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Deprecated ("", ĠReplace With (" scrollTo ( scroll By AndGet ( ds )) ")) ĊĠĠĠ Ġfun Ġscroll By ( ds : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscroll To ( scroll By AndGet ( ds )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSame Ġas Ġ[ scrollTo ], Ġbut Ġdoesn 't Ġactually Ġchange Ġ[ scroll ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġnew Ġ[ scroll ] Ġvalue Ġafter Ġscrolling Ġby Ġa Ġ[ ds ] Ġamount ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġis Ġa Ġrequirement Ġbecause Ġof Ġhow Ġobserver Ġproperties Ġwork , ĊĠĠĠĠ Ġ* Ġso Ġas Ġthis Ġmethod Ġis Ġnot Ġcalled Ġtwice Ġfrom Ġthe Ġevent Ġsource Ġand ĊĠĠĠĠ Ġ* Ġthe Ġproperty Ġchange ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġscroll By AndGet ( ds : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġeffective Clip Size Ġ= Ġcompute Effective Clip Size () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( ds Ġ!= Ġ 0 . 0 Ġ&& Ġtotal Size Ġ> Ġeffective Clip Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġscroll Ġ- Ġds Ġ/ Ġ( total Size Ġ- Ġeffective Clip Size ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġscroll ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġset Ġsize Ġof Ġ[ cell Count ] Ġthat Ġneed Ġto Ġbe Ġmade Ġvirtual ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcompute Virtual Cells (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( clip Size Ġ/ Ġ( min Size Ġ* Ġzoom Factor )). toInt () Ġ+ Ġ 2 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdate Ġthe Ġrow Ġstate Ġand Ġmark Ġfor Ġupdate ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġupdate Virtual Cell Pos () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġcheck ( virtual Cell Pos . size Ġ>= Ġvirtual Cell Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Cannot Ġupdate Ġrow Ġstate Ġ- ĠPosition Ġbound Ġlimited " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġscroll Ġ* Ġ( total Size Ġ- Ġclip Size ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġj Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. cell Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpos Ġ= Ġcell Pos [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pos Ġ>= Ġstart Ġ&& Ġj Ġ< Ġvirtual Cell Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvirtual Cell Pos [ j ] Ġ= Ġpos Ġ- Ġstart ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmark StateChanged () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġthe Ġclipping Ġregion Ġto Ġ[ size ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġmethod Ġonly Ġapplies Ġwhen Ġthe Ġclip Ġdimensions Ġhave Ġchanged ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġupdate Content Clip ( size : ĠDouble ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( size Ġ== Ġclip Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrequire ( size Ġ>= Ġmin Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Clip Ġdimension Ġis Ġset Ġto Ġless Ġthan Ġthe Ġminimum Ġcell Ġdimension " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġclip Size Ġ= Ġsize ĊĠĠĠĠĠĠĠ Ġvirtual Cell Count Ġ= Ġcompute Virtual Cells () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( virtual Cell Count Ġ> Ġvirtual Cell Pos . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvirtual Cell Pos Ġ= ĠDouble Array ( virtual Cell Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Virtual Cell Pos () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUse Ġthe Ġresult Ġof Ġ[ compute Effective Clip Size ] Ġto Ġcalculate ĊĠĠĠĠ Ġ* Ġthumb Ġsize , Ġdefined Ġas Ġthe Ġratio Ġof Ġthe Ġclip Ġsize Ġto Ġthe ĊĠĠĠĠ Ġ* Ġtotal Ġsize Ġof Ġthe Ġvirtual Ġview ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠLim its Ġresult Ġto Ġ< Ġ 1 . 0 Ġbecause Ġa Ġdivision Ġby Ġ 0 Ġis Ġpossible ĊĠĠĠĠ Ġ* Ġwhen Ġ[ set Cell Count ] Ġis Ġnot Ġcalled Ġbefore Ġthis Ġmethod ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġthumb Ġsize Ġfor Ġthe Ġscroll Ġbar Ġin Ġ[ 0 , Ġ 1 ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġthumb Size (): ĠDouble Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġeffective Clip Size Ġ= Ġcompute Effective Clip Size () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( total Size Ġ<= Ġeffective Clip Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 1 . 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġeffective Clip Size Ġ/ Ġtotal Size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEvent Ġcallback Ġif Ġcolumn Ġis Ġrequired ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdo If StateChanged ( action : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( requires Layout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequires Layout Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" LV F ( cnt =$ cell Count , Ġtot =$ total Size , Ġv ce =$ virtual Cell Count , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" cli =$ clip Size , Ġz oo =$ zoom Factor , Ġscr =$ scroll )" ĊĠĠĠ Ġ} Ċ }