// ĠCopyright Ġ 2 0 0 0 - 2 0 2 1 Ġ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 . ui . layout Ċ Ċ import Ġcom . intellij . openapi . action System .* Ċ import Ġcom . intellij . openapi . action System . ex . ActionButton Look Ċ import Ġcom . intellij . openapi . action System . impl . ActionButton Ċ import Ġcom . intellij . openapi . action System . impl . ActionButton With Text Ċ import Ġcom . intellij . openapi . action System . impl . Action Toolbar Impl Ċ import Ġcom . intellij . openapi . observable . properties . Graph Property Ċ import Ġcom . intellij . openapi . project . D umb Aware Ċ import Ġcom . intellij . openapi . util . N ls Actions Ċ import Ġjava . awt . Dimension Ċ import Ġjava . awt . Insets Ċ import Ġjava . util . function . Supplier Ċ import Ġkotlin . math . max Ċ Ċ fun Ġ< T > ĠRow . button Selector ( options : ĠCollection < T >, Ġproperty : ĠGraph Property < T >, Ġrenderer : Ġ( T ) Ġ-> ĠString ): ĠButton Selector Toolbar Ġ{ ĊĠ Ġval Ġaction Group Ġ= ĠDefault Action Group ( options . map Ġ{ ĠButton Selector Action ( it , Ġproperty , Ġrenderer ( it )) Ġ}) ĊĠ Ġval Ġtoolbar Ġ= ĠButton Selector Toolbar (" Button Selector ", Ġaction Group , Ġtrue ) ĊĠ Ġtoolbar . target Component Ġ= Ġnull Ġ// Ġany Ġdata Ġcontext Ġis Ġsupported , Ġsuppress Ġwarning ĊĠ Ġcomponent ( toolbar ) ĊĠ Ġreturn Ġtoolbar Ċ } Ċ Ċ class ĠButton Selector Action < T > Ġ@ Jvm Over loads Ġconstructor ( private Ġval Ġoption : ĠT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġproperty : ĠGraph Property < T >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoption Text : ĠSupplier < @ N ls Actions . Action Text ĠString >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoption Description : ĠSupplier < @ N ls Actions . Action Text ĠString >? Ġ= Ġnull ) ĊĠ Ġ: ĠToggle Action ( option Text , Ġoption Description Ġ?: ĠSupplier Ġ{ Ġnull Ġ}, Ġnull ), ĠD umb Aware Ġ{ ĊĊĠ Ġ@ Jvm Over loads ĊĠ Ġconstructor ( option : ĠT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperty : ĠGraph Property < T >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ N ls Actions . Action Text Ġoption Text : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ N ls Actions . Action Description Ġoption Description : ĠString ? Ġ= Ġnull ) Ġ: ĊĠĠĠ Ġthis ( option , Ġproperty , ĠSupplier Ġ{ Ġoption Text Ġ}, Ġoption Description ?. let Ġ{ ĠSupplier Ġ{ Ġoption Description Ġ} Ġ}) ĊĊĠ Ġoverride Ġfun Ġis Selected ( e : ĠAn ActionEvent ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġproperty . get () Ġ== Ġoption ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠsetSelected ( e : ĠAn ActionEvent , Ġstate : ĠBoolean ) Ġ{ ĊĠĠĠ Ġif Ġ( state ) Ġ{ ĊĠĠĠĠĠ Ġproperty . set ( option ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ private Ġconst Ġval ĠLEFT _ RIGHT _ P ADDING : ĠInt Ġ= Ġ 8 Ċ private Ġconst Ġval ĠTOP _ BOTTOM _ P ADDING : ĠInt Ġ= Ġ 2 Ċ private Ġconst Ġval ĠBUTTON S _ M ARGIN : ĠInt Ġ= Ġ 2 Ċ Ċ private Ġclass ĠButton Selector ( ĊĠ Ġaction : ĠButton Selector Action <* >, ĊĠ Ġpresentation : ĠPresentation , ĊĠ Ġplace : ĠString ?, ĊĠ Ġminimum Size : ĠDimension , ĊĠ Ġprivate Ġval Ġforce Field Height : ĠBoolean Ċ ) Ġ: ĠAction Button With Text ( action , Ġpresentation , Ġplace , Ġminimum Size ) Ġ{ ĊĠ Ġinit Ġ{ ĊĠĠĠ Ġis Focus able Ġ= Ġtrue ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget Insets (): ĠIn sets Ġ= Ġsuper . get Insets (). apply Ġ{ ĊĠĠĠ Ġright Ġ+= Ġleft Ġ+ ĠBUTTON S _ M ARGIN ĊĠĠĠ Ġleft Ġ= Ġ 0 ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget PreferredSize (): ĠDimension Ġ{ ĊĠĠĠ Ġval Ġold Ġ= Ġsuper . get PreferredSize () ĊĠĠĠ Ġval Ġproposed Height Ġ= Ġold . height Ġ+ ĠTOP _ BOTTOM _ P ADDING Ġ* Ġ 2 ĊĠĠĠ Ġval Ġheight Ġ= Ġif Ġ( force Field Height ) Ġmax ( 3 0 , Ġproposed Height ) Ġelse Ġproposed Height ĊĠĠĠ Ġreturn ĠDimension ( old . width Ġ+ ĠLEFT _ RIGHT _ P ADDING Ġ* Ġ 2 , Ġheight ) ĊĠ Ġ} Ċ } Ċ Ċ class ĠButton Selector Toolbar Ġ@ Jvm Over loads Ġconstructor ( ĊĠ Ġplace : ĠString , ĊĠ Ġaction Group : ĠAction Group , ĊĠ Ġhorizontal : ĠBoolean , ĊĠ Ġprivate Ġval Ġforce Field Height : ĠBoolean Ġ= Ġfalse Ċ ) Ġ: ĠAction Toolbar Impl ( place , Ġaction Group , Ġhorizontal , Ġtrue ) Ġ{ ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġset Force Minimum Size ( true ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget PreferredSize (): ĠDimension Ġ{ ĊĠĠĠ Ġval Ġsize Ġ= Ġsuper . get PreferredSize () ĊĠĠĠ Ġreturn ĠDimension ( size . width , Ġmax ( 3 0 , Ġsize . height )) Ġ// Ġthere Ġcan Ġbe Ġnon - default Ġfont - size ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget Minimum Size (): ĠDimension Ġ{ ĊĠĠĠ Ġval Ġsize Ġ= Ġsuper . get Minimum Size () ĊĠĠĠ Ġreturn ĠDimension ( size . width , Ġmax ( 3 0 , Ġsize . height )) Ġ// Ġthere Ġcan Ġbe Ġnon - default Ġfont - size ĊĠ Ġ} ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġlayout Policy Ġ= ĠAction Toolbar . WRAP _ LAYOUT _ POLICY ĊĠĠĠ Ġis Focus able Ġ= Ġfalse ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Toolbar Button ( ĊĠĠĠ Ġaction : ĠAn Action , ĊĠĠĠ Ġlook : ĠAction Button Look ?, ĊĠĠĠ Ġplace : ĠString , ĊĠĠĠ Ġpresentation : ĠPresentation , ĊĠĠĠ Ġminimum Size : ĠDimension ĊĠ Ġ): ĠAction Button Ġ= ĠButton Selector ( action Ġas ĠButton Selector Action <* >, Ġpresentation , Ġplace , Ġminimum Size , Ġforce Field Height ) Ċ }