// Ġ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 . jetbrains . python . packaging . tool window Ċ Ċ import Ġcom . intellij . icons . All Icons Ċ import Ġcom . intellij . ui . Side Border Ċ import Ġcom . intellij . ui . table . JB Table Ċ import Ġcom . intellij . util . ui . List TableModel Ċ import Ġcom . intellij . util . ui . UI Util Ċ import Ġjava . awt . Border Layout Ċ import Ġjava . awt . Dimension Ċ import Ġjava . awt . event . Mouse Adapter Ċ import Ġjava . awt . event . MouseEvent Ċ import Ġjavax . swing .* Ċ import Ġjavax . swing . border . Empty Border ĊĊ Ċ class ĠPy Packages Table < T Ġ: ĠDisplay able Package >( model : ĠList TableModel < T >, Ġservice : ĠPy Pack aging Tool Window Service ) Ġ: ĠJ B Table ( model ) Ġ{ ĊĠ Ġvar Ġlast Selected Row Ġ= Ġ- 1 ĊĠ Ġinit Ġ{ ĊĠĠĠ ĠsetShow Grid ( false ) ĊĠĠĠ Ġset Selection Mode ( List Selection Model . SINGLE _ SELECTION ) ĊĠĠĠ Ġrow Height Ġ= Ġ 2 0 ĊĠĠĠ Ġselection Model . add List Selection Listener Ġ{ ĊĠĠĠĠĠ Ġif Ġ( selected Row Ġ!= Ġ- 1 Ġ&& Ġselected Row Ġ!= Ġlast Selected Row ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlast Selected Row Ġ= Ġselected Row ĊĠĠĠĠĠĠĠ Ġval Ġpkg Ġ= Ġmodel . items [ selected Row ] ĊĠĠĠĠĠĠĠ Ġservice . package Selected ( pkg ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġclear Selection () Ġ{ ĊĠĠĠ Ġlast Selected Row Ġ= Ġ- 1 ĊĠĠĠ Ġsuper . clear Selection () ĊĠ Ġ} ĊĊĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠ Ġval Ġlist Model : ĠList TableModel < T > ĊĠĠĠ Ġget () Ġ= Ġmodel Ġas ĠList TableModel < T > ĊĊĠ Ġvar Ġitems : ĠList < T > ĊĠĠĠ Ġget () Ġ= Ġlist Model . items ĊĠĠĠ Ġset ( value ) Ġ{ Ġlist Model . items Ġ= Ġvalue Ġ} Ċ } Ċ Ċ class ĠPy Packages TableModel < T Ġ: ĠDisplay able Package > Ġ: ĠList TableModel < T >() Ġ{ ĊĠ Ġoverride Ġfun Ġis Cell Editable ( rowIndex : ĠInt , ĠcolumnIndex : ĠInt ): ĠBoolean Ġ= Ġfalse ĊĠ Ġoverride Ġfun Ġget Column Count (): ĠInt Ġ= Ġ 2 ĊĠ Ġoverride Ġfun Ġget ColumnName ( column : ĠInt ): ĠString Ġ= Ġcolumn . toString () ĊĠ Ġoverride Ġfun Ġget Column Class ( column Index : ĠInt ): ĠClass < *> Ġ{ ĊĠĠĠ Ġif Ġ( column Index Ġ== Ġ 0 ) Ġreturn ĠString :: class . java ĊĠĠĠ Ġif Ġ( column Index Ġ== Ġ 1 ) Ġreturn ĠNumber :: class . java ĊĠĠĠ Ġreturn ĠAny :: class . java ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠgetValue At ( rowIndex : ĠInt , ĠcolumnIndex : ĠInt ): ĠAny ? Ġ{ ĊĠĠĠ Ġval Ġitem Ġ= Ġitems [ rowIndex ] ĊĠĠĠ Ġif Ġ( column Index Ġ== Ġ 0 ) Ġreturn Ġitem . name ĊĠĠĠ Ġif Ġ( column Index Ġ== Ġ 1 Ġ&& Ġitem Ġis ĠInstalled Package ) Ġreturn Ġitem . instance . version ĊĠĠĠ Ġreturn Ġnull ĊĠ Ġ} Ċ } Ċ Ċ fun Ġbox Panel ( init : ĠJPanel . () Ġ-> ĠUnit ) Ġ= Ġobject Ġ: ĠJPanel () Ġ{ ĊĠ Ġinit Ġ{ ĊĠĠĠ Ġlayout Ġ= ĠBox Layout ( this , ĠBox Layout . X _ AXIS ) ĊĠĠĠ Ġalignment X Ġ= ĠLEFT _ ALIGNMENT ĊĠĠĠ Ġinit () ĊĠ Ġ} Ċ } Ċ Ċ fun Ġborder Panel ( init : ĠJPanel . () Ġ-> ĠUnit ) Ġ= Ġobject Ġ: ĠJPanel () Ġ{ ĊĠ Ġinit Ġ{ ĊĠĠĠ Ġlayout Ġ= ĠBorderLayout ( 0 , Ġ 0 ) ĊĠĠĠ Ġinit () ĊĠ Ġ} Ċ } Ċ Ċ fun Ġheader Panel ( label : ĠJLabel , Ġcomponent : ĠJ Component ) Ġ= Ġobject Ġ: ĠJPanel () Ġ{ ĊĠ Ġinit Ġ{ ĊĠĠĠ Ġbackground Ġ= ĠUI Util . get Control Color () ĊĠĠĠ Ġlayout Ġ= ĠBorderLayout () ĊĠĠĠ Ġborder Ġ= ĠBorder Factory . create Compound Border ( Side Border ( UI Util . get Bounds Color (), ĠSide Border . BOTTOM ), ĠEmpty Border ( 0 , Ġ 5 , Ġ 0 , Ġ 5 )) ĊĠĠĠ Ġpreferred Size Ġ= ĠDimension ( preferred Size . width , Ġ 2 5 ) ĊĠĠĠ Ġminimum Size Ġ= ĠDimension ( minimum Size . width , Ġ 2 5 ) ĊĠĠĠ Ġmaximum Size Ġ= ĠDimension ( maximum Size . width , Ġ 2 5 ) ĊĊĠĠĠ Ġadd ( label , ĠBorderLayout . WEST ) ĊĠĠĠ Ġadd Mouse Listener ( object Ġ: ĠMouse Adapter () Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġmouse Clicked ( e : ĠMouseEvent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġcomponent . isVisible Ġ= Ġ! component . isVisible ĊĠĠĠĠĠĠĠ Ġlabel . icon Ġ= Ġif Ġ( component . isVisible ) ĠAll Icons . General . Arrow Down Ġelse ĠAll Icons . General . Arrow Right ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠ Ġ} Ċ }