/* Ċ Ġ* Ġ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 . idea . layout inspector . ui Ċ Ċ import Ġcom . android . tools . adt ui . model . std ui . ValueChanged Listener Ċ import Ġcom . android . tools . adt ui . std ui . Key St ro kes Ċ import Ġcom . android . tools . adt ui . std ui . register Action Key Ċ import Ġcom . android . tools . idea . layout inspector . model . Resolution Stack Model Ċ import Ġcom . android . tools . idea . layout inspector . properties . Inspector Group Property Item Ċ import Ġcom . android . tools . idea . layout inspector . properties . Inspector Property Item Ċ import Ġcom . android . tools . idea . layout inspector . properties . Resolution Stack Item Ċ import Ġcom . android . tools . idea . layout inspector . resource . Source Location Ċ import Ġcom . android . tools . property . panel . api . Property Editor Model Ċ import Ġcom . android . tools . property . pt able 2 . P Table Group Item Ċ import Ġcom . google . common . annotations . Visible ForTesting Ċ import Ġcom . intellij . ide . ui . l af . dar cul a . Dar cul a UI Util Ċ import Ġcom . intellij . ui . components . JB Label Ċ 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 . Font Ċ import Ġjava . awt . Graphics Ċ import Ġjava . awt . Graphics 2 D Ċ import Ġjava . awt . event . Mouse Adapter Ċ import Ġjava . awt . event . MouseEvent Ċ import Ġjava . awt . font . Text Attribute Ċ import Ġjavax . swing . BoxLayout Ċ import Ġjavax . swing . J Component Ċ import Ġjavax . swing . JPanel Ċ Ċ private Ġconst Ġval ĠLINK _ BORDER Ġ= Ġ 2 Ċ Ċ /** Ċ Ġ* ĠAn Ġeditor Ġthat Ġis Ġable Ġto Ġshow Ġa Ġlink Ġbelow Ġthe Ġactual Ġeditor . Ċ Ġ* Ċ Ġ* ĠThe Ġlink Ġprovides Ġnavigation Ġback Ġto Ġsource Ġcode Ġwhere Ġthe Ġvalue Ċ Ġ* Ġof Ġthe Ġproperty Ġwas Ġspecified . Ċ Ġ*/ Ċ class ĠResolution Element Editor ( ĊĠ Ġprivate Ġval Ġmodel : ĠResolution Stack Model , ĊĠ Ġ@ Visible ForTesting ĊĠ Ġval Ġeditor Model : ĠProperty Editor Model , ĊĠ Ġeditor : ĠJ Component Ċ ) Ġ: ĠJPanel ( Border Layout ()) Ġ{ ĊĊĠ Ġprivate Ġval Ġlink Panel Ġ= ĠJPanel () ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġbackground Ġ= ĠUI Util . TRANSP ARENT _ COLOR ĊĠĠĠ Ġadd ( editor , ĠBorderLayout . CENTER ) ĊĠĠĠ Ġadd ( link Panel , ĠBorderLayout . SO UTH ) ĊĠĠĠ Ġlink Panel . layout Ġ= ĠBox Layout ( link Panel , ĠBox Layout . Y _ AXIS ) ĊĠĠĠ Ġlink Panel . isVisible Ġ= Ġfalse ĊĠĠĠ Ġlink Panel . background Ġ= ĠUI Util . TRANSP ARENT _ COLOR ĊĠĠĠ Ġeditor Model . addListener ( ValueChanged Listener Ġ{ Ġupdate From Model () Ġ}) ĊĠĠĠ Ġeditor . add Mouse Listener ( object Ġ: ĠMouse Adapter () Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġmouse Clicked ( event : ĠMouseEvent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! event . is Cons umed Ġ&& Ġevent . click Count Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġeditor Model . table Support ?. toggle Group () ĊĠĠĠĠĠĠĠĠĠ Ġevent . consume () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠĠĠ Ġupdate From Model () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġupdate From Model () Ġ{ ĊĠĠĠ Ġval Ġproperty Ġ= Ġeditor Model . property Ġas ĠIns pector Property Item ĊĠĠĠ Ġval Ġcontext Ġ= Ġproperty . lookup ĊĠĠĠ Ġval Ġview Ġ= Ġcontext [ property . view Id ] ĊĠĠĠ Ġval Ġresource Lookup Ġ= Ġproperty . lookup . resource Lookup ĊĠĠĠ Ġval Ġlocations Ġ= Ġview ?. let Ġ{ Ġresource Lookup . find File Locations ( property , Ġit ) Ġ} Ġ?: ĠlistOf () ĊĠĠĠ Ġval Ġclass Location Ġ= Ġ( property Ġas ? ĠIns pector Group Property Item )?. class Location ĊĠĠĠ Ġval Ġhide Link Panel Ġ= Ġ( locations . isEmpty () Ġ&& Ġclass Location Ġ== Ġnull ) Ġ|| Ġ( property Ġis ĠP Table Group Item Ġ&& Ġ! editor Model . is Expanded Table Item ) ĊĠĠĠ Ġlink Panel . isVisible Ġ= Ġ! hide Link Panel ĊĠĠĠ Ġeditor Model . is Custom Height Ġ= Ġ! hide Link Panel ĊĠĠĠ Ġbackground Ġ= Ġif Ġ( editor Model . is Used In Renderer With Selection ) ĠUI Util . getTable Background ( true , Ġtrue ) Ġelse ĠUI Util . TRANSP ARENT _ COLOR ĊĠĠĠ Ġif Ġ(! hide Link Panel ) Ġ{ ĊĠĠĠĠĠ Ġlink Panel . removeAll () ĊĠĠĠĠĠ Ġval Ġis Selected Ġ= Ġeditor Model . is Used In Renderer With Selection ĊĠĠĠĠĠ Ġval Ġis Over ridden Ġ= Ġproperty Ġis ĠResolution Stack Item ĊĠĠĠĠĠ Ġclass Location ?. let Ġ{ Ġlink Panel . add ( Source Location Link ( it , Ġis Selected , Ġfalse )) Ġ} ĊĠĠĠĠĠ Ġwhen Ġ( locations . size ) Ġ{ ĊĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{} ĊĠĠĠĠĠĠĠĠ 1 Ġ-> Ġlink Panel . add ( Source Location Link ( locations . first (), Ġis Selected , Ġis Over ridden )) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġlink Panel . add ( Expansion Panel ( model , Ġeditor Model , Ġproperty , Ġlocations , Ġis Selected , Ġis Over ridden )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠA Ġpanel Ġwith Ġa Ġexpand able Ġlist Ġof Ġdetail Ġlocations . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġclass ĠExp ansion Panel ( ĊĠĠĠ Ġprivate Ġval Ġmodel : ĠResolution Stack Model , ĊĠĠĠ Ġprivate Ġval Ġeditor Model : ĠProperty Editor Model , ĊĠĠĠ Ġprivate Ġval Ġproperty : ĠIns pector Property Item , ĊĠĠĠ Ġlocations : ĠList < Source Location >, ĊĠĠĠ Ġprivate Ġval Ġis Selected : ĠBoolean , ĊĠĠĠ Ġis Over ridden : ĠBoolean ĊĠ Ġ) Ġ: ĠJPanel ( Border Layout ()) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġextra Panel Ġ= ĠJPanel () ĊĠĠĠ Ġprivate Ġval Ġexpand Label Ġ= Ġobject Ġ: ĠJ B Label () Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġpaint Component ( g : ĠGraphics ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . paint Component ( g ) ĊĠĠĠĠĠĠĠ Ġif Ġ( has Focus () Ġ&& Ġg Ġis ĠGraphics 2 D ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠDar cul a UI Util . paint Focus Border ( g , Ġwidth , Ġheight , Ġ 0 f , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠ Ġval Ġmain Panel Ġ= ĠJPanel () ĊĠĠĠĠĠ Ġmain Panel . layout Ġ= ĠBox Layout ( main Panel , ĠBox Layout . X _ AXIS ) ĊĠĠĠĠĠ Ġmain Panel . background Ġ= ĠUI Util . TRANSP ARENT _ COLOR ĊĠĠĠĠĠ Ġmain Panel . border Ġ= ĠJ BU I . B orders . empty Left ( 8 ) ĊĠĠĠĠĠ Ġval Ġis Extra Panel Visible Ġ= Ġmodel . is Expanded ( property ) ĊĠĠĠĠĠ Ġextra Panel . layout Ġ= ĠBox Layout ( extra Panel , ĠBox Layout . Y _ AXIS ) ĊĠĠĠĠĠ Ġextra Panel . background Ġ= ĠUI Util . TRANSP ARENT _ COLOR ĊĠĠĠĠĠ Ġextra Panel . isVisible Ġ= Ġis Extra Panel Visible ĊĠĠĠĠĠ Ġextra Panel . border Ġ= ĠJ BU I . B orders . empty Left ( 2 4 ) ĊĠĠĠĠĠ Ġexpand Label . icon Ġ= ĠUI Util . get TreeNode Icon ( is Extra Panel Visible , Ġis Selected , Ġis Selected ) ĊĠĠĠĠĠ Ġexpand Label . register Action Key ({ Ġtoggle () Ġ}, ĠKey St ro kes . SPACE , Ġ" space ") ĊĠĠĠĠĠ Ġexpand Label . register Action Key ({ Ġtoggle () Ġ}, ĠKey St ro kes . ENTER , Ġ" enter ") ĊĠĠĠĠĠ Ġexpand Label . register Action Key ({ Ġopen () Ġ}, ĠKey St ro kes . RIGHT , Ġ" open ") ĊĠĠĠĠĠ Ġexpand Label . register Action Key ({ Ġopen () Ġ}, ĠKey St ro kes . NUM _ RIGHT , Ġ" open ") ĊĠĠĠĠĠ Ġexpand Label . register Action Key ({ Ġclose () Ġ}, ĠKey St ro kes . LEFT , Ġ" close ") ĊĠĠĠĠĠ Ġexpand Label . register Action Key ({ Ġclose () Ġ}, ĠKey St ro kes . NUM _ LEFT , Ġ" close ") ĊĠĠĠĠĠ Ġexpand Label . border Ġ= ĠJ BU I . B orders . empty ( LINK _ BORDER ) ĊĠĠĠĠĠ Ġexpand Label . is Focus able Ġ= Ġtrue ĊĠĠĠĠĠ Ġexpand Label . add Mouse Listener ( object Ġ: ĠMouse Adapter () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmouse Pressed ( event : ĠMouseEvent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtoggle () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠ Ġval Ġmain Location Ġ= Ġlocations . first () ĊĠĠĠĠĠ Ġmain Panel . add ( expand Label ) ĊĠĠĠĠĠ Ġmain Panel . add ( Source Location Link ( main Location , Ġis Selected , Ġis Over ridden )) ĊĊĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 1 Ġuntil Ġlocations . size ) Ġ{ ĊĠĠĠĠĠĠĠ Ġextra Panel . add ( Source Location Link ( locations [ index ], Ġis Selected , Ġis Over ridden )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġadd ( main Panel , ĠBorderLayout . CENTER ) ĊĠĠĠĠĠ Ġadd ( extra Panel , ĠBorderLayout . SO UTH ) ĊĠĠĠĠĠ Ġbackground Ġ= ĠUI Util . TRANSP ARENT _ COLOR ĊĠĠĠĠĠ Ġalignment X Ġ= ĠComponent . LEFT _ ALIGNMENT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtoggle () Ġ{ ĊĠĠĠĠĠ Ġmodel . toggle ( property ) ĊĠĠĠĠĠ Ġval Ġis Expanded Ġ= Ġmodel . is Expanded ( property ) ĊĠĠĠĠĠ Ġexpand Label . icon Ġ= ĠUI Util . get TreeNode Icon ( is Expanded , Ġis Selected , Ġis Selected ) ĊĠĠĠĠĠ Ġextra Panel . isVisible Ġ= Ġis Expanded ĊĠĠĠĠĠ Ġeditor Model . table Support ?. update Row Height ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen () Ġ{ ĊĠĠĠĠĠ Ġif Ġ(! model . is Expanded ( property )) Ġ{ ĊĠĠĠĠĠĠĠ Ġtoggle () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠ Ġif Ġ( model . is Expanded ( property )) Ġ{ ĊĠĠĠĠĠĠĠ Ġtoggle () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturn Ġtrue Ġif Ġthis Ġproperty Ġbe Ġdisplayed Ġwith Ġa Ġlink Ġpanel . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġinformation Ġis Ġuseful Ġfor Ġdetermining Ġif Ġa Ġproperty Ġvalue Ġis Ġeditable . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhas Link Panel ( property : ĠIns pector Property Item ): ĠBoolean Ġ{ ĊĠĠĠĠĠ Ġif Ġ( property Ġis ĠP Table Group Item ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġval Ġview Ġ= Ġproperty . lookup [ property . view Id ] Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠ Ġreturn Ġproperty . lookup . resource Lookup . find File Locations ( property , Ġview , Ġmax Ġ= Ġ 1 ). isNotEmpty () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠAllow Ġthe Ġlink Ġto Ġbe Ġclick able Ġin Ġthe Ġtable Ġeven Ġthough Ġthe Ġeditor Ġis Ġonly Ġused Ġfor Ġrendering . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ param Ġ[ location ] Ġthe Ġsource Ġlocation . ĠIf Ġ[ Source Location . navig atable ] Ġis Ġmissing Ġthen Ġshow Ġthe Ġlink Ġas Ġnormal Ġtext . ĊĠĠ Ġ* Ġ@ param Ġ[ isSelected ] Ġthen Ġthe Ġfont Ġcolor Ġwill Ġuse Ġthe Ġtable Ġforeground Ġfor Ġselected Ġand Ġfocused . ĊĠĠ Ġ* Ġ@ param Ġ[ is Over ridden ] Ġthen Ġthe Ġfont Ġwill Ġuse Ġstrike out Ġto Ġindicate Ġthe Ġvalue Ġis Ġoverridden . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġclass ĠSource Location Link ( private Ġval Ġlocation : ĠSource Location , Ġis Selected : ĠBoolean , Ġis Over ridden : ĠBoolean ): ĠJ B Label () Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠ Ġval Ġshow As Link Ġ= Ġlocation . navig atable Ġ!= Ġnull ĊĠĠĠĠĠ Ġval Ġnormal ForegroundColor Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġis Selected Ġ-> ĠUI Util . getTable Foreground ( true , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġshow As Link Ġ-> ĠJ BU I . Current Theme . Link . Foreground . ENABLED ĊĠĠĠĠĠĠĠ Ġelse Ġ-> ĠUI Util . getTable Foreground ( false , Ġfalse ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġtext Ġ= Ġlocation . source ĊĠĠĠĠĠ Ġfont Ġ= Ġget Small Font ( show As Link , Ġis Over ridden ) ĊĠĠĠĠĠ Ġforeground Ġ= Ġnormal ForegroundColor ĊĠĠĠĠĠ Ġis Focus able Ġ= Ġtrue ĊĠĠĠĠĠ Ġborder Ġ= ĠJ BU I . B orders . empty ( 0 , ĠLINK _ BORDER , ĠLINK _ BORDER , ĠLINK _ BORDER ) ĊĠĠĠĠĠ Ġalignment X Ġ= ĠComponent . LEFT _ ALIGNMENT ĊĠĠĠĠĠ Ġregister Action Key ({ Ġactivate Link () Ġ}, ĠKey St ro kes . SPACE , Ġ" space ") ĊĠĠĠĠĠ Ġregister Action Key ({ Ġactivate Link () Ġ}, ĠKey St ro kes . ENTER , Ġ" enter ") ĊĊĠĠĠĠĠ Ġadd Mouse Listener ( object Ġ: ĠMouse Adapter () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmouse Pressed ( event : ĠMouseEvent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġactivate Link () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġactivate Link () Ġ{ ĊĠĠĠĠĠ Ġlocation . navig atable ?. navigate ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpaint Component ( g : ĠGraphics ) Ġ{ ĊĠĠĠĠĠ Ġsuper . paint Component ( g ) ĊĠĠĠĠĠ Ġif Ġ( has Focus () Ġ&& Ġg Ġis ĠGraphics 2 D ) Ġ{ ĊĠĠĠĠĠĠĠ ĠDar cul a UI Util . paint Focus Border ( g , Ġwidth , Ġheight , Ġ 0 f , Ġtrue ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Small Font ( show As Link : ĠBoolean , Ġstrike out : ĠBoolean ): ĠFont Ġ{ ĊĠĠĠĠĠ Ġval Ġfont Ġ= ĠUI Util . getLabel Font ( UI Util . FontSize . SMALL ) ĊĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠ Ġval Ġattributes Ġ= Ġfont . attributes Ġas ĠMutable Map < Text Attribute , ĠAny ?> ĊĠĠĠĠĠ Ġif Ġ( show As Link ) Ġ{ ĊĠĠĠĠĠĠĠ Ġattributes [ Text Attribute . UNDER LINE ] Ġ= ĠText Attribute . UNDER LINE _ ON ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ( strike out ) Ġ{ ĊĠĠĠĠĠĠĠ Ġattributes [ Text Attribute . STR IK ETH ROUGH ] Ġ= ĠText Attribute . STR IK ETH ROUGH _ ON ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn ĠFont ( attributes ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ