// ĠCopyright Ġ 2 0 0 0 - 2 0 2 0 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ @ file : Suppress (" Enum Entry Name ") Ċ Ċ package Ġcom . intellij . ui . messages Ċ Ċ import Ġcom . intellij . openapi . components . Service Ċ import Ġcom . intellij . openapi . components . service Ċ import Ġcom . intellij . openapi . diagnostic . Logger Ċ import Ġcom . intellij . openapi . ui . Dialog Wrapper . DoNot Ask Option Ċ import Ġcom . intellij . openapi . ui . Messages Ċ import Ġcom . intellij . openapi . ui . Messages . Yes No Cancel Result Ċ import Ġcom . intellij . openapi . ui . Messages . Yes No Result Ċ import Ġcom . intellij . openapi . util . System Info Ċ import Ġcom . intellij . openapi . util . registry . Registry Ċ import Ġcom . intellij . openapi . util . text . StringUtil Ċ import Ġcom . intellij . openapi . wm . Ide Focus Manager Ċ import Ġcom . intellij . ui . Component Util Ċ import Ġcom . intellij . ui . Message Exception Ċ import Ġcom . intellij . ui . mac . Mac Messages Ċ import Ġcom . intellij . ui . mac . foundation . Foundation Ċ import Ġcom . intellij . ui . mac . foundation . ID Ċ import Ġcom . intellij . ui . mac . foundation . Mac Util Ċ import Ġcom . intellij . util . ui . UI Util Ċ import Ġcom . sun . j na . Callback Ċ import Ġit . un imi . ds i . fast util . objects . Object 2 Int Open HashMap Ċ import Ġorg . jetbrains . annotations . NotNull Ċ import Ġorg . jetbrains . annotations . Nullable Ċ import Ġjava . awt . AW T Event Ċ import Ġjava . awt . Component Ċ import Ġjava . awt . Window Ċ import Ġjava . awt . event . Input Event Ċ import Ġjava . awt . event . Window Adapter Ċ import Ġjava . awt . event . Window Event Ċ import Ġjava . util .* Ċ Ċ internal Ġclass ĠMac Message Manager Provider Impl Ġ: ĠMac Messages . Mac Message Manager Provider Ġ{ ĊĠ Ġoverride Ġfun ĠgetMessage Manager (): ĠMac Messages Ġ{ ĊĠĠĠ Ġif Ġ(! System Info . is MacOS Big Sur Ġ|| ĠRegistry .` is ` (" ide . mac . message . sheets . java . em ulation . dialogs ", Ġtrue )) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġservice < JB Mac Messages >() ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠ Ġreturn Ġservice < Native Mac Message Manager >() ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ private Ġval ĠLOG Ġ= ĠLogger . getInstance ("# com . intellij . ui . mac . Mac Messages ") Ċ Ċ private Ġclass ĠMessage Result ( val Ġreturn Code : ĠInt , Ġval Ġsuppress : ĠBoolean ) Ċ Ċ @ Service Ċ private Ġclass ĠNative Mac Message Manager Ġ: ĠMac Messages () Ġ{ ĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlock Ġ= ĠAny () ĊĠĠĠ Ġprivate Ġval Ġblocked Document Roots Ġ= ĠObject 2 Int Open HashMap < Window >() ĊĠĠĠ Ġprivate Ġval Ġid To Window Ġ= ĠHashMap < Long , ĠWindow >() ĊĊĠĠĠ Ġprivate Ġval Ġresults From Document Root : ĠMutable Map < Window , ĠMessage Result > Ġ= ĠHashMap () ĊĠĠĠ Ġprivate Ġval Ġwindow To Queue Ġ= ĠHashMap < Window , ĠMac Messages Queue < Runnable >>() ĊĊĠĠĠ Ġprivate Ġval Ġalert Did End Ġ= Ġobject Ġ: ĠCallback Ġ{ ĊĠĠĠĠĠ Ġ@ Suppress (" UNUSED _ PARAMETER ", Ġ" unused ") ĊĠĠĠĠĠ Ġfun Ġcallback ( self : ĠID ?, Ġselector : ĠString ?, Ġalert : ĠID ?, Ġreturn Code : ĠID , Ġcontext Info : ĠID ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġdocument Root Ġ= Ġid To Window . get ( context Info . to Long ()) !! ĊĠĠĠĠĠĠĠĠĠ Ġprocess Result ( document Root ) ĊĠĠĠĠĠĠĠĠĠ Ġval Ġsuppress State Ġ= ĠFoundation . invoke ( Foundation . invoke ( alert , Ġ" sup pression Button "), Ġ" state ") ĊĠĠĠĠĠĠĠĠĠ Ġresults From Document Root . put ( document Root , ĠMessage Result ( return Code . toInt (), Ġsuppress State . toInt () Ġ== Ġ 1 )) ĊĠĠĠĠĠĠĠĠĠ Ġwindow To Queue . get ( id To Window . get ( context Info . to Long ()) !! ) !!. run From Queue () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠFoundation . cf Release ( self ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠVARIABLE _ BUTTON S _ ALERT _ PANEL Ġ= Ġobject Ġ: ĠCallback Ġ{ ĊĠĠĠĠĠ Ġ@ Suppress (" UNUSED _ PARAMETER ", Ġ" unused ") ĊĠĠĠĠĠ Ġfun Ġcallback ( self : ĠID ?, Ġselector : ĠString ?, Ġparams : ĠID ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= ĠFoundation . invoke ( params , Ġ" object AtIndex :", Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= ĠFoundation . invoke ( params , Ġ" object AtIndex :", Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġfocused Window Ġ= ĠFoundation . invoke ( params , Ġ" object AtIndex :", Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġalert Style Ġ= ĠFoundation . invoke ( params , Ġ" object AtIndex :", Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġval Ġdo Not Ask Text Ġ= ĠFoundation . invoke ( params , Ġ" object AtIndex :", Ġ 5 ) ĊĠĠĠĠĠĠĠ Ġval Ġdefault Option Index Ġ= ĠFoundation . toString Via UTF 8 ( Foundation . invoke ( params , Ġ" object AtIndex :", Ġ 6 )) !!. toInt () ĊĠĠĠĠĠĠĠ Ġ// val Ġfocused Option Index Ġ= ĠFoundation . toString Via UTF 8 ( Foundation . invoke ( params , Ġ" object AtIndex :", Ġ 7 )) !!. toInt () ĊĠĠĠĠĠĠĠ Ġval Ġbuttons Ġ= ĠFoundation . invoke ( params , Ġ" object AtIndex :", Ġ 8 ) ĊĠĠĠĠĠĠĠ Ġval Ġdo Not Ask Checked Ġ= ĠFoundation . invoke ( params , Ġ" object AtIndex :", Ġ 9 ) ĊĠĠĠĠĠĠĠ Ġval Ġalert Ġ= ĠFoundation . invoke ( Foundation . invoke (" NS Alert ", Ġ" alloc "), Ġ" init ") ĊĠĠĠĠĠĠĠ ĠFoundation . invoke ( alert , Ġ" setMessage Text :", Ġtitle ) ĊĠĠĠĠĠĠĠ ĠFoundation . invoke ( alert , Ġ" set Inform ative Text :", Ġmessage ) ĊĠĠĠĠĠĠĠ Ġif Ġ(" error " Ġ== ĠFoundation . toString Via UTF 8 ( alert Style )) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// ĠN SC ritical Alert Style Ġ= Ġ 2 ĊĠĠĠĠĠĠĠĠĠ ĠFoundation . invoke ( alert , Ġ" set Alert Style :", Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbutton Enumerator Ġ= ĠFoundation . invoke ( buttons , Ġ" object Enumerator ") ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġbutton Ġ= ĠFoundation . invoke ( button Enumerator , Ġ" next Object ") ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( button . toInt () Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ ĠFoundation . invoke ( alert , Ġ" add Button With Title :", Ġbutton ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( default Option Index Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġbutton Ġ= ĠFoundation . invoke ( Foundation . invoke ( alert , Ġ" buttons "), Ġ" object AtIndex :", Ġdefault Option Index ) ĊĠĠĠĠĠĠĠĠĠ ĠFoundation . invoke ( Foundation . invoke ( alert , Ġ" window "), Ġ" setDefault Button Cell :", ĠFoundation . invoke ( button , Ġ" cell ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġit Ġseems Ġlike Ġasking Ġfor Ġfocus Ġwill Ġcause Ġjava Ġto Ġgo Ġand Ġquery Ġfocus Ġowner Ġtoo , Ġwhich Ġmay Ġcause Ġdead Ġlocks Ġon Ġmain - thread ĊĠĠĠĠĠĠĠ Ġ// if Ġ( focused Option Index Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ Ġinvoke ( invoke ( alert , Ġ" window "), Ġ" make First Responder :", ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġinvoke ( invoke ( alert , Ġ" buttons "), Ġ" object AtIndex :", Ġfocused Option Index )); ĊĠĠĠĠĠĠĠ Ġ//} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ Ġint Ġcount Ġ= Ġinvoke ( buttons , Ġ" count "). intValue (); ĊĠĠĠĠĠĠĠ Ġ// Ġ Ġinvoke ( invoke ( alert , Ġ" window "), Ġ" make First Responder :", ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġinvoke ( invoke ( alert , Ġ" buttons "), Ġ" object AtIndex :", Ġcount Ġ== Ġ 1 Ġ? Ġ 0 Ġ: Ġ 1 )); ĊĠĠĠĠĠĠĠ Ġ//} ĊĠĠĠĠĠĠĠ Ġenable Escape To Close The Message ( alert ) ĊĠĠĠĠĠĠĠ Ġval Ġdo Not Ask Ġ= ĠFoundation . toString Via UTF 8 ( do Not Ask Text ) ĊĠĠĠĠĠĠĠ Ġif Ġ( do Not Ask Ġ!= Ġ"- 1 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠFoundation . invoke ( alert , Ġ" set Shows Sup pression Button :", Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠ ĠFoundation . invoke ( Foundation . invoke ( alert , Ġ" sup pression Button "), Ġ" setTitle :", Ġdo Not Ask Text ) ĊĠĠĠĠĠĠĠĠĠ ĠFoundation . invoke ( Foundation . invoke ( alert , Ġ" sup pression Button "), Ġ" setState :", Ġ" checked " Ġ== ĠFoundation . toString Via UTF 8 ( do Not Ask Checked )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠFoundation . invoke ( alert , Ġ" begin Sheet Modal For Window : modal Delegate : did End Selector : context Info :", Ġfocused Window , Ġself , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFoundation . create Selector (" alert Did End : return Code : context Info :" ), Ġfocused Window ) ĊĠĠĠĠĠĠĠ ĠFoundation . cf Release ( alert ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠS IMP LE _ ALERT _ PANEL : ĠCallback Ġ= Ġobject Ġ: ĠCallback Ġ{ ĊĠĠĠĠĠ Ġ@ Suppress (" UNUSED _ PARAMETER ", Ġ" unused ") ĊĠĠĠĠĠ Ġfun Ġcallback ( self : ĠID ?, Ġselector : ĠString ?, Ġparams : ĠID ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= ĠFoundation . invoke ( params , Ġ" object AtIndex :", Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġdefault Text Ġ= ĠFoundation . invoke ( params , Ġ" object AtIndex :", Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġother Text Ġ= ĠFoundation . invoke ( params , Ġ" object AtIndex :", Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġalternate Text Ġ= ĠFoundation . invoke ( params , Ġ" object AtIndex :", Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= ĠFoundation . invoke ( params , Ġ" object AtIndex :", Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġval Ġfocused Window Ġ= ĠFoundation . invoke ( params , Ġ" object AtIndex :", Ġ 5 ) ĊĠĠĠĠĠĠĠ Ġval Ġalert Style Ġ= ĠFoundation . invoke ( params , Ġ" object AtIndex :", Ġ 7 ) ĊĠĠĠĠĠĠĠ Ġval Ġdo Not Ask Text Ġ= ĠFoundation . invoke ( params , Ġ" object AtIndex :", Ġ 8 ) ĊĠĠĠĠĠĠĠ Ġval Ġdo Not Ask Checked Ġ= ĠFoundation . invoke ( params , Ġ" object AtIndex :", Ġ 9 ) ĊĠĠĠĠĠĠĠ Ġval Ġalternate Exist Ġ= Ġ"- 1 " Ġ!= ĠFoundation . toString Via UTF 8 ( alternate Text ) ĊĠĠĠĠĠĠĠ Ġval Ġother Exist Ġ= Ġ"- 1 " Ġ!= ĠFoundation . toString Via UTF 8 ( other Text ) ĊĠĠĠĠĠĠĠ Ġval Ġalert Ġ= ĠFoundation . invoke (" NS Alert ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" alert With Message Text : default Button : alternate Button : other Button : inform ative Text With Format :", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle , Ġdefault Text , Ġif Ġ( alternate Exist ) Ġalternate Text Ġelse Ġnull , Ġif Ġ( other Exist ) Ġother Text Ġelse Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage ) ĊĠĠĠĠĠĠĠ Ġif Ġ( Foundation . toString Via UTF 8 ( alert Style ) Ġ== Ġ" error ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// ĠN SC ritical Alert Style Ġ= Ġ 2 ĊĠĠĠĠĠĠĠĠĠ ĠFoundation . invoke ( alert , Ġ" set Alert Style :", Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġit Ġseems Ġlike Ġasking Ġfor Ġfocus Ġwill Ġcause Ġjava Ġto Ġgo Ġand Ġquery Ġfocus Ġowner Ġtoo , Ġwhich Ġmay Ġcause Ġdead Ġlocks Ġon Ġmain - thread ĊĠĠĠĠĠĠĠ Ġ// ID Ġwindow Ġ= Ġinvoke ( alert , Ġ" window "); ĊĠĠĠĠĠĠĠ Ġ// invoke ( window , Ġ" make First Responder :", ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠ Ġinvoke ( invoke ( alert , Ġ" buttons "), Ġ" object AtIndex :", Ġalternate Exist Ġ? Ġ 2 Ġ: Ġother Exist Ġ? Ġ 1 Ġ: Ġ 0 )); ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġif Ġ(! alternate Exist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġenable Escape To Close The Message ( alert ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdo Not Ask Ġ= ĠFoundation . toString Via UTF 8 ( do Not Ask Text ) ĊĠĠĠĠĠĠĠ Ġif Ġ(" - 1 " Ġ!= Ġdo Not Ask ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠFoundation . invoke ( alert , Ġ" set Shows Sup pression Button :", Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠ ĠFoundation . invoke ( Foundation . invoke ( alert , Ġ" sup pression Button "), Ġ" setTitle :", Ġdo Not Ask Text ) ĊĠĠĠĠĠĠĠĠĠ ĠFoundation . invoke ( Foundation . invoke ( alert , Ġ" sup pression Button "), Ġ" setState :", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" checked " Ġ== ĠFoundation . toString Via UTF 8 ( do Not Ask Checked )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠFoundation . invoke ( alert , Ġ" begin Sheet Modal For Window : modal Delegate : did End Selector : context Info :", Ġfocused Window , Ġself , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFoundation . create Selector (" alert Did End : return Code : context Info :" ), Ġfocused Window ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġwindow Did Be come Main Callback Ġ= Ġobject Ġ: ĠCallback Ġ{ ĊĠĠĠĠĠ Ġ@ Suppress (" UNUSED _ PARAMETER ", Ġ" unused ") ĊĠĠĠĠĠ Ġfun Ġcallback ( self : ĠID , Ġns Notification : ĠID ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ(! id To Window . keys . contains ( self . to Long ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠFoundation . invoke ( self , Ġ" old Window Did Be come Main :", Ġns Notification ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠ Ġval Ġdelegate Class Ġ= ĠFoundation . allocate Obj c Class Pair ( Foundation . get Obj c Class (" NSObject "), Ġ" NS Alert Delegate _ ") ĊĠĠĠĠĠ Ġif Ġ(! Foundation . add Method ( delegate Class , ĠFoundation . create Selector (" alert Did End : return Code : context Info :" ), Ġalert Did End , Ġ" v * ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Unable Ġto Ġadd Ġmethod Ġto Ġobjective - c Ġdelegate Ġclass !") ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ(! Foundation . add Method ( delegate Class , ĠFoundation . create Selector (" show Sheet :" ), ĠS IMP LE _ ALERT _ PANEL , Ġ" v * ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Unable Ġto Ġadd Ġmethod Ġto Ġobjective - c Ġdelegate Ġclass !") ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ(! Foundation . add Method ( delegate Class , ĠFoundation . create Selector (" show Variable Buttons Sheet :" ), ĠVARIABLE _ BUTTON S _ ALERT _ PANEL , Ġ" v * ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Unable Ġto Ġadd Ġmethod Ġto Ġobjective - c Ġdelegate Ġclass !") ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ ĠFoundation . register Obj c Class Pair ( delegate Class ) ĊĠĠĠĠĠĠĠ Ġval Ġa wt Window Ġ= ĠFoundation . get Obj c Class (" AW T Window ") ĊĠĠĠĠĠĠĠ Ġval Ġwindow Will Enter FullScreen Method Ġ= ĠFoundation . create Selector (" window Did Be come Main :") ĊĠĠĠĠĠĠĠ Ġval Ġoriginal Window Will Enter FullScreen Ġ= ĠFoundation . class _ replace Method ( awt Window , Ġwindow Will Enter FullScreen Method , Ġwindow Did Be come Main Callback , Ġ" v @ :: @ ") ĊĠĠĠĠĠĠĠ ĠFoundation . add Method ByID ( awt Window , ĠFoundation . create Selector (" old Window Did Be come Main :" ), Ġoriginal Window Will Enter FullScreen , Ġ" v @ :: @ ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprocess Result ( window : ĠWindow ) Ġ{ ĊĠĠĠĠĠ Ġsynchronized ( lock ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! blocked Document Roots . containsKey ( window )) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Window Ġshould Ġbe Ġin Ġth Ġlist .") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġopened Alerts For Window Ġ= Ġblocked Document Roots . getInt ( window ) ĊĠĠĠĠĠĠĠ Ġif Ġ( opened Alerts For Window Ġ< Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Should Ġbe Ġat Ġleast Ġone Ġwindow Ġin Ġthe Ġlist ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( opened Alerts For Window Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// Ġthe Ġlast Ġalert ĊĠĠĠĠĠĠĠĠĠ Ġblocked Document Roots . remove Int ( window ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġblocked Document Roots . put ( window , Ġopened Alerts For Window Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpump Events Document Ex clus ively ( document Root : ĠWindow ) Ġ{ ĊĠĠĠĠĠ Ġval Ġmessage Number Ġ= Ġblocked Document Roots . getInt ( document Root ) ĊĠĠĠĠĠ Ġval Ġthe Queue Ġ= Ġdocument Root . toolkit . system EventQueue ĊĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġevent Ġ= Ġthe Queue . next Event ĊĠĠĠĠĠĠĠĠĠ Ġvar Ġevent Ok Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( event Ġis ĠInput Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Ġ= Ġevent . getSource () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( source Ġis ĠComponent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwindow Ġ= Ġfind Document Root ( source ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( window Ġ=== Ġdocument Root ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Ok Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . consume () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( event Ok ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġthe Queue . java Class . getDeclared Method (" dispatchEvent ", ĠA WT Event :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod . invoke ( the Queue , Ġevent ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcatch Ġ( e : ĠMessage Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠLOG . error ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġwhile Ġ( is Blocked Document Root ( document Root , Ġmessage Number )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Blocked Document Root ( document Root : ĠWindow ?, Ġmessage Number : ĠInt ?): ĠBoolean Ġ{ ĊĠĠĠĠĠ Ġsynchronized ( lock ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmessage Number Ġ== Ġblocked Document Roots . getInt ( document Root ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Modal ( window : ĠWindow , Ġwindow Id : ĠID ) Ġ{ ĊĠĠĠĠĠ Ġval Ġwindow Pointer Ġ= Ġwindow Id . to Long () ĊĠĠĠĠĠ Ġsynchronized ( lock ) Ġ{ ĊĠĠĠĠĠĠĠ Ġid To Window . put ( window Pointer , Ġwindow ) ĊĠĠĠĠĠĠĠ Ġblocked Document Roots . addTo ( window , Ġ 1 ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġpump Events Document Ex clus ively ( window ) ĊĠĠĠĠĠ Ġsynchronized ( lock ) Ġ{ ĊĠĠĠĠĠĠĠ Ġid To Window . remove ( window Pointer ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Yes No Cancel Result ĊĠĠĠ Ġfun Ġshow AlertDialog ( title : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyes Text : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalternate Text : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġno Text : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow : ĠWindow ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Style : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Not Ask Option : ĠDo Not Ask Option ? Ġ= Ġnull ): ĠInt Ġ{ ĊĠĠĠĠĠ Ġval Ġeffective Window Ġ= Ġwindow Ġ?: ĠJ B Mac Messages . get Fore most Window () ĊĠĠĠĠĠ Ġrun And Release Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĠDialog Params Wrapper ( Dialog Type . alert ) ĊĠĠĠĠĠĠĠ Ġparams . add ( Common Dialog Param Type . title , Ġtitle ) ĊĠĠĠĠĠĠĠ Ġparams . remove Mnemonic And Add ( AlertDialog Param Type . default Text , Ġyes Text ) ĊĠĠĠĠĠĠĠ Ġparams . remove Mnemonic And Add ( AlertDialog Param Type . alternate Text , Ġno Text ) ĊĠĠĠĠĠĠĠ Ġparams . remove Mnemonic And Add ( AlertDialog Param Type . other Text , Ġalternate Text ) ĊĠĠĠĠĠĠĠ Ġ// Ġreplace Ġ% Ġ-> Ġ%% Ġto Ġavoid Ġformatted Ġparameters Ġ( cause s ĠSIG TERM ) ĊĠĠĠĠĠĠĠ Ġparams . add ( Common Dialog Param Type . message , ĠString Util . strip Html ( message Ġ?: Ġ"", Ġtrue ). replace ("% ", Ġ" %% ")) ĊĠĠĠĠĠĠĠ Ġparams . add ( Common Dialog Param Type . error Style , Ġif Ġ( error Style ) Ġ" error " Ġelse Ġ"- 1 ") ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġstate = ! do Not Ask . shouldBe Shown () ĊĠĠĠĠĠĠĠ Ġparams . add ( Common Dialog Param Type . do Not Ask Dialog Option 1 , Ġif Ġ( do Not Ask Option Ġ== Ġnull Ġ|| Ġ! do Not Ask Option . can Be Hidden ()) Ġ"- 1 " Ġelse Ġdo Not Ask Option . do Not Show Message ) ĊĠĠĠĠĠĠĠ Ġparams . add ( Common Dialog Param Type . do Not Ask Dialog Option 2 , Ġif Ġ( do Not Ask Option Ġ!= Ġnull Ġ&& Ġ! do Not Ask Option . is ToBe Shown ) Ġ" checked " Ġelse Ġ"- 1 ") ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġresults From Document Root . remove ( show Dialog ( effective Window , Ġ" show Sheet :", Ġparams )) !! ĊĠĠĠĠĠĠĠ Ġval Ġconverted Result Ġ= Ġconvert Return Code From Native AlertDialog ( result . return Code , Ġalternate Text ) ĊĠĠĠĠĠĠĠ Ġif Ġ( do Not Ask Option Ġ!= Ġnull Ġ&& Ġdo Not Ask Option . can Be Hidden ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġoperation Canceled Ġ= Ġconverted Result Ġ== ĠMessages . CANCEL ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ(! operation Canceled Ġ|| Ġdo Not Ask Option . should Save Options On Cancel ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Not Ask Option . set ToBe Shown (! result . suppress , Ġconverted Result ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġconverted Result ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Dialog ( window : ĠWindow , ĠmethodName : ĠString , Ġparams Wrapper : ĠDialog Params Wrapper ): ĠWindow ? Ġ{ ĊĠĠĠĠĠ Ġval Ġdocument Root Ġ= Ġfind Document Root ( window ) ĊĠĠĠĠĠ Ġval Ġnative Focused Window Ġ= ĠMac Util . find Window From Java Window ( window ) ĊĠĠĠĠĠ Ġval Ġparams Array Ġ= Ġparams Wrapper . get Params As Id ( native Focused Window ) ĊĠĠĠĠĠ Ġwindow . add WindowListener ( object Ġ: ĠWindow Adapter () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġwindow Closed ( e : ĠWindow Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġsuper . window Closed ( e ) ĊĠĠĠĠĠĠĠĠĠ Ġ// if Ġ( blocked Document Roots . get ( document Root ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// ĠĠ ĠLOG . assertTrue ( blocked Document Roots . get ( document Root ) Ġ< Ġ 2 ); ĊĠĠĠĠĠĠĠĠĠ Ġ//} ĊĠĠĠĠĠĠĠĠĠ Ġwindow To Queue . remove ( document Root ) ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( blocked Document Roots . containsKey ( document Root )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblocked Document Roots . remove Int ( document Root ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠMessage Exception (" Owner Ġwindow Ġhas Ġbeen Ġremoved ") ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠ Ġval Ġdelegate Ġ= ĠFoundation . invoke ( Foundation . invoke ( Foundation . get Obj c Class (" NS Alert Delegate _ "), Ġ" alloc "), Ġ" init ") ĊĠĠĠĠĠ ĠIde Focus Manager . getGlobal Instance (). setType ahead Enabled ( false ) ĊĠĠĠĠĠ Ġrun Or Post p one For Window ( document Root !! , ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠ ĠFoundation . invoke ( delegate , Ġ" perform Selector On MainThread : with Object : wait Until Done :", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFoundation . create Selector ( methodName ), Ġparams Array , Ġfalse ) ĊĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠ Ġstart Modal ( document Root , Ġnative Focused Window ) ĊĠĠĠĠĠ ĠIde Focus Manager . getGlobal Instance (). setType ahead Enabled ( true ) ĊĠĠĠĠĠ Ġreturn Ġdocument Root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconvert Return Code From Native Message Dialog ( result : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠ Ġreturn Ġresult Ġ- Ġ 1 0 0 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrun Or Post p one For Window ( document Root : ĠWindow , Ġtask : ĠRunnable ) Ġ{ ĊĠĠĠĠĠ Ġsynchronized ( lock ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġqueue Ġ= Ġwindow To Queue . get ( document Root ) ĊĠĠĠĠĠĠĠ Ġif Ġ( queue Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġqueue Ġ= ĠMac Messages Queue () ĊĠĠĠĠĠĠĠĠĠ Ġwindow To Queue . put ( document Root , Ġqueue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġqueue . run Or Schedule ( task ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġshow Ok Message Dialog ( title : ĠString , Ġmessage : ĠString , Ġok Text : ĠString , Ġwindow : ĠWindow ?) Ġ{ ĊĠĠĠ Ġshow AlertDialog ( title Ġ= Ġtitle , Ġmessage Ġ= Ġmessage , Ġwindow Ġ= Ġwindow , Ġyes Text Ġ= Ġok Text ) ĊĠ Ġ} ĊĊĠ Ġ@ Yes No Result ĊĠ Ġoverride Ġfun Ġshow Yes No Dialog ( title : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyes Text : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġno Text : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow : ĠWindow ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Not Ask Dialog Option : ĠDo Not Ask Option ?): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġshow AlertDialog ( title Ġ= Ġtitle , Ġmessage Ġ= Ġmessage , Ġyes Text Ġ= Ġyes Text , Ġno Text Ġ= Ġno Text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Ġ= Ġwindow , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Not Ask Option Ġ= Ġdo Not Ask Dialog Option ) Ġ== ĠMessages . YES ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġshow Error Dialog ( title : ĠString , Ġmessage : ĠString , Ġok Button : ĠString , Ġwindow : ĠWindow ?) Ġ{ ĊĠĠĠ Ġshow AlertDialog ( title Ġ= Ġtitle , Ġmessage Ġ= Ġmessage , Ġyes Text Ġ= Ġok Button , Ġwindow Ġ= Ġwindow , Ġerror Style Ġ= Ġtrue ) ĊĠ Ġ} ĊĊĠ Ġ@ Yes No Cancel Result ĊĠ Ġoverride Ġfun Ġshow Yes No Cancel Dialog ( title : Ġ@ NotNull ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyes Text : Ġ@ NotNull ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġno Text : Ġ@ NotNull ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel Text : Ġ@ NotNull ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow : Ġ@ Nullable ĠWindow ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Not Ask Option : Ġ@ Nullable ĠDo Not Ask Option ?): ĠInt Ġ{ ĊĠĠĠ Ġreturn Ġshow AlertDialog ( title Ġ= Ġtitle , Ġmessage Ġ= Ġmessage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyes Text Ġ= Ġyes Text , Ġalternate Text Ġ= Ġno Text , Ġno Text Ġ= Ġcancel Text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Ġ= Ġwindow , Ġdo Not Ask Option Ġ= Ġdo Not Ask Option ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġshow Message Dialog ( title : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuttons : ĠArray < String >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Style : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow : ĠWindow ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Option Index : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfocused Option Index : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Not Ask Dialog Option : ĠDo Not Ask Option ?): ĠInt Ġ{ ĊĠĠĠ Ġval Ġeffective Window Ġ= Ġwindow Ġ?: ĠJ B Mac Messages . get Fore most Window () ĊĠĠĠ Ġrun And Release Ġ{ ĊĠĠĠĠĠ Ġval Ġparams Ġ= ĠDialog Params Wrapper ( Dialog Type . message ) ĊĠĠĠĠĠ Ġparams . add ( Common Dialog Param Type . title , Ġtitle ) ĊĠĠĠĠĠ Ġ// Ġreplace Ġ% Ġ-> Ġ%% Ġto Ġavoid Ġformatted Ġparameters Ġ( cause s ĠSIG TERM ) ĊĠĠĠĠĠ Ġparams . add ( Common Dialog Param Type . message , ĠString Util . strip Html ( message , Ġtrue ). replace ("% ", Ġ" %% ")) ĊĠĠĠĠĠ Ġparams . add ( Common Dialog Param Type . error Style , Ġif Ġ( error Style ) Ġ" error " Ġelse Ġ"- 1 ") ĊĠĠĠĠĠ Ġ// ĠTODO : Ġstate = ! do Not Ask . shouldBe Shown () ĊĠĠĠĠĠ Ġparams . add ( Common Dialog Param Type . do Not Ask Dialog Option 1 , Ġif Ġ( do Not Ask Dialog Option Ġ== Ġnull Ġ|| Ġ! do Not Ask Dialog Option . can Be Hidden ()) Ġ"- 1 " Ġelse Ġdo Not Ask Dialog Option . do Not Show Message ) ĊĠĠĠĠĠ Ġparams . add ( Common Dialog Param Type . do Not Ask Dialog Option 2 , Ġif Ġ( do Not Ask Dialog Option Ġ!= Ġnull Ġ&& Ġ! do Not Ask Dialog Option . is ToBe Shown ) Ġ" checked " Ġelse Ġ"- 1 ") ĊĠĠĠĠĠ Ġparams . add ( Message Dialog Param Type . default Option Index , Ġdefault Option Index . toString ()) ĊĠĠĠĠĠ Ġparams . add ( Message Dialog Param Type . focused Option Index , Ġfocused Option Index . toString ()) ĊĊĠĠĠĠĠ Ġval Ġbutton Array Ġ= ĠFoundation . invoke (" NS Mutable Array ", Ġ" array ") ĊĠĠĠĠĠ Ġfor Ġ( button Ġin Ġbuttons ) Ġ{ ĊĠĠĠĠĠĠĠ ĠFoundation . invoke ( button Array , Ġ" add Object :", ĠFoundation . ns String ( UI Util . remove Mnemonic ( button ))) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġparams . params . put ( Message Dialog Param Type . button Array , Ġbutton Array ) ĊĊĠĠĠĠĠ Ġval Ġresult Ġ= Ġresults From Document Root . remove ( show Dialog ( effective Window , Ġ" show Variable Buttons Sheet :", Ġparams )) ĊĠĠĠĠĠ Ġval Ġcode Ġ= Ġconvert Return Code From Native Message Dialog ( result !!. return Code ) ĊĠĠĠĠĠ Ġval Ġcancel Code Ġ= Ġbuttons . size Ġ- Ġ 1 ĊĠĠĠĠĠ Ġif Ġ( do Not Ask Dialog Option Ġ!= Ġnull Ġ&& Ġdo Not Ask Dialog Option . can Be Hidden ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( cancel Code Ġ!= Ġcode Ġ|| Ġdo Not Ask Dialog Option . should Save Options On Cancel ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġdo Not Ask Dialog Option . set ToBe Shown (! result . suppress , Ġcode ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn Ġcode ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ private Ġinline Ġfun Ġ< T > Ġrun And Release ( task : Ġ() Ġ-> ĠT ): ĠT Ġ{ ĊĠ Ġval Ġpool Ġ= ĠFoundation . invoke ( Foundation . invoke (" NS Aut ore lease Pool ", Ġ" alloc "), Ġ" init ") ĊĠ Ġtry Ġ{ ĊĠĠĠ Ġreturn Ġtask () ĊĠ Ġ} ĊĠ Ġfinally Ġ{ ĊĠĠĠ ĠFoundation . invoke ( pool , Ġ" release ") ĊĠ Ġ} Ċ } Ċ Ċ private Ġenum Ġclass ĠCommon Dialog Param Type Ġ{ ĊĠ Ġtitle , Ġmessage , Ġerror Style , Ġdo Not Ask Dialog Option 1 , Ġdo Not Ask Dialog Option 2 , Ġnative Focused Window Ċ } Ċ Ċ private Ġenum Ġclass ĠDialog Type Ġ{ ĊĠ Ġalert , Ġmessage Ċ } Ċ Ċ private Ġenum Ġclass ĠMessage Dialog Param Type Ġ{ ĊĠ Ġbutton Array , Ġdefault Option Index , Ġfocused Option Index Ċ } Ċ Ċ private Ġenum Ġclass ĠAlertDialog Param Type Ġ{ ĊĠ Ġdefault Text , Ġalternate Text , Ġother Text Ċ } Ċ Ċ private Ġclass ĠDialog Params Wrapper ( private Ġval Ġdialog Type : ĠDialog Type ) Ġ{ ĊĠ Ġval Ġparams Ġ= ĠHashMap < Enum <* >, ĠAny >() ĊĊĠ Ġfun Ġadd ( name : ĠEnum <* >, Ġvalue : ĠString ) Ġ{ ĊĠĠĠ Ġparams . put ( name , ĠFoundation . ns String ( value )) ĊĠ Ġ} ĊĊĠ Ġfun Ġremove Mnemonic And Add ( name : ĠEnum <* >, Ġvalue : ĠString ?) Ġ{ ĊĠĠĠ Ġparams . put ( name , ĠFoundation . ns String ( if Ġ( value Ġ== Ġnull ) Ġ"- 1 " Ġelse ĠUI Util . remove Mnemonic ( value ))) ĊĠ Ġ} ĊĊĠ Ġfun Ġget Params As Id ( window : ĠID ): ĠID ? Ġ{ ĊĠĠĠ Ġparams . put ( Common Dialog Param Type . native Focused Window , Ġwindow ) ĊĠĠĠ Ġreturn Ġwhen Ġ( dialog Type ) Ġ{ ĊĠĠĠĠĠ ĠDialog Type . alert Ġ-> Ġget Params For AlertDialog ( params ) ĊĠĠĠĠĠ ĠDialog Type . message Ġ-> Ġget Params For Message Dialog ( params ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġget Params For AlertDialog ( params : ĠMap < Enum <* >, ĠAny >): ĠID Ġ{ ĊĠ Ġreturn ĠFoundation . invoke ( ĊĠĠĠ Ġ" NSArray ", Ġ" array With Objects :", ĊĠĠĠ Ġ// Ġmessage Ġas Ġtitle ĊĠĠĠ Ġparams [ Common Dialog Param Type . message ], ĊĠĠĠ Ġparams [ AlertDialog Param Type . default Text ], ĊĠĠĠ Ġparams [ AlertDialog Param Type . alternate Text ], ĊĠĠĠ Ġparams [ AlertDialog Param Type . other Text ], ĊĠĠĠ Ġ// Ġdo Ġnot Ġspecify Ġmessage ĊĠĠĠ ĠFoundation . ns String (""), ĊĠĠĠ Ġparams [ Common Dialog Param Type . native Focused Window ], ĊĠĠĠ ĠFoundation . ns String (""), ĊĠĠĠ Ġparams [ Common Dialog Param Type . error Style ], ĊĠĠĠ Ġparams [ Common Dialog Param Type . do Not Ask Dialog Option 1 ], ĊĠĠĠ Ġparams [ Common Dialog Param Type . do Not Ask Dialog Option 2 ], ĊĠĠĠ Ġnull ĊĠ Ġ) Ċ } Ċ Ċ private Ġfun Ġget Params For Message Dialog ( params : ĠMap < Enum <* >, ĠAny >): ĠID Ġ{ ĊĠ Ġreturn ĠFoundation . invoke ( ĊĠĠĠ Ġ" NSArray ", Ġ" array With Objects :", ĊĠĠĠ Ġparams [ Common Dialog Param Type . title ], ĊĠĠĠ Ġparams [ Common Dialog Param Type . message ], ĊĠĠĠ Ġparams [ Common Dialog Param Type . native Focused Window ], ĊĠĠĠ ĠFoundation . ns String (""), ĊĠĠĠ Ġparams [ Common Dialog Param Type . error Style ], ĊĠĠĠ Ġparams [ Common Dialog Param Type . do Not Ask Dialog Option 1 ], ĊĠĠĠ Ġparams [ Message Dialog Param Type . default Option Index ], ĊĠĠĠ Ġparams [ Message Dialog Param Type . focused Option Index ], ĊĠĠĠ Ġparams [ Message Dialog Param Type . button Array ], ĊĠĠĠ Ġparams [ Common Dialog Param Type . do Not Ask Dialog Option 2 ], ĊĠĠĠ Ġnull ĊĠ Ġ) Ċ } Ċ Ċ private Ġfun Ġenable Escape To Close The Message ( alert : ĠID ) Ġ{ ĊĠ Ġval Ġbutton Count Ġ= ĠFoundation . invoke ( Foundation . invoke ( alert , Ġ" buttons "), Ġ" count "). toInt () ĊĠ Ġif Ġ( button Count Ġ< Ġ 2 ) Ġ{ ĊĠĠĠ Ġreturn ĊĠ Ġ} ĊĠ Ġval Ġbutton Ġ= ĠFoundation . invoke ( Foundation . invoke ( alert , Ġ" buttons "), Ġ" object AtIndex :", Ġbutton Count Ġ- Ġ 1 ) ĊĠ ĠFoundation . invoke ( button , Ġ" set Key Equivalent :", ĠFoundation . ns String ("\ u 0 0 1 b ")) Ċ } Ċ Ċ @ Yes No Cancel Result Ċ private Ġfun Ġconvert Return Code From Native AlertDialog ( return Code : ĠInt , Ġalternate Text : ĠString ?): ĠInt Ġ{ ĊĠ Ġ// ĠDEFAULT Ġ= Ġ 1 ĊĠ Ġ// ĠALTER N ATE Ġ= Ġ 0 ĊĠ Ġ// ĠOTHER Ġ= Ġ- 1 Ġ( cancel ) ĊĠ Ġval Ġcancel Code : ĠInt ĊĠ Ġvar Ġcode : ĠInt ĊĠ Ġif Ġ( alternate Text Ġ!= Ġnull ) Ġ{ ĊĠĠĠ Ġ// ĠDEFAULT Ġ= Ġ 0 ĊĠĠĠ Ġ// ĠALTER N ATE Ġ= Ġ 1 ĊĠĠĠ Ġ// ĠCANCEL Ġ= Ġ 2 ĊĠĠĠ Ġcancel Code Ġ= ĠMessages . CANCEL ĊĠĠĠ Ġcode Ġ= Ġwhen Ġ( return Code ) Ġ{ ĊĠĠĠĠĠĠ 1 Ġ-> ĠMessages . YES ĊĠĠĠĠĠĠ 0 Ġ-> ĠMessages . NO ĊĠĠĠĠĠ Ġ- 1 Ġ-> ĠMessages . CANCEL ĊĠĠĠĠĠ Ġelse Ġ-> ĠMessages . CANCEL ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĠ Ġelse Ġ{ ĊĠĠĠ Ġ// ĠDEFAULT Ġ= Ġ 0 ĊĠĠĠ Ġ// ĠCANCEL Ġ= Ġ 1 ĊĠĠĠ Ġcancel Code Ġ= Ġ 1 ĊĠĠĠ Ġcode Ġ= Ġwhen Ġ( return Code ) Ġ{ ĊĠĠĠĠĠĠ 1 Ġ-> ĠMessages . YES ĊĠĠĠĠĠ Ġ- 1 Ġ-> ĠMessages . NO ĊĠĠĠĠĠ Ġelse Ġ-> ĠMessages . NO ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġif Ġ( cancel Code Ġ== Ġcode ) Ġ{ ĊĠĠĠ Ġcode Ġ= ĠMessages . CANCEL ĊĠ Ġ} ĊĊĠ ĠLOG . assertTrue ( code Ġ== ĠMessages . YES Ġ|| Ġcode Ġ== ĠMessages . NO Ġ|| Ġcode Ġ== ĠMessages . CANCEL , Ġcode ) ĊĠ Ġreturn Ġcode Ċ } Ċ Ċ private Ġfun Ġfind Document Root ( component : ĠComponent ): ĠWindow ? Ġ{ ĊĠ Ġvar Ġwindow Ġ= ĠComponent Util . getWindow ( component ) !! ĊĠ Ġsynchronized ( component . tree Lock ) Ġ{ ĊĠĠĠ Ġwhile Ġ( window . owner Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġwindow Ġ= Ġwindow . owner ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĠ Ġreturn Ġwindow Ċ } Ċ Ċ private Ġclass ĠMac Messages Queue < T Ġ: ĠRunnable > Ġ{ ĊĠ Ġprivate Ġvar Ġwaiting For App Kit Ġ= Ġfalse ĊĠ Ġprivate Ġval Ġqueue Ġ= ĠArray Deque < Runnable >() ĊĊĠ Ġ@ Synchron ized ĊĠ Ġfun Ġrun Or Schedule ( run nable : ĠT ) Ġ{ ĊĠĠĠ Ġif Ġ( waiting For App Kit ) Ġ{ ĊĠĠĠĠĠ Ġqueue . add ( run nable ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠ Ġrunnable . run () ĊĠĠĠĠĠ Ġwaiting For App Kit Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Synchron ized ĊĠ Ġfun Ġrun From Queue () Ġ{ ĊĠĠĠ Ġval Ġtask Ġ= Ġqueue . poll First () ĊĠĠĠ Ġif Ġ( task Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġwaiting For App Kit Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠ Ġtask . run () ĊĠĠĠĠĠ Ġwaiting For App Kit Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ }