/* Ċ Ġ* Ġ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 . ui . resourcemanager . explorer Ċ Ċ import Ġcom . android . tools . idea . flags . Studio Flags Ċ import Ġcom . android . tools . idea . ui . resourcemanager . ResourceManager Tracking Ċ import Ġcom . android . tools . idea . ui . resourcemanager . model . Type Filter Ċ import Ġcom . android . tools . idea . ui . resourcemanager . rendering . Slow Resource . Companion . is Slow Resource Ċ import Ġcom . android . utils . us Locale Capital ize Ċ import Ġcom . intellij . icons . All Icons Ċ import Ġcom . intellij . openapi . action System .* Ċ import Ġcom . intellij . openapi . action System . impl . ActionButton Ċ import Ġcom . intellij . openapi . project . D umb Aware Ċ import Ġcom . intellij . openapi . ui . ComboBox Ċ import Ġcom . intellij . ui .* Ċ import Ġcom . intellij . ui . JB Color Ċ import Ġcom . intellij . util . ui . J BU I Ċ import Ġicons . Studio Icons Ċ import Ġjava . awt . Component Ċ import Ġjava . awt . event . Item Event Ċ import Ġjava . awt . event . MouseEvent Ċ import Ġjavax . swing .* Ċ import Ġjavax . swing . event . Document Event Ċ import Ġjavax . swing . event . PopupMenu Event Ċ Ċ private Ġconst Ġval ĠSEARCH _ FIELD _ LABEL Ġ= Ġ" Search Ġresources Ġby Ġname " Ċ private Ġconst Ġval ĠADD _ BUTTON _ LABEL Ġ= Ġ" Add Ġresources Ġto Ġthe Ġmodule " Ċ private Ġconst Ġval ĠFILTER S _ BUTTON _ LABEL Ġ= Ġ" Filter Ġdisplayed Ġresources " Ċ private Ġconst Ġval ĠMODULE _ PREFIX Ġ= Ġ" Module : Ġ" Ċ Ċ private Ġval ĠMIN _ FIELD _ SIZE Ġ= ĠJ BU I . scale ( 4 0 ) Ċ private Ġval ĠP REF _ FIELD _ SIZE Ġ= ĠJ BU I . scale ( 1 2 5 ) Ċ private Ġval ĠMAX _ FIELD _ SIZE Ġ= ĠJ BU I . scale ( 1 5 0 ) Ċ private Ġval ĠBUTTON _ SIZE Ġ= ĠJ BU I . size ( 2 0 ) Ċ private Ġval ĠG AP _ SIZE Ġ= ĠJ BU I . scale ( 1 0 ) Ċ private Ġval ĠACTION _ BTN _ SIZE Ġget () Ġ= ĠJ BU I . scale ( 3 2 ) Ċ Ċ /** Ċ Ġ* ĠToolbar Ġdisplayed Ġat Ġthe Ġtop Ġof Ġthe Ġresource Ġexplorer Ġwhich Ġallows Ġusers Ċ Ġ* Ġto Ġchange Ġthe Ġmodule Ġand Ġadd Ġresources . Ċ Ġ*/ Ċ class ĠResource Explorer Toolbar Ġprivate Ġconstructor ( ĊĠ Ġprivate Ġval Ġtoolbar ViewModel : ĠResource Explorer Toolbar ViewModel , ĊĠ Ġprivate Ġval Ġmodule Selection Combo : ĠCombo Box < String >) ĊĠ Ġ: ĠJPanel (), ĠData Provider Ġby Ġtoolbar ViewModel Ġ{ ĊĊĠ Ġprivate Ġval Ġsearch Action Ġ= Ġcreate Search Field () ĊĠ Ġprivate Ġval Ġrefresh Action Toolbar Ġ= ĠAction Manager . getInstance (). create Action Toolbar (" Resource Explorer ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Action Group ( Refresh Action ( toolbar ViewModel )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ) ĊĠ Ġprivate Ġval Ġrefresh Action Component Ġ= Ġrefresh Action Toolbar . component ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġlayout Ġ= ĠGroup Layout ( this ) ĊĠĠĠ Ġval Ġgroup Layout Ġ= Ġlayout Ġas ĠGroup Layout ĊĠĠĠ Ġval Ġadd Action Ġ= Ġaction ( Add Action ( toolbar ViewModel )) ĊĠĠĠ Ġval Ġseparator Ġ= Ġcom . android . tools . idea . ui . resourcemanager . widget . Separator () ĊĠĠĠ Ġval Ġfilter Action Ġ= Ġaction ( Filter Action ( toolbar ViewModel )) ĊĊĠĠĠ Ġval Ġsequential Group Ġ= Ġgroup Layout . createSequentialGroup () ĊĠĠĠĠĠ Ġ. add Fixed Size Component ( addAction , Ġtrue ) ĊĠĠĠĠĠ Ġ. addComponent ( refresh Action Component , ĠACTION _ BTN _ SIZE , ĠACTION _ BTN _ SIZE , ĠACTION _ BTN _ SIZE ) ĊĠĠĠĠĠ Ġ. add Fixed Size Component ( separator ) ĊĠĠĠĠĠ Ġ. addComponent ( module Selection Combo , ĠMIN _ FIELD _ SIZE , ĠP REF _ FIELD _ SIZE , ĠMAX _ FIELD _ SIZE ) ĊĠĠĠĠĠ Ġ. addComponent ( search Action , ĠMIN _ FIELD _ SIZE , ĠP REF _ FIELD _ SIZE , ĠInt . MAX _ VALUE ) ĊĠĠĠĠĠ Ġ. add Fixed Size Component ( filter Action ) ĊĊĠĠĠ Ġval Ġvertical Group Ġ= Ġgroup Layout . createParallelGroup ( GroupLayout . Alignment . LEADING ) ĊĠĠĠĠĠ Ġ. addComponent ( addAction ) ĊĠĠĠĠĠ Ġ. addComponent ( refresh Action Component ) ĊĠĠĠĠĠ Ġ. addComponent ( separator ) ĊĠĠĠĠĠ Ġ. addComponent ( module Selection Combo ) ĊĠĠĠĠĠ Ġ. addComponent ( search Action ) ĊĠĠĠĠĠ Ġ. addComponent ( filter Action ) ĊĊĠĠĠ Ġgroup Layout . setHorizontal Group ( sequential Group ) ĊĠĠĠ Ġgroup Layout . set Vertical Group ( vertical Group ) ĊĊĠĠĠ Ġborder Ġ= ĠJ BU I . B orders . merge ( J BU I . B orders . empty ( 4 , Ġ 2 ), ĠJ BU I . B orders . custom Line ( JB Color . border (), Ġ 0 , Ġ 0 , Ġ 1 , Ġ 0 ), Ġtrue ) ĊĠĠĠ Ġtoolbar ViewModel . update UIC allback Ġ= Ġthis :: update ĊĠĠĠ Ġupdate () Ġ// ĠUpdate Ġcurrent Ġmodule Ġright Ġaway . ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġupdate () Ġ{ ĊĠĠĠ Ġmodule Selection Combo . selected Item Ġ= Ġtoolbar ViewModel . current ModuleName ĊĠĠĠ Ġrefresh Action Toolbar . update Actions Immediate ly () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcreate Search Field () Ġ= ĠSearch TextField ( true ). apply Ġ{ ĊĠĠĠ Ġis Focus able Ġ= Ġtrue ĊĠĠĠ Ġtool Tip Text Ġ= ĠSEARCH _ FIELD _ LABEL ĊĠĠĠ Ġaccessible Context . accessible Name Ġ= ĠSEARCH _ FIELD _ LABEL ĊĠĠĠ Ġtext Editor . columns Ġ= ĠG AP _ SIZE ĊĠĠĠ Ġtext Editor . document . add Document Listener ( object Ġ: ĠDocument Adapter () Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġtext Changed ( e : ĠDocument Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtoolbar ViewModel . search String Ġ= Ġe . document . getText ( 0 , Ġe . document . length ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġ[ Resource Explorer Toolbar ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmodule Combo Enabled ĠWhether Ġthe Ġmodule Ġselection Ġbox ĠUI Ġshould Ġshow Ġas Ġenabled . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġcreate ( toolbar ViewModel : ĠResource Explorer Toolbar ViewModel , Ġmodule Combo Enabled : ĠBoolean ): ĠResource Explorer Toolbar Ġ{ ĊĠĠĠĠĠ Ġval Ġmodule Selection Combo Ġ= Ġcreate Module Selection ComboBox ( toolbar ViewModel , Ġmodule Combo Enabled ) ĊĠĠĠĠĠ Ġreturn ĠResource Explorer Toolbar ( toolbar ViewModel , Ġmodule Selection Combo ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠButton Ġto Ġadd Ġnew Ġresources Ċ Ġ*/ Ċ private Ġabstract Ġclass ĠPopup Action Ġinternal Ġconstructor ( val Ġicon : ĠIcon ?, Ġdescription : ĠString ) ĊĠ Ġ: ĠAn Action ( description , Ġdescription , Ġicon ), ĠD umb Aware Ġ{ ĊĊĠ Ġoverride Ġfun ĠactionPerformed ( e : ĠAn ActionEvent ) Ġ{ ĊĠĠĠ Ġvar Ġx Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġy Ġ= Ġ 0 ĊĠĠĠ Ġval Ġinput Event Ġ= Ġe . input Event ĊĠĠĠ Ġif Ġ( input Event Ġis ĠMouseEvent ) Ġ{ ĊĠĠĠĠĠ Ġx Ġ= Ġ 0 ĊĠĠĠĠĠ Ġy Ġ= Ġinput Event . component . height ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġshow Add Popup ( input Event . component , Ġx , Ġy ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġshow Add Popup ( component : ĠComponent , Ġx : ĠInt , Ġy : ĠInt ) Ġ{ ĊĠĠĠ ĠAction Manager . getInstance () ĊĠĠĠĠĠ Ġ. create Action PopupMenu ( Action Places . TOOL WINDOW _ POP UP , Ġcreate Add Popup Group ()) ĊĠĠĠĠĠ Ġ. component . show ( component , Ġx , Ġy ) ĊĠ Ġ} ĊĊĠ Ġprotected Ġabstract Ġfun Ġcreate Add Popup Group (): ĠAction Group Ċ } Ċ Ċ private Ġclass ĠAdd Action Ġinternal Ġconstructor ( val ĠviewModel : ĠResource Explorer Toolbar ViewModel ) ĊĠ Ġ: ĠPopup Action ( All Icons . General . Add , ĠADD _ BUTTON _ LABEL ) Ġ{ ĊĠ Ġoverride Ġfun Ġcreate Add Popup Group () Ġ= ĠDefault Action Group (). apply Ġ{ ĊĠĠĠ Ġadd All ( viewModel . add Actions ) ĊĠĠĠ Ġval Ġimport ers Actions Ġ= ĠviewModel . get Import ers Actions () ĊĠĠĠ Ġif Ġ( import ers Actions . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġadd ( Separator ()) ĊĠĠĠĠĠ Ġadd All ( import ers Actions ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠAction Ġto Ġrefresh Ġthe Ġpre views Ġof Ġa Ġparticular Ġtype Ġof Ġresources . Ċ Ġ*/ Ċ private Ġclass ĠRefresh Action Ġinternal Ġconstructor ( val ĠviewModel : ĠResource Explorer Toolbar ViewModel ) ĊĠ Ġ: ĠAn Action (" Refresh Ġpre views ", Ġ" Refresh Ġpre views Ġfor Ġ${ viewModel . resourceType . displayName } s ", ĠAll Icons . Actions . Refresh ) Ġ{ ĊĠ Ġoverride Ġfun ĠactionPerformed ( e : ĠAn ActionEvent ) Ġ{ ĊĠĠĠ Ġ// ĠTODO : Ġupdate Ġtracking Ġto Ġsupport Ġthis Ġaction . ĊĠĠĠ ĠviewModel . refresh Resources Pre views Callback () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġupdate ( e : ĠAn ActionEvent ) Ġ{ ĊĠĠĠ Ġsuper . update ( e ) ĊĠĠĠ Ġif Ġ( viewModel . resourceType . is Slow Resource ()) Ġ{ ĊĠĠĠĠĠ Ġe . presentation . text Ġ= Ġtemplate Presentation . text ĊĠĠĠĠĠ Ġe . presentation . description Ġ= Ġtemplate Presentation . description ĊĠĠĠĠĠ Ġe . presentation . isEnabled Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"${ viewModel . resourceType . displayName } s Ġrefresh Ġautomatically " ĊĠĠĠĠĠ Ġe . presentation . text Ġ= Ġtext Ġ// ĠUsed Ġfor Ġtooltip s ĊĠĠĠĠĠ Ġe . presentation . description Ġ= Ġtext ĊĠĠĠĠĠ Ġe . presentation . isEnabled Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠFilter Action Ġinternal Ġconstructor ( val ĠviewModel : ĠResource Explorer Toolbar ViewModel ) ĊĠ Ġ: ĠPopup Action ( All Icons . General . Filter , ĠFILTER S _ BUTTON _ LABEL ) Ġ{ ĊĠ Ġoverride Ġfun Ġcreate Add Popup Group () Ġ= ĠDefault Action Group (). apply Ġ{ ĊĠĠĠ Ġadd ( Show Module Dependencies Action ( viewModel )) ĊĠĠĠ Ġadd ( Show Libraries Action ( viewModel )) ĊĠĠĠ Ġadd ( Show Framework Action ( viewModel )) ĊĠĠĠ Ġadd ( Show Theme Attributes Action ( viewModel )) ĊĠĠĠ Ġadd Related Type Filter Actions ( viewModel ) ĊĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠShow Module Dependencies Action Ġinternal Ġconstructor ( val ĠviewModel : ĠResource Explorer Toolbar ViewModel ) ĊĠ Ġ: ĠToggle Action (" Show Ġlocal Ġdependencies ") Ġ{ ĊĠ Ġoverride Ġfun Ġis Selected ( e : ĠAn ActionEvent ) Ġ= ĠviewModel . is Show Module Dependencies ĊĠ Ġoverride Ġfun ĠsetSelected ( e : ĠAn ActionEvent , Ġstate : ĠBoolean ) Ġ{ ĊĠĠĠ ĠviewModel . is Show Module Dependencies Ġ= Ġstate ĊĠĠĠ ĠResourceManager Tracking . log Show Local Dependencies Toggle ( state ) ĊĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠShow Libraries Action Ġinternal Ġconstructor ( val ĠviewModel : ĠResource Explorer Toolbar ViewModel ) ĊĠ Ġ: ĠToggle Action (" Show Ġlibraries ") Ġ{ ĊĠ Ġoverride Ġfun Ġis Selected ( e : ĠAn ActionEvent ) Ġ= ĠviewModel . is Show Library Dependencies ĊĠ Ġoverride Ġfun ĠsetSelected ( e : ĠAn ActionEvent , Ġstate : ĠBoolean ) Ġ{ ĊĠĠĠ ĠviewModel . is Show Library Dependencies Ġ= Ġstate ĊĠĠĠ ĠResourceManager Tracking . log Show Libraries Toggle ( state ) ĊĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠShow Framework Action Ġinternal Ġconstructor ( val ĠviewModel : ĠResource Explorer Toolbar ViewModel ) ĊĠ Ġ: ĠToggle Action (" Show Ġandroid Ġresources ") Ġ{ ĊĠ Ġoverride Ġfun Ġis Selected ( e : ĠAn ActionEvent ) Ġ= ĠviewModel . is Show Framework Resources ĊĠ Ġoverride Ġfun ĠsetSelected ( e : ĠAn ActionEvent , Ġstate : ĠBoolean ) Ġ{ ĊĠĠĠ ĠviewModel . is Show Framework Resources Ġ= Ġstate ĊĠĠĠ ĠResourceManager Tracking . log Show Framework Toggle ( state ) ĊĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠShow Theme Attributes Action Ġinternal Ġconstructor ( val ĠviewModel : ĠResource Explorer Toolbar ViewModel ) ĊĠ Ġ: ĠToggle Action (" Show Ġtheme Ġattributes ") Ġ{ ĊĠ Ġoverride Ġfun Ġis Selected ( e : ĠAn ActionEvent ) Ġ= ĠviewModel . is Show Theme Attributes ĊĠ Ġoverride Ġfun ĠsetSelected ( e : ĠAn ActionEvent , Ġstate : ĠBoolean ) Ġ{ ĊĠĠĠ ĠviewModel . is Show Theme Attributes Ġ= Ġstate ĊĠĠĠ ĠResourceManager Tracking . log Show Theme Attributes Toggle ( state ) ĊĠ Ġ} Ċ } Ċ Ċ /** ĠMaximum Ġnumber Ġof Ġ[ Type Filter ] s Ġthat Ġcan Ġbe Ġdisplayed . ĠAny Ġadditional Ġwill Ġbe Ġcollapsed Ġon Ġa Ġdifferent Ġ' Other ' Ġmenu . Ġ*/ Ċ private Ġconst Ġval ĠFILTER S _ DISPLAY _ LIMIT Ġ= Ġ 7 Ċ /** ĠPattern Ġto Ġidentify Ġ[ String ] s Ġas ĠXml Tags . ĠE g : Ġ' animated - vector ' Ġ*/ Ċ private Ġval ĠTAG _ NAME _ PATTERN Ġ= ĠRegex (" ([ a - z ]+ - )+ ([ a - z ]+ )") Ċ Ċ /** Ċ Ġ* ĠAction Ġto Ġtoggle Ġseveral Ġ[ Type Filter ] s Ġin Ġthe Ġ[ Resource Explorer Toolbar ViewModel . type Filters Model ]. Ċ Ġ* Ċ Ġ* Ġ@ param ĠdisplayName ĠThe Ġname Ġby Ġwhich Ġthe Ġ[ type Filters ] Ġare Ġgrouped . ĠAlso Ġused Ġfor Ġthe Ġaction 's Ġname . Ċ Ġ* Ġ@ param Ġtype Filters ĠRelated Ġ[ Type Filter ] s , Ġthey Ġwill Ġall Ġbe Ġtoggle d Ġtogether . Ċ Ġ*/ Ċ private Ġclass ĠType Filter Action Ġinternal Ġconstructor ( val ĠviewModel : ĠResource Explorer Toolbar ViewModel , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdisplayName : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġtype Filters : ĠList < Type Filter >) ĊĠ Ġ: ĠToggle Action ( fix Filter DisplayName For Action Text ( displayName ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Filter Ġ${ viewModel . resourceType . displayName } s Ġby ĠFile Ġextension Ġor ĠXml Ġroot Ġtag .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ) Ġ{ ĊĠ Ġoverride Ġfun Ġis Selected ( e : ĠAn ActionEvent ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġtype Filters . any Ġ{ ĠviewModel . type Filters Model . isEnabled ( viewModel . resourceType , Ġit ) Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠsetSelected ( e : ĠAn ActionEvent , Ġstate : ĠBoolean ) Ġ{ ĊĠĠĠ Ġif Ġ( state ) Ġ{ ĊĠĠĠĠĠ ĠResourceManager Tracking . log Type Filter Enabled ( viewModel . resourceType ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġtype Filters . forEach Ġ{ Ġtype Filter Ġ-> ĊĠĠĠĠĠ ĠviewModel . type Filters Model . setEnabled ( viewModel . resourceType , Ġtype Filter , Ġstate ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠAction Ġthat Ġclears Ġall Ġ[ Type Filter ] s Ġunder Ġthe Ġsame ĠResource ĠType Ġin Ġthe Ġ[ viewModel ]. Ċ Ġ*/ Ċ private Ġclass ĠReset Type Filters Action Ġinternal Ġconstructor ( val ĠviewModel : ĠResource Explorer Toolbar ViewModel ) ĊĠ Ġ: ĠAn Action (" Clear Ġ${ viewModel . resourceType . displayName } ĠFilters ", ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Clear Ġenabled Ġfilters Ġfor Ġ${ viewModel . resourceType . displayName } s .", ĊĠĠĠĠĠĠĠĠĠĠĠĠ ĠStudio Icons . Common . CLOSE ) Ġ{ ĊĠ Ġoverride Ġfun ĠactionPerformed ( e : ĠAn ActionEvent ) Ġ{ ĊĠĠĠ ĠviewModel . type Filters Model . clear All ( viewModel . resourceType ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġupdate ( e : ĠAn ActionEvent ) Ġ{ ĊĠĠĠ Ġe . presentation . isEnabled Ġ= ĠviewModel . type Filters Model . getActive Filters ( viewModel . resourceType ). isNotEmpty () ĊĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠAdjust Ġthe Ġgiven Ġ[ displayName ] Ġfrom Ġ[ Type Filter ] Ġto Ġmatch Ġthe Ġdesired Ġformat Ġfor Ġ[ An Action ] Ġtext . ĠPart icular ly , ĠXml Tags Ġshould Ġbe Ċ Ġ* Ġconverted Ġto ĠTitle ĠCase . Ċ Ġ*/ Ċ private Ġfun Ġfix Filter DisplayName For Action Text ( displayName : ĠString ): ĠString Ġ{ ĊĠ Ġreturn Ġif Ġ( displayName . matches ( TAG _ NAME _ PATTERN )) Ġ{ ĊĠĠĠ Ġ// ĠFix Ġthe Ġname Ġfor ĠXml Tags . ĠE g : Ġ" animated - vector " Ġshould Ġsay Ġ" Animated ĠVector " ĊĠĠĠ ĠdisplayName . split ('- '). join ToString (" Ġ") Ġ{ Ġit . us Locale Capital ize () Ġ} ĊĠ Ġ} ĊĠ Ġelse Ġ{ ĊĠĠĠ Ġ// ĠAny thing Ġelse Ġjust Ġmake Ġsure Ġit 's Ġcapital ized Ġon Ġthe Ġfirst Ġletter . ĊĠĠĠ ĠdisplayName . us Locale Capital ize () ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠDefault Action Group . add Related Type Filter Actions ( viewModel : ĠResource Explorer Toolbar ViewModel ) Ġ{ ĊĠ Ġ// ĠGroup Ġthe Ġsupported Ġfilters Ġby Ġtheir Ġdisplay Ġname . ĠSo Ġthat Ġone Ġmenu - item Ġapplies Ġto Ġthe Ġrelated Ġfilters . ĊĠ Ġval Ġsupported Filters Ġ= ĠviewModel . type Filters Model . get Supported Filters ( viewModel . resourceType ). groupBy Ġ{ Ġit . displayName Ġ} ĊĠ Ġif Ġ( Studio Flags . EXT ENDED _ TYPE _ FILTER S . get () Ġ&& Ġsupported Filters . isNotEmpty ()) Ġ{ ĊĠĠĠ Ġadd Separator () ĊĠĠĠ Ġadd Separator (" By Ġ${ viewModel . resourceType . displayName } ĠType ") ĊĠĠĠ Ġval Ġvisible Filters Ġ= Ġsupported Filters . entries . take ( FILTER S _ DISPLAY _ LIMIT ) ĊĠĠĠ Ġval Ġremaining Filters Ġ= Ġsupported Filters . entries . drop ( FILTER S _ DISPLAY _ LIMIT ) ĊĠĠĠ Ġadd Visible Type Filters ( viewModel , Ġvisible Filters ) ĊĠĠĠ Ġadd Other Menu Type Filters ( viewModel , Ġremaining Filters ) ĊĠĠĠ Ġadd ( Reset Type Filters Action ( viewModel )) ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠDefault Action Group . add Visible Type Filters ( viewModel : ĠResource Explorer Toolbar ViewModel , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrouped Filters : ĠList < Map . Entry < String , ĠList < Type Filter >> >) Ġ{ ĊĠ Ġgrouped Filters . forEach Ġ{ Ġfilters Ġ-> ĊĠĠĠ Ġadd ( Type Filter Action ( viewModel , Ġfilters . key , Ġfilters . value )) ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠDefault Action Group . add Other Menu Type Filters ( viewModel : ĠResource Explorer Toolbar ViewModel , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrouped Filters : ĠList < Map . Entry < String , ĠList < Type Filter >> >) Ġ{ ĊĠ Ġif Ġ( grouped Filters . isNotEmpty ()) Ġ{ ĊĠĠĠ Ġval Ġother Menu Group Ġ= ĠDefault Action Group (" Other ", Ġtrue ) ĊĠĠĠ Ġgrouped Filters . forEach Ġ{ Ġfilters Ġ-> ĊĠĠĠĠĠ Ġother Menu Group . add ( Type Filter Action ( viewModel , Ġfilters . key , Ġfilters . value )) ĊĠĠĠ Ġ} ĊĠĠĠ Ġadd ( other Menu Group ) ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġaction ( addAction : ĠAn Action ) Ġ= ĊĠ ĠAction Button ( addAction , Ġadd Action . template Presentation , Ġ"", ĠBUTTON _ SIZE ) Ċ Ċ private Ġfun ĠGroup Layout . SequentialGroup . add Fixed Size Component ( ĊĠ Ġj Component : ĠJ Component , ĊĠ Ġbaseline : ĠBoolean Ġ= Ġfalse Ċ ): ĠGroup Layout . SequentialGroup Ġ{ ĊĠ Ġval Ġwidth Ġ= Ġj Component . preferred Size . width ĊĠ Ġthis . addComponent ( baseline , Ġj Component , Ġwidth , Ġwidth , Ġwidth ) ĊĠ Ġreturn Ġthis Ċ } ĊĊ Ċ /** Ċ Ġ* ĠCreates Ġa Ġcombo Ġbox Ġfor Ġthe Ġ[ Resource Explorer Toolbar ], Ġshould Ġcontain Ġavailable Ġmodules Ġin Ġthe Ġproject . ĠSelect ing Ġa Ġmodule Ġshould Ċ Ġ* Ġchange Ġthe Ġworking Ġfacet Ġin Ġthe Ġ[ Resource Explorer Toolbar ViewModel ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġmodule Combo Enabled ĠSets Ġthe Ġis Enabled ĠUI Ġproperty . ĠI . e : ĠWhether Ġit 's Ġallowed Ġfor Ġthe Ġuser Ġto Ġselect Ġa Ġdifferent Ġmodule . Ċ Ġ*/ Ċ private Ġfun Ġcreate Module Selection ComboBox ( toolbar ViewModel : ĠResource Explorer Toolbar ViewModel , Ġmodule Combo Enabled : ĠBoolean ) Ġ= ĊĠ ĠCombo Box < String >(). apply Ġ{ ĊĠĠĠ Ġmodel Ġ= ĠCollection ComboBox Model ( toolbar ViewModel . get Available Modules (). to Mutable List ()) ĊĠĠĠ Ġis Enabled Ġ= Ġmodule Combo Enabled ĊĠĠĠ Ġrenderer Ġ= Ġobject Ġ: ĠCo lo red List Cell Renderer < String >() Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġcustomize Cell Renderer ( ĊĠĠĠĠĠĠĠ Ġlist : ĠJ List < out ĠString >, ĊĠĠĠĠĠĠĠ Ġvalue : ĠString , ĊĠĠĠĠĠĠĠ Ġindex : ĠInt , ĊĠĠĠĠĠĠĠ Ġselected : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġhas Focus : ĠBoolean ĊĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġappend ( MODULE _ PREFIX Ġ+ Ġvalue ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġadd Item Listener Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠ Ġif Ġ( event . state Change Ġ== ĠItem Event . SELECTED ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠmoduleName Ġ= Ġevent . item Selectable . selected Objects . first () Ġas ĠString ĊĠĠĠĠĠĠĠ Ġtoolbar ViewModel . on Module Selected ( moduleName ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġadd PopupMenu Listener ( object Ġ: ĠPopup Menu Listener Adapter () Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġpopup Menu Will Be come Visible ( e : ĠPopup Menu Event ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ( model Ġas ĠCollection ComboBox Model ). replaceAll ( toolbar ViewModel . get Available Modules ()) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠ Ġ}