/* Ċ Ġ* ĠCopyright Ġ 2 0 0 0 - 2 0 1 9 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . r . configuration Ċ Ċ import Ġcom . intellij . openapi . ui . Dialog Wrapper Ċ import Ġcom . intellij . ui . Collection ListModel Ċ import Ġcom . intellij . ui . Toolbar Decorator Ċ import Ġcom . intellij . ui . components . JB List Ċ import Ġorg . intellij . data vis . r . in lay s . components . Dialog Util Ċ import Ġorg . jetbrains . r . R Bundle Ċ import Ġorg . jetbrains . r . interpreter . R Interpreter Info Ċ import Ġorg . jetbrains . r . settings . R Interpreter Settings Provider Ċ import Ġjavax . swing . J Component Ċ import Ġjavax . swing . List Selection Model Ċ Ċ class ĠR Interpreter Details Dialog ( ĊĠ Ġprivate Ġval Ġinitial Selection : ĠR Interpreter Info ?, ĊĠ Ġinterpre ters : ĠList < R Interpreter Info >, ĊĠ Ġprivate Ġval Ġon Modified : Ġ( List < R Interpreter Info >, ĠR Interpreter Info ?) Ġ-> ĠUnit Ċ ) Ġ: ĠDialog Wrapper ( null , Ġtrue ) Ġ{ ĊĊĠ Ġprivate Ġval Ġinterpreter List Ġ= ĠJ B List < R Interpreter Info >(). apply Ġ{ ĊĠĠĠ Ġcell Renderer Ġ= ĠR Interpreter List Cell Renderer () ĊĠĠĠ Ġselection Mode Ġ= ĠList Selection Model . SINGLE _ SELECTION ĊĠĠĠ Ġadd List Selection Listener Ġ{ ĊĠĠĠĠĠ Ġrefresh Ok Button () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġcurrent Inter pre ters Ġ= Ġmutable ListOf < R Interpreter Info >() ĊĊĠ Ġprivate Ġvar Ġcurrent Selection : ĠR Interpreter Info ? ĊĠĠĠ Ġget () Ġ= Ġinterpreter List . selected Value ĊĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠ Ġinterpreter List . setSelected Value ( value , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠ Ġprivate Ġvar Ġis Modified Ġ= Ġfalse ĊĊĠ Ġprivate Ġlateinit Ġvar Ġcomponent : ĠJ Component ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġtitle Ġ= ĠTITLE ĊĠĠĠ Ġcurrent Inter pre ters . addAll ( inter pre ters ) ĊĠĠĠ Ġinit () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Center Panel (): ĠJ Component ? Ġ{ ĊĠĠĠ Ġval Ġdecorator Ġ= ĠToolbar Decorator . create Decorator ( interpreter List ). apply Ġ{ ĊĠĠĠĠĠ Ġdisable UpDown Actions () ĊĠĠĠĠĠ Ġset Add Action Ġ{ Ġbutton Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġon Added Ġ= Ġ{ Ġinfo : ĠR Interpreter Info Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġcurrent Inter pre ters . add ( info ) ĊĠĠĠĠĠĠĠĠĠ Ġrefresh ( true ) ĊĠĠĠĠĠĠĠĠĠ Ġcurrent Selection Ġ= Ġinfo ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( R Interpreter Settings Provider . get Providers (). size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġpopup Point Ġ= Ġbutton . preferred Popup Point ?. screen Point Ġ?: Ġbutton . context Component . location On Screen ĊĠĠĠĠĠĠĠĠĠ ĠR Interpreter Details Step . show ( current Inter pre ters , Ġnull , Ġcomponent , Ġpopup Point , Ġon Added ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġadd Interpreter ( on Added ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġset Remove Action Ġ{ ĊĠĠĠĠĠĠĠ Ġremove Interpreter () ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġif Ġ( R Interpreter Settings Provider . get Providers (). any Ġ{ Ġit . is Editing Supported () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Edit Action Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġselection Ġ= Ġcurrent Selection Ġ?: Ġreturn @ set Edit Action ĊĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġcurrent Inter pre ters . indexOf ( selection ). take If Ġ{ Ġit Ġ>= Ġ 0 Ġ} Ġ?: Ġreturn @ set Edit Action ĊĠĠĠĠĠĠĠĠĠ ĠR Interpreter Settings Provider . get Providers () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull Ġ{ Ġit . can Edit Interpreter ( selection ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . show Edit Interpreter Dialog ( selection , Ġcurrent Inter pre ters ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Inter pre ters [ index ] Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Selection Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset Edit Action Updater Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġselection Ġ= Ġcurrent Selection ĊĠĠĠĠĠĠĠĠĠ Ġselection Ġ!= Ġnull Ġ&& ĠR Interpreter Settings Provider . get Providers (). any Ġ{ Ġprovider Ġ-> Ġprovider . can Edit Interpreter ( selection ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġset PreferredSize ( Dialog Util . calculate PreferredSize ( Dialog Util . Size Preference . N ARROW , ĠDialog Util . Size Preference . MO DER ATE )) ĊĠĠĠ Ġ} ĊĠĠĠ Ġrefresh ( false ) ĊĠĠĠ Ġcurrent Selection Ġ= Ġinitial Selection ĊĠĠĠ Ġreturn Ġdecorator . create Panel (). also Ġ{ Ġcomponent Ġ= Ġit Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġdo OK Action () Ġ{ ĊĠĠĠ Ġon Modified ( current Inter pre ters , Ġcurrent Selection ) ĊĠĠĠ Ġsuper . do OK Action () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġadd Interpreter ( on Added : Ġ( R Interpreter Info ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ ĠR Add Interpreter Dialog . show ( current Inter pre ters , Ġon Added ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġremove Interpreter () Ġ{ ĊĠĠĠ Ġinterpreter List . selected Value ?. let Ġ{ ĊĠĠĠĠĠ Ġcurrent Inter pre ters . remove ( it ) ĊĠĠĠĠĠ Ġrefresh ( true ) ĊĠĠĠĠĠ Ġcurrent Selection Ġ= Ġcurrent Inter pre ters . first OrNull () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġrefresh ( is Modified : ĠBoolean ) Ġ{ ĊĠĠĠ Ġthis . is Modified Ġ= Ġis Modified ĊĠĠĠ Ġrefresh Interpreter List () ĊĠĠĠ Ġrefresh Ok Button () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġrefresh Ok Button () Ġ{ ĊĠĠĠ Ġis OK Action Enabled Ġ= Ġis Modified () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġis Modified (): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġis Modified Ġ|| Ġcurrent Selection Ġ!== Ġinitial Selection ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġrefresh Interpreter List () Ġ{ ĊĠĠĠ Ġinterpreter List . model Ġ= ĠCollection ListModel ( current Inter pre ters ) ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġval ĠTITLE Ġ= ĠR Bundle . message (" project . settings . details . dialog . title ") ĊĠ Ġ} Ċ } Ċ