/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 - 2 0 2 1 ĠSl aw om ir ĠC zer win ski Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġit . c zer win ski . intellij . common . editor Ċ Ċ import Ġcom . intellij . openapi . action System . Action Places Ċ import Ġcom . intellij . openapi . action System . Action Toolbar Ċ import Ġcom . intellij . openapi . file Editor . File Editor Ċ import Ġcom . intellij . openapi . file Editor . Text Editor Ċ import Ġcom . intellij . ui . JB Splitter Ċ import Ġit . c zer win ski . intellij . common . ui . Action Toolbar Builder Ċ import Ġit . c zer win ski . intellij . common . ui . Editor Splitter Ċ import Ġit . c zer win ski . intellij . common . ui . Editor Toolbar Header Ċ import Ġit . c zer win ski . intellij . common . ui . Editor With Toolbar Ċ import Ġjava . awt . Border Layout Ċ import Ġjavax . swing . J Component Ċ import Ġjavax . swing . JPanel Ċ Ċ /** Ċ Ġ* ĠSplit Ġeditor ĠUI Ġcomponent . Ċ Ġ*/ Ċ class ĠSplit Editor Component ( ĊĠĠĠ Ġprivate Ġval Ġtext Editor : ĠText Editor , ĊĠĠĠ Ġprivate Ġval Ġpreview Editor : ĠFile Editor Ċ ) Ġ: ĠJPanel ( Border Layout ()) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġmy Text Editor Component Ġget () Ġ= Ġtext Editor . component ĊĠĠĠ Ġprivate Ġval Ġmy Preview Editor Component Ġget () Ġ= Ġpreview Editor . component ĊĊĠĠĠ Ġprivate Ġval Ġmy Splitter : ĠJ B Splitter ĊĠĠĠ Ġprivate Ġval Ġmy Action Toolbar : ĠAction Toolbar ĊĊĠĠĠ Ġprivate Ġval Ġmy Editors Visibility Listeners Ġ= Ġmutable ListOf < Editors Visibility Listener >() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIndicates Ġwhether Ġthe Ġtext Ġeditor Ġis Ġbeing Ġshown . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġis Showing Text Editor : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy Text Editor Component . isVisible Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy Action Toolbar . update Actions Immediate ly () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Editors Visibility Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrep aint () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIndicates Ġwhether Ġthe Ġpreview Ġeditor Ġis Ġbeing Ġshown . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġis Showing Preview Editor : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy Preview Editor Component . isVisible Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy Action Toolbar . update Actions Immediate ly () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Editors Visibility Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrep aint () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIndicates Ġwhether Ġthe Ġsplit ter Ġshould Ġbe Ġvertical . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġis Split Vert ically : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy Splitter . orientation Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrep aint () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠP referred Ġfocused Ġcomponent Ġwhen Ġg aining Ġfocus . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġpreferred Focused Component : ĠJ Component ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Showing Text Editor Ġ-> Ġtext Editor . preferred Focused Component ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Showing Preview Editor Ġ-> Ġpreview Editor . preferred Focused Component ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġmy Splitter Ġ= Ġcreate Splitter () ĊĠĠĠĠĠĠĠ Ġmy Action Toolbar Ġ= ĠAction Toolbar Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction GroupId ( TOOL BAR _ ACTION S _ GROUP _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Place ( Action Places . EDITOR _ TOOL BAR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTarget Component ( my Splitter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġlayout Children () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Splitter (): ĠJ B Splitter Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsplit ter Ġ= ĠEditor Splitter ( vertical Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġsplit ter . splitter Pro portion Key Ġ= Ġ"${ java Class . simple Name }. Pro portion " ĊĠĠĠĠĠĠĠ Ġsplit ter . components Ġ= Ġmy Text Editor Component Ġto Ġmy Preview Editor Component ĊĠĠĠĠĠĠĠ Ġreturn Ġsplit ter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlayout Children () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġeditor With Toolbar Ġ= ĠEditor With Toolbar ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar Component Ġ= ĠEditor Toolbar Header ( right Action Toolbar Ġ= Ġmy Action Toolbar ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor Component Ġ= Ġmy Splitter ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġadd ( editor With Toolbar , ĠBorderLayout . CENTER ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġa Ġtext Ġand Ġpreview Ġeditors Ġvisibility Ġ[ listener ] Ġto Ġthis Ġcomponent . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Editors Visibility Listener ( listener : ĠEditor s Visibility Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmy Editors Visibility Listeners . add ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemoves Ġa Ġtext Ġand Ġpreview Ġeditors Ġvisibility Ġ[ listener ] Ġfrom Ġthis Ġcomponent . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Editors Visibility Listener ( listener : ĠEditor s Visibility Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmy Editors Visibility Listeners . remove ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnotify Editors Visibility Changed () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( listener Ġin Ġmy Editors Visibility Listeners ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . editor s Visibility Changed ( is Showing Text Editor , Ġis Showing Preview Editor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠText Ġand Ġpreview Ġeditors Ġvisibility Ġlistener . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġinterface ĠEditor s Visibility Listener Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠTrigger ed Ġwhen Ġeditors Ġvisibility Ġchanges . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġeditors Visibility Changed ( is Showing Text Editor : ĠBoolean , Ġis Showing Preview Editor : ĠBoolean ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTO OL BAR _ ACTION S _ GROUP _ ID Ġ= Ġ" Split Editor . Toolbar " ĊĠĠĠ Ġ} Ċ } Ċ