package Ġcom . github . iz hang zhi hao . rain bow . br ackets . settings . form Ċ Ċ import Ġcom . github . iz hang zhi hao . rain bow . br ackets . Rain bow Highlight er Ċ import Ġcom . intellij . application . options . colors .* Ċ import Ġcom . intellij . ide . util . Properties Component Ċ import Ġcom . intellij . ui . Color Panel Ċ import Ġcom . intellij . ui . components . JB CheckBox Ċ import Ġcom . intellij . ui . tree Structure . Tree Ċ import Ġcom . intellij . util . EventDispatcher Ċ import Ġorg . j desktop . swing x . tre et able . Default Mutable Tree Table Node Ċ import Ġjava . awt . Color Ċ import Ġjava . awt . event . ActionListener Ċ import Ġjavax . swing . JLabel Ċ import Ġjavax . swing . JPanel Ċ import Ġjavax . swing . tree . Default Mutable TreeNode Ċ import Ġjavax . swing . tree . Default Tree Model Ċ import Ġjavax . swing . tree . Tree Path Ċ import Ġjavax . swing . tree . Tree Selection Model ĊĊ Ċ class ĠR ain bow Options Panel ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġoptions : ĠColor And Font Options , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġschemes Provider : ĠScheme s Panel , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcategory : ĠString Ċ ) Ġ: ĠOptions Panel Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġroot Panel : ĠJPanel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġoptions Tree : ĠTree ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrain bow : ĠJ B CheckBox ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcolor Label 1 : ĠJLabel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcolor Label 2 : ĠJLabel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcolor Label 3 : ĠJLabel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcolor Label 4 : ĠJLabel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcolor Label 5 : ĠJLabel ĊĊĠĠĠ Ġprivate Ġval Ġcolor Labels : ĠArray < JLabel > ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcolor 1 : ĠColor Panel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcolor 2 : ĠColor Panel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcolor 3 : ĠColor Panel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcolor 4 : ĠColor Panel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcolor 5 : ĠColor Panel ĊĊĠĠĠ Ġprivate Ġval Ġcolors : ĠArray < Color Panel > ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġgradient Label : ĠJLabel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcolor 4 Panel : ĠJPanel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcolor 5 Panel : ĠJPanel ĊĊĠĠĠ Ġprivate Ġval Ġproperties : ĠProperties Component Ġ= ĠProperties Component . getInstance () ĊĠĠĠ Ġprivate Ġval Ġevent Dispatcher : ĠEvent Dispatcher < Color And Font Settings Listener > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Dispatcher . create ( Color And Font Settings Listener :: class . java ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcolors Ġ= ĠarrayOf ( color 1 , Ġcolor 2 , Ġcolor 3 , Ġcolor 4 , Ġcolor 5 ) ĊĠĠĠĠĠĠĠ Ġcolor Labels Ġ= ĠarrayOf ( color Label 1 , Ġcolor Label 2 , Ġcolor Label 3 , Ġcolor Label 4 , Ġcolor Label 5 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġaction Listener Ġ= ĠActionListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent Dispatcher . mult ic aster . settings Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . state Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrain bow . addActionListener ( action Listener ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( c Ġin Ġcolors ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc . addActionListener ( action Listener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoptions . addListener ( object Ġ: ĠColor And Font Settings Listener . Abstract () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsettings Changed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! sche mes Provider . are Schemes Loaded ()) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( options Tree . selected Value Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġupdate Ġoptions Ġafter Ġglobal Ġstate Ġchange ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess List ValueChanged () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġoptions Tree . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Root Visible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel Ġ= ĠDefault Tree Model ( Default Mutable Tree Table Node ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselection Model . selection Mode Ġ= ĠTree Selection Model . SINGLE _ TREE _ SELECTION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Tree Selection Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sche mes Provider . are Schemes Loaded ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess List ValueChanged () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Panel (): ĠJPanel Ġ= Ġroot Panel ĊĊĠĠĠ Ġoverride Ġfun Ġadd Listener ( listener : ĠColor And Font Settings Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġevent Dispatcher . addListener ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Options List () Ġ{ ĊĠĠĠĠĠĠĠ Ġfill Options List () ĊĠĠĠĠĠĠĠ Ġprocess List ValueChanged () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġdata Ġclass ĠDescri ptions Node ( val Ġrain bow Name : ĠString , Ġval Ġdescriptions : ĠList < Text Attributes Description >) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġrain bow Name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfill Options List () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnodes Ġ= Ġoptions . current Descriptions . as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġis ĠText Attributes Description Ġ&& Ġit . group Ġ== Ġcategory Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescription Ġ= Ġit Ġas ĠText Attributes Description ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrain bow Name Ġ= Ġdescription . toString (). split (": ")[ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrain bow Name Ġto Ġdescription ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. groupBy Ġ{ Ġit . first Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ( rain bow Name , Ġdescriptions ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Mutable TreeNode ( Descriptions Node ( rain bow Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptions . as Sequence (). map Ġ{ Ġit . second Ġ}. toList (). sorted By Ġ{ Ġit . toString () Ġ})) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġroot Ġ= ĠDefault Mutable TreeNode () ĊĠĠĠĠĠĠĠ Ġfor Ġ( node Ġin Ġnodes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot . add ( node ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ( options Tree . model Ġas ĠDefault Tree Model ). set Root ( root ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprocess List ValueChanged () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdescriptions Node Ġ= Ġoptions Tree . selected Descriptions ĊĠĠĠĠĠĠĠ Ġif Ġ( descriptions Node Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperties . getValue ( SELECTED _ COLOR _ OPTION _ PROPERTY )?. let Ġ{ Ġpre selected Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions Tree . select Option By Rain bow Name ( pre selected ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptions Node Ġ= Ġoptions Tree . selected Descriptions ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdescriptions Node ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperties . setValue ( SELECTED _ COLOR _ OPTION _ PROPERTY , Ġrain bow Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreset ( rain bow Name , Ġdescriptions ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġreset Default () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreset Default () Ġ{ ĊĠĠĠĠĠĠĠ Ġrain bow . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġrain bow . isSelected Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġgradient Label . text Ġ= Ġ" Assign Ġeach Ġbrackets Ġits Ġown Ġcolor Ġfrom Ġthe Ġspectrum Ġbelow :" ĊĊĠĠĠĠĠĠĠ Ġshow All Color Panel () ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġ 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolors [ i ]. isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolors [ i ]. selected Color Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Labels [ i ]. isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreset ( rain bow Name : ĠString , Ġdescriptions : ĠList < Text Attributes Description >) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( rain bow Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR ain bow Highlight er . NAME _ ROUND _ BRACK ETS , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR ain bow Highlight er . NAME _ ANGLE _ BRACK ETS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow All Color Panel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠR ain bow Highlight er . NAME _ S QUARE _ BRACK ETS , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR ain bow Highlight er . NAME _ S QU IG GL Y _ BRACK ETS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow All Color Panel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrain bow On Ġ= ĠR ain bow Highlight er . is Rain bow Enabled ( rain bow Name ) ĊĊĠĠĠĠĠĠĠ Ġrain bow . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġrain bow . isSelected Ġ= Ġrain bow On ĊĠĠĠĠĠĠĠ Ġgradient Label . text Ġ= Ġ" Assign Ġeach Ġ${ rain bow Name . toLowerCase ()} Ġits Ġown Ġcolor Ġfrom Ġthe Ġspectrum Ġbelow :" ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġdescriptions . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolors [ i ]. isEnabled Ġ= Ġrain bow On ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Labels [ i ]. isEnabled Ġ= Ġrain bow On ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolors [ i ]. selected Color Ġ= Ġdescriptions [ i ]. rain bow Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent Dispatcher . mult ic aster . selected Option Changed ( descriptions [ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow All Color Panel () Ġ{ ĊĠĠĠĠĠĠĠ Ġcolor 4 Panel . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġcolor 5 Panel . isVisible Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Ex cess Color Panel () Ġ{ ĊĠĠĠĠĠĠĠ Ġcolor 4 Panel . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġcolor 5 Panel . isVisible Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġapply Changes To Scheme () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscheme Ġ= Ġoptions . selected Scheme ĊĠĠĠĠĠĠĠ Ġval Ġ( rain bow Name , Ġdescriptions ) Ġ= Ġoptions Tree . selected Descriptions Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġwhen Ġ( rain bow Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR ain bow Highlight er . NAME _ ROUND _ BRACK ETS , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR ain bow Highlight er . NAME _ ANGLE _ BRACK ETS , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR ain bow Highlight er . NAME _ S QUARE _ BRACK ETS , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR ain bow Highlight er . NAME _ S QU IG GL Y _ BRACK ETS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR ain bow Highlight er . set Rain bow Enabled ( rain bow Name , Ġrain bow . isSelected ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġdescriptions . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolors [ i ]. selected Color ?. let Ġ{ Ġcolor Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptions [ i ]. rain bow Color Ġ= Ġcolor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptions [ i ]. apply ( scheme ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprocess List Options (): ĠMutable Set < String > Ġ= Ġmutable Set Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR ain bow Highlight er . NAME _ ROUND _ BRACK ETS , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR ain bow Highlight er . NAME _ S QUARE _ BRACK ETS , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR ain bow Highlight er . NAME _ S QU IG GL Y _ BRACK ETS , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR ain bow Highlight er . NAME _ ANGLE _ BRACK ETS ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġshow Option ( option : ĠString ): ĠRunnable ? Ġ= ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠ Ġoptions Tree . select Option By Rain bow Name ( option ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġselect Option ( type To Select : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoptions Tree . select Option ByType ( type To Select ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSELECT ED _ COLOR _ OPTION _ PROPERTY Ġ= Ġ" rain bow . selected . color . option . name " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar ĠText Attributes Description . rain bow Color : ĠColor ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġexternal Foreground ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexternal Foreground Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTree . selected Value : ĠAny ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( last Selected Path Component Ġas ? ĠDefault Mutable TreeNode )?. user Object ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTree . selected Descriptions : ĠDescri ptions Node ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġselected Value Ġas ? ĠDescri ptions Node ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠTree . find Option ( node Object : ĠAny , Ġmatcher : Ġ( Any ) Ġ-> ĠBoolean ): ĠTree Path ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodel Ġ= Ġmodel Ġas ĠDefault Tree Model ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġmodel . getChild Count ( node Object )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Object Ġ= Ġmodel . getChild ( node Object , Ġi ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child Object Ġis ĠDefault Mutable TreeNode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġchild Object . user Object ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( matcher ( data )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠTree Path ( model . getPath To Root ( child Object )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath In Child Ġ= Ġfind Option ( child Object , Ġmatcher ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( path In Child Ġ!= Ġnull ) Ġreturn Ġpath In Child ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠTree . select Option By Rain bow Name ( rain bow Name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselect Path ( find Option ( model . root ) Ġ{ Ġdata Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġis ĠDescri ptions Node ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġrain bow Name . isNotBlank () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġdata . rain bow Name . contains ( rain bow Name , Ġignore Case Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠTree . select Option ByType ( attribute Type : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselect Path ( find Option ( model . root ) Ġ{ Ġdata Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġis ĠDescri ptions Node Ġ&& Ġdata . descriptions . any Ġ{ Ġit . type Ġ== Ġattribute Type Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠTree . select Path ( path : ĠTree Path ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( path Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselection Path Ġ= Ġpath ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Path To Visible ( path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }