/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 Ġ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 . gradle . structure . configur ables . ui . properties Ċ Ċ import Ġcom . android . tools . idea . gradle . structure . configur ables . ui . Rendered ComboBox Ċ import Ġcom . android . tools . idea . gradle . structure . configur ables . ui . Text Renderer Ċ import Ġcom . android . tools . idea . gradle . structure . configur ables . ui . continue On Ed t Ċ import Ġcom . android . tools . idea . gradle . structure . configur ables . ui . invoke Later Ċ import Ġcom . android . tools . idea . gradle . structure . configur ables . ui . to Renderer Ċ import Ġcom . android . tools . idea . gradle . structure . model . Ps Variables Scope Ċ import Ġcom . android . tools . idea . gradle . structure . model . meta . Annotated Ċ import Ġcom . android . tools . idea . gradle . structure . model . meta . Model Property Context Ċ import Ġcom . android . tools . idea . gradle . structure . model . meta . Model Property Core Ċ import Ġcom . android . tools . idea . gradle . structure . model . meta . Model Simple Property Ċ import Ġcom . android . tools . idea . gradle . structure . model . meta . Parsed Value Ċ import Ġcom . android . tools . idea . gradle . structure . model . meta . PropertyValue Ċ import Ġcom . android . tools . idea . gradle . structure . model . meta . Value Annotation Ċ import Ġcom . android . tools . idea . gradle . structure . model . meta . annotated Ċ import Ġcom . android . tools . idea . gradle . structure . model . meta . getText Ċ import Ġcom . android . tools . idea . gradle . structure . model . meta . getValue Ċ import Ġcom . android . tools . idea . gradle . structure . model . meta . value Formatter Ċ import Ġcom . google . common . annotations . Visible ForTesting Ċ import Ġcom . google . common . util . concurrent . List enable Future Ċ import Ġcom . intellij . openapi . ui . ComboBox Ċ import Ġcom . intellij . ui . Simple Colo red Component Ċ import Ġcom . intellij . ui . Simple Text Attributes Ċ import Ġcom . intellij . util . ui . accessibility . Screen Reader Ċ import Ġicons . Studio Icons Ċ import Ġjava . awt . Border Layout Ċ import Ġjava . awt . Component Ċ import Ġjava . awt . Dimension Ċ import Ġjava . awt . Graphics Ċ import Ġjava . awt . event . Focus Event Ċ import Ġjava . awt . event . Focus Listener Ċ import Ġjava . awt . event . Mouse Adapter Ċ import Ġjava . awt . event . MouseEvent Ċ import Ġjavax . swing . Default ComboBox Model Ċ import Ġjavax . swing . Icon Ċ import Ġjavax . swing . J Component Ċ import Ġjavax . swing . JLabel Ċ import Ġjavax . swing . JPanel Ċ import Ġjavax . swing . KeyStroke Ċ import Ġjavax . swing . table . TableCell Editor Ċ Ċ /** Ċ Ġ* ĠA Ġproperty Ġeditor Ġ[ Model Property Editor ] Ġfor Ġproperties Ġof Ġsimple Ġ( not Ġcomplex ) Ġtypes . Ċ Ġ* Ċ Ġ* ĠThis Ġis Ġa Ġ[ ComboBox ] Ġbased Ġeditor Ġallowing Ġmanual Ġtext Ġentry Ġas Ġwell Ġas Ġentry Ġby Ġselecting Ġan Ġitem Ġfrom Ġthe Ġlist Ġof Ġvalues Ġprovided Ġby Ċ Ġ* Ġ[ Model Simple Property . get Known Values ]. ĠText Ġfree Ġtext Ġinput Ġis Ġparsed Ġby Ġ[ Model Simple Property . parse ]. Ċ Ġ*/ Ċ class ĠSimple Property Editor < Property T Ġ: ĠAny , ĠModel Property T Ġ: ĠModel Property Core < Property T >>( ĊĠĠĠ Ġproperty : ĠModel Property T , ĊĠĠĠ Ġproperty Context : ĠModel Property Context < Property T >, ĊĠĠĠ Ġvariables Scope : ĠP s Variables Scope ?, ĊĠĠĠ Ġprivate Ġval Ġextensions : ĠList < Editor Extension Action < Property T , ĠModel Property T >>, ĊĠĠĠ Ġcell Editor : ĠTable Cell Editor ? Ġ= Ġnull , ĊĠĠĠ Ġprivate Ġval Ġis Property Context : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġprivate Ġval Ġlog Value Edited : Ġ() Ġ-> ĠUnit Ġ= Ġ{} Ċ ) Ġ: ĊĠĠĠ ĠProperty Editor Base < Model Property T , ĠProperty T >( property , Ġproperty Context , Ġvariables Scope ), ĊĠĠĠ ĠModel Property Editor < Property T >, ĊĠĠĠ ĠModel Property Editor Factory < Property T , ĠModel Property T > Ġ{ ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġcheck ( extensions . count Ġ{ Ġit . is Main Action Ġ} Ġ<= Ġ 1 ) Ġ{ ĊĠĠĠĠĠ Ġ" Multiple Ġis Main Action Ġ== Ġtrue Ġeditor Ġextensions : Ġ${ extensions . filter Ġ{ Ġit . is Main Action Ġ}}" ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġvar Ġknown Value Render ers : ĠMap < Parsed Value < Property T >, ĠValue Renderer > Ġ= Ġmap Of () ĊĠ Ġprivate Ġvar Ġdisposed Ġ= Ġfalse ĊĠ Ġprivate Ġvar Ġknown Values Future : ĠList enable Future < Unit >? Ġ= Ġnull Ġ Ġ// ĠAc cessed Ġonly Ġfrom Ġthe ĠE DT . ĊĠ Ġprivate Ġval Ġformatter Ġ= Ġproperty Context . value Formatter () ĊĊĠ Ġprivate Ġval Ġrendered ComboBox Ġ= Ġobject Ġ: ĠRender ed ComboBox < Annotated < Parsed Value < Property T >> >( Default ComboBox Model ()) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġget PreferredSize (): ĠDimension Ġ{ ĊĠĠĠĠĠ Ġval Ġdimensions Ġ= Ġsuper . get PreferredSize () ĊĠĠĠĠĠ Ġreturn Ġif Ġ( dimensions . width Ġ< Ġ 2 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠ ĠDimension ( 2 0 0 , Ġdimensions . height ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġdimensions ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġparse Editor Text ( text : ĠString ): ĠAnnot ated < Parsed Value < Property T >> ? Ġ= Ġproperty Context . parse Editor Text ( text ) ĊĊĠĠĠ Ġoverride Ġfun Ġto Editor Text ( an Object : ĠAnnot ated < Parsed Value < Property T >> ?): ĠString Ġ= Ġwhen Ġ( an Object ) Ġ{ ĊĠĠĠĠĠ Ġnull Ġ-> Ġ"" ĊĠĠĠĠĠ Ġ// ĠAn notations Ġare Ġnot Ġpart Ġof Ġthe Ġvalue . ĊĠĠĠĠĠ Ġelse Ġ-> Ġan Object . value . getText ( formatter ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠText Renderer . render Cell ( value : ĠAnnot ated < Parsed Value < Property T >> ?) Ġ{ ĊĠĠĠĠĠ Ġ( value Ġ?: ĠParsed Value . Not Set . annotated ()). render To ( this , Ġformatter , Ġknown Value Render ers ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Editor Extensions (): ĠList < Extension > Ġ= ĊĠĠĠĠĠ Ġextensions ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ! it . is Main Action Ġ} ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġaction Ġ-> ĊĠĠĠĠĠ Ġobject Ġ: ĠExtension Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Icon ( hover ed : ĠBoolean ): ĠIcon Ġ= Ġaction . icon ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Tooltip (): ĠString Ġ= Ġaction . tooltip ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Action OnClick (): ĠRunnable Ġ= ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġaction . invoke ( property , Ġthis @ Simple Property Editor , Ġthis @ Simple Property Editor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Known Values () Ġ{ ĊĠĠĠĠĠ Ġval Ġavailable Variables : ĠList < Annotated < Parsed Value . Set . Parsed < Property T >>> ? Ġ= Ġget Available Variables () ĊĊĠĠĠĠĠ Ġknown Values Future ?. cancel ( false ) ĊĊĠĠĠĠĠ Ġknown Values Future Ġ= ĊĠĠĠĠĠĠĠ Ġproperty Context . get Known Values (). continue On Ed t Ġ{ Ġknown Values Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġval Ġpossible Values Ġ= Ġbuild Known Value Render ers ( known Values , Ġformatter , Ġproperty . defaultValue Getter ?. invoke ()) ĊĠĠĠĠĠĠĠĠĠ Ġknown Value Render ers Ġ= Ġpossible Values ĊĠĠĠĠĠĠĠĠĠ Ġknown Values Ġto Ġpossible Values ĊĠĠĠĠĠĠĠ Ġ}. invoke Later Ġ{ Ġ( known Values , Ġpossible Values ) Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( dis posed ) Ġreturn @ invoke Later ĊĠĠĠĠĠĠĠĠĠ Ġset Known Values ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( possible Values . keys . toList (). map Ġ{ Ġit . annotated () Ġ} Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġavailable Variables ?. filter Ġ{ Ġknown Values . is Suit able Variable ( it ) Ġ}. or Empty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġknown Values Future Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetStatus ( status : ĠValue Renderer ) Ġ{ ĊĠĠĠĠĠ Ġstatus Component . clear () ĊĠĠĠĠĠ Ġstatus . render To ( status Component Renderer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetStatus Renderer ( value Annotation : ĠValue Annotation ?): ĠValue Renderer Ġ= ĊĠĠĠĠĠ Ġ( value Annotation Ġas ? ĠValue Annotation . Error ). let Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġobject : ĠValue Renderer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrender To ( text Renderer : ĠText Renderer ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Renderer . append ( it . message , ĠSimple Text Attributes . ERROR _ ATTRIBUTES ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġobject : ĠValue Renderer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrender To ( text Renderer : ĠText Renderer ): ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreload Value ( annotated PropertyValue : ĠAnnot ated < PropertyValue < Property T >>) Ġ{ ĊĠĠĠĠĠ ĠsetValue ( annotated PropertyValue . value . parsed Value . let Ġ{ Ġannotated Parsed Value Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( annotated Parsed Value . annotation Ġ!= Ġnull Ġ&& Ġknown Value Render ers . containsKey ( annotated Parsed Value . value )) ĊĠĠĠĠĠĠĠĠĠ Ġannotated Parsed Value . value . annotated () ĊĠĠĠĠĠĠĠ Ġelse Ġannotated Parsed Value ĊĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠ ĠsetStatus ( getStatus Renderer ( annotated PropertyValue . annotation )) ĊĠĠĠĠĠ Ġupdate Modified () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġapply Changes ( annotated Value : ĠAnnot ated < Parsed Value < Property T >>) Ġ{ ĊĠĠĠĠĠ Ġproperty . set Parsed Value ( annotated Value . value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Editor Changed () Ġ= ĊĠĠĠĠĠ Ġwhen Ġ( update Property ()) Ġ{ ĊĠĠĠĠĠĠĠ ĠUpdate Property Outcome . UPDATED Ġ-> Ġreload Value ( property . getValue ()) ĊĠĠĠĠĠĠĠ ĠUpdate Property Outcome . NOT _ CHANGED Ġ-> ĠUnit ĊĠĠĠĠĠĠĠ ĠUpdate Property Outcome . INVALID Ġ-> ĠUnit ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Available Variables (): ĠList < Annotated < Parsed Value . Set . Parsed < Property T >>> ? Ġ= ĊĠĠĠĠĠ Ġvariables Scope ?. get Available Variables For ( property Context ) ĊĊĠĠĠ Ġfun Ġadd Focus G ained Listener ( listener : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠ Ġval Ġfocus Listener Ġ= Ġobject Ġ: ĠFocus Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfocus Lost ( e : ĠFocus Event ?) Ġ= ĠUnit ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfocus G ained ( e : ĠFocus Event ?) Ġ= Ġlistener () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġeditor . editor Component . add Focus Listener ( focus Listener ) ĊĠĠĠĠĠ Ġadd Focus Listener ( focus Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġ[ true ] Ġif Ġthe Ġvalue Ġcurrently Ġbeing Ġedited Ġin Ġthe Ġcombo - box Ġeditor Ġdiffers Ġthe Ġlast Ġmanually Ġset Ġvalue . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ( Returns Ġ[ false ] Ġif Ġthe Ġeditor Ġhas Ġnot Ġyet Ġbeen Ġinitialized ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Editor Changed () Ġ= Ġlast Value Set Ġ!= Ġnull Ġ&& ĠgetValue (). value Ġ!= Ġlast Value Set ?. value ĊĊĠĠĠ Ġprivate Ġvar Ġdelayed Action Pending Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġset Popup Visible ( visible : ĠBoolean ) Ġ{ ĊĠĠĠĠĠ Ġsuper . set Popup Visible ( visible ) ĊĠĠĠĠĠ Ġif Ġ(! visible Ġ&& Ġdelayed Action Pending ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdelayed Action Pending Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ(! dis posed Ġ&& Ġ! being Loaded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġon Editor Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠ Ġif Ġ( cell Editor Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠDo Ġnot Ġcall Ġregister TableCell Editor ( cell Editor ) Ġwhich Ġregisters Ġ" J ComboBox . is TableCell Editor " Ġproperty Ġwhich ĊĠĠĠĠĠĠĠ Ġ// Ġbreaks Ġproperty Ġeditors . ĊĠĠĠĠĠĠĠ Ġput Client Property ( TABLE _ CELL _ EDITOR _ PROPERTY , Ġcell Editor ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġset Editable ( true ) ĊĊĠĠĠĠĠ Ġadd ActionListener Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! dis posed Ġ&& Ġ! being Loaded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( super . is Popup Visible ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelayed Action Pending Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Editor Changed () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġadd Focus G ained Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! dis posed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġreload IfNot Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġadd Focus Listener ( listener : ĠFocus Listener ) Ġ{ ĊĠĠĠ Ġrendered ComboBox . editor . editor Component . add Focus Listener ( listener ) ĊĠ Ġ} ĊĊĠ Ġ@ Visible ForTesting ĊĠ Ġval Ġtest Rendered ComboBox : ĠRender ed ComboBox < Annotated < Parsed Value < Property T >>> Ġ= Ġrendered ComboBox ĊĊĠ Ġoverride Ġval Ġcomponent : ĠJ Component Ġ= ĠEditor Wrapper ( property ) ĊĊĠ Ġinner Ġclass ĠEditor Wrapper ( private Ġval Ġproperty : ĠModel Property T ) Ġ: ĠJPanel ( Border Layout ()) Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠ Ġis Focus able Ġ= Ġfalse ĊĠĠĠĠĠ Ġadd ( rendered ComboBox ) ĊĠĠĠĠĠ Ġadd ( create Mini Button ( extensions . first OrNull Ġ{ Ġit . is Main Action Ġ}), ĠBorderLayout . EAST ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Mini Button ( extension Action : ĠEditor Extension Action < Property T , ĠModel Property T >? ): ĠJ Component Ġ{ ĊĠĠĠĠĠ Ġfun Ġinvoke Action () Ġ= Ġextension Action ?. invoke ( property , Ġthis @ Simple Property Editor , Ġthis @ Simple Property Editor ) ĊĠĠĠĠĠ Ġreturn ĠJLabel (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( extension Action Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġis Focus able Ġ= ĠScreen Reader . isActive () ĊĠĠĠĠĠĠĠĠĠ Ġicon Ġ= ĠStudio Icons . Common . PROPERTY _ UN BOUND _ LARGE ĊĠĠĠĠĠĠĠĠĠ Ġtool Tip Text Ġ= Ġextension Action . tooltip Ġ+ Ġ" Ġ( Shift + Enter )" ĊĠĠĠĠĠĠĠĠĠ Ġadd Focus Listener ( object Ġ: ĠFocus Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfocus Lost ( e : ĠFocus Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Ġ= ĠStudio Icons . Common . PROPERTY _ UN BOUND _ LARGE ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfocus G ained ( e : ĠFocus Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Ġ= ĠStudio Icons . Common . PROPERTY _ UN BOUND _ FOCUS _ LARGE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠ Ġadd Mouse Listener ( object Ġ: ĠMouse Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmouse Pressed ( event : ĠMouseEvent ) Ġ{ Ġinvoke Action () Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠ Ġregister Keyboard Action ({ Ġinvoke Action () Ġ}, ĠKey Stroke . getKey Stroke (" SPACE "), ĠWHEN _ ANCE STOR _ OF _ FOC USED _ COMPONENT ) ĊĠĠĠĠĠĠĠĠĠ Ġthis @ Editor Wrapper ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register Keyboard Action ({ Ġinvoke Action () Ġ}, ĠKey Stroke . getKey Stroke (" shift ĠENTER "), ĠWHEN _ ANCE STOR _ OF _ FOC USED _ COMPONENT ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Property Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicon Ġ= Ġobject Ġ: ĠIcon Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Icon Height (): ĠInt Ġ= Ġ 2 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Icon Width (): ĠInt Ġ= Ġ 1 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġpaint Icon ( c : ĠComponent ?, Ġg : ĠGraphics ?, Ġx : ĠInt , Ġy : ĠInt ) Ġ= ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrequest Focus () Ġ{ ĊĠĠĠĠĠ Ġrendered ComboBox . request Focus () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġval Ġstatus Component : ĠSimple Colo red Component Ġ= ĠSimple Colo red Component () ĊĠ Ġprivate Ġval Ġstatus Component Renderer Ġ= Ġstatus Component . to Renderer () ĊĊĠ Ġoverride Ġfun ĠgetValue (): ĠAnnot ated < Parsed Value < Property T >> Ġ= ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġ( rendered ComboBox . editor . item Ġas ĠAnnot ated < Parsed Value < Property T >>) ĊĊĠ Ġoverride Ġfun Ġupdate Property (): ĠUpdate Property Outcome Ġ{ ĊĠĠĠ Ġif Ġ( dis posed ) Ġthrow ĠIllegalStateException () ĊĠĠĠ Ġ// ĠIt Ġis Ġimportant Ġto Ġavoid Ġapplying Ġthe Ġunchanged Ġvalues Ġsince Ġthe Ġapplication ĊĠĠĠ Ġ// Ġprocess Ġwhile Ġnot Ġintended Ġmay Ġchange Ġthe Ġ" psi "- representation Ġof Ġthe Ġvalue . ĊĠĠĠ Ġ// Ġit Ġis Ġespecially Ġimportant Ġin Ġthe Ġcase Ġof Ġinvalid / un parsed Ġvalues . ĊĠĠĠ Ġif Ġ( rendered ComboBox . is Editor Changed ()) Ġ{ ĊĠĠĠĠĠ Ġval Ġannotated Value Ġ= ĠgetValue () ĊĠĠĠĠĠ Ġif Ġ( annotated Value . annotation Ġis ĠValue Annotation . Error ) Ġreturn ĠUpdate Property Outcome . INVALID ĊĠĠĠĠĠ Ġrendered ComboBox . apply Changes ( annotated Value ) ĊĠĠĠĠĠ Ġlog Value Edited () ĊĠĠĠĠĠ Ġreturn ĠUpdate Property Outcome . UPDATED ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠUpdate Property Outcome . NOT _ CHANGED ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġdispose () Ġ{ ĊĠĠĠ Ġknown Values Future ?. cancel ( false ) ĊĠĠĠ Ġdisposed Ġ= Ġtrue ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġreload () Ġ{ ĊĠĠĠ Ġrendered ComboBox . load Known Values () ĊĠĠĠ Ġrendered ComboBox . reload Value ( property . getValue ()) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġreload IfNot Changed () Ġ{ ĊĠĠĠ Ġrendered ComboBox . load Known Values () ĊĠĠĠ Ġif Ġ(! rendered ComboBox . is Editor Changed ()) Ġ{ Ġ Ġ// ĠDo Ġnot Ġoverride Ġa Ġnot Ġapplied Ġinvalid Ġvalue . ĊĠĠĠĠĠ Ġrendered ComboBox . reload Value ( property . getValue ()) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate New ( ĊĠĠĠĠĠ Ġproperty : ĠModel Property T , ĊĠĠĠĠĠ Ġcell Editor : ĠTable Cell Editor ?, ĊĠĠĠĠĠ Ġis Property Context : ĠBoolean ĊĠ Ġ): ĠModel Property Editor < Property T > Ġ= ĊĠĠĠĠĠ Ġsimple Property Editor ( property , Ġproperty Context , Ġvariables Scope , Ġextensions , Ġis Property Context , Ġcell Editor ) ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġreload () ĊĠ Ġ} Ċ } Ċ Ċ fun Ġ< Model Property T Ġ: ĠModel Property Core < Property T >, ĠProperty T Ġ: ĠAny > Ġsimple Property Editor ( ĊĠĠĠ Ġbound Property : ĠModel Property T , ĊĠĠĠ Ġbound Property Context : ĠModel Property Context < Property T >, ĊĠĠĠ Ġvariables Scope : ĠP s Variables Scope ?, ĊĠĠĠ Ġextensions : ĠCollection < Editor Extension Action < Property T , ĠModel Property T >>, ĊĠĠĠ Ġis Property Context : ĠBoolean , ĊĠĠĠ Ġcell Editor : ĠTable Cell Editor ?, ĊĠĠĠ Ġlog Value Edited : Ġ() Ġ-> ĠUnit Ġ= Ġ{ Ġ/* Ġno Ġusage Ġtracking Ġ*/ Ġ} Ċ ): ĠSimple Property Editor < Property T , ĠModel Property T > Ġ= ĊĠĠĠ ĠSimple Property Editor ( ĊĠĠĠĠĠĠĠ Ġbound Property , ĊĠĠĠĠĠĠĠ Ġbound Property Context , ĊĠĠĠĠĠĠĠ Ġvariables Scope , ĊĠĠĠĠĠĠĠ Ġextensions . filter Ġ{ Ġit . is Available For ( bound Property , Ġis Property Context ) Ġ}, ĊĠĠĠĠĠĠĠ Ġcell Editor , ĊĠĠĠĠĠĠĠ Ġis Property Context , ĊĠĠĠĠĠĠĠ Ġlog Value Edited ) Ċ