/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . android . tools . component tree . impl Ċ Ċ import Ġcom . android . tools . adt ui . common . Colo red Icon Generator Ċ import Ġcom . android . tools . component tree . api . Badge Item Ċ import Ġcom . android . tools . component tree . api . NodeType Ċ import Ġcom . intellij . openapi . util . Key Ċ import Ġcom . intellij . ui . components . JB Label Ċ import Ġcom . intellij . util . ui . Empty Icon Ċ import Ġcom . intellij . util . ui . J BU I Ċ import Ġcom . intellij . util . ui . UI Util Ċ import Ġjava . awt . Border Layout Ċ import Ġjava . awt . Component Ċ import Ġjava . awt . Container Ċ import Ġjavax . swing . BoxLayout Ċ import Ġjavax . swing . JPanel Ċ import Ġjavax . swing . J Tree Ċ import Ġjavax . swing . tree . Tree Cell Renderer Ċ Ċ val ĠBAD GE _ ITEM Ġ= ĠKey < Badge Item >(" BAD GE _ ITEM ") Ċ Ċ /** Ċ Ġ* Ġ[ Tree Cell Renderer ] Ġfor Ġa Ġ[ Tree Impl ]. Ċ Ġ* Ċ Ġ* ĠThis Ġrenderer Ġfacilit ates Ġthe Ġdeleg ation Ġto Ġthe Ġproper Ġnode Ġtype Ġrenderer . Ċ Ġ* ĠThere Ġis Ġalso Ġsupport Ġfor Ġhiding Ġthe Ġbad ges Ġduring Ġexpansion Ġusing Ġthe Ġexpand able Items Handler Ġof Ġthe Ġtree . Ċ Ġ*/ Ċ class ĠTree Cell Renderer Impl ( ĊĠ Ġtree : ĠTree Impl , ĊĠ Ġbad ges : ĠList < Badge Item >, ĊĠ Ġprivate Ġval Ġmodel : ĠComponent Tree Model Impl Ċ ) Ġ: ĠTree Cell Renderer Ġ{ ĊĊĠ Ġprivate Ġval Ġpanel Ġ= ĠPanel Renderer ( tree , Ġbad ges ) ĊĊĠ Ġoverride Ġfun Ġget Tree Cell Renderer Component ( ĊĠĠĠ Ġtree : ĠJ Tree , ĊĠĠĠ Ġvalue : ĠAny ?, ĊĠĠĠ Ġselected : ĠBoolean , ĊĠĠĠ Ġexpanded : ĠBoolean , ĊĠĠĠ Ġleaf : ĠBoolean , ĊĠĠĠ Ġrow : ĠInt , ĊĠĠĠ Ġhas Focus : ĠBoolean ĊĠ Ġ): ĠComponent Ġ{ ĊĠĠĠ Ġval Ġrenderer Ġ= Ġmodel . renderer Of ( value ) Ġ?: Ġreturn Ġpanel . apply Ġ{ Ġremove All () Ġ} ĊĠĠĠ Ġval Ġcomponent Ġ= Ġrenderer . get Tree Cell Renderer Component ( tree , Ġvalue , Ġselected , Ġexpanded , Ġleaf , Ġrow , Ġhas Focus ) ĊĠĠĠ Ġpanel . add ( component , ĠBorderLayout . WEST ) ĊĠĠĠ Ġpanel . current Depth Ġ= Ġmodel . compute Depth ( value ) ĊĠĠĠ Ġpanel . update Bad ges ( value , Ġrow , Ġselected , Ġtree . has Focus ()) ĊĠĠĠ Ġreturn Ġpanel ĊĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠRenderer Ġused Ġas Ġimplementation Ġa Ġ[ Tree Cell Renderer ]. Ċ Ġ* Ċ Ġ* ĠThe Ġcontents Ġis Ġa Ġcombination Ġof Ġthe Ġrenderer Ġspecified Ġby Ġthe Ġ[ NodeType ] Ġof Ġthe Ġcurrent Ċ Ġ* Ġrow Ġvalue Ġand Ġa Ġpanel Ġof Ġbad ges . Ċ Ġ*/ Ċ private Ġclass ĠPanel Renderer ( ĊĠ Ġprivate Ġval Ġtree : ĠTree Impl , ĊĠ Ġprivate Ġval Ġbad ges : ĠList < Badge Item > Ċ ) Ġ: ĠJPanel () Ġ{ ĊĠ Ġprivate Ġval Ġempty Icon Ġ= ĠEmpty Icon . ICON _ 1 6 ĊĠ Ġprivate Ġval Ġbadge Panel Ġ= ĠJPanel () ĊĊĠ Ġvar Ġcurrent Depth : ĠInt Ġ= Ġ 1 ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġlayout Ġ= ĠPanel Renderer Layout () ĊĠĠĠ Ġborder Ġ= ĠJ BU I . B orders . empty () ĊĠĠĠ Ġbackground Ġ= ĠUI Util . TRANSP ARENT _ COLOR ĊĠĠĠ Ġif Ġ( badges . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġval Ġlayout Ġ= ĠBox Layout ( badge Panel , ĠBox Layout . LINE _ AXIS ) ĊĠĠĠĠĠ Ġbadge Panel . layout Ġ= Ġlayout ĊĠĠĠĠĠ Ġbadge Panel . border Ġ= ĠJ BU I . B orders . empty () ĊĠĠĠĠĠ Ġbadge Panel . background Ġ= ĠUI Util . TRANSP ARENT _ COLOR ĊĠĠĠĠĠ Ġbad ges . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlabel Ġ= ĠJ B Label () ĊĠĠĠĠĠĠĠ Ġlabel . put Client Property ( BAD GE _ ITEM , Ġit ) ĊĠĠĠĠĠĠĠ Ġbadge Panel . add ( label ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġadd ( badge Panel , ĠBorderLayout . CENTER ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġupdate Bad ges ( value : ĠAny ?, Ġrow : ĠInt , Ġselected : ĠBoolean , Ġhas Focus : ĠBoolean ) Ġ{ ĊĠĠĠ Ġfor Ġ(( i , Ġbadge ) Ġin Ġbad ges . with Index ()) Ġ{ ĊĠĠĠĠĠ Ġval Ġlabel Ġ= Ġbadge Panel . getComponent ( i ) Ġas ĠJ B Label ĊĠĠĠĠĠ Ġval Ġicon Ġ= Ġvalue ?. let Ġ{ Ġbadge . get Icon ( it ) Ġ} ĊĠĠĠĠĠ Ġval Ġbadge Icon Ġ= Ġicon ?. let Ġ{ Ġif Ġ( selected Ġ&& Ġhas Focus ) ĠCo lo red Icon Generator . generate White Icon ( it ) Ġelse Ġit Ġ} ĊĠĠĠĠĠ Ġlabel . icon Ġ= Ġbadge Icon Ġ?: Ġempty Icon ĊĠĠĠĠĠ Ġlabel . tool Tip Text Ġ= Ġvalue ?. let Ġ{ Ġbadge . get Tooltip Text ( it ) Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġbadge Panel . isVisible Ġ= Ġ! tree . is Row Currently Expanded ( row ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġinner Ġclass ĠPanel Renderer Layout Ġ: ĠBorderLayout () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġlayout Container ( target : ĠContainer ) Ġ{ ĊĠĠĠĠĠ Ġsuper . layout Container ( target ) ĊĠĠĠĠĠ Ġval Ġwidth Ġ= Ġbadge Panel . preferred Size . width ĊĠĠĠĠĠ Ġbadge Panel . setBounds ( tree . compute Max Render Width ( current Depth ), Ġbadge Panel . y , Ġwidth , Ġbadge Panel . height ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ