package Ġorg . jetbrains . plugins . notebooks . editor . outputs Ċ Ċ import Ġcom . intellij . openapi . Disposable Ċ import Ġcom . intellij . openapi . editor . Editor Custom Element Renderer Ċ import Ġcom . intellij . openapi . editor . In lay Ċ import Ġcom . intellij . openapi . editor . ex . Editor Ex Ċ import Ġcom . intellij . openapi . editor . impl . Editor Impl Ċ import Ġcom . intellij . openapi . util . Dis poser Ċ import Ġcom . intellij . ui . Ide Border Factory Ċ import Ġcom . intellij . util . cast S af ely To Ċ import Ġorg . intellij . data vis . r . in lay s . Mouse Wheel Utils Ċ import Ġorg . intellij . data vis . r . in lay s . Resize Controller Ċ import Ġorg . jetbrains . plugins . notebooks . editor . Notebook Cell In lay Controller Ċ import Ġorg . jetbrains . plugins . notebooks . editor . Notebook Cell Lines Ċ import Ġorg . jetbrains . plugins . notebooks . editor . notebook Appearance Ċ import Ġorg . jetbrains . plugins . notebooks . editor . outputs . Notebook Output Component Factory . Companion . gutter Painter Ċ import Ġorg . jetbrains . plugins . notebooks . editor . ui . addComponent In lay Ċ import Ġorg . jetbrains . plugins . notebooks . editor . ui . register Editor Size Watcher Ċ import Ġorg . jetbrains . plugins . notebooks . editor . ui . text Editing Area Width Ċ import Ġorg . jetbrains . plugins . notebooks . editor . ui . y Offset From Editor Ċ import Ġjava . awt .* Ċ import Ġjava . awt . event . Adjustment Listener Ċ import Ġjava . awt . event . Component Adapter Ċ import Ġjava . awt . event . Component Event Ċ import Ġjavax . swing . J Component Ċ import Ġjavax . swing . JPanel Ċ import Ġjavax . swing . J Viewport Ċ import Ġkotlin . math . max Ċ import Ġkotlin . math . min Ċ Ċ /** Ċ Ġ* ĠShows Ġoutputs Ġfor Ġintervals Ġusing Ġ[ Notebook Output Data Key Extractor ] Ġand Ġ[ Notebook Output Component Factory ]. Ċ Ġ*/ Ċ class ĠNotebook Output In lay Controller Ġprivate Ġconstructor ( ĊĠ Ġoverride Ġval Ġfactory : ĠNotebook Cell In lay Controller . Factory , ĊĠ Ġprivate Ġval Ġeditor : ĠEditor Impl , ĊĠ Ġlines : ĠInt Range , Ċ ) Ġ: ĠNotebook Cell In lay Controller Ġ{ ĊĠ Ġprivate Ġval Ġinner Component Ġ= ĠInner Component () ĊĠ Ġprivate Ġval Ġinner Component ScrollPane Ġ= ĠInner Component ScrollPane ( inner Component ) ĊĠ Ġprivate Ġval Ġouter Component Ġ= ĠSur rounding Component . create ( editor , Ġinner Component ScrollPane ) ĊĊĠ Ġoverride Ġval Ġin lay : ĠIn lay < *> Ġ= ĊĠĠĠ Ġeditor . addComponent In lay ( ĊĠĠĠĠĠ Ġouter Component , ĊĠĠĠĠĠ Ġis Related To Pre ced ing Text Ġ= Ġtrue , ĊĠĠĠĠĠ Ġshow Above Ġ= Ġfalse , ĊĠĠĠĠĠ Ġpriority Ġ= Ġeditor . notebook Appearance . NOTE BOOK _ OUTPUT _ IN LAY _ PRIORITY , ĊĠĠĠĠĠ Ġoffset Ġ= Ġeditor . document . getLine End Offset ( lines . last ), ĊĠĠĠ Ġ) ĊĊĠ Ġinit Ġ{ ĊĠĠĠ ĠDis poser . register ( in lay ) Ġ{ ĊĠĠĠĠĠ Ġfor Ġ( dis posable Ġin Ġinner Component . components ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( dis posable Ġis ĠDis posable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠDis poser . dispose ( dis posable ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġregister Editor Size Watcher ( inner Component ScrollPane ) Ġ{ ĊĠĠĠĠĠ Ġinner Component ScrollPane . max Height Ġ= Ġ( editor . scroll ing Model . visible Area . height Ġ* Ġ 0 . 6 6 ). toInt () ĊĠĠĠĠĠ Ġinner Component ScrollPane . invalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Component ScrollPane . vertical ScrollBar . add Adjustment Listener ( ĊĠĠĠĠĠ ĠAdjust ment Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġeditor Ex : ĠEditor Ex Ġ= Ġeditor ĊĠĠĠĠĠĠĠ Ġeditor Ex . gutter Component Ex . rep aint () ĊĠĠĠĠĠ Ġ}) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġpaint G utter ( editor : ĠEditor Impl , Ġg : ĠGraphics , Ġr : ĠRectangle , Ġinterval Iterator : ĠList Iterator < Notebook Cell Lines . Interval >) Ġ{ ĊĠĠĠ Ġval Ġy Offset Ġ= Ġinner Component ScrollPane . y Offset From Editor ( editor ) Ġ?: Ġreturn ĊĠĠĠ Ġval Ġbounds Ġ= ĠRectangle () ĊĠĠĠ Ġval Ġold Clip Ġ= Ġg . clip Bounds ĊĠĠĠ Ġg . clip Ġ= ĠRectangle ( old Clip . x , Ġy Offset , Ġold Clip . width , Ġinner Component ScrollPane . height ). intersection ( old Clip ) ĊĠĠĠ Ġfor Ġ( component Ġin Ġinner Component . components ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( component Ġis ĠJ Component ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcomponent . gutter Painter ?. let Ġ{ Ġpainter Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġcomponent . y Offset From Editor ( editor )?. let Ġ{ Ġy Offset Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbounds . setBounds ( r . x , Ġy Offset , Ġr . width , Ġcomponent . height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpainter . paint G utter ( editor , Ġg , Ġbounds ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġg . clip Ġ= Ġold Clip ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġrank Compatibility ( output Data Keys : ĠList < Notebook Output Data Key >): ĠInt Ġ= ĊĠĠĠ Ġget Components With Factories (). zip ( output Data Keys ). sum By Ġ{ Ġ( pair , Ġoutput Data Key ) Ġ-> ĊĠĠĠĠĠ Ġval Ġ( component , Ġfactory ) Ġ= Ġpair ĊĠĠĠĠĠ Ġwhen Ġ( factory . match ( component , Ġoutput Data Key )) Ġ{ ĊĠĠĠĠĠĠĠ ĠNotebook Output Component Factory . Match . NONE Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠ ĠNotebook Output Component Factory . Match . COMPAT IBLE Ġ-> Ġ 1 ĊĠĠĠĠĠĠĠ ĠNotebook Output Component Factory . Match . SAME Ġ-> Ġ 1 0 0 0 ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Components With Factories () Ġ= Ġmutable ListOf < Pair < J Component , ĠNotebook Output Component Factory >> (). also Ġ{ ĊĠĠĠ Ġfor Ġ( component Ġin Ġinner Component . components ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( component Ġis ĠJ Component ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfactory Ġ= Ġcomponent . output Component Factory ĊĠĠĠĠĠĠĠ Ġif Ġ( factory Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġit Ġ+= Ġcomponent Ġto Ġfactory ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġupdate Data ( output Data Keys : ĠList < Notebook Output Data Key >): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġoutput Data Key Iterator Ġ= Ġoutput Data Keys . iterator () ĊĠĠĠ Ġval Ġcomponents With Factories Ġ= Ġget Components With Factories (). iterator () ĊĠĠĠ Ġvar Ġis Filled Ġ= Ġfalse ĊĠĠĠ Ġfor Ġ(( idx , Ġpair 1 ) Ġin Ġoutput Data Key Iterator . zip ( components With Factories ). with Index ()) Ġ{ ĊĠĠĠĠĠ Ġval Ġ( output Data Key , Ġpair 2 ) Ġ= Ġpair 1 ĊĠĠĠĠĠ Ġval Ġ( component , Ġfactory ) Ġ= Ġpair 2 ĊĠĠĠĠĠ Ġis Filled Ġ= Ġis Filled Ġ|| Ġwhen Ġ( factory . match ( component , Ġoutput Data Key )) Ġ{ ĊĠĠĠĠĠĠĠ ĠNotebook Output Component Factory . Match . NONE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġinner Component . remove ( idx ) ĊĠĠĠĠĠĠĠĠĠ Ġval Ġnew Component Ġ= Ġcreate Output ( factory , Ġoutput Data Key ) ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Component Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Component . add ( new Component . component , Ġnew Component . width Stretch ing . fixed Width Layout Constraint , Ġidx ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠNotebook Output Component Factory . Match . COMPAT IBLE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġfactory . update Component ( editor , Ġcomponent , Ġoutput Data Key ) ĊĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠNotebook Output Component Factory . Match . SAME Ġ-> Ġtrue ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfor Ġ( ignored Ġin Ġcomponents With Factories ) Ġ{ ĊĠĠĠĠĠ Ġinner Component . remove ( inner Component . component Count Ġ- Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfor Ġ( output Data Key Ġin Ġoutput Data Key Iterator ) Ġ{ ĊĠĠĠĠĠ Ġval Ġnew Component Ġ= ĊĠĠĠĠĠĠĠ ĠNotebook Output Component Factory . EP _ NAME . extension List . as Sequence () ĊĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġfactory Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Output ( factory , Ġoutput Data Key ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ. first OrNull () ĊĠĠĠĠĠ Ġif Ġ( new Component Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Filled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġinner Component . add ( new Component . component , Ġnew Component . width Stretch ing . fixed Width Layout Constraint ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġis Filled ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcreate Output ( factory : ĠNotebook Output Component Factory , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Data Key : ĠNotebook Output Data Key ) Ġ= ĊĠĠĠ Ġfactory . create Component ( editor , Ġoutput Data Key , Ġin lay )?. also Ġ{ ĊĠĠĠĠĠ Ġit . component . output Component Factory Ġ= Ġfactory ĊĠĠĠĠĠ Ġit . component . gutter Painter Ġ= Ġit . gutter Painter ĊĠĠĠĠĠ Ġif Ġ( it . has Un limited Height ) Ġit . component . has Un limited Height Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠ Ġclass ĠFactory Ġ: ĠNotebook Cell In lay Controller . Factory Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġcompute ( ĊĠĠĠĠĠ Ġeditor : ĠEditor Impl , ĊĠĠĠĠĠ Ġcurrent Controllers : ĠCollection < Notebook Cell In lay Controller >, ĊĠĠĠĠĠ Ġinterval Iterator : ĠList Iterator < Notebook Cell Lines . Interval >, ĊĠĠĠ Ġ): ĠNotebook Cell In lay Controller ? Ġ{ ĊĠĠĠĠĠ Ġif Ġ(! New Output In lay s Switch . use New For Anything ) Ġreturn Ġnull ĊĊĠĠĠĠĠ Ġval Ġinterval Ġ= Ġinterval Iterator . next () ĊĠĠĠĠĠ Ġif Ġ( interval . type Ġ!= ĠNotebook Cell Lines . Cell Type . CODE ) Ġreturn Ġnull ĊĊĠĠĠĠĠ Ġval Ġoutput Data Keys Ġ= ĊĠĠĠĠĠĠĠ ĠNotebook Output Data Key Extractor . EP _ NAME . extension List . as Sequence () ĊĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġit . extract ( editor , Ġinterval ) Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ. first OrNull () ĊĠĠĠĠĠĠĠĠĠ Ġ? . take If Ġ{ Ġit . isNotEmpty () Ġ} ĊĠĠĠĠĠĠĠ Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠ Ġval Ġcontroller Ġ= ĊĠĠĠĠĠĠĠ Ġcurrent Controllers ĊĠĠĠĠĠĠĠĠĠ Ġ. filter Is Instance < Notebook Output In lay Controller >() ĊĠĠĠĠĠĠĠĠĠ Ġ. max By OrNull Ġ{ Ġit . rank Compatibility ( output Data Keys ) Ġ} ĊĠĠĠĠĠĠĠ Ġ?: ĠNotebook Output In lay Controller ( this , Ġeditor , Ġinterval . lines ) ĊĠĠĠĠĠ Ġreturn Ġcontroller . take If Ġ{ Ġit . update Data ( output Data Keys ) Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ val ĠEditor Custom Element Renderer . notebook In lay Output Component : ĠJ Component ? ĊĠ Ġget () Ġ= Ġcast S af ely To < J Component >() ?. components ?. first OrNull ()?. cast S af ely To < Sur rounding Component >() Ċ Ċ private Ġval ĠNotebook Output Component Factory . Width Stretch ing . fixed Width Layout Constraint ĊĠ Ġget () Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠ ĠNotebook Output Component Factory . Width Stretch ing . ST RET CH _ AND _ S QUE E ZE Ġ-> ĠFixed Width Layout . ST RET CH _ AND _ S QUE E ZE ĊĠĠĠ ĠNotebook Output Component Factory . Width Stretch ing . ST RET CH Ġ-> ĠFixed Width Layout . ST RET CH ĊĠĠĠ ĠNotebook Output Component Factory . Width Stretch ing . S QUE E ZE Ġ-> ĠFixed Width Layout . S QUE E ZE ĊĠĠĠ ĠNotebook Output Component Factory . Width Stretch ing . NOTH ING Ġ-> ĠFixed Width Layout . NOTH ING ĊĠ Ġ} Ċ Ċ private Ġclass ĠSur rounding Component Ġprivate Ġconstructor ( inner Component ScrollPane : ĠInner Component ScrollPane ) Ġ: ĠJPanel ( Border Layout ()) Ġ{ ĊĠ Ġprivate Ġvar Ġpreset Width Ġ= Ġ 0 ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġborder Ġ= ĠIde Border Factory . create Empty Border ( Insets ( 1 0 , Ġ 0 , Ġ 1 0 , Ġ 0 )) ĊĠĠĠ Ġadd ( inner Component ScrollPane , ĠBorderLayout . CENTER ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġupdate UI () Ġ{ ĊĠĠĠ Ġsuper . update UI () ĊĠĠĠ Ġis Opaque Ġ= Ġfalse ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget PreferredSize (): ĠDimension Ġ= Ġsuper . get PreferredSize (). also Ġ{ ĊĠĠĠ Ġit . width Ġ= Ġpreset Width ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġvalidate Tree () Ġ{ ĊĠĠĠ Ġsize Ġ= Ġpreferred Size ĊĠĠĠ Ġsuper . validate Tree () ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġcreate ( ĊĠĠĠĠĠ Ġeditor : ĠEditor Impl , ĊĠĠĠĠĠ Ġinner Component ScrollPane : ĠInner Component ScrollPane , ĊĠĠĠ Ġ) Ġ= ĠSur rounding Component ( inner Component ScrollPane ). also Ġ{ ĊĠĠĠĠĠ Ġval Ġresize Controller Ġ= ĠResize Controller ( it , Ġeditor ) ĊĠĠĠĠĠ Ġit . add Mouse Listener ( resize Controller ) ĊĠĠĠĠĠ Ġit . add Mouse Wheel Listener ( resize Controller ) ĊĠĠĠĠĠ Ġit . add Mouse Motion Listener ( resize Controller ) ĊĊĠĠĠĠĠ ĠMouse Wheel Utils . wrap Mouse Wheel Listeners ( it , Ġeditor . dis posable ) ĊĊĠĠĠĠĠ Ġregister Editor Size Watcher ( it ) Ġ{ ĊĠĠĠĠĠĠĠ Ġit . preset Width Ġ= Ġeditor . text Editing Area Width ĊĠĠĠĠĠĠĠ Ġit . invalidate () ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġfor Ġ( wrapper Ġin ĠNotebook Output Component Wrapper . EP _ NAME . extension List ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwrapper . wrap ( it ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠInner Component ScrollPane ( inner Component : ĠInner Component ) Ġ: ĠNotebook Output Non Sticky ScrollPane ( inner Component ) Ġ{ ĊĠ Ġvar ĠmaxHeight Ġ= Ġ 0 ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġviewport . addComponent Listener ( Viewport Component Listener ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġupdate UI () Ġ{ ĊĠĠĠ Ġsuper . update UI () ĊĠĠĠ Ġis Opaque Ġ= Ġfalse ĊĠĠĠ Ġviewport . is Opaque Ġ= Ġfalse ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġis Validate Root (): ĠBoolean Ġ= Ġfalse ĊĊĠ Ġoverride Ġfun Ġget PreferredSize (): ĠDimension Ġ= ĊĠĠĠ Ġsuper . get PreferredSize (). also Ġ{ ĊĠĠĠĠĠ Ġif Ġ( ĊĠĠĠĠĠĠĠ Ġit . width Ġ> Ġwidth ĊĠĠĠĠĠĠĠ Ġ// ĠJ B ScrollPane Ġcontr ad ict s Ġwith ĠJ ScrollPane : Ġit Ġadds Ġa Ġvertical Ġpadding Ġif Ġthe Ġhorizontal Ġscrollbar Ġnot Ġat Ġthe Ġzero Ġposition . ĊĠĠĠĠĠĠĠ Ġ// ĠH ad Ġthere Ġbeen ĠJ ScrollPane , Ġthe Ġcondition Ġbelow Ġwouldn 't Ġhave Ġbeen Ġneeded . ĊĠĠĠĠĠĠĠ Ġ&& Ġhorizontal ScrollBar . value Ġ== Ġ 0 ĊĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġit . height Ġ+= Ġhorizontal ScrollBar . height ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ(!( viewport . view Ġas ĠInner Component ). components . filter Is Instance < J Component >(). all ( J Component :: has Un limited Height )) Ġ{ ĊĠĠĠĠĠĠĠ Ġit . height Ġ= Ġmin ( max Height , Ġit . height ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġobject ĠView port Component Listener Ġ: ĠComponent Adapter () Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġcomponent Res ized ( e : ĠComponent Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtarget Ġ= Ġ( e . source Ġas ĠJ Viewport ). parent Ġas ĠInner Component ScrollPane ĊĠĠĠĠĠĠĠ Ġval Ġinner Component Ġ= Ġtarget . viewport . view Ġas ĠInner Component ĊĠĠĠĠĠĠĠ Ġval Ġfirst Time Ġ= Ġinner Component . min Width Ġ== Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġ// ĠTr icky ĠJ B ScrollPane Ġcalculates Ġpreferred Ġsizes Ġlike Ġthere 's Ġno Ġscrollbar , Ġand Ġapplies Ġthat Ġsize Ġeven Ġif Ġthere 's Ġa Ġscrollbar . ĊĠĠĠĠĠĠĠ Ġ// ĠOut smart ing Ġit . ĊĠĠĠĠĠĠĠ Ġinner Component . min Width Ġ= Ġtarget . viewport . width Ġ- Ġtarget . vertical ScrollBar . width ĊĠĠĠĠĠĠĠ Ġinner Component . invalidate () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( first Time ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// ĠWithout Ġthis Ġcall , Ġthe Ġcomponent Ġwill Ġbe Ġsized Ġincorrectly Ġuntil Ġany ĠA WT Ġevent . ĊĠĠĠĠĠĠĠĠĠ Ġinner Component . validate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ // ĠCan 't Ġinherit ĠScroll able : Ġif ĠScroll able . get Scroll able Tracks Viewport Width Ġreturns Ġtrue , Ġthe Ġscrollbar Ġis Ġnever Ġshown , Ġeven Ġif Ċ // Ġthe Ġcontent Ġoverflow s . ĠWithout Ġthat , ĠScroll able Ġis Ġnot Ġneeded . Ċ private Ġclass ĠInner Component Ġ: ĠJPanel () Ġ{ ĊĠ Ġvar ĠminWidth Ġ= Ġ 0 ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġlayout Ġ= ĠFixed Width Layout Ġ{ ĠminWidth Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġupdate UI () Ġ{ ĊĠĠĠ Ġsuper . update UI () ĊĠĠĠ Ġis Opaque Ġ= Ġfalse ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġ< A , ĠB > ĠIterator < A >. zip ( other : ĠIterator < B >): ĠIterator < Pair < A , ĠB >> Ġ= Ġobject Ġ: ĠIterator < Pair < A , ĠB >> Ġ{ ĊĠ Ġoverride Ġfun Ġhas Next (): ĠBoolean Ġ= Ġthis @ zip . hasNext () Ġ&& Ġother . hasNext () ĊĠ Ġoverride Ġfun Ġnext (): ĠPair < A , ĠB > Ġ= Ġthis @ zip . next () Ġto Ġother . next () Ċ } Ċ Ċ private Ġvar ĠJ Component . output Component Factory : ĠNotebook Output Component Factory ? ĊĠ Ġget () Ġ= ĊĠĠĠ ĠgetClient Property ( Notebook Output Component Factory :: class . java ) Ġas ĠNotebook Output Component Factory ? ĊĠ Ġset ( value ) Ġ{ ĊĠĠĠ Ġput Client Property ( Notebook Output Component Factory :: class . java , Ġvalue ) ĊĠ Ġ} Ċ Ċ private Ġclass ĠFixed Width Layout ( private Ġval Ġwidth Getter : Ġ( Container ) Ġ-> ĠInt ) Ġ: ĠLayout Manager Ġ{ ĊĠ Ġoverride Ġfun Ġadd Layout Component ( name : ĠString ?, Ġcomp : ĠComponent ) Ġ{ ĊĠĠĠ Ġrequire ( ĊĠĠĠĠĠ Ġname Ġ== ĠST RET CH _ AND _ S QUE E ZE Ġ|| ĊĠĠĠĠĠ Ġname Ġ== ĠST RET CH Ġ|| ĊĠĠĠĠĠ Ġname Ġ== ĠS QUE E ZE Ġ|| ĊĠĠĠĠĠ Ġname Ġ== ĠNOT H ING ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠ Ġname . toString () ĊĠĠĠ Ġ} ĊĠĠĠ Ġcomp . constraints Ġ= Ġname ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġremove Layout Component ( comp : ĠComponent ) Ġ{ ĊĠĠĠ Ġcomp . constraints Ġ= Ġnull ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġpreferred Layout Size ( parent : ĠContainer ): ĠDimension Ġ= ĊĠĠĠ Ġfold Size ( parent ) Ġ{ Ġpreferred Size Ġ} ĊĊĠ Ġoverride Ġfun Ġminimum Layout Size ( parent : ĠContainer ): ĠDimension Ġ= ĊĠĠĠ Ġfold Size ( parent ) Ġ{ Ġminimum Size Ġ} ĊĊĠ Ġoverride Ġfun Ġlayout Container ( parent : ĠContainer ) Ġ{ ĊĠĠĠ Ġval Ġparent Insets Ġ= Ġparent . in sets ĊĠĠĠ Ġval Ġparent Desired Width Ġ= Ġwidth Getter ( parent ) ĊĠĠĠ Ġvar Ġtotal Y Ġ= Ġparent Insets . top ĊĠĠĠ Ġfor Ġ( component Ġin Ġparent . components ) Ġ{ ĊĠĠĠĠĠ Ġval Ġcomponent Prefer ed Size Ġ= Ġcomponent . preferred Size ĊĠĠĠĠĠ Ġval Ġnew Width Ġ= Ġget Component Width By Constraint ( parent Desired Width , Ġparent Insets , Ġcomponent . constraints , Ġcomponent Prefer ed Size . width ) ĊĠĠĠĠĠ Ġcomponent . setBounds ( ĊĠĠĠĠĠĠĠ Ġparent Insets . left , ĊĠĠĠĠĠĠĠ Ġtotal Y , ĊĠĠĠĠĠĠĠ Ġnew Width , ĊĠĠĠĠĠĠĠ Ġcomponent Prefer ed Size . height , ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġtotal Y Ġ+= Ġcomponent Prefer ed Size . height ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġinline Ġfun Ġfold Size ( parent : ĠContainer , Ġcross inline Ġhandler : ĠComponent . () Ġ-> ĠDimension ): ĠDimension Ġ{ ĊĠĠĠ Ġvar Ġacc Ġ= ĠDimension ( 0 , Ġparent . in sets . run Ġ{ Ġtop Ġ+ Ġbottom Ġ}) ĊĊĠĠĠ Ġfor Ġ( component Ġin Ġparent . components ) Ġ{ ĊĠĠĠĠĠ Ġval Ġcomponent Dimensions Ġ= Ġcomponent . handler () ĊĠĠĠĠĠ Ġval Ġparent Prefer ed Width Ġ= Ġwidth Getter ( parent ) ĊĠĠĠĠĠ Ġval Ġcomponent Width Ġ= Ġget Component Width By Constraint ( parent Prefer ed Width , Ġparent . in sets , Ġcomponent . constraints , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent Dimensions . width ) ĊĠĠĠĠĠ Ġacc Ġ= ĠDimension ( component Width , Ġacc . height Ġ+ Ġcomponent Dimensions . height ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġacc ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Component Width By Constraint ( parent Width : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Insets : ĠIn sets , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent Constraints : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent Desired Width : ĠInt ): ĠInt Ġ= ĊĠĠĠ Ġ( parent Width Ġ- Ġparent Insets . left Ġ- Ġparent Insets . right ). let Ġ{ ĊĠĠĠĠĠ Ġwhen Ġ( component Constraints ) Ġ{ ĊĠĠĠĠĠĠĠ ĠST RET CH _ AND _ S QUE E ZE Ġ-> Ġit ĊĠĠĠĠĠĠĠ ĠST RET CH Ġ-> Ġmax ( it , Ġcomponent Desired Width ) ĊĠĠĠĠĠĠĠ ĠS QUE E ZE Ġ-> Ġmin ( it , Ġcomponent Desired Width ) ĊĠĠĠĠĠĠĠ ĠNOT H ING Ġ-> Ġcomponent Desired Width ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror ( component Constraints . toString ()) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġcompanion Ġobject ĠConstraints Ġ{ ĊĠĠĠ Ġ/** ĠSee Ġ[ Notebook Output Component Factory . Width Stretch ing . ST RET CH _ AND _ S QUE E ZE ] Ġ*/ ĊĠĠĠ Ġconst Ġval ĠST RET CH _ AND _ S QUE E ZE Ġ= Ġ" ST RET CH _ AND _ S QUE E ZE " ĊĊĠĠĠ Ġ/** ĠSee Ġ[ Notebook Output Component Factory . Width Stretch ing . ST RET CH ] Ġ*/ ĊĠĠĠ Ġconst Ġval ĠST RET CH Ġ= Ġ" ST RET CH " ĊĊĠĠĠ Ġ/** ĠSee Ġ[ Notebook Output Component Factory . Width Stretch ing . S QUE E ZE ] Ġ*/ ĊĠĠĠ Ġconst Ġval ĠS QUE E ZE Ġ= Ġ" S QUE E ZE " ĊĊĠĠĠ Ġ/** ĠSee Ġ[ Notebook Output Component Factory . Width Stretch ing . NOTH ING ] Ġ*/ ĊĠĠĠ Ġconst Ġval ĠNOT H ING Ġ= Ġ" NOTH ING " ĊĊĠĠĠ Ġprivate Ġvar ĠComponent . constraints : ĠString ? ĊĠĠĠĠĠ Ġget () Ġ= Ġcast S af ely To < J Component >() ?. getClient Property ( Constraints ) Ġas ĠString ? ĊĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcast S af ely To < J Component >() ?. put Client Property ( Constraints , Ġvalue ) ĊĠĠĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ private Ġvar ĠJ Component . has Un limited Height : ĠBoolean ĊĠ Ġget () Ġ= ĠgetClient Property (" un limited Height ") Ġ!= Ġnull ĊĠ Ġset ( value ) Ġ{ ĊĠĠĠ Ġput Client Property (" un limited Height ", Ġif Ġ( value ) ĠUnit Ġelse Ġnull ) ĊĠ Ġ}