/* Ċ Ġ* ĠCopyright Ġ 2 0 0 0 - 2 0 1 9 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . intellij . data vis . r . in lay s . components Ċ Ċ import Ġcom . intellij . execution . process . Process OutputType Ċ import Ġcom . intellij . execution . process . Process Output Types Ċ import Ġcom . intellij . openapi . Disposable Ċ import Ġcom . intellij . openapi . action System . An Action Ċ import Ġcom . intellij . openapi . editor . Editor Ċ import Ġcom . intellij . openapi . util . Key Ċ import Ġcom . intellij . ui . Relative Font Ċ import Ġcom . intellij . util . ui . UI Util Ċ import Ġjava . awt . Border Layout Ċ import Ġjava . awt . Font Ċ import Ġjava . awt . Rectangle Ċ import Ġjava . awt . event . Component Adapter Ċ import Ġjava . awt . event . Component Event Ċ import Ġkotlin . math . min Ċ Ċ class ĠProcess Output ( val Ġtext : ĠString , Ġkind : ĠKey <* >) Ġ{ ĊĠ Ġprivate Ġval Ġkind Value : ĠInt Ġ= Ġwhen ( kind ) Ġ{ ĊĠĠĠ ĠProcess Output Types . STDOUT Ġ-> Ġ 1 ĊĠĠĠ ĠProcess Output Types . STD ERR Ġ-> Ġ 2 ĊĠĠĠ Ġelse Ġ-> Ġ 3 ĊĠ Ġ} ĊĊĠ Ġval Ġkind : ĠKey < *> ĊĠĠĠ Ġget () Ġ= Ġwhen Ġ( kind Value ) Ġ{ ĊĠĠĠĠĠĠ 1 Ġ-> ĠProcess OutputType . STDOUT ĊĠĠĠĠĠĠ 2 Ġ-> ĠProcess OutputType . STD ERR ĊĠĠĠĠĠ Ġelse Ġ-> ĠProcess OutputType . SYSTEM ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ /** ĠNotebook Ġconsole Ġlogs , ĠHTML , Ġand Ġtable Ġresult Ġview . Ġ*/ Ċ class ĠNotebook In lay Output ( private Ġval Ġeditor : ĠEditor , Ġprivate Ġval Ġparent : ĠDis posable ) Ġ: ĠNotebook In lay State (), ĠTool Bar Provider Ġ{ ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġlayout Ġ= ĠBorderLayout () ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠRES IZE _ TASK _ NAME Ġ= Ġ" Resize Ġgraphics " ĊĠĠĠ Ġprivate Ġconst Ġval ĠRES IZE _ TASK _ IDENTITY Ġ= Ġ" Res izing Ġgraphics " ĊĠĠĠ Ġprivate Ġconst Ġval ĠRES IZE _ TIME _ SPAN Ġ= Ġ 5 0 0 ĊĊĠĠĠ Ġprivate Ġval Ġmono spaced Font Ġ= ĠRelative Font . NORMAL . family ( Font . MON O SP AC ED ) ĊĠĠĠ Ġprivate Ġval Ġoutput Font Ġ= Ġmono spaced Font . derive ( UI Util . getLabel Font (). derive Font ( UI Util . get FontSize ( UI Util . FontSize . SMALL ))) ĊĠ Ġ} ĊĊĠ Ġprivate Ġvar Ġoutput : ĠIn lay Output ? Ġ= Ġnull ĊĊĊĠ Ġprivate Ġfun Ġadd Table Output () Ġ= Ġcreate Output Ġ{ Ġparent , Ġeditor , Ġclear Action Ġ-> ĠIn lay Output Table ( parent , Ġeditor , Ġclear Action ) Ġ} ĊĊĠ Ġprivate Ġfun Ġadd Text Output () Ġ= Ġcreate Output Ġ{ Ġ Ġparent , Ġeditor , Ġclear Action Ġ-> Ġ ĠIn lay Output Text ( parent , Ġeditor , Ġclear Action ) Ġ} ĊĊĠ Ġprivate Ġfun Ġadd Html Output () Ġ= Ġcreate Output Ġ{ Ġ Ġparent , Ġeditor , Ġclear Action Ġ-> Ġ ĠIn lay Output Html ( parent , Ġeditor , Ġclear Action ) Ġ} ĊĊĠ Ġprivate Ġfun Ġadd Img Output () Ġ= Ġcreate Output Ġ{ Ġ Ġparent , Ġeditor , Ġclear Action Ġ-> Ġ ĠIn lay Output Img ( parent , Ġeditor , Ġclear Action ) Ġ} ĊĊĠ Ġprivate Ġinline Ġfun Ġ< T : ĠIn lay Output > Ġcreate Output ( constructor : Ġ( Disposable , ĠEditor , Ġ() Ġ-> ĠUnit ) Ġ-> ĠT ) Ġ= ĊĠĠĠ Ġconstructor ( parent , Ġeditor , Ġclear Action ). apply Ġ{ Ġsetup Output ( this ) Ġ} ĊĊĠ Ġprivate Ġfun Ġsetup Output ( output : ĠIn lay Output ) Ġ{ ĊĠĠĠ Ġthis . output ?. let Ġ{ Ġremove ( it . getComponent ()) Ġ} ĊĠĠĠ Ġthis . output Ġ= Ġoutput ĊĠĠĠ Ġoutput . on Height Calculated Ġ= Ġ{ Ġheight Ġ-> Ġon Height Calculated ?. invoke ( height ) Ġ} ĊĠĠĠ Ġadd ( output . getComponent (), ĠBorderLayout . CENTER ) ĊĊĠĠĠ Ġadd Component Listener ( object Ġ: ĠComponent Adapter () Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġcomponent Res ized ( e : ĠComponent Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( output . is Full Width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġoutput . getComponent (). bounds Ġ= ĠRectangle ( 0 , Ġ 0 , Ġe . component . bounds . width , Ġe . component . bounds . height ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġoutput . getComponent (). bounds Ġ= ĠRectangle ( 0 , Ġ 0 , Ġmin ( output . getComponent (). preferred Size . width , Ġe . component . bounds . width ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . component . bounds . height ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠĠĠ Ġif Ġ( add Toolbar ) Ġ{ ĊĠĠĠĠĠ Ġoutput . add Toolbar () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġvar Ġadd Toolbar Ġ= Ġfalse ĊĊĠ Ġfun Ġadd Toolbar () Ġ{ ĊĠĠĠ Ġadd Toolbar Ġ= Ġtrue ĊĠĠĠ Ġoutput ?. add Toolbar () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Or Add Text Output (): ĠIn lay Output Text Ġ{ ĊĠĠĠ Ġ( output Ġas ? ĠIn lay Output Text )?. let Ġ{ Ġreturn Ġit Ġ} ĊĠĠĠ Ġreturn Ġadd Text Output () ĊĠ Ġ} ĊĊĠ Ġfun Ġadd Data ( type : ĠString , Ġdata : ĠString , Ġprogress Status : ĠIn lay Progress Status ?): ĠIn lay Output Provider ? Ġ{ ĊĠĠĠ Ġval Ġprovider Ġ= ĠIn lay Output Provider . EP . extension List . as Sequence (). filter Ġ{ Ġit . accept Type ( type ) Ġ}. first OrNull () ĊĠĠĠ Ġval Ġin lay Output : ĠIn lay Output ĊĠĠĠ Ġif Ġ( provider Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġin lay Output Ġ= Ġoutput . take If Ġ{ Ġit ?. accept Type ( type ) Ġ== Ġtrue Ġ} Ġ?: Ġcreate Output Ġ{ Ġparent , Ġeditor , Ġclear Action Ġ-> ĊĠĠĠĠĠĠĠ Ġprovider . create ( parent , Ġeditor , Ġclear Action ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠ Ġin lay Output Ġ= Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" TABLE " Ġ-> Ġoutput ?. take If Ġ{ Ġit Ġis ĠIn lay Output Table Ġ} Ġ?: Ġadd Table Output () ĊĠĠĠĠĠĠĠ Ġ" HTML ", Ġ" URL " Ġ-> Ġoutput ?. take If Ġ{ Ġit Ġis ĠIn lay Output Html Ġ} Ġ?: Ġadd Html Output () ĊĠĠĠĠĠĠĠ Ġ" IMG ", Ġ" IMG Base 6 4 ", Ġ" IMG SVG " Ġ-> Ġoutput ?. take If Ġ{ Ġit Ġis ĠIn lay Output Img Ġ} Ġ?: Ġadd Img Output () ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġget Or Add Text Output () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprogress Status ?. let Ġ{ ĊĠĠĠĠĠ Ġin lay Output . update Progress Status ( editor , Ġit ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġin lay Output . addData ( data , Ġtype ) ĊĠĠĠ Ġreturn Ġprovider ĊĠ Ġ} ĊĊĠ Ġfun Ġadd Text ( message : ĠString , Ġoutput Type : ĠKey <* >) Ġ{ ĊĠĠĠ Ġget Or Add Text Output (). addData ( message , Ġoutput Type ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġupdate Progress Status ( progress Status : ĠIn lay Progress Status ) Ġ{ ĊĠĠĠ Ġoutput ?. update Progress Status ( editor , Ġprogress Status ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġclear () Ġ{ ĊĠĠĠ Ġoutput ?. clear () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget Collapsed Description (): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( output Ġ== Ġnull ) Ġ"" Ġelse Ġoutput !!. get Collapsed Description () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Viewport Change ( isIn Viewport : ĠBoolean ) Ġ{ ĊĠĠĠ Ġoutput ?. on Viewport Change ( isIn Viewport ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Actions (): ĠList < An Action > Ġ= Ġoutput ?. actions Ġ?: Ġempty List () Ċ } Ċ