/* Ċ Ġ* ĠCopyright Ġ 2 0 0 0 - 2 0 2 0 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . intellij . data vis . r . ui Ċ Ċ import Ġcom . intellij . icons . All Icons Ċ import Ġcom . intellij . openapi . action System .* Ċ import Ġcom . intellij . openapi . action System . ex . Action Util Ċ import Ġcom . intellij . openapi . action System . impl . ActionButton Ċ import Ġcom . intellij . ui . An ActionButton Ċ import Ġcom . intellij . ui . D umb Aware ActionButton Ċ import Ġjavax . swing . Icon Ċ import Ġjavax . swing . J Component Ċ Ċ object ĠToolbar Util Ġ{ ĊĠ Ġfun Ġcreate Action Toolbar ( action Groups : ĠList < List < An Action >> ): ĠJ Component Ġ{ ĊĠĠĠ Ġreturn Ġcreate Action Toolbar ( Action Places . UNKNOWN , Ġaction Groups ) ĊĠ Ġ} ĊĊĠ Ġfun Ġcreate Toolbar ( place : ĠString , Ġaction Holder Groups : ĠList < List < Action Holder >>, Ġvar arg Ġadditional Actions : ĠAn Action ): ĠJ Component Ġ{ ĊĠĠĠ Ġval Ġaction Groups Ġ= Ġaction Holder Groups . map Ġ{ Ġgroup Ġ-> ĊĠĠĠĠĠ Ġgroup . map Ġ{ ĠToolbar ActionButton ( it ) Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġcreate Action Toolbar ( place , Ġaction Groups , Ġ* additional Actions ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcreate Action Toolbar ( place : ĠString , Ġaction Groups : ĠList < List < An Action >>, Ġvar arg Ġadditional Actions : ĠAn Action ): ĠJ Component Ġ{ ĊĠĠĠ Ġval Ġaction Group Ġ= ĠDefault Action Group (). apply Ġ{ ĊĠĠĠĠĠ Ġfor Ġ(( index , Ġaction Group ) Ġin Ġaction Groups . with Index ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġadd Separator () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( action Ġin Ġaction Group ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġadd ( action ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( additional Actions . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġaction Group . add Separator () ĊĠĠĠĠĠ Ġfor Ġ( action Ġin Ġadditional Actions ) Ġ{ ĊĠĠĠĠĠĠĠ Ġaction Group . add ( action ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġaction Toolbar Ġ= ĠAction Manager . getInstance (). create Action Toolbar ( place , Ġaction Group , Ġtrue ) ĊĠĠĠ Ġreturn Ġaction Toolbar . component ĊĠ Ġ} ĊĊĠ Ġinline Ġfun Ġ< re ified ĠA Ġ: ĠAn Action > create An ActionButton ( no inline ĠonClick : Ġ() Ġ-> ĠUnit ): ĠAn ActionButton Ġ{ ĊĠĠĠ Ġreturn Ġcreate An ActionButton ( A :: class . qualified Name Ġ?: Ġ"", ĠonClick ) ĊĠ Ġ} ĊĊĠ Ġinline Ġfun Ġ< re ified ĠA Ġ: ĠAn Action > create An ActionButton ( no inline Ġcan Click : Ġ() Ġ-> ĠBoolean , Ġno inline ĠonClick : Ġ() Ġ-> ĠUnit ): ĠAn ActionButton Ġ{ ĊĠĠĠ Ġreturn Ġcreate An ActionButton ( A :: class . qualified Name Ġ?: Ġ"", Ġcan Click , ĠonClick ) ĊĠ Ġ} ĊĊĠ Ġfun Ġcreate An ActionButton ( id : ĠString , ĠonClick : ĠRunnable ): ĠAn ActionButton Ġ{ ĊĠĠĠ Ġreturn Ġcreate An ActionButton ( id ) Ġ{ ĊĠĠĠĠĠ ĠonClick . run () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġcreate An ActionButton ( id : ĠString , ĠonClick : Ġ() Ġ-> ĠUnit ): ĠAn ActionButton Ġ{ ĊĠĠĠ Ġreturn Ġcreate An ActionButton ( id , Ġ{ Ġtrue Ġ}, ĠonClick ) ĊĠ Ġ} ĊĊĠ Ġfun Ġcreate An ActionButton ( id : ĠString , Ġcan Click : Ġ() Ġ-> ĠBoolean , ĠonClick : Ġ() Ġ-> ĠUnit ): ĠAn ActionButton Ġ{ ĊĠĠĠ Ġval Ġholder Ġ= Ġcreate Action Holder ( id , Ġcan Click , ĠonClick ) ĊĠĠĠ Ġreturn ĠToolbar ActionButton ( holder ) ĊĠ Ġ} ĊĊĠ Ġfun Ġcreate An ActionButton ( holder : ĠAction Holder ): ĠAn ActionButton Ġ{ ĊĠĠĠ Ġreturn ĠToolbar ActionButton ( holder ) ĊĠ Ġ} ĊĊĠ Ġfun Ġcreate Action Holder ( id : ĠString , ĠonClick : Ġ() Ġ-> ĠUnit ): ĠAction Holder Ġ{ ĊĠĠĠ Ġreturn Ġcreate Action Holder ( id , Ġ{ Ġtrue Ġ}, ĠonClick ) ĊĠ Ġ} ĊĊĠ Ġfun Ġcreate El lipsis Toolbar ( actions : ĠList < An Action >): ĠJ Component Ġ{ ĊĠĠĠ Ġval Ġellipsis Ġ= Ġcreate El lipsis Action Group ( actions ) ĊĠĠĠ Ġval Ġtoolbar Ġ= ĠAction Manager . getInstance (). create Action Toolbar ( Action Places . UNKNOWN , ĠDefault Action Group ( ellipsis ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ) ĊĠĠĠ Ġreturn Ġtoolbar . component ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcreate El lipsis Action Group ( actions : ĠList < An Action >): ĠAction Group Ġ{ ĊĠĠĠ Ġreturn ĠDefault Action Group (). apply Ġ{ ĊĠĠĠĠĠ Ġadd All ( actions ) ĊĠĠĠĠĠ Ġis Popup Ġ= Ġtrue ĊĠĠĠĠĠ Ġwith ( template Presentation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġput Client Property ( ActionButton . HIDE _ DROP DOWN _ ICON , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġicon Ġ= ĠAll Icons . Actions . More ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġcreate Action Holder ( id : ĠString , Ġcan Click : Ġ() Ġ-> ĠBoolean , ĠonClick : Ġ() Ġ-> ĠUnit ) Ġ= Ġobject Ġ: ĠAction Holder Ġ{ ĊĠĠĠ Ġoverride Ġval Ġid Ġ= Ġid ĊĊĠĠĠ Ġoverride Ġval Ġcan Click : ĠBoolean ĊĠĠĠĠĠ Ġget () Ġ= Ġcan Click () ĊĊĠĠĠ Ġoverride Ġfun ĠonClick () Ġ{ ĊĠĠĠĠĠ ĠonClick () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġinterface ĠAction Holder Ġ{ ĊĠĠĠ Ġval Ġid : ĠString ĊĠĠĠ Ġval Ġcan Click : ĠBoolean ĊĠĠĠ Ġfun ĠonClick () ĊĊĠĠĠ Ġfun Ġcheck Visible (): ĠBoolean Ġ{ ĊĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Hint For Disabled (): ĠString ? Ġ{ ĊĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Alternative Enabled Icon (): ĠIcon ? Ġ{ ĊĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Alternative Enabled Description (): ĠString ? Ġ{ ĊĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġclass ĠToolbar ActionButton ( private Ġval Ġholder : ĠAction Holder ) Ġ: ĠD umb Aware ActionButton () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġfallback Description : ĠString ? ĊĠĠĠ Ġprivate Ġval Ġfallback Icon : ĠIcon ? ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠ ĠAction Util . copyFrom ( this , Ġholder . id ) ĊĠĠĠĠĠ Ġfallback Description Ġ= Ġtemplate Presentation . description ĊĠĠĠĠĠ Ġfallback Icon Ġ= Ġtemplate Presentation . icon ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠactionPerformed ( e : ĠAn ActionEvent ) Ġ{ ĊĠĠĠĠĠ Ġholder . onClick () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Button ( e : ĠAn ActionEvent ) Ġ{ ĊĠĠĠĠĠ Ġval Ġis Visible Ġ= Ġholder . check Visible () ĊĠĠĠĠĠ Ġe . presentation . isVisible Ġ= Ġis Visible ĊĠĠĠĠĠ Ġif Ġ( isVisible ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġis Enabled Ġ= Ġholder . can Click ĊĠĠĠĠĠĠĠ Ġe . presentation . isEnabled Ġ= Ġis Enabled ĊĠĠĠĠĠĠĠ Ġe . presentation . icon Ġ= Ġcreate Icon ( isEnabled ) ĊĠĠĠĠĠĠĠ Ġe . presentation . description Ġ= Ġcreate Description ( isEnabled ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdisplay Text In Toolbar (): ĠBoolean Ġ{ ĊĠĠĠĠĠ Ġ// ĠNote : Ġnot Ġa Ġtypo . ĠEffect ively Ġthis Ġmeans Ġ" use Ġdescription Ġinstead Ġof Ġtext Ġif Ġthe Ġlatest Ġis Ġnull " ĊĠĠĠĠĠ Ġreturn Ġtemplate Text . isNull Or Blank () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Icon ( isEnabled : ĠBoolean ): ĠIcon ? Ġ{ ĊĠĠĠĠĠ Ġreturn Ġholder . get Alternative Enabled Icon ()?. take If Ġ{ Ġis Enabled Ġ} Ġ?: Ġfallback Icon ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Description ( isEnabled : ĠBoolean ): ĠString ? Ġ{ ĊĠĠĠĠĠ Ġreturn Ġif Ġ( isEnabled ) Ġcreate Enabled Description () Ġelse Ġcreate Disabled Description () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Enabled Description (): ĠString ? Ġ{ ĊĠĠĠĠĠ Ġreturn Ġholder . get Alternative Enabled Description () Ġ?: Ġfallback Description ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Disabled Description (): ĠString ? Ġ{ ĊĠĠĠĠĠ Ġreturn Ġholder . get Hint For Disabled ()?. let Ġ{ Ġcreate Description With Hint ( it ) Ġ} Ġ?: Ġfallback Description ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Description With Hint ( hint : ĠString ): ĠString ? Ġ{ ĊĠĠĠĠĠ Ġreturn Ġfallback Description ?. let Ġ{ Ġ"$ it Ġ($ hint )" Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ