package Ġcom . gitlab . d aring . image . command Ċ Ċ import Ġcom . gitlab . d aring . image . Main Context . command Registry Ċ import Ġcom . gitlab . d aring . image . swing . Base Action Ċ import Ġjavax . swing . J ComboBox Ċ import Ġjavax . swing . J TextArea Ċ import Ġjavax . swing . pl af . basic . Basic Combo Popup Ċ Ċ internal Ġclass ĠCommand PopupMenu ( val Ġfield : ĠJ TextArea ) Ġ{ ĊĊĠĠĠ Ġval Ġcommands Ġ= Ġcommand Registry . commands . sorted () ĊĊĠĠĠ Ġval Ġbox Ġ= ĠJ ComboBox < String >() ĊĠĠĠ Ġval Ġpopup Ġ= Ġbox . ui . get Accessible Child ( null , Ġ 0 ) Ġas ĠBasic Combo Popup ĊĠĠĠ Ġval Ġlist Ġ= Ġpopup . list ĊĊĠĠĠ Ġprivate Ġvar Ġlast Word Ġ= Ġ"" ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcommands . forEach ( box :: addItem ) ĊĠĠĠĠĠĠĠ Ġlist . is Focus able Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠBase Action (" open ", Ġthis :: open ). register ( field , Ġ" control ĠSPACE ") ĊĠĠĠĠĠĠĠ ĠBase Action (" apply ", Ġthis :: apply ). register ( list , Ġ" ENTER ") ĊĠĠĠĠĠĠĠ ĠBase Action (" hide ", Ġthis :: hide ). register ( list , Ġ" ESCAPE ") Ċ // ĠĠĠĠĠĠĠ Ġfield . add Document Listener Ġ{ Ġif Ġ( popup . isVisible ) Ġrefresh () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġopen () Ġ{ ĊĠĠĠĠĠĠĠ Ġrefresh () ĊĠĠĠĠĠĠĠ Ġval Ġcp Ġ= Ġfield . caret . magic Caret Position ĊĠĠĠĠĠĠĠ Ġpopup . show ( field , Ġcp . x , Ġcp . y ) ĊĠĠĠĠĠĠĠ Ġlist . request Focus () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrefresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġfield . getText ( 0 , Ġfield . caret Position ) ĊĠĠĠĠĠĠĠ Ġval Ġw Ġ= Ġtext . take Last While ( Char :: is Letter ) ĊĠĠĠĠĠĠĠ Ġif Ġ( w Ġ== Ġlast Word ) Ġreturn ĊĠĠĠĠĠĠĠ Ġlast Word Ġ= Ġw ĊĠĠĠĠĠĠĠ Ġbox . removeAll Items () ĊĠĠĠĠĠĠĠ Ġcommands . filter Ġ{ Ġit . startsWith ( w ) Ġ}. forEach ( box :: addItem ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġapply () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġw Ġ= Ġlast Word ĊĠĠĠĠĠĠĠ Ġfield . document . remove ( field . caret Position Ġ- Ġw . length , Ġw . length ) ĊĠĠĠĠĠĠĠ Ġfield . insert ("" Ġ+ Ġlist . selected Value , Ġfield . caret Position ) ĊĠĠĠĠĠĠĠ Ġhide () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhide () Ġ{ ĊĠĠĠĠĠĠĠ Ġpopup . hide () ĊĠĠĠĠĠĠĠ Ġfield . request Focus () ĊĠĠĠ Ġ} Ċ Ċ }