// Ġ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 Ġcom . intellij . openapi . wm . impl Ċ Ċ import Ġcom . intellij . diagnostic . Loading State Ċ import Ġcom . intellij . diagnostic . run Activity Ċ import Ġcom . intellij . icons . All Icons Ċ import Ġcom . intellij . ide . Ide EventQueue Ċ import Ġcom . intellij . ide . actions . Activate Tool Window Action Ċ import Ġcom . intellij . ide . actions . Max imize Active Dialog Action Ċ import Ġcom . intellij . internal . statistic . collect ors . f us . actions . persistence . Tool Window Collector Ċ import Ġcom . intellij . notification . impl . Notifications ManagerImpl Ċ import Ġcom . intellij . openapi . Disposable Ċ import Ġcom . intellij . openapi . action System . An Action Ċ import Ġcom . intellij . openapi . action System . An ActionEvent Ċ import Ġcom . intellij . openapi . action System . DataContext Ċ import Ġcom . intellij . openapi . action System . Keyboard Shortcut Ċ import Ġcom . intellij . openapi . action System . ex . An ActionListener Ċ import Ġcom . intellij . openapi . application . Application Manager Ċ import Ġcom . intellij . openapi . components .* Ċ import Ġcom . intellij . openapi . diagnostic . Logger Ċ import Ġcom . intellij . openapi . extensions . Extension Point Listener Ċ import Ġcom . intellij . openapi . extensions . Plugin Descriptor Ċ import Ġcom . intellij . openapi . file Editor . File Editor Manager Ċ import Ġcom . intellij . openapi . file Editor . File Editor Manager Listener Ċ import Ġcom . intellij . openapi . file Editor . ex . File Editor Manager Ex Ċ import Ġcom . intellij . openapi . file Editor . impl . Editors Split ters Ċ import Ġcom . intellij . openapi . keymap . Key map Ċ import Ġcom . intellij . openapi . keymap . Key map Manager Ċ import Ġcom . intellij . openapi . keymap . Key map Manager Listener Ċ import Ġcom . intellij . openapi . progress . Process Canceled Exception Ċ import Ġcom . intellij . openapi . project .* Ċ import Ġcom . intellij . openapi . project . ex . Project Ex Ċ import Ġcom . intellij . openapi . startup . Startup Activity Ċ import Ġcom . intellij . openapi . ui . MessageType Ċ import Ġcom . intellij . openapi . ui . Splitter Ċ import Ġcom . intellij . openapi . ui . popup . Bal loon Ċ import Ġcom . intellij . openapi . ui . popup . JB Popup Factory Ċ import Ġcom . intellij . openapi . util .* Ċ import Ġcom . intellij . openapi . util . registry . Registry Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ import Ġcom . intellij . openapi . wm .* Ċ import Ġcom . intellij . openapi . wm . ex . Tool Window Ex Ċ import Ġcom . intellij . openapi . wm . ex . Tool WindowManager Ex Ċ import Ġcom . intellij . openapi . wm . ex . Tool WindowManager Listener Ċ import Ġcom . intellij . openapi . wm . ex . WindowManager Ex Ċ import Ġcom . intellij . openapi . wm . impl . commands . Apply Window Info Cmd Ċ import Ġcom . intellij . openapi . wm . impl . commands . Final izable Command Ċ import Ġcom . intellij . openapi . wm . impl . commands . Invoke Later Cmd Ċ import Ġcom . intellij . openapi . wm . impl . commands . Request Focus In Tool Window Cmd Ċ import Ġcom . intellij . ui . Bal loon Impl Ċ import Ġcom . intellij . ui . Color Util Ċ import Ġcom . intellij . ui . Component Util Ċ import Ġcom . intellij . ui . awt . Relative Point Ċ import Ġcom . intellij . util .* Ċ import Ġcom . intellij . util . concurrency . App Executor Util Ċ import Ġcom . intellij . util . ui . Empty Icon Ċ import Ġcom . intellij . util . ui . Position Tracker Ċ import Ġcom . intellij . util . ui . Startup Ui Util Ċ import Ġcom . intellij . util . ui . UI Util Ċ import Ġcom . intellij . util . ui . update . Activ atable Ċ import Ġcom . intellij . util . ui . update . Ui Notify Connector Ċ import Ġorg . intellij . lang . annotations . J dk Constants Ċ import Ġorg . j dom . Element Ċ import Ġorg . jetbrains . annotations . Test Only Ċ import Ġjava . awt .* Ċ import Ġjava . awt . event .* Ċ import Ġjava . beans . Property ChangeListener Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjava . util . concurrent . atomic . Atomic Reference Ċ import Ġjava . util . function . Boolean Supplier Ċ import Ġjava . util . function . Predicate Ċ import Ġjava . util . function . Supplier Ċ import Ġjavax . swing .* Ċ import Ġjavax . swing . event . Hyper link Event Ċ import Ġjavax . swing . event . Hyper link Listener Ċ Ċ private Ġval ĠLOG Ġ= ĠLogger . getInstance ( Tool WindowManager Impl :: class . java ) Ċ Ċ @ State ( name Ġ= Ġ" Tool WindowManager ", ĊĠĠĠĠĠĠ Ġdefault State As Resource Ġ= Ġtrue , ĊĠĠĠĠĠĠ Ġstorage s Ġ= Ġ[ Storage ( Storage Path Macros . PRODUCT _ WORK SPACE _ FILE ), ĠStorage ( value Ġ= ĠStorage Path Macros . WORK SPACE _ FILE , Ġdeprecated Ġ= Ġtrue )] Ċ ) Ċ open Ġclass ĠTool WindowManager Impl ( val Ġproject : ĠProject ) Ġ: ĠTool WindowManager Ex (), ĠPersistent State Component < Element ?> Ġ{ ĊĠ Ġprivate Ġval Ġdispatcher Ġ= ĠEvent Dispatcher . create ( Tool WindowManager Listener :: class . java ) ĊĠ Ġprivate Ġvar Ġlayout : ĠDesktop Layout ĊĠ Ġprivate Ġval Ġid To Entry : ĠMutable Map < String , ĠTool Window Entry > Ġ= ĠHashMap () ĊĠ Ġprivate Ġval Ġinternal Decorator Listener : ĠInternal Decorator Listener Ġ= ĠMy Internal Decorator Listener () ĊĠ Ġprivate Ġval Ġactive Stack Ġ= ĠActive Stack () ĊĠ Ġprivate Ġval Ġside Stack Ġ= ĠSide Stack () ĊĠ Ġprivate Ġvar Ġtool Window Pane : ĠTool Windows Pane ? Ġ= Ġnull ĊĠ Ġprivate Ġvar Ġframe : ĠProject Frame Helper ? Ġ= Ġnull ĊĠ Ġprivate Ġvar Ġlayout To Restore Later : ĠDesktop Layout ? Ġ= Ġnull ĊĠ Ġprivate Ġvar Ġcurrent State Ġ= ĠKey State . WAIT ING ĊĠ Ġprivate Ġvar Ġwait er For Second Press : ĠAlarm ? Ġ= Ġnull ĊĊĠ Ġprivate Ġval Ġpending Set Layout Task Ġ= ĠAtomic Reference < Runnable ?> () ĊĊĠ Ġprivate Ġval Ġsecond Press Runnable Ġ= ĠRunnable Ġ{ ĊĠĠĠ Ġif Ġ( currentState Ġ!= ĠKey State . H OLD ) Ġ{ ĊĠĠĠĠĠ Ġreset Hold State () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġis Tool Window Registered ( id : ĠString ) Ġ= Ġid To Entry . containsKey ( id ) ĊĊĠ Ġprivate Ġval Ġcommand Processor Ġ= ĠCommand Processor () ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġif Ġ( project . is Default ) Ġ{ ĊĠĠĠĠĠ Ġwait er For Second Press Ġ= Ġnull ĊĠĠĠĠĠ Ġlayout Ġ= ĠDesktop Layout () ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠ Ġlayout Ġ= ĠDesktop Layout () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġrun Activity (" tool window Ġfactory Ġclass Ġpre loading ") Ġ{ ĊĠĠĠĠĠ ĠTool Window EP . EP _ NAME . forEach Extension Safe Ġ{ Ġbean Ġ-> ĊĠĠĠĠĠĠĠ Ġbean . tool Window Factory ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Service ĊĠ Ġprivate Ġclass ĠTool WindowManager App Level Helper Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġa wt Focus Listener : ĠA WT EventListener ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠ Ġa wt Focus Listener Ġ= ĠA WT EventListener Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠ Ġevent Ġas ĠFocus Event ĊĠĠĠĠĠĠĠ Ġif Ġ( event . id Ġ!= ĠFocus Event . FOCUS _ GAIN ED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġreturn @ AW T EventListener ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprocess Opened Projects Ġ{ Ġproject Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġval Ġcomponent Ġ= Ġevent . component Ġ?: Ġreturn @ AW T EventListener ĊĠĠĠĠĠĠĠĠĠ Ġfor Ġ( composite Ġin ĠFile Editor Manager Ex . getInstance Ex ( project ). split ters . editor Comp os ites ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( composite . editor s . any Ġ{ ĠSw ing Utilities . is Descending From ( component , Ġit . component ) Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( getInstance ( project ) Ġas ĠTool WindowManager Impl ). active Stack . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ ĠToolkit . getDefault Toolkit (). add AW T EventListener ( awt Focus Listener , ĠA WT Event . FOCUS _ EVENT _ MASK ) ĊĊĠĠĠĠĠ Ġval Ġupdate Headers Alarm Ġ= ĠSingle Alarm ( Runnable Ġ{ ĊĠĠĠĠĠĠĠ Ġprocess Opened Projects Ġ{ Ġproject Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġ( getInstance ( project ) Ġas ĠTool WindowManager Impl ). update Tool Window Headers () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ}, Ġ 5 0 , ĠApplication Manager . getApplication ()) ĊĠĠĠĠĠ Ġval Ġfocus Listener Ġ= ĠProperty ChangeListener Ġ{ Ġupdate Headers Alarm . cancel And Request () Ġ} ĊĠĠĠĠĠ Ġval Ġkeyboard Focus Manager Ġ= ĠKeyboard Focus Manager . getCurrent Keyboard Focus Manager () ĊĠĠĠĠĠ Ġkeyboard Focus Manager . addProperty ChangeListener (" focus Owner ", Ġfocus Listener ) ĊĠĠĠĠĠ ĠDis poser . register ( Application Manager . getApplication (), ĠDis posable Ġ{ ĊĠĠĠĠĠĠĠ Ġkeyboard Focus Manager . remove Property ChangeListener (" focus Owner ", Ġfocus Listener ) ĊĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠ Ġval Ġconnection Ġ= ĠApplication Manager . getApplication (). message Bus . connect () ĊĠĠĠĠĠ Ġconnection . subscribe ( Project Manager . TOPIC , Ġobject Ġ: ĠProject Manager Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġproject Closed ( project : ĠProject ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ( getInstance ( project ) Ġas ĠTool WindowManager Impl ). project Closed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠ ĠWindows . Tool Window Provider ( Windows . Signal ( Predicate Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠ Ġevent . id Ġ== ĠFocus Event . FOCUS _ LO ST Ġ|| Ġevent . id Ġ== ĠFocus Event . FOCUS _ GAIN ED Ġ|| Ġevent . id Ġ== ĠMouseEvent . MOUSE _ PRES SED Ġ|| Ġevent . id Ġ== ĠKeyEvent . KEY _ PRES SED ĊĠĠĠĠĠ Ġ})) ĊĠĠĠĠĠĠĠ Ġ. with Esc Action () ĊĠĠĠĠĠĠĠ Ġ. handle Focus Lost On Pin ned Ġ{ Ġtool Window Id Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġprocess Ġ{ Ġmanager Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentry Ġ= Ġmanager . id To Entry . get ( tool Window Id ) Ġ?: Ġreturn @ process ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinfo Ġ= Ġmanager . layout . getInfo ( tool Window Id ) Ġ?: Ġreturn @ process ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommands Ġ= Ġmutable ListOf < Final izable Command >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . deactivate Tool Window Impl ( info , Ġentry , Ġshould Hide Ġ= Ġtrue , Ġcommands Ġ= Ġcommands ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnotify Ġclients Ġthat Ġtool window Ġis Ġde activated ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . execute ( commands , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. bind ( Application Manager . getApplication ()) ĊĊĠĠĠĠĠ Ġconnection . subscribe ( Key map Manager Listener . TOPIC , Ġobject Ġ: ĠKey map Manager Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġactive Key map Changed ( keymap : ĠKey map ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġprocess Ġ{ Ġmanager Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . id To Entry . values . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . stripe Button . update Presentation () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠ Ġconnection . subscribe ( An ActionListener . TOPIC , Ġobject Ġ: ĠAn ActionListener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore ActionPerformed ( action : ĠAn Action , Ġdata Context : ĠData Context , Ġevent : ĠAn ActionEvent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġprocess Ġ{ Ġmanager Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( manager . currentState Ġ!= ĠKey State . H OLD ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . reset Hold State () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠ ĠIde EventQueue . getInstance (). add Dispatcher ( Ide EventQueue . EventDispatcher Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( event Ġis ĠKeyEvent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġprocess Ġ{ Ġmanager Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . dispatch KeyEvent ( event ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( event Ġis ĠWindow Event Ġ&& Ġevent . getID () Ġ== ĠWindow Event . WINDOW _ LO ST _ FOCUS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġprocess Ġ{ Ġmanager Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . getSource () Ġ=== Ġmanager . frame ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . reset Hold State () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠ Ġ}, ĠApplication Manager . getApplication ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinline Ġfun Ġprocess ( processor : Ġ( manager : ĠTool WindowManager Impl ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠ Ġprocess Opened Projects Ġ{ Ġproject Ġ-> ĊĠĠĠĠĠĠĠ Ġprocessor ( getInstance ( project ) Ġas ĠTool WindowManager Impl ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġupdate Tool Window Headers () Ġ{ ĊĠĠĠ Ġfocus Manager . do When Focus Set tles Down ( object Ġ: ĠExp irable Runnable . For Project ( project ) Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ Ġid To Entry . forEach Ġ{ Ġ( id , Ġentry ) Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġval Ġinfo Ġ= Ġlayout . getInfo ( id ) Ġ?: Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( info . isVisible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentry . internal Decorator . tool Window . decorator . rep aint () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠ Ġ} ĊĊĠ Ġfun Ġdispatch KeyEvent ( e : ĠKeyEvent ): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ(( e . keyCode Ġ!= ĠKeyEvent . VK _ CONTROL ) Ġ&& Ġ( ĊĠĠĠĠĠĠĠ Ġe . keyCode Ġ!= ĠKeyEvent . VK _ ALT ) Ġ&& Ġ( e . keyCode Ġ!= ĠKeyEvent . VK _ SHIFT ) Ġ&& Ġ( e . keyCode Ġ!= ĠKeyEvent . VK _ META )) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( e . modifiers Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreset Hold State () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( e . id Ġ!= ĠKeyEvent . KEY _ PRES SED Ġ&& Ġe . id Ġ!= ĠKeyEvent . KEY _ RELEASE D ) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġparent Ġ= ĠUI Util . find Ult imate Parent ( e . component ) ĊĠĠĠ Ġif Ġ( parent Ġis ĠIde Frame ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ(( parent Ġas ĠIde Frame ). project Ġ!== Ġproject ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreset Hold State () ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġv ks Ġ= Ġactivate Tool Window VK s Mask ĊĠĠĠ Ġif Ġ( v ks Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠ Ġreset Hold State () ĊĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġmouse Mask Ġ= ĠInput Event . BUTTON 1 _ DOWN _ MASK Ġor ĠInput Event . BUTTON 2 _ DOWN _ MASK Ġor ĠInput Event . BUTTON 3 _ DOWN _ MASK ĊĠĠĠ Ġif Ġ( Bit Util . isSet ( v ks , ĠkeyCode To Input Mask ( e . keyCode )) Ġ&& Ġ( e . modifiers Ex Ġand Ġmouse Mask ) Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠ Ġval Ġpressed Ġ= Ġe . id Ġ== ĠKeyEvent . KEY _ PRES SED ĊĠĠĠĠĠ Ġval Ġmodifiers Ġ= Ġe . modifiers ĊĠĠĠĠĠ Ġif Ġ( are All Modifiers Pressed ( modifiers , Ġv ks ) Ġ|| Ġ! pressed ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprocess State ( pressed ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġreset Hold State () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġfalse ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġreset Hold State () Ġ{ ĊĠĠĠ Ġcurrent State Ġ= ĠKey State . WAIT ING ĊĠĠĠ Ġprocess Hold State () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġprocess State ( pressed : ĠBoolean ) Ġ{ ĊĠĠĠ Ġif Ġ( pressed ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( currentState Ġ== ĠKey State . WAIT ING ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent State Ġ= ĠKey State . PRES SED ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġif Ġ( currentState Ġ== ĠKey State . RELEASE D ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent State Ġ= ĠKey State . H OLD ĊĠĠĠĠĠĠĠ Ġprocess Hold State () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠ Ġif Ġ( currentState Ġ== ĠKey State . PRES SED ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent State Ġ= ĠKey State . RELEASE D ĊĠĠĠĠĠĠĠ Ġwait er For Second Press ?. let Ġ{ Ġwait er For Second Press Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġwait er For Second Press . cancel All Requests () ĊĠĠĠĠĠĠĠĠĠ Ġwait er For Second Press . add Request ( second Press Runnable , ĠSystem Properties . getInt Property (" action System . key Gesture D bl Click Time ", Ġ 6 5 0 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġreset Hold State () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġprocess Hold State () Ġ{ ĊĠĠĠ Ġtool Window Pane ?. set Stri pes Overlay ed ( currentState Ġ== ĠKey State . H OLD ) ĊĠ Ġ} ĊĊĠ Ġ@ Test Only ĊĠ Ġfun Ġinit () Ġ{ ĊĠĠĠ Ġif Ġ( tool Window Pane Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġmanager Ġis Ġused Ġin Ġlight Ġtests Ġ( light Ġproject Ġis Ġnever Ġdisposed ), Ġso , Ġearly Disposable Ġmust Ġbe Ġused ĊĠĠĠ Ġval Ġdis posable Ġ= Ġ( project Ġas ĠProject Ex ). early Disposable ĊĠĠĠ Ġwait er For Second Press Ġ= ĠAlarm ( dis posable ) ĊĊĠĠĠ Ġval Ġconnection Ġ= Ġproject . message Bus . connect ( dis posable ) ĊĠĠĠ Ġconnection . subscribe ( Tool WindowManager Listener . TOPIC , Ġdispatcher . mult ic aster ) ĊĠĠĠ Ġconnection . subscribe ( File Editor Manager Listener . FILE _ EDITOR _ MANAGER , Ġobject Ġ: ĠFile Editor Manager Listener Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġfile Closed ( source : ĠFile Editor Manager , Ġfile : ĠVirtual File ) Ġ{ ĊĠĠĠĠĠĠĠ ĠIde Focus Manager . getInstance ( project ). do When Focus Set tles Down ( object Ġ: ĠExp irable Runnable . For Project ( project ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( File Editor Manager . getInstance ( project ). has Open Files ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfocus Tool Window ByDefault ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĊĠĠĠ Ġval Ġframe Helper Ġ= ĠWindow Manager Ex . getInstance Ex (). allocate Frame ( project ) ĊĠĠĠ Ġframe Ġ= Ġframe Helper ĊĠĠĠ Ġtool Window Pane Ġ= ĠTool Windows Pane ( frame Helper . frame , Ġthis , Ġproject ) ĊĊĠĠĠ Ġframe Helper . root Pane !!. set Tool Windows Pane ( tool Window Pane ) ĊĊĠĠĠ Ġtool Window Pane !!. put Client Property ( UI Util . NOT _ IN _ HI ER ARCH Y _ COMPONENTS , ĠIterable Ġ{ ĊĠĠĠĠĠ Ġval Ġresult Ġ= ĠArrayList < J Component >( id To Entry . size ) ĊĠĠĠĠĠ Ġfor Ġ( entry Ġin Ġid To Entry . values ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdecorator Ġ= Ġentry . internal Decorator ĊĠĠĠĠĠĠĠ Ġif Ġ( decorator . parent Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġresult . add ( decorator ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġresult . iterator () ĊĠĠĠ Ġ}) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġbefore Project Opened () Ġ{ ĊĠĠĠ ĠLOG . assertTrue (! Application Manager . getApplication (). is Dispatch Thread ) ĊĊĠĠĠ Ġval Ġlist Ġ= Ġmutable ListOf < Final izable Command >() ĊĠĠĠ Ġrun Activity (" tool window Ġinit Ġcommand Ġcreation ") Ġ{ ĊĠĠĠĠĠ ĠTool Window EP . EP _ NAME . forEach Extension Safe Ġ{ Ġbean Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġcondition Ġ= Ġbean . condition ĊĠĠĠĠĠĠĠ Ġ// Ġcompute Ġoutside Ġof ĠE DT ĊĠĠĠĠĠĠĠ Ġif Ġ( condition Ġ!= Ġnull Ġ&& Ġ! condition . value ( project )) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach Extension Safe ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġcompute Ġoutside Ġof ĠE DT Ġ( should Ġbe Ġalready Ġpre loaded , Ġbut Ġwho Ġknows ) ĊĠĠĠĠĠĠĠ Ġval Ġtool Window Factory Ġ= Ġbean . tool Window Factory ĊĠĠĠĠĠĠĠ Ġif Ġ(! tool Window Factory . is Applicable ( project )) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach Extension Safe ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlist . add ( object Ġ: ĠFinal izable Command ( null ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Init Tool Window ( bean , Ġtool Window Factory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcatch Ġ( e : ĠProcess Canceled Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . error (" failed Ġto Ġinit Ġtool window Ġ${ bean . factory Class }", Ġt ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġmust Ġbe Ġexecuted Ġin ĠE DT ĊĠĠĠ ĠApplication Manager . getApplication (). invoke Later ( Runnable Ġ{ ĊĠĠĠĠĠ Ġpending Set Layout Task . get AndSet ( null )?. run () ĊĊĠĠĠĠĠ Ġinit () ĊĊĠĠĠĠĠ ĠApplication Manager . getApplication (). invoke Later ( Runnable Ġ{ ĊĠĠĠĠĠĠĠ Ġpending Set Layout Task . get AndSet ( null )?. run () ĊĊĠĠĠĠĠĠĠ Ġrun Activity (" tool window Ġcreating ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġappend Update Root Pane ( list ) ĊĠĠĠĠĠĠĠĠĠ Ġval Ġeditor Component Ġ= ĠFile Editor Manager Ex . getInstance Ex ( project ). component ĊĠĠĠĠĠĠĠĠĠ Ġeditor Component . is Focus able Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠ Ġappend Set Editor Component ( editor Component , Ġlist ) ĊĊĠĠĠĠĠĠĠĠĠ Ġexecute ( list ) ĊĠĠĠĠĠĠĠĠĠ Ġcommand Processor . flush () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġservice < Tool WindowManager App Level Helper >() ĊĠĠĠĠĠ Ġ}, Ġproject . dis posed ) ĊĊĠĠĠĠĠ ĠTool Window EP . EP _ NAME . add Extension Point Listener ( object Ġ: ĠExtension Point Listener < Tool Window EP > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġextension Added ( extension : ĠTool Window EP , Ġplugin Descriptor : ĠPlugin Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġinit Tool Window ( extension ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġextension Removed ( extension : ĠTool Window EP , Ġplugin Descriptor : ĠPlugin Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġdo Unregister Tool Window ( extension . id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ}, Ġproject ) ĊĠĠĠ Ġ}, Ġproject . dis posed ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġinit Tool Window ( bean : ĠTool Window EP ) Ġ{ ĊĠĠĠ Ġval Ġcondition Ġ= Ġbean . condition ĊĠĠĠ Ġif Ġ( condition Ġ!= Ġnull Ġ&& Ġ! condition . value ( project )) Ġ{ ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġtool Window Factory Ġ= Ġbean . tool Window Factory ĊĠĠĠ Ġif Ġ(! tool Window Factory . is Applicable ( project )) Ġ{ ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġdo Init Tool Window ( bean , Ġtool Window Factory ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġdo Init Tool Window ( bean : ĠTool Window EP , Ġfactory : ĠTool Window Factory ) Ġ{ ĊĠĠĠ Ġval Ġbefore Ġ= Ġlayout . getInfo ( bean . id ) ĊĠĠĠ Ġval Ġvisible Ġ= Ġbefore Ġ!= Ġnull Ġ&& Ġbefore . isVisible ĊĠĠĠ Ġval Ġlabel Ġ= Ġcreate Initializing Label () ĊĠĠĠ Ġval Ġtool Window Anchor Ġ= ĠTool Window Anchor . from Text ( bean . anchor ) ĊĠĠĠ Ġval Ġentry Ġ= Ġdo Register Tool Window ( Register Tool Window Task ( id Ġ= Ġbean . id , Ġcomponent Ġ= Ġlabel , Ġanchor Ġ= Ġtool Window Anchor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcan Close Content Ġ= Ġbean . can Close Contents , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcan Work In D umb Mode Ġ= ĠD umb Service . is D umb Aware ( factory ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠshouldBe Available Ġ= Ġfactory . shouldBe Available ( project ))) ĊĠĠĠ Ġval Ġwindow Ġ= Ġentry . internal Decorator . tool Window ĊĠĠĠ Ġwindow . setContent Factory ( factory ) ĊĠĠĠ Ġif Ġ( bean . icon Ġ!= Ġnull Ġ&& Ġwindow . icon Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġvar Ġicon Ġ= ĠIcon Loader . find Icon ( bean . icon , Ġfactory . java Class ) ĊĠĠĠĠĠ Ġif Ġ( icon Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġicon Ġ= ĠIcon Loader . get Icon ( bean . icon ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcatch Ġ( ignored : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġicon Ġ= ĠEmpty Icon . ICON _ 1 3 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġwindow . setIcon ( icon !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġinfo Ġ= Ġentry . readOnly Window Info ĊĠĠĠ Ġif Ġ(! info . is Split Ġ&& Ġbean . secondary Ġ&& Ġ! info . is From Persistent Settings ) Ġ{ ĊĠĠĠĠĠ Ġset Side Tool ( bean . id , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( visible ) Ġ{ ĊĠĠĠĠĠ Ġwindow . ensure Content Initialized () ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠ ĠUi Notify Connector . do When First Shown ( label , Ġobject Ġ: ĠActiv atable Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġshow Notify () Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠApplication Manager . getApplication (). invoke Later ( Runnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! window . is Disposed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . ensure Content Initialized () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ}, Ġproject . dis posed ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġproject Closed () Ġ{ ĊĠĠĠ Ġif Ġ( frame Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġframe !!. release Frame () ĊĠĠĠ Ġval Ġcommands Ġ= Ġmutable ListOf < Final izable Command >() ĊĠĠĠ Ġappend Update Root Pane ( commands ) ĊĠĠĠ Ġ// Ġhide Ġall Ġtool Ġwindows ĊĠĠĠ Ġid To Entry . forEach Ġ{ Ġ( id , Ġentry ) Ġ-> ĊĠĠĠĠĠ Ġdeactivate Tool Window Impl ( layout . getInfo ( id ) Ġ?: Ġreturn @ forEach , Ġentry , Ġtrue , Ġcommands ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġappend Set Editor Component ( null , Ġcommands ) ĊĠĠĠ Ġ// Ġdo Ġnot Ġnotify Ġ- Ġproject Ġis Ġdisposed ĊĠĠĠ Ġexecute ( commands , Ġis Fire StateChanged Event Ġ= Ġfalse ) ĊĠĠĠ Ġframe Ġ= Ġnull ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġadd Tool WindowManager Listener ( listener : ĠTool WindowManager Listener ) Ġ{ ĊĠĠĠ Ġdispatcher . addListener ( listener ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġadd Tool WindowManager Listener ( listener : ĠTool WindowManager Listener , Ġparent Disposable : ĠDis posable ) Ġ{ ĊĠĠĠ Ġproject . message Bus . connect ( parent Disposable ). subscribe ( Tool WindowManager Listener . TOPIC , Ġlistener ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġremove Tool WindowManager Listener ( listener : ĠTool WindowManager Listener ) Ġ{ ĊĠĠĠ Ġdispatcher . remove Listener ( listener ) ĊĠ Ġ} ĊĊĠ Ġfun Ġexecute ( command List : ĠList < Final izable Command >) Ġ{ ĊĠĠĠ Ġexecute ( command List , Ġtrue ) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThis Ġis Ġhelper Ġmethod . ĠIt Ġdeleg ated Ġits Ġfunctionality Ġto Ġthe ĠWindow Manager . ĊĠĠ Ġ* ĠBefore Ġdeleg ating Ġit Ġfires Ġstate Ġchanged . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun Ġexecute ( commands : ĠList < Final izable Command >, Ġis Fire StateChanged Event : ĠBoolean ) Ġ{ ĊĠĠĠ Ġif Ġ( commands . isEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcommand Processor . execute ( commands ) Ġ{ Ġproject . is Disposed Ġ} ĊĊĠĠĠ Ġif Ġ( is Fire StateChanged Event Ġ&& Ġcommands . any Ġ{ Ġit . will Change State () Ġ}) Ġ{ ĊĠĠĠĠĠ Ġfire StateChanged () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġactivate Editor Component () Ġ{ ĊĠĠĠ Ġfocus Default Element In Selected Editor () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġdeactivate Windows ( id To Ignore : ĠString , Ġcommands : ĠMutable List < Final izable Command >) Ġ{ ĊĠĠĠ Ġid To Entry . forEach Ġ{ Ġ( id , Ġentry ) Ġ-> ĊĠĠĠĠĠ Ġif Ġ( id To Ignore Ġ!= Ġid ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinfo Ġ= Ġlayout . getInfo ( id ) Ġ?: Ġreturn @ forEach ĊĠĠĠĠĠĠĠ Ġdeactivate Tool Window Impl ( info , Ġentry , Ġis To Hide On De activation ( info ), Ġcommands ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠHelper Ġmethod . ĠIt Ġmakes Ġwindow Ġvisible , Ġactiv ates Ġit Ġand Ġrequest Ġfocus Ġinto Ġthe Ġtool Ġwindow . ĊĠĠ Ġ* ĠBut Ġit Ġdoesn 't Ġdeactivate Ġother Ġtool Ġwindows . ĠUse Ġ` prepare For Activation ` Ġmethod Ġto ĊĠĠ Ġ* Ġde activ ates Ġother Ġtool Ġwindows . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ param Ġdirty Mode Ġif Ġ` true ` Ġthen Ġall ĠUI Ġoperations Ġare Ġperformed Ġin Ġ" dirty " Ġmode . ĊĠĠ Ġ* ĠIt Ġmeans Ġthat ĠUI Ġisn 't Ġvalidated Ġand Ġrep aint ed Ġjust Ġafter Ġeach Ġadd / remove Ġoperation . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun Ġshow And Activate ( id : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirty Mode : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommands : ĠMutable List < Final izable Command >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauto Focus Contents : ĠBoolean ) Ġ{ ĊĠĠĠ Ġval Ġentry Ġ= Ġid To Entry . get ( id ) Ġ?: Ġreturn ĊĠĠĠ Ġif Ġ(! entry . internal Decorator . tool Window . is Available ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġshow Ġactivated ĊĠĠĠ Ġval Ġinfo Ġ= Ġget Registered Mutable Info Or LogError ( id ) ĊĠĠĠ Ġvar Ġto Apply Info Ġ= Ġfalse ĊĠĠĠ Ġif Ġ(! info . isActive ) Ġ{ ĊĠĠĠĠĠ Ġinfo . isActive Ġ= Ġtrue ĊĠĠĠĠĠ Ġto Apply Info Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġshow Tool Window Impl ( id , Ġdirty Mode , Ġcommands ) ĊĠĠĠ Ġ// Ġactivate ĊĠĠĠ Ġif Ġ( to Apply Info ) Ġ{ ĊĠĠĠĠĠ Ġappend Apply Window Info Cmd ( info , Ġentry , Ġcommands ) ĊĠĠĠĠĠ Ġactive Stack . push ( id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( auto Focus Contents Ġ&& ĠApplication Manager . getApplication (). isActive ) Ġ{ ĊĠĠĠĠĠ Ġappend Request Focus In Tool Window Cmd ( id , Ġcommands ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġactivate Tool Window ( id : ĠString , Ġforced : ĠBoolean , Ġauto Focus Contents : ĠBoolean ) Ġ{ ĊĠĠĠ Ġif Ġ( LOG . isDebugEnabled ) Ġ{ ĊĠĠĠĠĠ ĠLOG . debug (" enter : Ġactivate Tool Window ($ id )") ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠApplication Manager . getApplication (). assertIs Dispatch Thread () ĊĠĠĠ Ġval Ġcommands Ġ= Ġmutable ListOf < Final izable Command >() ĊĠĠĠ Ġactivate Tool Window Impl ( id , Ġcommands , Ġforced , Ġauto Focus Contents ) ĊĠĠĠ Ġexecute ( commands ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġactivate Tool Window Impl ( id : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommands : ĠMutable List < Final izable Command >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġforced : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauto Focus Contents : ĠBoolean ) Ġ{ ĊĠĠĠ Ġvar Ġeffective Auto Focus Contents Ġ= Ġauto Focus Contents ĊĠĠĠ ĠTool Window Collector . record Activation ( id , Ġlayout . getInfo ( id , Ġtrue )) ĊĠĠĠ Ġeffective Auto Focus Contents Ġ= Ġeffective Auto Focus Contents Ġand Ġforced ĊĠĠĠ Ġif Ġ( LOG . isDebugEnabled ) Ġ{ ĊĠĠĠĠĠ ĠLOG . debug (" enter : Ġactivate Tool Window Impl ($ id )") ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġentry Ġ= Ġid To Entry . get ( id ) !! ĊĠĠĠ Ġif Ġ(! entry . internal Decorator . tool Window . is Available ) Ġ{ ĊĠĠĠĠĠ Ġ// ĠTool Ġwindow Ġcan Ġbe Ġ" logic ally " Ġactive Ġbut Ġnot Ġfocused . ĠFor Ġexample , ĊĠĠĠĠĠ Ġ// Ġwhen Ġthe Ġuser Ġswitched Ġto Ġanother Ġapplication . ĠSo Ġwe Ġjust Ġneed Ġto Ġbring ĊĠĠĠĠĠ Ġ// Ġtool Ġwindow 's Ġwindow Ġto Ġfront . ĊĠĠĠĠĠ Ġif Ġ( effective Auto Focus Contents Ġ&& Ġ! entry . internal Decorator . has Focus ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġappend Request Focus In Tool Window Cmd ( id , Ġcommands ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġdeactivate Windows ( id , Ġcommands ) ĊĠĠĠ Ġshow And Activate ( id , Ġfalse , Ġcommands , Ġeffective Auto Focus Contents ) ĊĠ Ġ} ĊĊĠ Ġ// Ġmutate Ġoperation Ġmust Ġuse Ġinfo Ġfrom Ġlayout Ġand Ġnot Ġfrom Ġdecorator ĊĠ Ġprivate Ġfun Ġget Registered Mutable Info Or LogError ( id : ĠString ): ĠWindow Info Impl Ġ{ ĊĠĠĠ Ġval Ġinfo Ġ= Ġlayout . getInfo ( id ) Ġ?: Ġthrow ĠIllegal Thread StateException (" window Ġwith Ġid =\" $ id \" Ġis Ġunknown ") ĊĠĠĠ Ġif Ġ(! is Tool Window Registered ( id )) Ġ{ ĊĠĠĠĠĠ ĠLOG . error (" window Ġwith Ġid =\" $ id \" Ġisn 't Ġregistered ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġinfo ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠHelper Ġmethod . ĠIt Ġde activ ates Ġ( and Ġhide s ) Ġwindow Ġwith Ġspecified Ġ` id `. ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun Ġdeactivate Tool Window Impl ( info : ĠWindow Info Impl , Ġentry : ĠTool Window Entry , Ġshould Hide : ĠBoolean , Ġcommands : ĠMutable List < Final izable Command >) Ġ{ ĊĠĠĠ Ġif Ġ( LOG . isDebugEnabled ) Ġ{ ĊĠĠĠĠĠ ĠLOG . debug (" enter : Ġdeactivate Tool Window Impl (${ info . id }, $ should Hide )") ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( should Hide ) Ġ{ ĊĠĠĠĠĠ Ġappend Remove Decorator Command ( info , Ġfalse , Ġcommands ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġinfo . isActive Ġ= Ġfalse ĊĠĠĠ Ġappend Apply Window Info Cmd ( info , Ġentry , Ġcommands ) ĊĠĠĠ Ġcheck In variants (" Info : Ġ$ info ; Ġshould Hide : Ġ$ should Hide ") ĊĠ Ġ} ĊĊĠ Ġoverride Ġval Ġtool Window Ids : ĠArray < String > ĊĠĠĠ Ġget () Ġ= Ġid To Entry . keys . to Typed Array () ĊĊĠ Ġoverride Ġval Ġactive Tool Window Id : ĠString ? ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠ ĠApplication Manager . getApplication (). assertIs Dispatch Thread () ĊĠĠĠĠĠ Ġreturn Ġid To Entry . values . first OrNull Ġ{ ĊĠĠĠĠĠĠĠ Ġit . readOnly Window Info . isActive ĊĠĠĠĠĠ Ġ} ?. internal Decorator ?. tool Window ?. id ĊĠĠĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠgetLast Active Tool Window Id (): ĠString ? Ġ{ ĊĠĠĠ Ġreturn ĠgetLast Active Tool Window Id ( null ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠgetLast Active Tool Window Id ( condition : ĠCondition < in ĠJ Component >? ): ĠString ? Ġ{ ĊĠĠĠ ĠApplication Manager . getApplication (). assertIs Dispatch Thread () ĊĠĠĠ Ġvar Ġlast Active Tool Window Id : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġactive Stack . persistent Size ) Ġ{ ĊĠĠĠĠĠ Ġval Ġid Ġ= Ġactive Stack . peek Persistent ( i ) ĊĠĠĠĠĠ Ġval Ġtool Window Ġ= Ġget Tool Window ( id ) ĊĠĠĠĠĠ ĠLOG . assertTrue ( tool Window Ġ!= Ġnull ) ĊĠĠĠĠĠ Ġif Ġ( tool Window !!. is Available ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( condition Ġ== Ġnull Ġ|| Ġcondition . value ( tool Window . component )) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġlast Active Tool Window Id Ġ= Ġid ĊĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġlast Active Tool Window Id ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġ@ return Ġfloating Ġdecorator Ġfor Ġthe Ġtool Ġwindow Ġwith Ġspecified Ġ` ID `. ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun Ġget Floating Decorator ( id : ĠString ): ĠFloating Decorator ? Ġ{ ĊĠĠĠ Ġreturn Ġid To Entry . get ( id )?. floating Decorator ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġ@ return Ġwindow ed Ġdecorator Ġfor Ġthe Ġtool Ġwindow Ġwith Ġspecified Ġ` ID `. ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun Ġget Window ed Decorator ( id : ĠString ): ĠWindow ed Decorator ? Ġ{ ĊĠĠĠ Ġreturn Ġid To Entry . get ( id )?. window ed Decorator ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġ@ return Ġinternal Ġdecorator Ġfor Ġthe Ġtool Ġwindow Ġwith Ġspecified Ġ` ID `. ĊĠĠ Ġ*/ ĊĠ Ġfun Ġget Internal Decorator ( id : ĠString ) Ġ= Ġid To Entry . get ( id ) !!. internal Decorator ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġ@ return Ġtool Ġbutton Ġfor Ġthe Ġwindow Ġwith Ġspecified Ġ` ID `. ĊĠĠ Ġ*/ ĊĠ Ġfun Ġget Stripe Button ( id : ĠString ) Ġ= Ġid To Entry . get ( id ) !!. stripe Button ĊĊĠ Ġoverride Ġfun Ġget Ids On ( anchor : ĠTool Window Anchor ) Ġ= Ġlayout . get Visible Ids On ( anchor , Ġthis ) ĊĊĠ Ġoverride Ġfun Ġget Location Icon ( id : ĠString , Ġfallback Icon : ĠIcon ): ĠIcon Ġ{ ĊĠĠĠ Ġval Ġinfo Ġ= Ġlayout . getInfo ( id ) ĊĠĠĠ Ġif Ġ( info Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġfallback Icon ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġtype Ġ= Ġinfo . type ĊĠĠĠ Ġif Ġ( type Ġ== ĠTool Window Type . FLOAT ING Ġ|| Ġtype Ġ== ĠTool Window Type . WINDOW ED ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĠAll Icons . Actions . MoveTo Window ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġanchor Ġ= Ġinfo . anchor ĊĠĠĠ Ġval Ġsplit Mode Ġ= Ġinfo . is Split ĊĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠ ĠTool Window Anchor . BOTTOM Ġ== Ġanchor Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( split Mode ) ĠAll Icons . Actions . MoveTo Bottom Right Ġelse ĠAll Icons . Actions . MoveTo Bottom Left ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ ĠTool Window Anchor . LEFT Ġ== Ġanchor Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( split Mode ) ĠAll Icons . Actions . MoveTo Left Bottom Ġelse ĠAll Icons . Actions . MoveTo Left Top ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ ĠTool Window Anchor . RIGHT Ġ== Ġanchor Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( split Mode ) ĠAll Icons . Actions . MoveTo Right Bottom Ġelse ĠAll Icons . Actions . MoveTo Right Top ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ ĠTool Window Anchor . TOP Ġ== Ġanchor Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( split Mode ) ĠAll Icons . Actions . MoveTo Top Right Ġelse ĠAll Icons . Actions . MoveTo Top Left ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġ-> Ġfallback Icon ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ// Ġcannot Ġbe ĠTool Window Ex Ġbecause Ġof Ġbackward Ġcompatibility ĊĠ Ġoverride Ġfun Ġget Tool Window ( id : ĠString ): ĠTool Window ? Ġ{ ĊĠĠĠ Ġreturn Ġid To Entry . get ( id )?. internal Decorator ?. tool Window ĊĠ Ġ} ĊĊĠ Ġfun Ġshow Tool Window ( id : ĠString ) Ġ{ ĊĠĠĠ Ġif Ġ( LOG . isDebugEnabled ) Ġ{ ĊĠĠĠĠĠ ĠLOG . debug (" enter : Ġshow Tool Window ($ id )") ĊĠĠĠ Ġ} ĊĠĠĠ ĠApplication Manager . getApplication (). assertIs Dispatch Thread () ĊĠĠĠ Ġval Ġcommand List Ġ= Ġmutable ListOf < Final izable Command >() ĊĠĠĠ Ġshow Tool Window Impl ( id , Ġfalse , Ġcommand List ) ĊĠĠĠ Ġexecute ( command List ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġhide Tool Window ( id : ĠString , Ġhide Side : ĠBoolean ) Ġ{ ĊĠĠĠ Ġhide Tool Window ( id , Ġhide Side , Ġtrue ) ĊĠ Ġ} ĊĊĠ Ġfun Ġhide Tool Window ( id : ĠString , Ġhide Side : ĠBoolean , Ġmove Focus : ĠBoolean ) Ġ{ ĊĠĠĠ ĠApplication Manager . getApplication (). assertIs Dispatch Thread () ĊĊĠĠĠ Ġval Ġentry Ġ= Ġid To Entry . get ( id ) !! ĊĠĠĠ Ġval Ġinfo Ġ= Ġget Registered Mutable Info Or LogError ( id ) ĊĠĠĠ Ġval Ġcommands Ġ= Ġmutable ListOf < Final izable Command >() ĊĠĠĠ Ġval Ġwas Active Ġ= Ġinfo . isActive ĊĠĠĠ Ġ// Ġhide Ġand Ġdeactivate ĊĠĠĠ Ġdeactivate Tool Window Impl ( info , Ġentry , Ġtrue , Ġcommands ) ĊĠĠĠ Ġif Ġ( hide Side Ġ&& Ġ! info . is Floating Ġ&& Ġ! info . is Window ed ) Ġ{ ĊĠĠĠĠĠ Ġval Ġids Ġ= Ġlayout . get Visible Ids On ( info . anchor , Ġthis ) ĊĠĠĠĠĠ Ġfor Ġ( each Ġin Ġids ) Ġ{ ĊĠĠĠĠĠĠĠ Ġactive Stack . remove ( each , Ġtrue ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ( is Stack Enabled ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ(! side Stack . isEmpty ( info . anchor )) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġside Stack . pop ( info . anchor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġid To Entry . forEach Ġ{ Ġ( other Id , Ġother Entry ) Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġother Info Ġ= Ġlayout . getInfo ( other Id ) Ġ?: Ġreturn @ forEach ĊĠĠĠĠĠĠĠ Ġif Ġ( other Info . isVisible Ġ&& Ġother Info . anchor Ġ== Ġinfo . anchor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġdeactivate Tool Window Impl ( other Info , Ġother Entry , Ġtrue , Ġcommands ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠ Ġ// Ġfirst Ġof Ġall Ġwe Ġhave Ġto Ġfind Ġtool Ġwindow Ġthat Ġwas Ġlocated Ġat Ġthe Ġsame Ġside Ġand Ġwas Ġhidden ĊĠĠĠĠĠ Ġif Ġ( is Stack Enabled ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġinfo 2 : ĠWindow Info Impl ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġwhile Ġ(! side Stack . isEmpty ( info . anchor )) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġstored Info Ġ= Ġside Stack . pop ( info . anchor ) ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( stored Info . is Split Ġ!= Ġinfo . is Split ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Info Ġ= Ġget Registered Mutable Info Or LogError ( stored Info . id !! ) ĊĠĠĠĠĠĠĠĠĠ Ġ// ĠSide Stack Ġcontains Ġcopies Ġof Ġreal ĠWindow Infos . ĠIt Ġmeans Ġthat ĊĠĠĠĠĠĠĠĠĠ Ġ// Ġthese Ġstored Ġinfos Ġcan Ġbe Ġinvalid . ĠThe Ġfollowing Ġloop Ġremoves Ġinvalid ĠWindow Infos . ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( stored Info . anchor Ġ== Ġcurrent Info . anchor Ġ&& Ġstored Info . type Ġ== Ġcurrent Info . type Ġ&& Ġstored Info . is Auto Hide Ġ== Ġcurrent Info . is Auto Hide ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo 2 Ġ= Ġstored Info ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( info 2 Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġshow Tool Window Impl ( info 2 . id !! , Ġfalse , Ġcommands ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ// ĠIf Ġwe Ġhide Ġcurrently Ġactive Ġtool Ġwindow Ġthen Ġwe Ġshould Ġactivate Ġthe Ġprevious ĊĠĠĠĠĠ Ġ// Ġone Ġwhich Ġis Ġlocated Ġin Ġthe Ġtool Ġwindow Ġstack . ĊĠĠĠĠĠ Ġ// ĠActivate Ġanother Ġtool Ġwindow Ġif Ġno Ġactive Ġtool Ġwindow Ġexists Ġand ĊĠĠĠĠĠ Ġ// Ġwindow Ġstack Ġis Ġenabled . ĊĠĠĠĠĠ Ġactive Stack . remove ( id , Ġfalse ) Ġ// Ġhidden Ġwindow Ġshould Ġbe Ġat Ġthe Ġtop Ġof Ġstack ĊĠĠĠĠĠ Ġif Ġ( was Active Ġ&& Ġmove Focus Ġ&& Ġ! active Stack . isEmpty ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġto Be Activated Id Ġ= Ġactive Stack . pop () ĊĠĠĠĠĠĠĠ Ġif Ġ( get Registered Mutable Info Or LogError ( toBe Activated Id ). isVisible Ġ|| Ġis Stack Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġactivate Tool Window Impl ( toBe Activated Id , Ġcommands , Ġfalse , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġfocus Tool Window ByDefault ( id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġexecute ( commands ) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġ@ param Ġdirty Mode Ġif Ġ` true ` Ġthen Ġall ĠUI Ġoperations Ġare Ġperformed Ġin Ġdirty Ġmode . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun Ġshow Tool Window Impl ( id : ĠString , Ġdirty Mode : ĠBoolean , Ġcommands : ĠMutable List < Final izable Command >) Ġ{ ĊĠĠĠ Ġval Ġentry Ġ= Ġid To Entry . get ( id ) !! ĊĠĠĠ Ġval Ġto Be Shown Info Ġ= Ġget Registered Mutable Info Or LogError ( id ) ĊĠĠĠ Ġval Ġwindow Ġ= Ġentry . internal Decorator . tool Window ĊĠĠĠ Ġif Ġ( toBe Shown Info . is Window ed ) Ġ{ ĊĠĠĠĠĠ ĠUI Util . to Front ( UI Util . getWindow ( window . component )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( toBe Shown Info . isVisible Ġ|| Ġ! window . is Available ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġto Be Shown Info . isVisible Ġ= Ġtrue ĊĠĠĠ Ġif Ġ( toBe Shown Info . is Floating ) Ġ{ ĊĠĠĠĠĠ Ġcommands . add ( Add Floating Decorator Cmd ( entry , Ġto Be Shown Info )) ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġif Ġ( toBe Shown Info . is Window ed ) Ġ{ ĊĠĠĠĠĠ Ġcommands . add ( Add Window ed Decorator Cmd ( entry , Ġto Be Shown Info )) ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠ Ġ// Ġdock ed Ġand Ġsl iding Ġwindows ĊĠĠĠĠĠ Ġ// ĠIf Ġthere Ġis Ġtool Ġwindow Ġon Ġthe Ġsame Ġside Ġthen Ġwe Ġhave Ġto Ġhide Ġit , Ġi . e . ĊĠĠĠĠĠ Ġ// Ġclear Ġplace Ġfor Ġtool Ġwindow Ġto Ġbe Ġshown . ĊĠĠĠĠĠ Ġ// ĊĠĠĠĠĠ Ġ// ĠWe Ġstore ĠWindow Info Ġof Ġhidden Ġtool Ġwindow Ġin Ġthe ĠSide Stack Ġ( if Ġthe Ġtool Ġwindow ĊĠĠĠĠĠ Ġ// Ġis Ġdock ed Ġand Ġnot Ġauto - hide Ġone ). ĠTherefore Ġit 's Ġpossible Ġto Ġrestore Ġthe ĊĠĠĠĠĠ Ġ// Ġhidden Ġtool Ġwindow Ġwhen Ġshowing Ġtool Ġwindow Ġwill Ġbe Ġclosed . ĊĠĠĠĠĠ Ġid To Entry . forEach Ġ{ Ġ( other Id , Ġother Entry ) Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( id Ġ== Ġother Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġother Info Ġ= Ġlayout . getInfo ( other Id ) Ġ?: Ġreturn @ forEach ĊĠĠĠĠĠĠĠ Ġif Ġ( other Info . isVisible Ġ&& Ġ( other Info . type Ġ== Ġto Be Shown Info . type ) Ġ&& Ġ( other Info . anchor Ġ== Ġto Be Shown Info . anchor ) Ġ&& Ġ( other Info . is Split Ġ== Ġto Be Shown Info . is Split )) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// Ġhide Ġand Ġdeactivate Ġtool Ġwindow ĊĠĠĠĠĠĠĠĠĠ Ġother Info . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠ Ġappend Remove Decorator Cmd ( other Info . id !! , Ġfalse , Ġcommands ) ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( other Info . isActive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġother Info . isActive Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġappend Apply Window Info Cmd ( other Info , Ġother Entry , Ġcommands ) ĊĠĠĠĠĠĠĠĠĠ Ġ// Ġstore ĠWindow Info Ġinto Ġthe ĠSide Stack ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Stack Enabled Ġ&& Ġother Info . is Dock ed Ġ&& Ġ! other Info . is Auto Hide ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġside Stack . push ( other Info ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġappend Add Decorator Cmd ( entry . internal Decorator , Ġto Be Shown Info , Ġdirty Mode , Ġcommands ) ĊĠĠĠĠĠ Ġ// ĠRemove Ġtool Ġwindow Ġfrom Ġthe ĠSide Stack . ĊĠĠĠĠĠ Ġif Ġ( is Stack Enabled ) Ġ{ ĊĠĠĠĠĠĠĠ Ġside Stack . remove ( id ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ(! toBe Shown Info . is Show Stripe Button ) Ġ{ ĊĠĠĠĠĠ Ġto Be Shown Info . is Show Stripe Button Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĠĠĠ Ġappend Apply Window Info Cmd ( toBe Shown Info , Ġentry , Ġcommands ) ĊĠĠĠ Ġcheck In variants (" Id : Ġ$ id ; Ġdirty Mode : Ġ$ dirty Mode ") ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġregister Tool Window ( task : ĠRegister Tool Window Task ): ĠTool Window Impl Ġ{ ĊĠĠĠ Ġreturn Ġdo Register Tool Window ( task ). internal Decorator . tool Window ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġdo Register Tool Window ( task : ĠRegister Tool Window Task ): ĠTool Window Entry Ġ{ ĊĠĠĠ Ġinit () ĊĊĠĠĠ Ġif Ġ( LOG . isDebugEnabled ) Ġ{ ĊĠĠĠĠĠ ĠLOG . debug (" enter : Ġinstall Tool Window ($ task )") ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠApplication Manager . getApplication (). assertIs Dispatch Thread () ĊĠĠĠ Ġif Ġ( id To Entry . containsKey ( task . id )) Ġ{ ĊĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" window Ġwith Ġid =\" ${ task . id }\" Ġis Ġalready Ġregistered ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġinfo Ġ= Ġlayout . get OrCreate ( task ) ĊĠĠĠ Ġval Ġwas Active Ġ= Ġinfo . isActive ĊĠĠĠ Ġval Ġwas Visible Ġ= Ġinfo . isVisible ĊĠĠĠ Ġinfo . isActive Ġ= Ġfalse ĊĠĠĠ Ġinfo . isVisible Ġ= Ġfalse ĊĊĠĠĠ Ġval Ġdis posable Ġ= ĠDis poser . new Disposable ( task . id ) ĊĠĠĠ ĠDis poser . register ( project , Ġdis posable ) ĊĊĠĠĠ Ġval Ġtool Window Ġ= ĠTool Window Impl ( this , Ġtask . id , Ġtask . can Close Content , Ġtask . component , Ġdis posable ) ĊĠĠĠ Ġtool Window . set Available ( task . shouldBe Available , Ġnull ) ĊĠĠĠ ĠActivate Tool Window Action . ensure Tool Window Action Registered ( tool Window ) ĊĊĠĠĠ Ġ// Ġcreate Ġdecorator ĊĠĠĠ Ġval Ġdecorator Ġ= ĠInternal Decorator ( project , Ġinfo . copy (), Ġtool Window , Ġtask . can Work In D umb Mode , Ġdis posable , Ġinternal Decorator Listener ) ĊĊĠĠĠ Ġ// Ġcreate Ġand Ġshow Ġtool Ġbutton ĊĠĠĠ Ġval Ġbutton Ġ= ĠStripe Button ( decorator , Ġtool Window Pane !! ) ĊĠĠĠ Ġval Ġcommands Ġ= Ġmutable ListOf < Final izable Command >() ĊĠĠĠ Ġappend Add Button Cmd ( button , Ġinfo , Ġcommands ) ĊĊĠĠĠ Ġval Ġentry Ġ= ĠTool Window Entry ( button , Ġdecorator , ĠTool Window Focus Watcher ( tool Window ), Ġdis posable ) ĊĠĠĠ Ġid To Entry . put ( task . id , Ġentry ) ĊĊĠĠĠ Ġ// ĠIf Ġpre loaded Ġinfo Ġis Ġvisible Ġor Ġactive Ġthen Ġwe Ġhave Ġto Ġshow / activate Ġthe Ġinstalled ĊĠĠĠ Ġ// Ġtool Ġwindow . ĠThis Ġstep Ġhas Ġsense Ġonly Ġfor Ġwindows Ġwhich Ġare Ġnot Ġin Ġthe Ġauto Ġhide ĊĠĠĠ Ġ// Ġmode . ĠBut Ġif Ġtool Ġwindow Ġwas Ġactive Ġbut Ġits Ġmode Ġdoesn 't Ġallow Ġto Ġactivate Ġit Ġagain ĊĠĠĠ Ġ// Ġ( for Ġexample , Ġtool Ġwindow Ġis Ġin Ġauto Ġhide Ġmode ) Ġthen Ġwe Ġjust Ġactivate Ġeditor Ġcomponent . ĊĠĠĠ Ġif Ġ(! info . is Auto Hide Ġ&& Ġ( info . is Dock ed Ġ|| Ġinfo . is Floating )) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( was Active ) Ġ{ ĊĠĠĠĠĠĠĠ Ġactivate Tool Window Impl ( info . id !! , Ġcommands , Ġtrue , Ġtrue ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġif Ġ( was Visible ) Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Tool Window Impl ( info . id !! , Ġfalse , Ġcommands ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġexecute ( commands ) ĊĠĠĠ Ġproject . message Bus . sync Publisher ( Tool WindowManager Listener . TOPIC ). tool Window Registered ( task . id ) ĊĠĠĠ Ġreturn Ġentry ĊĠ Ġ} ĊĊĠ Ġ@ Suppress (" Over riding Deprecated Member ") ĊĠ Ġoverride Ġfun Ġunregister Tool Window ( id : ĠString ) Ġ{ ĊĠĠĠ Ġdo Unregister Tool Window ( id ) ĊĠ Ġ} ĊĊĠ Ġinternal Ġfun Ġdo Unregister Tool Window ( id : ĠString ) Ġ{ ĊĠĠĠ Ġif Ġ( LOG . isDebugEnabled ) Ġ{ ĊĠĠĠĠĠ ĠLOG . debug (" enter : Ġunregister Tool Window ($ id )") ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠApplication Manager . getApplication (). assertIs Dispatch Thread () ĊĊĠĠĠ Ġval Ġentry Ġ= Ġid To Entry . remove ( id ) Ġ?: Ġreturn ĊĠĠĠ Ġval Ġtool Window Ġ= Ġentry . internal Decorator . tool Window ĊĊĠĠĠ Ġval Ġinfo Ġ= Ġlayout . getInfo ( id ) ĊĠĠĠ Ġif Ġ( info Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġ// Ġremove Ġdecorator Ġand Ġtool Ġbutton Ġfrom Ġthe Ġscreen ĊĠĠĠĠĠ Ġval Ġcommands Ġ= Ġmutable ListOf < Final izable Command >() ĊĠĠĠĠĠ Ġappend Remove Decorator Command ( info , Ġfalse , Ġcommands ) ĊĠĠĠĠĠ Ġ// ĠSave Ġrecent Ġappearance Ġof Ġtool Ġwindow ĊĠĠĠĠĠ Ġactive Stack . remove ( id , Ġtrue ) ĊĠĠĠĠĠ Ġif Ġ( is Stack Enabled ) Ġ{ ĊĠĠĠĠĠĠĠ Ġside Stack . remove ( id ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġappend Remove Button Cmd ( id , Ġentry , Ġinfo , Ġcommands ) ĊĠĠĠĠĠ Ġappend Apply Window Info Cmd ( info , Ġentry , Ġcommands ) ĊĠĠĠĠĠ Ġexecute ( commands , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ(! project . is Disposed ) Ġ{ ĊĠĠĠĠĠ Ġproject . message Bus . sync Publisher ( Tool WindowManager Listener . TOPIC ). tool Window Un registered ( id , Ġ( tool Window )) ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠDis poser . dispose ( entry . dis posable ) ĊĠĠĠ Ġentry . watcher . de install () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġappend Remove Decorator Command ( info : ĠWindow Info Impl , Ġdirty Mode : ĠBoolean , Ġcommands : ĠMutable List < Final izable Command >) Ġ{ ĊĠĠĠ Ġif Ġ(! info . isVisible ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinfo . isVisible Ġ= Ġfalse ĊĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠ Ġinfo . is Floating Ġ-> Ġcommands . add ( Remove Floating Decorator Cmd ( info )) ĊĠĠĠĠĠ Ġinfo . is Window ed Ġ-> Ġcommands . add ( Remove Window ed Decorator Cmd ( info )) ĊĠĠĠĠĠ Ġ// Ġdock ed Ġand Ġsl iding Ġwindows ĊĠĠĠĠĠ Ġelse Ġ-> Ġappend Remove Decorator Cmd ( info . id !! , Ġdirty Mode , Ġcommands ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget Layout (): ĠDesktop Layout Ġ{ ĊĠĠĠ ĠApplication Manager . getApplication (). assertIs Dispatch Thread () ĊĠĠĠ Ġreturn Ġlayout ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġset Layout To Restore Later ( layout : ĠDesktop Layout ?) Ġ{ ĊĠĠĠ Ġlayout To Restore Later Ġ= Ġlayout ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget Layout To Restore Later () Ġ= Ġlayout To Restore Later ĊĊĠ Ġoverride Ġfun Ġset Layout ( layout : ĠDesktop Layout ) Ġ{ ĊĠĠĠ ĠApplication Manager . getApplication (). assertIs Dispatch Thread () ĊĊĠĠĠ Ġ// Ġhide Ġtool Ġwindow Ġthat Ġare Ġinvisible Ġor Ġits Ġinfo Ġis Ġnot Ġpresented Ġin Ġnew Ġlayout ĊĠĠĠ Ġif Ġ( id To Entry . isEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġthis . layout Ġ= Ġlayout ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġcurrent Infos Ġ= Ġid To Entry . keys . map NotNull Ġ{ Ġthis . layout . getInfo ( it ) Ġ} ĊĠĠĠ Ġif Ġ( current Infos . isEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġthis . layout Ġ= Ġlayout ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġcommands Ġ= Ġmutable ListOf < Final izable Command >() ĊĠĠĠ Ġfor Ġ( current Info Ġin Ġcurrent Infos ) Ġ{ ĊĠĠĠĠĠ Ġval Ġid Ġ= Ġcurrent Info . id !! ĊĠĠĠĠĠ Ġval Ġinfo Ġ= Ġlayout . getInfo ( id ) ĊĠĠĠĠĠ Ġif Ġ( current Info . isVisible Ġ&& Ġ( info Ġ== Ġnull Ġ|| Ġ! info . isVisible )) Ġ{ ĊĠĠĠĠĠĠĠ Ġdeactivate Tool Window Impl ( current Info , Ġid To Entry . get ( id ) !! , Ġtrue , Ġcommands ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġchange Ġanchor Ġof Ġtool Ġwindows ĊĠĠĠ Ġfor Ġ( current Info Ġin Ġcurrent Infos ) Ġ{ ĊĠĠĠĠĠ Ġval Ġcurrent Id Ġ= Ġcurrent Info . id Ġ?: Ġcontinue ĊĠĠĠĠĠ Ġval Ġinfo Ġ= Ġlayout . getInfo ( current Id ) Ġ?: Ġcontinue ĊĠĠĠĠĠ Ġif Ġ( current Info . anchor Ġ!= Ġinfo . anchor Ġ|| Ġcurrent Info . order Ġ!= Ġinfo . order ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Tool Window Anchor Impl ( current Id , Ġinfo . anchor , Ġinfo . order , Ġcommands ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġchange Ġtypes Ġof Ġtool Ġwindows ĊĠĠĠ Ġfor Ġ( current Info Ġin Ġcurrent Infos ) Ġ{ ĊĠĠĠĠĠ Ġval Ġinfo Ġ= Ġlayout . getInfo ( current Info . id !! ) Ġ?: Ġcontinue ĊĠĠĠĠĠ Ġif Ġ( current Info . type Ġ!= Ġinfo . type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Tool Window Type Impl (( current Info . id ) !! , Ġinfo . type , Ġcommands ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// Ġchange Ġother Ġproperties ĊĠĠĠ Ġfor Ġ( current Info Ġin Ġcurrent Infos ) Ġ{ ĊĠĠĠĠĠ Ġval Ġinfo Ġ= Ġlayout . getInfo ( current Info . id !! ) Ġ?: Ġcontinue ĊĠĠĠĠĠ Ġcopy Window Options ( info , Ġcommands ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// Ġrestore Ġvisibility ĊĠĠĠ Ġfor Ġ( current Info Ġin Ġcurrent Infos ) Ġ{ ĊĠĠĠĠĠ Ġval Ġinfo Ġ= Ġlayout . getInfo ( current Info . id !! ) Ġ?: Ġcontinue ĊĠĠĠĠĠ Ġif Ġ( info . isVisible ) Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Tool Window Impl (( current Info . id ) !! , Ġfalse , Ġcommands ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġexecute ( commands ) ĊĠĠĠ Ġcheck In variants ("") ĊĠĠĠ Ġthis . layout Ġ= Ġlayout ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġinvoke Later ( run nable : ĠRunnable ) Ġ{ ĊĠĠĠ Ġexecute ( listOf ( Invoke Later Cmd ( run nable , Ġcommand Processor ))) ĊĠ Ġ} ĊĊĠ Ġoverride Ġval Ġfocus Manager : ĠIde Focus Manager ĊĠĠĠ Ġget () Ġ= ĠIde Focus Manager . getInstance ( project ) !! ĊĊĠ Ġoverride Ġfun Ġcan Show Notification ( tool Window Id : ĠString ): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ(! is Tool Window Registered ( tool Window Id )) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġtool Window Pane !!. get Stripe For ( tool Window Id )?. get Button For ( tool Window Id ) Ġ!= Ġnull ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġnotify By Bal loon ( tool Window Id : ĠString , Ġtype : ĠMessageType , Ġhtml Body : ĠString ) Ġ{ ĊĠĠĠ Ġnotify By Bal loon ( tool Window Id , Ġtype , Ġhtml Body , Ġnull , Ġnull ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġnotify By Bal loon ( tool Window Id : ĠString , Ġtype : ĠMessageType , Ġhtml Body : ĠString , Ġicon : ĠIcon ?, Ġlistener : ĠHyper link Listener ?) Ġ{ ĊĠĠĠ Ġval Ġentry Ġ= Ġid To Entry . get ( tool Window Id ) !! ĊĠĠĠ Ġval Ġexisting Ġ= Ġentry . bal loon ĊĠĠĠ Ġif Ġ( existing Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ ĠDis poser . dispose ( existing ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġstripe Ġ= Ġtool Window Pane !!. get Stripe For ( tool Window Id ) Ġ?: Ġreturn ĊĠĠĠ Ġval Ġwindow Ġ= Ġget Internal Decorator ( tool Window Id ). tool Window ĊĠĠĠ Ġif Ġ(! window . is Available ) Ġ{ ĊĠĠĠĠĠ Ġwindow . is Placeholder Mode Ġ= Ġtrue ĊĠĠĠĠĠ Ġstripe . update Presentation () ĊĠĠĠĠĠ Ġstripe . re validate () ĊĠĠĠĠĠ Ġstripe . rep aint () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġanchor Ġ= Ġentry . readOnly Window Info . anchor ĊĠĠĠ Ġval Ġposition Ġ= ĠRef . create ( Bal loon . Position . below ) ĊĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠ ĠTool Window Anchor . TOP Ġ== Ġanchor Ġ-> Ġposition . set ( Bal loon . Position . below ) ĊĠĠĠĠĠ ĠTool Window Anchor . BOTTOM Ġ== Ġanchor Ġ-> Ġposition . set ( Bal loon . Position . above ) ĊĠĠĠĠĠ ĠTool Window Anchor . LEFT Ġ== Ġanchor Ġ-> Ġposition . set ( Bal loon . Position . at Right ) ĊĠĠĠĠĠ ĠTool Window Anchor . RIGHT Ġ== Ġanchor Ġ-> Ġposition . set ( Bal loon . Position . at Left ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġlistener Wrapper Ġ= ĠBal loon Hyper link Listener ( listener ) ĊĠĠĠ Ġval Ġbal loon Ġ= ĠJ B Popup Factory . getInstance () ĊĠĠĠĠĠ Ġ. create Html Text Bal loon Builder ( html Body . replace ("\ n ", Ġ"< br > "), Ġicon , Ġtype . title Foreground , Ġtype . popup Background , Ġlistener Wrapper ) ĊĠĠĠĠĠ Ġ. set BorderColor ( type . border Color ) ĊĠĠĠĠĠ Ġ. set Hide OnClick Outside ( false ) ĊĠĠĠĠĠ Ġ. set Hide On Frame Resize ( false ) ĊĠĠĠĠĠ Ġ. create Bal loon () Ġas ĠBal loon Impl ĊĠĠĠ ĠNotifications ManagerImpl . frame Activate Bal loon Listener ( bal loon ) Ġ{ ĊĠĠĠĠĠ ĠApp Executor Util . getApp Scheduled ExecutorService (). schedule ( Runnable Ġ{ Ġbal loon . set Hide OnClick Outside ( true ) Ġ}, Ġ 1 0 0 , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġlistener Wrapper . bal loon Ġ= Ġbal loon ĊĠĠĠ Ġentry . bal loon Ġ= Ġbal loon ĊĠĠĠ ĠDis poser . register ( bal loon , ĠDis posable Ġ{ ĊĠĠĠĠĠ Ġwindow . is Placeholder Mode Ġ= Ġfalse ĊĠĠĠĠĠ Ġstripe . update Presentation () ĊĠĠĠĠĠ Ġstripe . re validate () ĊĠĠĠĠĠ Ġstripe . rep aint () ĊĠĠĠĠĠ Ġentry . bal loon Ġ= Ġnull ĊĠĠĠ Ġ}) ĊĠĠĠ ĠDis poser . register ( entry . dis posable , Ġbal loon ) ĊĠĠĠ Ġexecute ( listOf ( object Ġ: ĠFinal izable Command ( null ) Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbutton Ġ= Ġstripe . get Button For ( tool Window Id ) ĊĠĠĠĠĠĠĠ ĠLOG . assertTrue ( button Ġ!= Ġnull , Ġ(" Button Ġwas Ġnot Ġfound , Ġpopup Ġwon 't Ġbe Ġshown . ĠTool window Ġid : Ġ$ tool Window Id , Ġmessage : Ġ$ html Body , Ġmessage Ġtype : Ġ$ type ")) ĊĠĠĠĠĠĠĠ Ġif Ġ( button Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġshow Ġ= ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġtracker : ĠPosition Tracker < Bal loon > ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( button . is Showing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtracker Ġ= Ġobject Ġ: ĠPosition Tracker < Bal loon >( button ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġre calculate Location (` object `: ĠBal loon ): ĠRelative Point ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstripe Button Ġ= Ġtool Window Pane !!. get Stripe For ( tool Window Id )?. get Button For ( tool Window Id ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( get Tool Window ( tool Window Id )?. anchor Ġ!= Ġanchor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` object `. hide () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRelative Point ( stripe Button , ĠPoint ( stripe Button . bounds . width Ġ/ Ġ 2 , Ġstripe Button . height Ġ/ Ġ 2 Ġ- Ġ 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtracker Ġ= Ġobject Ġ: ĠPosition Tracker < Bal loon >( tool Window Pane ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġre calculate Location (` object `: ĠBal loon ): ĠRelative Point Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= Ġtool Window Pane !!. bounds ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Ġ= ĠStartup Ui Util . get Center Point ( bounds , ĠDimension ( 1 , Ġ 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTool Window Anchor . TOP Ġ== Ġanchor Ġ-> Ġtarget . y Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTool Window Anchor . BOTTOM Ġ== Ġanchor Ġ-> Ġtarget . y Ġ= Ġbounds . height Ġ- Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTool Window Anchor . LEFT Ġ== Ġanchor Ġ-> Ġtarget . x Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTool Window Anchor . RIGHT Ġ== Ġanchor Ġ-> Ġtarget . x Ġ= Ġbounds . width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRelative Point ( tool Window Pane !! , Ġtarget ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ(! bal loon . is Disposed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbal loon . show ( tracker , Ġposition . get ()) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( button . isValid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġshow . run () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠSw ing Utilities . invoke Later ( show ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ})) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget Tool Window Bal loon ( id : ĠString ) Ġ= Ġid To Entry . get ( id )?. bal loon ĊĊĠ Ġoverride Ġval Ġis Editor Component Active : ĠBoolean ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠ ĠApplication Manager . getApplication (). assertIs Dispatch Thread () ĊĠĠĠĠĠ Ġreturn ĠComponent Util . getParent OfType ( Editors Split ters :: class . java , Ġfocus Manager . focus Owner ) Ġ!= Ġnull ĊĠĠĠ Ġ} ĊĊĠ Ġfun Ġget Tool Window Anchor ( id : ĠString ) Ġ= Ġget Registered Mutable Info Or LogError ( id ). anchor ĊĊĠ Ġfun Ġset Tool Window Anchor ( id : ĠString , Ġanchor : ĠTool Window Anchor ) Ġ{ ĊĠĠĠ ĠApplication Manager . getApplication (). assertIs Dispatch Thread () ĊĠĠĠ Ġset Tool Window Anchor ( id , Ġanchor , Ġ- 1 ) ĊĠ Ġ} ĊĊĠ Ġ// Ġused Ġby ĠR ider ĊĠ Ġ@ Suppress (" Member Visibility Can Be Private ") ĊĠ Ġfun Ġset Tool Window Anchor ( id : ĠString , Ġanchor : ĠTool Window Anchor , Ġorder : ĠInt ) Ġ{ ĊĠĠĠ ĠApplication Manager . getApplication (). assertIs Dispatch Thread () ĊĠĠĠ Ġval Ġcommand List Ġ= Ġmutable ListOf < Final izable Command >() ĊĠĠĠ Ġset Tool Window Anchor Impl ( id , Ġanchor , Ġorder , Ġcommand List ) ĊĠĠĠ Ġexecute ( command List ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġset Tool Window Anchor Impl ( id : ĠString , Ġanchor : ĠTool Window Anchor , Ġorder : ĠInt , Ġcommands : ĠMutable List < Final izable Command >) Ġ{ ĊĠĠĠ Ġval Ġinfo Ġ= Ġget Registered Mutable Info Or LogError ( id ) ĊĠĠĠ Ġif Ġ( anchor Ġ== Ġinfo . anchor Ġ&& Ġorder Ġ== Ġinfo . order ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġappend Remove Button Cmd If Can () Ġ{ ĊĠĠĠĠĠ Ġid To Entry . get ( id )?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġappend Remove Button Cmd ( id , Ġit , Ġinfo , Ġcommands ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġif Ġtool Ġwindow Ġisn 't Ġvisible Ġor Ġonly Ġorder Ġnumber Ġis Ġchanged Ġthen Ġjust Ġremove / add Ġstripe Ġbutton ĊĠĠĠ Ġif Ġ(! info . isVisible Ġ|| Ġanchor Ġ== Ġinfo . anchor Ġ|| Ġinfo . is Floating Ġ|| Ġinfo . is Window ed ) Ġ{ ĊĠĠĠĠĠ Ġappend Remove Button Cmd If Can () ĊĠĠĠĠĠ Ġlayout . set Anchor ( id , Ġanchor , Ġorder ) ĊĠĠĠĠĠ Ġ// Ġupdate Ġinfos Ġfor Ġall Ġwindow . ĠActually Ġwe Ġhave Ġto Ġupdate Ġonly Ġinfos Ġaffected Ġby ĊĠĠĠĠĠ Ġ// Ġset Anchor Ġmethod ĊĠĠĠĠĠ Ġid To Entry . forEach Ġ{ Ġ( other Id , Ġother Entry ) Ġ-> ĊĠĠĠĠĠĠĠ Ġappend Apply Window Info Cmd ( layout . getInfo ( other Id ) Ġ?: Ġreturn @ forEach , Ġother Entry , Ġcommands ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġappend Add Button Cmd ( get Stripe Button ( id ), Ġinfo , Ġcommands ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠ Ġ// Ġfor Ġdock ed Ġand Ġsl iding Ġwindows Ġwe Ġhave Ġto Ġmove Ġbuttons Ġand Ġwindow 's Ġdecorators ĊĠĠĠĠĠ Ġinfo . isVisible Ġ= Ġfalse ĊĠĠĠĠĠ Ġappend Remove Decorator Cmd ( id , Ġfalse , Ġcommands ) ĊĠĠĠĠĠ Ġappend Remove Button Cmd If Can () ĊĠĠĠĠĠ Ġlayout . set Anchor ( id , Ġanchor , Ġorder ) ĊĠĠĠĠĠ Ġ// Ġupdate Ġinfos Ġfor Ġall Ġwindow . ĠActually Ġwe Ġhave Ġto Ġupdate Ġonly Ġinfos Ġaffected Ġby ĊĠĠĠĠĠ Ġ// Ġset Anchor Ġmethod ĊĠĠĠĠĠ Ġid To Entry . forEach Ġ{ Ġ( other Id , Ġother Entry ) Ġ-> ĊĠĠĠĠĠĠĠ Ġappend Apply Window Info Cmd ( layout . getInfo ( other Id ) Ġ?: Ġreturn @ forEach , Ġother Entry , Ġcommands ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġappend Add Button Cmd ( get Stripe Button ( id ), Ġinfo , Ġcommands ) ĊĠĠĠĠĠ Ġshow Tool Window Impl ( id , Ġfalse , Ġcommands ) ĊĠĠĠĠĠ Ġif Ġ( info . isActive ) Ġ{ ĊĠĠĠĠĠĠĠ Ġappend Request Focus In Tool Window Cmd ( id , Ġcommands ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġis Split Mode ( id : ĠString ): ĠBoolean Ġ{ ĊĠĠĠ ĠApplication Manager . getApplication (). assertIs Dispatch Thread () ĊĠĠĠ Ġreturn Ġget Registered Mutable Info Or LogError ( id ). is Split ĊĠ Ġ} ĊĊĠ Ġfun ĠgetContent Ui Type ( id : ĠString ): ĠTool Window Content Ui Type Ġ{ ĊĠĠĠ ĠApplication Manager . getApplication (). assertIs Dispatch Thread () ĊĠĠĠ Ġreturn Ġget Registered Mutable Info Or LogError ( id ). content Ui Type ĊĠ Ġ} ĊĊĠ Ġfun Ġset Side Tool ( id : ĠString , Ġis Side : ĠBoolean ) Ġ{ ĊĠĠĠ Ġval Ġcommands Ġ= Ġmutable ListOf < Final izable Command >() ĊĠĠĠ Ġset Split Mode Impl ( id , Ġis Side , Ġcommands ) ĊĠĠĠ Ġexecute ( commands ) ĊĠ Ġ} ĊĊĠ Ġfun Ġset Content Ui Type ( id : ĠString , Ġtype : ĠTool Window Content Ui Type ) Ġ{ ĊĠĠĠ Ġval Ġinfo Ġ= Ġget Registered Mutable Info Or LogError ( id ) ĊĠĠĠ Ġinfo . content Ui Type Ġ= Ġtype ĊĠĠĠ Ġval Ġcommands Ġ= Ġmutable ListOf < Final izable Command >() ĊĠĠĠ Ġappend Apply Window Info Cmd ( info , Ġid To Entry . get ( info . id !! ) !! , Ġcommands ) ĊĠĠĠ Ġexecute ( commands ) ĊĠ Ġ} ĊĊĠ Ġfun Ġset Side Tool And Anchor ( id : ĠString , Ġanchor : ĠTool Window Anchor , Ġorder : ĠInt , Ġis Side : ĠBoolean ) Ġ{ ĊĠĠĠ Ġhide Tool Window ( id , Ġfalse ) ĊĠĠĠ Ġlayout . set Split Mode ( id , Ġis Side ) ĊĠĠĠ Ġset Tool Window Anchor ( id , Ġanchor , Ġorder ) ĊĠĠĠ Ġactivate Tool Window ( id , Ġfalse , Ġfalse ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġset Split Mode Impl ( id : ĠString , Ġis Split : ĠBoolean , Ġcommands : ĠMutable List < Final izable Command >) Ġ{ ĊĠĠĠ Ġval Ġinfo Ġ= Ġget Registered Mutable Info Or LogError ( id ) ĊĠĠĠ Ġif Ġ( is Split Ġ== Ġinfo . is Split ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġlayout . set Split Mode ( id , Ġis Split ) ĊĠĠĠ Ġval Ġwas Active Ġ= Ġinfo . isActive ĊĠĠĠ Ġval Ġwas Visible Ġ= Ġinfo . isVisible ĊĠĠĠ Ġ// Ġwe Ġshould Ġhide Ġthe Ġwindow Ġand Ġshow Ġit Ġin Ġa Ġ' new Ġplace ' Ġto Ġautomatically Ġhide Ġpossible Ġwindow Ġthat Ġis Ġalready Ġlocated Ġin Ġa Ġ' new Ġplace ' ĊĠĠĠ Ġif Ġ( was Active Ġ|| Ġwas Visible ) Ġ{ ĊĠĠĠĠĠ Ġhide Tool Window ( id , Ġfalse ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġid To Entry . forEach Ġ{ Ġ( other Id , Ġother Entry ) Ġ-> ĊĠĠĠĠĠ Ġval Ġother Info Ġ= Ġlayout . getInfo ( other Id ) Ġ?: Ġreturn @ forEach ĊĠĠĠĠĠ Ġappend Apply Window Info Cmd ( other Info , Ġother Entry , Ġcommands ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( was Visible Ġ|| Ġwas Active ) Ġ{ ĊĠĠĠĠĠ Ġshow Tool Window Impl ( id , Ġtrue , Ġcommands ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( was Active ) Ġ{ ĊĠĠĠĠĠ Ġactivate Tool Window Impl ( id , Ġcommands , Ġtrue , Ġtrue ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġcommands . add ( tool Window Pane !!. create Update Button Position Cmd ( Supplier Ġ{ Ġid To Entry . get ( id )?. stripe Button Ġ}, Ġcommand Processor )) ĊĠ Ġ} ĊĊĠ Ġfun Ġget Tool Window Internal Type ( id : ĠString ): ĠTool Window Type Ġ{ ĊĠĠĠ ĠApplication Manager . getApplication (). assertIs Dispatch Thread () ĊĠĠĠ Ġreturn Ġget Registered Mutable Info Or LogError ( id ). internal Type ĊĠ Ġ} ĊĊĠ Ġfun Ġget Tool Window Type ( id : ĠString ) Ġ= Ġget Registered Mutable Info Or LogError ( id ). type ĊĊĠ Ġprotected Ġopen Ġfun Ġfire StateChanged () Ġ{ ĊĠĠĠ Ġproject . message Bus . sync Publisher ( Tool WindowManager Listener . TOPIC ). state Changed () ĊĠ Ġ} ĊĊĠ Ġfun Ġis Tool Window Active ( id : ĠString ): ĠBoolean Ġ{ ĊĠĠĠ ĠApplication Manager . getApplication (). assertIs Dispatch Thread () ĊĠĠĠ Ġreturn Ġlayout . getInfo ( id )?. isActive Ġ?: Ġfalse ĊĠ Ġ} ĊĊĠ Ġfun Ġis Tool Window Auto Hide ( id : ĠString ): ĠBoolean Ġ{ ĊĠĠĠ ĠApplication Manager . getApplication (). assertIs Dispatch Thread () ĊĠĠĠ Ġreturn Ġid To Entry . get ( id )?. readOnly Window Info ?. is Auto Hide Ġ?: Ġfalse ĊĠ Ġ} ĊĊĠ Ġfun Ġis Tool Window Visible ( id : ĠString ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġid To Entry . get ( id )?. readOnly Window Info ?. isVisible Ġ?: Ġfalse ĊĠ Ġ} ĊĊĠ Ġfun Ġset Tool Window Auto Hide ( id : ĠString , Ġauto Hide : ĠBoolean ) Ġ{ ĊĠĠĠ ĠApplication Manager . getApplication (). assertIs Dispatch Thread () ĊĠĠĠ Ġval Ġcommand List Ġ= Ġmutable ListOf < Final izable Command >() ĊĠĠĠ Ġset Tool Window Auto Hide Impl ( id , Ġauto Hide , Ġcommand List ) ĊĠĠĠ Ġexecute ( command List ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġset Tool Window Auto Hide Impl ( id : ĠString , Ġauto Hide : ĠBoolean , Ġcommands : ĠMutable List < Final izable Command >) Ġ{ ĊĠĠĠ Ġval Ġinfo Ġ= Ġget Registered Mutable Info Or LogError ( id ) ĊĠĠĠ Ġif Ġ( info . is Auto Hide Ġ== Ġauto Hide ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinfo . is Auto Hide Ġ= Ġauto Hide ĊĠĠĠ Ġappend Apply Window Info Cmd ( info , Ġid To Entry . get ( info . id !! ) !! , Ġcommands ) ĊĠĠĠ Ġif Ġ( info . isVisible ) Ġ{ ĊĠĠĠĠĠ Ġdeactivate Windows ( id , Ġcommands ) ĊĠĠĠĠĠ Ġshow And Activate ( id , Ġfalse , Ġcommands , Ġtrue ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcopy Window Options ( origin : ĠWindow Info Impl , Ġcommands : ĠMutable List < Final izable Command >) Ġ{ ĊĠĠĠ Ġval Ġid Ġ= Ġorigin . id !! ĊĠĠĠ Ġval Ġinfo Ġ= Ġget Registered Mutable Info Or LogError ( id ) ĊĠĠĠ Ġvar Ġchanged Ġ= Ġfalse ĊĠĠĠ Ġif Ġ( info . is Auto Hide Ġ!= Ġorigin . is Auto Hide ) Ġ{ ĊĠĠĠĠĠ Ġinfo . is Auto Hide Ġ= Ġorigin . is Auto Hide ĊĠĠĠĠĠ Ġchanged Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( info . weight Ġ!= Ġorigin . weight ) Ġ{ ĊĠĠĠĠĠ Ġinfo . weight Ġ= Ġorigin . weight ĊĠĠĠĠĠ Ġchanged Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( info . side Weight Ġ!= Ġorigin . side Weight ) Ġ{ ĊĠĠĠĠĠ Ġinfo . side Weight Ġ= Ġorigin . side Weight ĊĠĠĠĠĠ Ġchanged Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( info . content Ui Type Ġ!== Ġorigin . content Ui Type ) Ġ{ ĊĠĠĠĠĠ Ġinfo . content Ui Type Ġ= Ġorigin . content Ui Type ĊĠĠĠĠĠ Ġchanged Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( changed ) Ġ{ ĊĠĠĠĠĠ Ġappend Apply Window Info Cmd ( info , Ġid To Entry . get ( id ) !! , Ġcommands ) ĊĠĠĠĠĠ Ġif Ġ( info . isVisible ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdeactivate Windows ( id , Ġcommands ) ĊĠĠĠĠĠĠĠ Ġshow And Activate ( id , Ġfalse , Ġcommands , Ġtrue ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġset Tool Window Type ( id : ĠString , Ġtype : ĠTool Window Type ) Ġ{ ĊĠĠĠ ĠApplication Manager . getApplication (). assertIs Dispatch Thread () ĊĠĠĠ Ġval Ġcommands Ġ= Ġmutable ListOf < Final izable Command >() ĊĠĠĠ Ġset Tool Window Type Impl ( id , Ġtype , Ġcommands ) ĊĠĠĠ Ġexecute ( commands ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġset Tool Window Type Impl ( id : ĠString , Ġtype : ĠTool Window Type , Ġcommands : ĠMutable List < Final izable Command >) Ġ{ ĊĠĠĠ Ġval Ġinfo Ġ= Ġget Registered Mutable Info Or LogError ( id ) ĊĠĠĠ Ġif Ġ( info . type Ġ== Ġtype ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġentry Ġ= Ġid To Entry . get ( id ) !! ĊĊĠĠĠ Ġif Ġ( info . isVisible ) Ġ{ ĊĠĠĠĠĠ Ġval Ġdirty Mode Ġ= Ġinfo . is Dock ed Ġ|| Ġinfo . is Sl iding ĊĠĠĠĠĠ Ġappend Remove Decorator Command ( info , Ġdirty Mode , Ġcommands ) ĊĠĠĠĠĠ Ġinfo . type Ġ= Ġtype ĊĠĠĠĠĠ Ġappend Apply Window Info Cmd ( info , Ġentry , Ġcommands ) ĊĠĠĠĠĠ Ġdeactivate Windows ( id , Ġcommands ) ĊĠĠĠĠĠ Ġshow And Activate ( id , Ġdirty Mode , Ġcommands , Ġtrue ) ĊĠĠĠĠĠ Ġappend Update Root Pane ( commands ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠ Ġinfo . type Ġ= Ġtype ĊĠĠĠĠĠ Ġappend Apply Window Info Cmd ( info , Ġentry , Ġcommands ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġappend Apply Window Info Cmd ( info : ĠWindow Info Impl , Ġentry : ĠTool Window Entry , Ġcommands : ĠMutable List < Final izable Command >) Ġ{ ĊĠĠĠ Ġcommands . add ( Apply Window Info Cmd ( info , Ġentry . stripe Button , Ġentry . internal Decorator , Ġcommand Processor )) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġ@ see ĠTool Windows Pane . create Add Decorator Cmd ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun Ġappend Add Decorator Cmd ( decorator : ĠInternal Decorator , Ġinfo : ĠWindow Info Impl , Ġdirty Mode : ĠBoolean , Ġcommands : ĠMutable List < Final izable Command >) Ġ{ ĊĠĠĠ Ġcommands . add ( tool Window Pane !!. create Add Decorator Cmd ( decorator , Ġinfo , Ġdirty Mode , Ġcommand Processor )) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġ@ see ĠTool Windows Pane . create Remove Decorator Cmd ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun Ġappend Remove Decorator Cmd ( id : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirty Mode : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommands List : ĠMutable List < Final izable Command >) Ġ{ ĊĠĠĠ Ġcommands List . add ( tool Window Pane !!. create Remove Decorator Cmd ( id , Ġdirty Mode , Ġcommand Processor )) ĊĠĠĠ Ġcommands List . add ( tool Window Pane !!. create Transfer Focus Cmd ( Boolean Supplier Ġ{ Ġcommands List . any Ġ{ Ġit Ġis ĠRequest Focus In Tool Window Cmd Ġ} Ġ}, Ġcommand Processor )) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġ@ see ĠTool Windows Pane . create Add Button Cmd ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun Ġappend Add Button Cmd ( button : ĠStripe Button , Ġinfo : ĠWindow Info Impl , Ġcommands List : ĠMutable List < Final izable Command >) Ġ{ ĊĠĠĠ Ġval Ġcomparator Ġ= Ġlayout . My Stripe Button Comparator ( info . anchor , Ġthis ) ĊĠĠĠ Ġcommands List . add ( tool Window Pane !!. create Add Button Cmd ( button , Ġinfo , Ġcomparator , Ġcommand Processor )) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġ@ see ĠTool Windows Pane . create Add Button Cmd ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun Ġappend Remove Button Cmd ( id : ĠString , Ġtool Window Entry : ĠTool Window Entry , Ġinfo : ĠWindow Info Impl , Ġcommands : ĠMutable List < Final izable Command >) Ġ{ ĊĠĠĠ Ġcommands . add ( tool Window Pane !!. create Remove Button Cmd ( tool Window Entry . stripe Button , Ġinfo , Ġid , Ġcommand Processor )) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġappend Request Focus In Tool Window Cmd ( id : ĠString , Ġcommand List : ĠMutable List < Final izable Command >) Ġ{ ĊĠĠĠ Ġval Ġentry Ġ= Ġid To Entry . get ( id ) Ġ?: Ġreturn ĊĠĠĠ Ġcommand List . add ( Request Focus In Tool Window Cmd ( entry . internal Decorator . tool Window , Ġentry . watcher , Ġcommand Processor , Ġproject )) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġappend Set Editor Component ( component : ĠJ Component ?, Ġcommands : ĠMutable List < Final izable Command >) Ġ{ ĊĠĠĠ Ġcommands . add ( tool Window Pane !!. create Set Editor Component Cmd ( component , Ġcommand Processor )) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġappend Update Root Pane ( commands : ĠMutable List < Final izable Command >) Ġ{ ĊĠĠĠ Ġval Ġframe Ġ= Ġframe !! ĊĠĠĠ Ġcommands . add ( object Ġ: ĠFinal izable Command ( command Processor ) Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġroot Pane Ġ= Ġframe . root Pane Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠ Ġroot Pane . re validate () ĊĠĠĠĠĠĠĠĠĠ Ġroot Pane . rep aint () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġclear Side Stack () Ġ{ ĊĠĠĠ Ġif Ġ( is Stack Enabled ) Ġ{ ĊĠĠĠĠĠ Ġside Stack . clear () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠgetState (): ĠElement ? Ġ{ ĊĠĠĠ Ġif Ġ( frame Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġ// Ġdo Ġnothing Ġif Ġthe Ġproject Ġwas Ġnot Ġopened ĊĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġupdate Ġsize Ġof Ġall Ġopen Ġfloating Ġwindows . ĠSee ĠS CR Ġ# 1 8 4 3 9 ĊĠĠĠ Ġid To Entry . forEach Ġ{ Ġ( id , Ġentry ) Ġ-> ĊĠĠĠĠĠ Ġval Ġinfo Ġ= Ġlayout . getInfo ( id ) Ġ?: Ġreturn @ forEach ĊĠĠĠĠĠ Ġif Ġ( info . isVisible ) Ġ{ ĊĠĠĠĠĠĠĠ Ġentry . internal Decorator . fire Res ized () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġelement Ġ= ĠElement (" state ") ĊĠĠĠ Ġ// ĠSave Ġframe 's Ġbounds ĊĠĠĠ Ġ// Ġ[ t av ] ĠWhere Ġwe Ġload Ġthese Ġbounds ? ĠShould Ġwe Ġjust Ġremove Ġthis Ġcode ? Ġ( because Ġwe Ġload Ġframe Ġbounds Ġin ĠWindow ManagerImpl . allocate Frame ) ĊĠĠĠ Ġ// ĠAny way , Ġwe Ġshould Ġsave Ġbounds Ġin Ġdevice Ġspace Ġto Ġpreserve Ġbackward Ġcompatibility Ġwith Ġthe ĠIDE - managed ĠHi DPI Ġmode Ġ( see ĠJ BU I . Scale Type ). ĊĠĠĠ Ġ// ĠHowever , ĠI Ġwon 't Ġchange Ġthis Ġcode Ġbecause ĠI Ġcan 't Ġeven Ġtest Ġit . ĊĠĠĠ Ġval Ġframe Bounds Ġ= Ġframe !!. frame . bounds ĊĠĠĠ Ġval Ġframe Element Ġ= ĠElement ( FRAME _ ELEMENT ) ĊĠĠĠ Ġelement . add Content ( frame Element ) ĊĠĠĠ Ġframe Element . setAttribute ( X _ ATTR , Ġframe Bounds . x . toString ()) ĊĠĠĠ Ġframe Element . setAttribute ( Y _ ATTR , Ġframe Bounds . y . toString ()) ĊĠĠĠ Ġframe Element . setAttribute ( WIDTH _ ATTR , Ġframe Bounds . width . toString ()) ĊĠĠĠ Ġframe Element . setAttribute ( HEIGHT _ ATTR , Ġframe Bounds . height . toString ()) ĊĠĠĠ Ġframe Element . setAttribute ( EXT ENDED _ STATE _ ATTR , Ġframe !!. frame . extended State . toString ()) ĊĊĠĠĠ Ġ// ĠSave Ġwhether Ġeditor Ġis Ġactive Ġor Ġnot ĊĠĠĠ Ġif Ġ( is Editor Component Active ) Ġ{ ĊĠĠĠĠĠ Ġval Ġeditor Element Ġ= ĠElement ( EDITOR _ ELEMENT ) ĊĠĠĠĠĠ Ġeditor Element . setAttribute ( ACTIVE _ ATTR _ VALUE , Ġ" true ") ĊĠĠĠĠĠ Ġelement . add Content ( editor Element ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠSave Ġlayout Ġof Ġtool Ġwindows ĊĠĠĠ Ġval Ġlayout Element Ġ= Ġlayout . write External ( Desktop Layout . TAG ) ĊĠĠĠ Ġif Ġ( layout Element Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġelement . add Content ( layout Element ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġlayout To Restore Element Ġ= Ġlayout To Restore Later ?. write External ( LAYOUT _ TO _ REST ORE ) ĊĠĠĠ Ġif Ġ( layout To Restore Element Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġelement . add Content ( layout To Restore Element ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġelement ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġno State Loaded () Ġ{ ĊĠĠĠ Ġval Ġnew Layout Ġ= ĠWindow Manager Ex . getInstance Ex (). layout . copy () ĊĠĠĠ Ġschedule Set Layout ( Runnable Ġ{ ĊĠĠĠĠĠ Ġlayout Ġ= Ġnew Layout ĊĠĠĠ Ġ}) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġload State ( state : ĠElement ) Ġ{ ĊĠĠĠ Ġfor Ġ( element Ġin Ġstate . children ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( Desktop Layout . TAG Ġ== Ġelement . name ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlayout Ġ= ĠDesktop Layout () ĊĠĠĠĠĠĠĠ Ġlayout . read External ( element ) ĊĠĠĠĠĠĠĠ Ġschedule Set Layout ( Runnable Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġset Layout ( layout ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġif Ġ( LAYOUT _ TO _ REST ORE Ġ== Ġelement . name ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlayout To Restore Later Ġ= ĠDesktop Layout () ĊĠĠĠĠĠĠĠ Ġlayout To Restore Later !!. read External ( element ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġcheck In variants ("") ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġschedule Set Layout ( task : ĠRunnable ) Ġ{ ĊĠĠĠ Ġval Ġapp Ġ= ĠApplication Manager . getApplication () ĊĠĠĠ Ġif Ġ( app . is Dispatch Thread ) Ġ{ ĊĠĠĠĠĠ Ġpending Set Layout Task . set ( null ) ĊĠĠĠĠĠ Ġtask . run () ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠ Ġpending Set Layout Task . set ( task ) ĊĠĠĠĠĠ Ġapp . invoke Later ( Runnable Ġ{ ĊĠĠĠĠĠĠĠ Ġpending Set Layout Task . get AndSet ( null )?. run () ĊĠĠĠĠĠ Ġ}, Ġproject . dis posed ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun ĠsetDefault State ( tool Window : ĠTool Window Impl , Ġanchor : ĠTool Window Anchor ?, Ġtype : ĠTool Window Type ?, Ġfloating Bounds : ĠRectangle ?) Ġ{ ĊĠĠĠ Ġval Ġinfo Ġ= Ġget Registered Mutable Info Or LogError ( tool Window . id ) ĊĠĠĠ Ġif Ġ( info . is From Persistent Settings ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( floating Bounds Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġinfo . floating Bounds Ġ= Ġfloating Bounds ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( anchor Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġtool Window . set Anchor ( anchor , Ġnull ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( type Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġtool Window . setType ( type , Ġnull ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun ĠsetDefault Content Ui Type ( tool Window : ĠTool Window Impl , Ġtype : ĠTool Window Content Ui Type ) Ġ{ ĊĠĠĠ Ġval Ġinfo Ġ= Ġget Registered Mutable Info Or LogError ( tool Window . id ) ĊĠĠĠ Ġif Ġ( info . is From Persistent Settings ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġtool Window . setContent Ui Type ( type , Ġnull ) ĊĠ Ġ} ĊĊĠ Ġfun Ġstretch Width ( tool Window : ĠTool Window Impl , Ġvalue : ĠInt ) Ġ{ ĊĠĠĠ Ġtool Window Pane !!. stretch Width ( tool Window , Ġvalue ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġis Max im ized ( window : ĠTool Window ) Ġ= Ġtool Window Pane !!. is Max im ized ( window ) ĊĊĠ Ġoverride Ġfun Ġset Max im ized ( window : ĠTool Window , Ġmaxim ized : ĠBoolean ) Ġ{ ĊĠĠĠ Ġif Ġ( window . type Ġ== ĠTool Window Type . FLOAT ING Ġ&& Ġwindow Ġis ĠTool Window Impl ) Ġ{ ĊĠĠĠĠĠ ĠMax imize Active Dialog Action . do Max imize ( get Floating Decorator ( window . id )) ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( window . type Ġ== ĠTool Window Type . WINDOW ED Ġ&& Ġwindow Ġis ĠTool Window Impl ) Ġ{ ĊĠĠĠĠĠ Ġval Ġdecorator Ġ= Ġget Window ed Decorator ( window . id ) ĊĠĠĠĠĠ Ġval Ġframe Ġ= Ġif Ġ( decorator Ġ!= Ġnull Ġ&& Ġdecorator . frame Ġis ĠFrame ) Ġdecorator . frame Ġas ĠFrame Ġelse Ġnull ĊĠĠĠĠĠ Ġif Ġ( frame Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġframe . state ĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġ== ĠFrame . NORMAL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġframe . state Ġ= ĠFrame . MAX IM IZED _ BOTH ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( state Ġ== ĠFrame . MAX IM IZED _ BOTH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġframe . state Ġ= ĠFrame . NORMAL ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġtool Window Pane !!. setMax im ized ( window , Ġmaxim ized ) ĊĠ Ġ} ĊĊĠ Ġfun Ġstretch Height ( tool Window : ĠTool Window Impl ?, Ġvalue : ĠInt ) Ġ{ ĊĠĠĠ Ġtool Window Pane !!. stretch Height (( tool Window ) !! , Ġvalue ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġclass ĠBal loon Hyper link Listener Ġinternal Ġconstructor ( private Ġval Ġlistener : ĠHyper link Listener ?) Ġ: ĠHyper link Listener Ġ{ ĊĠĠĠ Ġvar Ġbal loon : ĠBal loon ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġhyper link Update ( e : ĠHyper link Event ) Ġ{ ĊĠĠĠĠĠ Ġval Ġbal loon Ġ= Ġbal loon ĊĠĠĠĠĠ Ġif Ġ( bal loon Ġ!= Ġnull Ġ&& Ġe . eventType Ġ== ĠHyper link Event . EventType . ACTIV ATED ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbal loon . hide () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġlistener ?. hyperlink Update ( e ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThis Ġcommand Ġcreates Ġand Ġshows Ġ` Floating Decorator `. ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġinner Ġclass ĠAdd Floating Decorator Cmd ( entry : ĠTool Window Entry , Ġinfo : ĠWindow Info Impl ) Ġ: ĠFinal izable Command ( command Processor ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġfloating Decorator : ĠFloating Decorator ĊĊĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠĠĠĠĠ Ġfloating Decorator . show () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġfinally Ġ{ ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġfloating Ġdecorator Ġfor Ġspecified Ġinternal Ġdecorator . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠ Ġval Ġframe Ġ= Ġframe !!. frame ĊĠĠĠĠĠ Ġval Ġdecorator Ġ= Ġentry . internal Decorator ĊĠĠĠĠĠ Ġfloating Decorator Ġ= ĠFloating Decorator ( frame , Ġinfo . copy (), Ġdecorator ) ĊĠĠĠĠĠ Ġentry . floating Decorator Ġ= Ġfloating Decorator ĊĠĠĠĠĠ Ġval Ġbounds Ġ= Ġinfo . floating Bounds ĊĠĠĠĠĠ Ġif Ġ(( bounds Ġ!= Ġnull Ġ&& Ġbounds . width Ġ> Ġ 0 Ġ&& Ġbounds . height Ġ> Ġ 0 Ġ&& ĊĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . getInstance (). is Inside Screen Bounds ( bounds . x , Ġbounds . y , Ġbounds . width ))) Ġ{ ĊĠĠĠĠĠĠĠ Ġfloating Decorator . bounds Ġ= ĠRectangle ( bounds ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġplace Ġnew Ġframe Ġat Ġthe Ġcenter Ġof Ġmain Ġframe Ġif Ġthere Ġare Ġno Ġfloating Ġbounds ĊĠĠĠĠĠĠĠ Ġvar Ġsize Ġ= Ġdecorator . size ĊĠĠĠĠĠĠĠ Ġif Ġ( size . width Ġ== Ġ 0 Ġ|| Ġsize . height Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġsize Ġ= Ġdecorator . preferred Size ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfloating Decorator . size Ġ= Ġsize ĊĠĠĠĠĠĠĠ Ġfloating Decorator . setLocation Relative To ( frame ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThis Ġcommand Ġhide s Ġand Ġdest ro ys Ġfloating Ġdecorator Ġfor Ġtool Ġwindow ĊĠĠ Ġ* Ġwith Ġspecified Ġ` ID `. ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġinner Ġclass ĠRemove Floating Decorator Cmd ( info : ĠWindow Info Impl ) Ġ: ĠFinal izable Command ( command Processor ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġfloating Decorator Ġ= Ġget Floating Decorator ( info . id !! ) ĊĊĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġfloating Decorator !!. dispose () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġfinally Ġ{ ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Expire Condition () Ġ= ĠBoolean Supplier Ġ{ ĠApplication Manager . getApplication (). is Disposed Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠ Ġinfo . floating Bounds Ġ= Ġfloating Decorator !!. bounds ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThis Ġcommand Ġcreates Ġand Ġshows Ġ` Window ed Decorator `. ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġinner Ġclass ĠAdd Window ed Decorator Cmd ( entry : ĠTool Window Entry , Ġinfo : ĠWindow Info Impl ) Ġ: ĠFinal izable Command ( command Processor ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġwindow ed Decorator : ĠWindow ed Decorator ĊĠĠĠ Ġprivate Ġval ĠshouldBe Max im ized : ĠBoolean ĊĊĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġwindow ed Decorator . show ( false ) ĊĠĠĠĠĠĠĠ Ġval Ġwindow Ġ= Ġwindow ed Decorator . frame ĊĠĠĠĠĠĠĠ Ġval Ġroot Pane Ġ= Ġ( window Ġas ĠRoot Pane Container ). root Pane ĊĠĠĠĠĠĠĠ Ġval Ġroot Pane Bounds Ġ= Ġroot Pane . bounds ĊĠĠĠĠĠĠĠ Ġval Ġpoint Ġ= Ġroot Pane . location On Screen ĊĠĠĠĠĠĠĠ Ġval Ġwindow Bounds Ġ= Ġwindow . bounds ĊĠĠĠĠĠĠĠ Ġ// Point Ġwindow Location Ġ= Ġwindow Bounds . getLocation (); ĊĠĠĠĠĠĠĠ Ġ// window Location . translate ( window Location . x Ġ- Ġpoint . x , Ġwindow Location . y Ġ- Ġpoint . y ); ĊĠĠĠĠĠĠĠ Ġwindow . setLocation ( 2 Ġ* Ġwindow Bounds . x Ġ- Ġpoint . x , Ġ 2 Ġ* Ġwindow Bounds . y Ġ- Ġpoint . y ) ĊĠĠĠĠĠĠĠ Ġwindow . setSize ( 2 Ġ* Ġwindow Bounds . width Ġ- Ġroot Pane Bounds . width , Ġ 2 Ġ* Ġwindow Bounds . height Ġ- Ġroot Pane Bounds . height ) ĊĠĠĠĠĠĠĠ Ġif Ġ( shouldBe Max im ized Ġ&& Ġwindow Ġis ĠFrame ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ( window Ġas ĠFrame ). extended State Ġ= ĠFrame . MAX IM IZED _ BOTH ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwindow . to Front () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġfinally Ġ{ ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġwindow ed Ġdecorator Ġfor Ġspecified Ġinternal Ġdecorator . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠ Ġval Ġdecorator Ġ= Ġentry . internal Decorator ĊĠĠĠĠĠ Ġwindow ed Decorator Ġ= ĠWindow ed Decorator ( project , Ġinfo . copy (), Ġdecorator ) ĊĠĠĠĠĠ ĠshouldBe Max im ized Ġ= Ġinfo . is Max im ized ĊĠĠĠĠĠ Ġval Ġwindow Ġ= Ġwindow ed Decorator . frame ĊĠĠĠĠĠ Ġval Ġbounds Ġ= Ġinfo . floating Bounds ĊĠĠĠĠĠ Ġif Ġ(( bounds Ġ!= Ġnull Ġ&& Ġbounds . width Ġ> Ġ 0 Ġ&& Ġ( bounds . height Ġ> Ġ 0 ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . getInstance (). is Inside Screen Bounds ( bounds . x , Ġbounds . y , Ġbounds . width ))) Ġ{ ĊĠĠĠĠĠĠĠ Ġwindow . bounds Ġ= ĠRectangle ( bounds ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġ{ Ġ// Ġplace Ġnew Ġframe Ġat Ġthe Ġcenter Ġof Ġmain Ġframe Ġif Ġthere Ġare Ġno Ġfloating Ġbounds ĊĠĠĠĠĠĠĠ Ġvar Ġsize Ġ= Ġdecorator . size ĊĠĠĠĠĠĠĠ Ġif Ġ( size . width Ġ== Ġ 0 Ġ|| Ġsize . height Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġsize Ġ= Ġdecorator . preferred Size ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwindow . size Ġ= Ġsize ĊĠĠĠĠĠĠĠ Ġwindow . setLocation Relative To ( frame !!. frame ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġentry . window ed Decorator Ġ= Ġwindow ed Decorator ĊĠĠĠĠĠ Ġwindow ed Decorator . add Disposable Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġe Ġ= Ġid To Entry . get ( info . id ) ĊĠĠĠĠĠĠĠ Ġif Ġ( e ?. window ed Decorator Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġhide Tool Window ( info . id !! , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThis Ġcommand Ġhide s Ġand Ġdest ro ys Ġfloating Ġdecorator Ġfor Ġtool Ġwindow ĊĠĠ Ġ* Ġwith Ġspecified Ġ` ID `. ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġinner Ġclass ĠRemove Window ed Decorator Cmd ( info : ĠWindow Info Impl ) Ġ: ĠFinal izable Command ( command Processor ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġwindow ed Decorator Ġ= Ġget Window ed Decorator ( info . id !! ) ĊĊĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ ĠDis poser . dispose (( window ed Decorator ) !! ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġfinally Ġ{ ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Expire Condition (): ĠBoolean Supplier Ġ{ ĊĠĠĠĠĠ Ġreturn ĠBoolean Supplier Ġ{ ĠApplication Manager . getApplication (). is Disposed Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠ Ġval Ġentry Ġ= Ġid To Entry [ info . id ] ĊĠĠĠĠĠ Ġif Ġ( entry Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġentry . window ed Decorator Ġ= Ġnull ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġval Ġframe Ġ= Ġwindow ed Decorator !!. frame ĊĠĠĠĠĠ Ġif Ġ( frame . is Showing ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmaxim ized Ġ= Ġ( frame Ġas ĠJ Frame ). extended State Ġ== ĠFrame . MAX IM IZED _ BOTH ĊĠĠĠĠĠĠĠ Ġif Ġ( max im ized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġframe . extended State Ġ= ĠFrame . NORMAL ĊĠĠĠĠĠĠĠĠĠ Ġframe . invalidate () ĊĠĠĠĠĠĠĠĠĠ Ġframe . re validate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= Ġget Root Bounds ( frame ) ĊĠĠĠĠĠĠĠ Ġinfo . floating Bounds Ġ= Ġbounds ĊĠĠĠĠĠĠĠ Ġinfo . is Max im ized Ġ= Ġmaxim ized ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠNot ifies Ġwindow Ġmanager Ġabout Ġfocus Ġtraversal Ġin Ġtool Ġwindow ĊĠĠ Ġ*/ ĊĠ Ġinternal Ġclass ĠTool Window Focus Watcher ( tool Window : ĠTool Window Impl ) Ġ: ĠFocus Watcher () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġid Ġ= Ġtool Window . id ĊĠĠĠ Ġprivate Ġval Ġtool Window : ĠTool Window Impl ĊĊĠĠĠ Ġfun Ġde install () Ġ{ ĊĠĠĠĠĠ Ġde install ( tool Window . component ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Focused Component Change Valid ( component : ĠComponent ?, Ġcause : ĠA WT Event ?): ĠBoolean Ġ{ ĊĠĠĠĠĠ Ġreturn Ġcomponent Ġ!= Ġnull Ġ&& Ġtool Window . tool WindowManager . command Processor . command Count Ġ== Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfocused Component Changed ( component : ĠComponent ?, Ġcause : ĠA WT Event ?) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( component Ġ== Ġnull Ġ|| Ġtool Window . tool WindowManager . command Processor . command Count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġval Ġinfo Ġ= Ġtool Window . decorator . window Info ĊĠĠĠĠĠ Ġif Ġ(! info . isActive ) Ġ{ ĊĠĠĠĠĠĠĠ ĠIde Focus Manager . getInstance ( tool Window . tool WindowManager . project ). do When Focus Set tles Down ( object Ġ: ĠE dt Runnable () Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun Ed t () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwindow Info Ġ= Ġif Ġ( tool Window . tool WindowManager . is Tool Window Registered ( id )) Ġtool Window . decorator . window Info Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( window Info Ġ== Ġnull Ġ|| Ġ! window Info . isVisible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtool Window . tool WindowManager . activate Tool Window ( id , Ġfalse , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠ Ġinstall ( tool Window . component ) ĊĠĠĠĠĠ Ġthis . tool Window Ġ= Ġtool Window ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠSp ies Ġon ĠIde Tool Window Ġproperties Ġand Ġapplies Ġthem Ġto Ġthe Ġwindow ĊĠĠ Ġ* Ġstate . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġtool Window PropertyChanged ( tool Window : ĠTool Window Impl , ĠpropertyName : ĠString ?) Ġ{ ĊĠĠĠ Ġval Ġentry Ġ= Ġid To Entry . get ( tool Window . id ) ĊĊĠĠĠ Ġif Ġ( propertyName Ġ== ĠTool Window Ex . PROP _ AVAILABLE Ġ&& Ġ! tool Window . is Available Ġ&& Ġentry ?. readOnly Window Info ?. isVisible Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠ Ġhide Tool Window ( tool Window . id , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġentry ?. stripe Button ?. update Presentation () ĊĠĠĠ ĠActivate Tool Window Action . update Tool Window Action Presentation ( tool Window ) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠTrans lates Ġevents Ġfrom ĠInternal Decorator Ġinto ĠTool WindowManager Ġmethod Ġinv ocations . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġinner Ġclass ĠMy Internal Decorator Listener Ġ: ĠInternal Decorator Listener Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġanchor Changed ( source : ĠInternal Decorator , Ġanchor : ĠTool Window Anchor ) Ġ{ ĊĠĠĠĠĠ Ġset Tool Window Anchor ( source . tool Window . id , Ġanchor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġauto Hide Changed ( source : ĠInternal Decorator , Ġauto Hide : ĠBoolean ) Ġ{ ĊĠĠĠĠĠ Ġset Tool Window Auto Hide ( source . tool Window . id , Ġauto Hide ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhidden ( source : ĠInternal Decorator ) Ġ{ ĊĠĠĠĠĠ Ġhide Tool Window ( source . tool Window . id , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhidden Side ( source : ĠInternal Decorator ) Ġ{ ĊĠĠĠĠĠ Ġhide Tool Window ( source . tool Window . id , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcontent Ui Type Changes ( source : ĠInternal Decorator , Ġtype : ĠTool Window Content Ui Type ) Ġ{ ĊĠĠĠĠĠ Ġset Content Ui Type ( source . tool Window . id , Ġtype ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHandles Ġevent Ġfrom Ġdecorator Ġand Ġmodify Ġweight / floating Ġbounds Ġof Ġthe ĊĠĠĠĠ Ġ* Ġtool Ġwindow Ġdepending Ġon Ġdecoration Ġtype . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġresized ( source : ĠInternal Decorator ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ(! source . is Showing ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġdo Ġnot Ġre calculate Ġthe Ġtool Ġwindow Ġsize Ġif Ġit Ġis Ġnot Ġyet Ġshown Ġ( and , Ġtherefore , Ġhas Ġ 0 , 0 , 0 , 0 Ġbounds ) ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġval Ġinfo Ġ= Ġsource . window Info ĊĠĠĠĠĠ Ġif Ġ( info . is Floating ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġowner Ġ= ĠSw ing Utilities . getWindow Ancestor ( source ) ĊĠĠĠĠĠĠĠ Ġif Ġ( owner Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġinfo . floating Bounds Ġ= Ġowner . bounds ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġif Ġ( info . is Window ed ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdecorator Ġ= Ġget Window ed Decorator ( info . id !! ) ĊĠĠĠĠĠĠĠ Ġval Ġframe Ġ= Ġdecorator ?. frame ĊĠĠĠĠĠĠĠ Ġif Ġ( frame Ġ== Ġnull Ġ|| Ġ! frame . is Showing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinfo . floating Bounds Ġ= Ġget Root Bounds ( frame Ġas ĠJ Frame ) ĊĠĠĠĠĠĠĠ Ġinfo . is Max im ized Ġ= Ġframe . extended State Ġ== ĠFrame . MAX IM IZED _ BOTH ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġdock ed Ġand Ġsl iding Ġwindows ĊĠĠĠĠĠĠĠ Ġval Ġanchor Ġ= Ġinfo . anchor ĊĠĠĠĠĠĠĠ Ġvar Ġanother : ĠInternal Decorator ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( source . parent Ġis ĠSplit ter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġvar Ġsize In Split Ġ= Ġif Ġ( anchor . is Split Vert ically ) Ġsource . height . toFloat () Ġelse Ġsource . width . toFloat () ĊĠĠĠĠĠĠĠĠĠ Ġval Ġsplit ter Ġ= Ġsource . parent Ġas ĠSplit ter ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( splitter . second Component Ġ=== Ġsource ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize In Split Ġ+= Ġsplit ter . divider Width . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanother Ġ= Ġsplit ter . first Component Ġas ĠInternal Decorator ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanother Ġ= Ġsplit ter . second Component Ġas ĠInternal Decorator ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( anchor . is Split Vert ically ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . side Weight Ġ= Ġsize In Split Ġ/ Ġsplit ter . height ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo . side Weight Ġ= Ġsize In Split Ġ/ Ġsplit ter . width ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġpane Weight Ġ= Ġif Ġ( anchor . is Horizontal ) Ġsource . height . toFloat () Ġ/ Ġtool Window Pane !!. my Layer ed Pane . height Ġelse Ġsource . width . toFloat () Ġ/ Ġtool Window Pane !!. my Layer ed Pane . width ĊĠĠĠĠĠĠĠ Ġinfo . weight Ġ= Ġpane Weight ĊĠĠĠĠĠĠĠ Ġif Ġ( another Ġ!= Ġnull Ġ&& Ġanchor . is Split Vert ically ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġpane Weight Ġ= Ġif Ġ( anchor . is Horizontal ) Ġanother . height . toFloat () Ġ/ Ġtool Window Pane !!. my Layer ed Pane . height Ġelse Ġanother . width . toFloat () Ġ/ Ġtool Window Pane !!. my Layer ed Pane . width ĊĠĠĠĠĠĠĠĠĠ Ġanother . window Info . weight Ġ= Ġpane Weight ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġactivated ( source : ĠInternal Decorator ) Ġ{ ĊĠĠĠĠĠ Ġactivate Tool Window ( source . tool Window . id , Ġtrue , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtype Changed ( source : ĠInternal Decorator , Ġtype : ĠTool Window Type ) Ġ{ ĊĠĠĠĠĠ Ġset Tool Window Type ( source . tool Window . id , Ġtype ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġside Status Changed ( source : ĠInternal Decorator , Ġis Side Tool : ĠBoolean ) Ġ{ ĊĠĠĠĠĠ Ġset Side Tool ( source . tool Window . id , Ġis Side Tool ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvisible Stripe Button Changed ( source : ĠInternal Decorator , Ġvisible : ĠBoolean ) Ġ{ ĊĠĠĠĠĠ ĠsetShow Stripe Button ( source . tool Window . id , Ġvisible ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġfallback To Editor () Ġ= Ġactive Stack . isEmpty ĊĊĠ Ġprivate Ġfun Ġfocus Tool Window ByDefault ( id To Ignore : ĠString ?) Ġ{ ĊĠĠĠ Ġvar Ġto Focus : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġfor Ġ( each Ġin Ġactive Stack . stack ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( id To Ignore Ġ!= Ġnull Ġ&& Ġid To Ignore . equals ( each , Ġignore Case Ġ= Ġtrue )) Ġcontinue ĊĠĠĠĠĠ Ġif Ġ( id To Entry . get ( each ) !!. readOnly Window Info . isVisible ) Ġ{ ĊĠĠĠĠĠĠĠ Ġto Focus Ġ= Ġeach ĊĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( to Focus Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġfor Ġ( each Ġin Ġactive Stack . persistent Stack ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( id To Ignore Ġ!= Ġnull Ġ&& Ġid To Ignore . equals ( each , Ġignore Case Ġ= Ġtrue )) Ġcontinue ĊĠĠĠĠĠĠĠ Ġif Ġ( id To Entry . get ( each ) !!. readOnly Window Info . isVisible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġto Focus Ġ= Ġeach ĊĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( to Focus Ġ!= Ġnull Ġ&& Ġ! Application Manager . getApplication (). is Disposed ) Ġ{ ĊĠĠĠĠĠ Ġactivate Tool Window ( to Focus , Ġfalse , Ġtrue ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠDelegate Ġmethod Ġfor Ġcompatibility Ġwith Ġolder Ġversions Ġof ĠIDEA ĊĠĠ Ġ*/ ĊĠ Ġfun Ġrequest Focus ( c : ĠComponent , Ġforced : ĠBoolean ): ĠAction Callback Ġ{ ĊĠĠĠ Ġreturn ĠIde Focus Manager . getInstance ( project ). request Focus ( c , Ġforced ) ĊĠ Ġ} ĊĊĠ Ġfun Ġdo When Focus Set tles Down ( run nable : ĠRunnable ) Ġ{ ĊĠĠĠ ĠIde Focus Manager . getInstance ( project ). do When Focus Set tles Down ( run nable ) ĊĠ Ġ} ĊĊĠ Ġfun ĠsetShow Stripe Button ( id : ĠString , Ġvisible On Panel : ĠBoolean ) Ġ{ ĊĠĠĠ Ġval Ġinfo Ġ= Ġget Registered Mutable Info Or LogError ( id ) ĊĠĠĠ Ġif Ġ( visible On Panel Ġ== Ġinfo . is Show Stripe Button ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinfo . is Show Stripe Button Ġ= Ġvisible On Panel ĊĠĠĠ Ġval Ġcommands Ġ= Ġmutable ListOf < Final izable Command >() ĊĠĠĠ Ġappend Apply Window Info Cmd ( info , Ġid To Entry . get ( id ) !! , Ġcommands ) ĊĠĠĠ Ġexecute ( commands ) ĊĠ Ġ} ĊĊĠ Ġfun Ġis Show Stripe Button ( id : ĠString ): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ(! is Tool Window Registered ( id )) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġinfo Ġ= Ġlayout . getInfo ( id ) ĊĠĠĠ Ġreturn Ġinfo Ġ== Ġnull Ġ|| Ġinfo . is Show Stripe Button ĊĠ Ġ} ĊĊĠ Ġinternal Ġclass ĠInit Tool Windows Activity Ġ: ĠStartup Activity Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġrun Activity ( project : ĠProject ) Ġ{ ĊĠĠĠĠĠ Ġval Ġapp Ġ= ĠApplication Manager . getApplication () ĊĠĠĠĠĠ Ġif Ġ( app . is UnitTest Mode Ġ|| Ġapp . is Head less Environment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġ( getInstance ( project ) Ġas ĠTool WindowManager Impl ). before Project Opened () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcheck In variants ( additional Message : ĠString ) Ġ{ ĊĠĠĠ Ġif Ġ(! Application Manager . getApplication (). is E AP Ġ&& Ġ! Application Manager . getApplication (). is Internal ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġviolations Ġ= Ġmutable ListOf < String >() ĊĠĠĠ Ġid To Entry . forEach Ġ{ Ġ( id , Ġentry ) Ġ-> ĊĠĠĠĠĠ Ġval Ġinfo Ġ= Ġlayout . getInfo ( id ) Ġ?: Ġreturn @ forEach ĊĠĠĠĠĠ Ġif Ġ( info . isVisible ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( info . is Floating ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( entry . floating Decorator Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviolations . add (" Floating Ġwindow Ġhas Ġno Ġdecorator : Ġ$ id ") ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( info . is Window ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( entry . window ed Decorator Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviolations . add (" Window ed Ġwindow Ġhas Ġno Ġdecorator : Ġ$ id ") ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( vi olations . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠ ĠLOG . error (" In variants Ġfailed : Ġ\ n ${ java . lang . String . join ("\ n ", Ġviolations )}\ n Context : Ġ$ additional Message ") ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ private Ġenum Ġclass ĠKey State Ġ{ ĊĠ ĠWAIT ING , ĠP RESSED , ĠRELEASE D , ĠH OLD Ċ } Ċ Ċ private Ġfun Ġfocus Default Element In Selected Editor () Ġ{ ĊĠ ĠEditor s Split ters . find Default Component In Split ters If Present Ġ{ Ġobj : ĠJ Component Ġ-> Ġobj . request Focus () Ġ} Ċ } Ċ Ċ private Ġfun Ġare All Modifiers Pressed (@ J dk Constants . Input Event Mask Ġmodifiers : ĠInt , Ġ@ J dk Constants . Input Event Mask Ġmask : ĠInt ): ĠBoolean Ġ{ ĊĠ Ġreturn Ġ( modifiers Ġxor Ġmask ) Ġ== Ġ 0 Ċ } Ċ Ċ @ J dk Constants . Input Event Mask Ċ private Ġfun ĠkeyCode To Input Mask ( code : ĠInt ): ĠInt Ġ{ ĊĠ Ġvar Ġmask Ġ= Ġ 0 ĊĠ Ġif Ġ( code Ġ== ĠKeyEvent . VK _ SHIFT ) Ġ{ ĊĠĠĠ Ġmask Ġ= ĠInput Event . SHIFT _ MASK ĊĠ Ġ} ĊĠ Ġif Ġ( code Ġ== ĠKeyEvent . VK _ CONTROL ) Ġ{ ĊĠĠĠ Ġmask Ġ= ĠInput Event . CTRL _ MASK ĊĠ Ġ} ĊĠ Ġif Ġ( code Ġ== ĠKeyEvent . VK _ META ) Ġ{ ĊĠĠĠ Ġmask Ġ= ĠInput Event . META _ MASK ĊĠ Ġ} ĊĠ Ġif Ġ( code Ġ== ĠKeyEvent . VK _ ALT ) Ġ{ ĊĠĠĠ Ġmask Ġ= ĠInput Event . ALT _ MASK ĊĠ Ġ} ĊĠ Ġreturn Ġmask Ċ } Ċ Ċ // ĠWe Ġshould Ġfilter Ġout Ġ' mixed ' Ġmask Ġlike ĠInput Event . META _ MASK Ġ| ĠInput Event . META _ DOWN _ MASK Ċ @ get : J dk Constants . Input Event Mask Ċ private Ġval Ġactivate Tool Window VK s Mask : ĠInt ĊĠ Ġget () Ġ{ ĊĠĠĠ Ġif Ġ(! Loading State . COMPONENTS _ LOADED . is Occurred ) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġkey map Ġ= ĠKey map Manager . getInstance (). active Key map ĊĠĠĠ Ġval Ġbase Shortcut Ġ= Ġkey map . get Shortcut s (" Activate Project Tool Window ") ĊĠĠĠ Ġvar Ġbase Modifiers Ġ= Ġif Ġ( System Info . is Mac ) ĠInput Event . META _ MASK Ġelse ĠInput Event . ALT _ MASK ĊĠĠĠ Ġfor Ġ( each Ġin Ġbase Shortcut ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( each Ġis ĠKeyboard Shortcut ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Stroke Ġ= Ġeach . first KeyStroke ĊĠĠĠĠĠĠĠ Ġbase Modifiers Ġ= Ġkey Stroke . modifiers ĊĠĠĠĠĠĠĠ Ġif Ġ( base Modifiers Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠWe Ġshould Ġfilter Ġout Ġ' mixed ' Ġmask Ġlike ĠInput Event . META _ MASK Ġ| ĠInput Event . META _ DOWN _ MASK ĊĠĠĠ Ġreturn Ġbase Modifiers Ġand Ġ( Input Event . SHIFT _ MASK Ġor ĠInput Event . CTRL _ MASK Ġor ĠInput Event . META _ MASK Ġor ĠInput Event . ALT _ MASK ) ĊĠ Ġ} Ċ Ċ private Ġfun Ġcreate Initializing Label (): ĠJLabel Ġ{ ĊĠ Ġval Ġlabel Ġ= ĠJLabel (" Initializing ...", ĠSw ing Constants . CENTER ) ĊĠ Ġlabel . is Opaque Ġ= Ġtrue ĊĠ Ġval Ġtree Bg Ġ= ĠUI Util . get Tree Background () ĊĠ Ġlabel . background Ġ= ĠColor Util . to Alpha ( tree Bg , Ġ 1 8 0 ) ĊĠ Ġval Ġtree Fg Ġ= ĠUI Util . get Tree Foreground () ĊĠ Ġlabel . foreground Ġ= ĠColor Util . to Alpha ( tree Fg , Ġ 1 8 0 ) ĊĠ Ġreturn Ġlabel Ċ } Ċ Ċ private Ġfun Ġis To Hide On De activation ( info : ĠWindow Info Impl ): ĠBoolean Ġ{ ĊĠ Ġreturn Ġif Ġ( info . is Floating Ġ|| Ġinfo . is Window ed ) Ġfalse Ġelse Ġinfo . is Auto Hide Ġ|| Ġinfo . is Sl iding Ċ } Ċ Ċ private Ġval Ġis Stack Enabled : ĠBoolean ĊĠ Ġget () Ġ= ĠRegistry .` is ` (" ide . enable . tool window . stack ") Ċ Ċ private Ġfun Ġget Root Bounds ( frame : ĠJ Frame ): ĠRectangle Ġ{ ĊĠ Ġval Ġroot Pane Ġ= Ġframe . root Pane ĊĠ Ġval Ġbounds Ġ= Ġroot Pane . bounds ĊĠ Ġbounds . setLocation ( frame . x Ġ+ Ġroot Pane . x , Ġframe . y Ġ+ Ġroot Pane . y ) ĊĠ Ġreturn Ġbounds Ċ } Ċ Ċ private Ġconst Ġval ĠEDIT OR _ ELEMENT Ġ= Ġ" editor " Ċ private Ġconst Ġval ĠACT IVE _ ATTR _ VALUE Ġ= Ġ" active " Ċ private Ġconst Ġval ĠFRAME _ ELEMENT Ġ= Ġ" frame " Ċ private Ġconst Ġval ĠX _ ATTR Ġ= Ġ" x " Ċ private Ġconst Ġval ĠY _ ATTR Ġ= Ġ" y " Ċ private Ġconst Ġval ĠWIDTH _ ATTR Ġ= Ġ" width " Ċ private Ġconst Ġval ĠHEIGHT _ ATTR Ġ= Ġ" height " Ċ private Ġconst Ġval ĠEXT ENDED _ STATE _ ATTR Ġ= Ġ" extended - state " Ċ private Ġconst Ġval ĠLAY OUT _ TO _ REST ORE Ġ= Ġ" layout - to - restore "