package Ġimg ui . img ui Ċ Ċ import Ġgli _. has Ċ import Ġglm _. f Ċ import Ġglm _. glm Ċ import Ġglm _. i Ċ import Ġglm _. vec 2 . Vec 2 Ċ import Ġglm _. vec 2 . Vec 2 i Ċ import Ġimg ui .* Ċ import Ġimg ui . ImGui . align Text To Frame Padding Ċ import Ġimg ui . ImGui . begin Ċ import Ġimg ui . ImGui . begin Group Ċ import Ġimg ui . ImGui . begin Popup Ex Ċ import Ġimg ui . ImGui . calc Text Size Ċ import Ġimg ui . ImGui . close Popup To Level Ċ import Ġimg ui . ImGui . content Region Avail Ċ import Ġimg ui . ImGui . current Window Ċ import Ġimg ui . ImGui . end Ċ import Ġimg ui . ImGui . end Group Ċ import Ġimg ui . ImGui . end Popup Ċ import Ġimg ui . ImGui . io Ċ import Ġimg ui . ImGui . is Popup Open Ċ import Ġimg ui . ImGui . item Hover able Ċ import Ġimg ui . ImGui . nav Move Request Cancel Ċ import Ġimg ui . ImGui . open Popup Ċ import Ġimg ui . ImGui . pop Clip Rect Ċ import Ġimg ui . ImGui . pop Id Ċ import Ġimg ui . ImGui . pop Style Color Ċ import Ġimg ui . ImGui . pop Style Var Ċ import Ġimg ui . ImGui . push Clip Rect Ċ import Ġimg ui . ImGui . push Id Ċ import Ġimg ui . ImGui . push Style Color Ċ import Ġimg ui . ImGui . push Style Var Ċ import Ġimg ui . ImGui . render Arrow Ċ import Ġimg ui . ImGui . render Check Mark Ċ import Ġimg ui . ImGui . render Text Ċ import Ġimg ui . ImGui . selectable Ċ import Ġimg ui . ImGui . set Next Window Pos Ċ import Ġimg ui . ImGui . set Next Window Size Ċ import Ġimg ui . ImGui . style Ċ import Ġimg ui . img ui . img ui _ main . Companion . focus Front Most Active Window Ċ import Ġimg ui . internal . Layout Type Ċ import Ġimg ui . internal . Nav Forward Ċ import Ġimg ui . internal . Rect Ċ import Ġimg ui . internal . focus Ċ import Ġimg ui . internal . triangle Contains Point Ċ import Ġkotlin . math . floor Ċ import Ġkotlin . math . max Ċ import Ġkotlin . reflect . K Mutable Property 0 Ċ import Ġimg ui . Selectable Flag Ġas ĠS f Ċ import Ġimg ui . Window Flag Ġas ĠW f Ċ import Ġimg ui . internal . Layout Type Ġas ĠL t Ċ Ċ /** ĠMenu ĠĠĠ Ġ*/ Ċ interface Ġimg ui _ menus Ġ{ ĊĊĊĠĠĠ Ġ/** ĠCreate Ġand Ġappend Ġto Ġa Ġfull Ġscreen Ġmenu - bar . ĊĠĠĠĠ Ġ* Ġ ĠFor Ġthe Ġmain Ġmenu Ġbar , Ġwhich Ġcannot Ġbe Ġmoved , Ġwe Ġhon or Ġg . Style . Display Safe Area Padding Ġto Ġensure Ġtext Ġcan Ġbe Ġvisible Ġon Ġa ĠTV Ġset . Ġ*/ ĊĠĠĠ Ġfun Ġbegin Main MenuBar (): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġg . next Window Data . menu Bar Offset Min Val . put ( style . display Safe Area Padding . x , Ġmax ( style . display Safe Area Padding . y Ġ- Ġstyle . frame Padding . y , Ġ 0 f )) ĊĠĠĠĠĠĠĠ Ġset Next Window Pos ( Vec 2 ()) ĊĠĠĠĠĠĠĠ Ġset Next Window Size ( Vec 2 ( io . display Size . x , Ġg . next Window Data . menu Bar Offset Min Val . y Ġ+ Ġg . font Base Size Ġ+ Ġstyle . frame Padding . y )) ĊĠĠĠĠĠĠĠ Ġpush Style Var ( Style Var . Window Round ing , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġpush Style Var ( Style Var . Window Min Size , ĠVec 2 i ()) ĊĠĠĠĠĠĠĠ Ġval Ġflags Ġ= ĠW f . No Title Bar Ġor ĠW f . No Resize Ġor ĠW f . No Move Ġor ĠW f . No Scrollbar Ġor ĠW f . No Saved Settings Ġor ĠW f . MenuBar ĊĠĠĠĠĠĠĠ Ġval Ġwindow Flags Ġ= ĠW f . No Title Bar Ġor ĠW f . No Resize Ġor ĠW f . No Move Ġor ĠW f . No Scrollbar Ġor ĠW f . No Saved Settings Ġor ĠW f . MenuBar ĊĠĠĠĠĠĠĠ Ġval ĠisOpen Ġ= Ġbegin (" ## Main MenuBar ", Ġnull , Ġwindow Flags ) Ġ&& Ġbegin MenuBar () ĊĠĠĠĠĠĠĠ Ġpop Style Var ( 2 ) ĊĠĠĠĠĠĠĠ Ġg . next Window Data . menu Bar Offset Min Val Ġput Ġ 0 f ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! isOpen Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠOnly Ġcall ĠEnd Main MenuBar () Ġif ĠBegin Main MenuBar () Ġreturns Ġtrue ! Ġ*/ ĊĠĠĠ Ġfun Ġend Main MenuBar () Ġ{ ĊĠĠĠĠĠĠĠ Ġend MenuBar () ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen Ġthe Ġuser Ġhas Ġleft Ġthe Ġmenu Ġlayer Ġ( typ ically : Ġclosed Ġmenus Ġthrough Ġactivation Ġof Ġan Ġitem ), Ġwe Ġrestore Ġfocus Ġto Ġthe Ġprevious Ġwindow ĊĠĠĠĠĠĠĠ Ġif Ġ( g . current Window Ġ== Ġg . nav Window Ġ&& Ġg . nav Layer Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfocus Front Most Active Window ( g . nav Window ) ĊĊĠĠĠĠĠĠĠ Ġend () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠAppend Ġto Ġmenu - bar Ġof Ġcurrent Ġwindow Ġ( requires ĠWindow Flag . MenuBar Ġflag Ġset Ġon Ġparent Ġwindow ). ĊĠĠĠĠ Ġ* Ġ ĠOnly Ġcall Ġend MenuBar () Ġif Ġthis Ġreturns Ġtrue ! ĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġbegin MenuBar (): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġwindow Ġ= Ġcurrent Window ĊĠĠĠĠĠĠĠ Ġif Ġ( window . skip Items ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( window . flags Ġhas nt ĠW f . MenuBar ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġassert (! window . dc . menu Bar App ending ) ĊĠĠĠĠĠĠĠ Ġbegin Group () Ġ// ĠBackup Ġposition Ġon Ġlayer Ġ 0 ĊĠĠĠĠĠĠĠ Ġpush Id (" ## men ubar ") ĊĊĠĠĠĠĠĠĠ Ġ/* Ġ ĠWe Ġdon 't Ġclip Ġwith Ġcurrent Ġwindow Ġclipping Ġrectangle Ġas Ġit Ġis Ġalready Ġset Ġto Ġthe Ġarea Ġbelow . ĠHowever Ġwe Ġclip ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Ġwindow Ġfull Ġrect . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWe Ġremove Ġ 1 Ġworth Ġof Ġrounding Ġto Ġmax . x Ġto Ġthat Ġtext Ġin Ġlong Ġmenus Ġand Ġsmall Ġwindows Ġdon 't Ġtend Ġto Ġdisplay ĊĠĠĠĠĠĠĠĠĠĠĠ Ġover Ġthe Ġlower - right Ġrounded Ġarea , Ġwhich Ġlooks Ġparticularly Ġgl itch y . Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġbar Rect Ġ= Ġwindow . menu Bar Rect () ĊĠĠĠĠĠĠĠ Ġval Ġclip Rect Ġ= ĠRect ( floor ( bar Rect . min . x Ġ+ Ġ 0 . 5 f ), Ġfloor ( bar Rect . min . y Ġ+ Ġwindow . window Border Size Ġ+ Ġ 0 . 5 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfloor ( max ( bar Rect . min . x , Ġbar Rect . max . x Ġ- Ġwindow . window Round ing ) Ġ+ Ġ 0 . 5 f ), Ġfloor ( bar Rect . max . y Ġ+ Ġ 0 . 5 f )) ĊĠĠĠĠĠĠĠ Ġclip Rect Ġclip With Ġwindow . outer Rect Cli pped ĊĠĠĠĠĠĠĠ Ġpush Clip Rect ( clip Rect . min , Ġclip Rect . max , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġwith ( window . dc ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor Pos . put ( bar Rect . min . x Ġ+ Ġwindow . dc . menu Bar Offset . x , Ġbar Rect . min . y Ġ+ Ġwindow . dc . menu Bar Offset . y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Type Ġ= ĠLayout Type . Horizontal ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnav Layer Current ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnav Layer Current Mask Ġ= Ġnav Layer Current Mask Ġshl Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Bar App ending Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġalign Text To Frame Padding () ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠOnly Ġcall ĠEnd MenuBar () Ġif ĠBegin MenuBar () Ġreturns Ġtrue ! Ġ Ġ*/ ĊĠĠĠ Ġfun Ġend MenuBar () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġwindow Ġ= Ġcurrent Window ĊĠĠĠĠĠĠĠ Ġif Ġ( window . skip Items ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġ// ĠNav : ĠWhen Ġa Ġmove Ġrequest Ġwithin Ġone Ġof Ġour Ġchild Ġmenu Ġfailed , Ġcapture Ġthe Ġrequest Ġto Ġnavigate Ġamong Ġour Ġs iblings . ĊĠĠĠĠĠĠĠ Ġif Ġ( nav Move Request But No Result Y et () Ġ&& Ġ( g . nav Move Dir Ġ== ĠDir . Left Ġ|| Ġg . nav Move Dir Ġ== ĠDir . Right ) Ġ&& Ġg . nav Window !!. flags Ġhas ĠW f . Child Menu ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnav E ar liest Child Ġ= Ġg . nav Window !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( nav E ar liest Child . parent Window Ġ!= Ġnull Ġ&& Ġnav E ar liest Child . parent Window !!. flags Ġhas ĠW f . Child Menu ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav E ar liest Child Ġ= Ġnav E ar liest Child . parent Window !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( nav E ar liest Child . parent Window Ġ== Ġwindow Ġ&& Ġnav E ar liest Child . dc . parent Layout Type Ġ== ĠL t . Horizontal Ġ&& Ġg . nav Move Request Forward Ġ== ĠNav Forward . None ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġ ĠTo Ġdo Ġso Ġwe Ġclaim Ġfocus Ġback , Ġrestore ĠNav Id Ġand Ġthen Ġprocess Ġthe Ġmovement Ġrequest Ġfor Ġyet Ġanother ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġframe . ĠThis Ġinvolve Ġa Ġone - frame Ġdelay Ġwhich Ġisn 't Ġvery Ġproblematic Ġin Ġthis Ġsituation . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWe Ġcould Ġremove Ġit Ġby Ġscoring Ġin Ġadvance Ġfor Ġmultiple Ġwindow Ġ( prob ably Ġnot Ġworth Ġthe Ġhass le / cost ) ĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( window . dc . nav Layer Active Mask Next Ġhas Ġ 0 x 0 2 ) Ġ{ Ġ" San ity Ġcheck " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Nav ID With Rect Rel ( window . nav Last Ids [ 1 ], Ġ 1 , Ġwindow . nav Rect Rel [ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg . nav Layer Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg . nav Disable Highlight Ġ= Ġtrue Ġ// ĠHide Ġhighlight Ġfor Ġthe Ġcurrent Ġframe Ġso Ġwe Ġdon 't Ġsee Ġthe Ġinter medi ary Ġselection . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg . nav Move Request Forward Ġ= ĠNav Forward . Forward Queued ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Move Request Cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġassert ( window . flags Ġhas ĠW f . MenuBar Ġ&& Ġwindow . dc . menu Bar App ending ) ĊĠĠĠĠĠĠĠ Ġpop Clip Rect () ĊĠĠĠĠĠĠĠ Ġpop Id () ĊĠĠĠĠĠĠĠ Ġwith ( window . dc ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSave Ġhorizontal Ġposition Ġso Ġnext Ġappend Ġcan Ġreuse Ġit . ĠThis Ġis Ġkind a Ġequivalent Ġto Ġa Ġper - layer ĠCursor Pos . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Bar Offset . x Ġ= Ġcursor Pos . x Ġ- Ġwindow . menu Bar Rect (). min . x ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Stack . last (). advance Cursor Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend Group () Ġ// ĠRestore Ġposition Ġon Ġlayer Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Type Ġ= ĠLayout Type . Vertical ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnav Layer Current -- ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnav Layer Current Mask Ġ= Ġnav Layer Current Mask Ġ ush r Ġ 1 ĠĠĠ Ġ// ĠTODO Ġneeds Ġun s ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Bar App ending Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġcreate Ġa Ġsub - menu Ġentry . Ġonly Ġcall ĠEnd Menu () Ġif Ġthis Ġreturns Ġtrue ! Ġ Ġ*/ ĊĠĠĠ Ġfun Ġbegin Menu ( label : ĠString , Ġenabled : ĠBoolean Ġ= Ġtrue ): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġwindow Ġ= Ġcurrent Window ĊĠĠĠĠĠĠĠ Ġif Ġ( window . skip Items ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġwindow . getId ( label ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlabel Size Ġ= Ġcalc Text Size ( label , Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġval Ġpressed : ĠBoolean ĊĠĠĠĠĠĠĠ Ġvar Ġmenu Is Open Ġ= Ġis Popup Open ( id ) ĊĠĠĠĠĠĠĠ Ġval Ġmenu setIs Open Ġ= Ġwindow . flags Ġhas nt ĠW f . Popup Ġ&& Ġg . open Popup Stack . size Ġ> Ġg . current Popup Stack . size Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg . open Popup Stack [ g . current Popup Stack . size ]. open Parent Id Ġ== Ġwindow . id Stack . last () ĊĠĠĠĠĠĠĠ Ġval Ġbacked Nav Window Ġ= Ġg . nav Window ĊĠĠĠĠĠĠĠ Ġif Ġ( menu setIs Open ) ĊĠĠĠĠĠĠĠ Ġ// ĠO dd Ġhack Ġto Ġallow Ġhover ing Ġacross Ġmenus Ġof Ġa Ġsame Ġmenu - set Ġ( otherwise Ġwe Ġwouldn 't Ġbe Ġable Ġto Ġhover Ġparent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg . nav Window Ġ= Ġwindow ĊĊĠĠĠĠĠĠĠ Ġ/* Ġ ĠThe Ġreference Ġposition Ġstored Ġin Ġpopup Pos Ġwill Ġbe Ġused Ġby ĠBegin () Ġto Ġfind Ġa Ġsuitable Ġposition Ġfor Ġthe Ġchild ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Ġ( using ĠFind Best Window Pos For Popup ). ĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġpopup Pos Ġ= ĠVec 2 () ĊĠĠĠĠĠĠĠ Ġval Ġpos Ġ= ĠVec 2 ( window . dc . cursor Pos ) ĊĠĠĠĠĠĠĠ Ġif Ġ( window . dc . layout Type Ġ== ĠLayout Type . Horizontal ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġ ĠMenu Ġinside Ġan Ġhorizontal Ġmenu Ġbar ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSelect able Ġextend Ġtheir Ġhighlight Ġby Ġhalf ĠItem Spacing Ġin Ġeach Ġdirection . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFor ĠChild Menu , Ġthe Ġpopup Ġposition Ġwill Ġbe Ġoverwritten Ġby Ġthe Ġcall Ġto ĠFind Best Window Pos For Popup () Ġin Ġbegin () Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Pos . put ( pos . x Ġ- Ġwindow . window Padding . x , Ġpos . y Ġ- Ġstyle . frame Padding . y Ġ+ Ġwindow . menu Bar Height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . dc . cursor Pos . x Ġ+= Ġ( style . item Spacing . x Ġ* Ġ 0 . 5 f ). i . f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpush Style Var ( Style Var . Item Spacing , Ġstyle . item Spacing Ġ* Ġ 2 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġw Ġ= Ġlabel Size . x ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġflags Ġ= ĠS f . No Hold ing Active ID Ġor ĠS f . Pressed OnClick Ġor ĠS f . Dont Close Pop ups Ġor Ġif Ġ( enabled ) Ġ 0 Ġelse ĠS f . Disabled . i ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpressed Ġ= Ġselect able ( label , Ġmenu Is Open , Ġflags , ĠVec 2 ( w , Ġ 0 f )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpop Style Var () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġ Ġ- 1 Ġspacing Ġto Ġcomp ens ate Ġthe Ġspacing Ġadded Ġwhen Ġselect able () Ġdid Ġa Ġsame Line (). ĠIt Ġwould Ġalso Ġwork ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Ġcall Ġsame Line () Ġourselves Ġafter Ġthe Ġpop Style Var (). ĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . dc . cursor Pos . x Ġ+= Ġ( style . item Spacing . x Ġ* Ġ(- 1 f Ġ+ Ġ 0 . 5 f )). i . f ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMenu Ġinside Ġa Ġmenu ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Pos . put ( pos . x , Ġpos . y Ġ- Ġstyle . window Padding . y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġw Ġ= Ġwindow . menu Columns . decl Columns ( label Size . x , Ġ 0 f , Ġ( g . fontSize Ġ* Ġ 1 . 2 f ). i . f ) Ġ// ĠFeedback Ġto Ġnext Ġframe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġextra W Ġ= Ġglm . max ( 0 f , Ġcontent Region Avail . x Ġ- Ġw ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġflags Ġ= ĠS f . No Hold ing Active ID Ġor ĠS f . Pressed OnClick Ġor ĠS f . Dont Close Pop ups Ġor ĠS f . Draw Fill Avail Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpressed Ġ= Ġselect able ( label , Ġmenu Is Open , Ġflags Ġor Ġif Ġ( enabled ) ĠS f . None Ġelse ĠS f . Disabled , ĠVec 2 ( w , Ġ 0 f )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! enabled ) Ġpush Style Color ( Col . Text , Ġstyle . colors [ Col . Text Disabled ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrender Arrow ( pos Ġ+ ĠVec 2 ( window . menu Columns . pos [ 2 ] Ġ+ Ġextra W Ġ+ Ġg . fontSize Ġ* Ġ 0 . 3 f , Ġ 0 f ), ĠDir . Right ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! enabled ) Ġpop Style Color () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġhover ed Ġ= Ġenabled Ġ&& Ġitem Hover able ( window . dc . last Item Rect , Ġid ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( menu setIs Open ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg . nav Window Ġ= Ġbacked Nav Window ĊĊĠĠĠĠĠĠĠ Ġvar Ġwant Open Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġwant Close Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( window . dc . layout Type Ġ== ĠL t . Vertical ) Ġ{ ĠĠĠ Ġ// Ġ( window -> Flags Ġ& Ġ( ImGui Window Flags _ Popup | ImGui Window Flags _ Child Menu )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġ ĠImplement Ġhttp :// b jk 5 . com / post / 4 4 6 9 8 5 5 9 1 6 8 / breaking - down - amaz ons - mega - dropdown Ġto Ġavoid Ġusing Ġtimers , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġso Ġmenus Ġfeels Ġmore Ġreactive . ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmoving Within Opened Triangle Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( g . hover ed Window Ġ=== Ġwindow Ġ&& Ġg . open Popup Stack . size Ġ> Ġg . current Popup Stack . size Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg . open Popup Stack [ g . current Popup Stack . size ]. parent Window Ġ=== Ġwindow Ġ&& Ġwindow . flags Ġhas nt ĠW f . MenuBar ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg . open Popup Stack [ g . current Popup Stack . size ]. window ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Window Rect Ġ= Ġit . rect () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġta Ġ= Ġio . mouse Pos Ġ- Ġio . mouse Delta ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtb Ġ= Ġif Ġ( window . pos . x Ġ< Ġit . pos . x ) Ġnext Window Rect . tl Ġelse Ġnext Window Rect . tr ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtc Ġ= Ġif Ġ( window . pos . x Ġ< Ġit . pos . x ) Ġnext Window Rect . bl Ġelse Ġnext Window Rect . br ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġextra Ġ= Ġglm . clamp ( glm . abs ( ta . x Ġ- Ġtb . x ) Ġ* Ġ 0 . 3 f , Ġ 5 f , Ġ 3 0 f ) Ġ// Ġadd Ġa Ġbit Ġof Ġextra Ġslack . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġta . x Ġ+= Ġif Ġ( window . pos . x Ġ< Ġit . pos . x ) Ġ- 0 . 5 f Ġelse Ġ+ 0 . 5 f ĠĠ Ġ// Ġto Ġavoid Ġnumerical Ġissues ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġ Ġtriangle Ġis Ġmaximum Ġ 2 0 0 Ġhigh Ġto Ġlimit Ġthe Ġslope Ġand Ġthe Ġbias Ġtoward Ġlarge Ġsub - menus ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFIXME : ĠMultiply Ġby Ġfb _ scale ? ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtb . y Ġ= Ġta . y Ġ+ Ġglm . max (( tb . y Ġ- Ġextra ) Ġ- Ġta . y , Ġ- 1 0 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtc . y Ġ= Ġta . y Ġ+ Ġglm . min (( tc . y Ġ+ Ġextra ) Ġ- Ġta . y , Ġ+ 1 0 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmoving Within Opened Triangle Ġ= Ġtriangle Contains Point ( ta , Ġtb , Ġtc , Ġio . mouse Pos ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// window -> Draw List -> Push Clip Rect FullScreen (); Ġwindow -> Draw List -> Add Triangle Filled ( ta , Ġtb , Ġtc , Ġmoving Within Opened Triangle Ġ? ĠIM _ COL 3 2 ( 0 , 1 2 8 , 0 , 1 2 8 ) Ġ: ĠIM _ COL 3 2 ( 1 2 8 , 0 , 0 , 1 2 8 )); Ġwindow -> Draw List -> Pop Clip Rect (); Ġ// ĠDebug ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwant Close Ġ= Ġ( menu Is Open Ġ&& Ġ! hover ed Ġ&& Ġg . hover ed Window Ġ=== Ġwindow Ġ&& Ġg . hover ed Id Previous Frame Ġ!= Ġ 0 Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg . hover ed Id Previous Frame Ġ!= Ġid Ġ&& Ġ! moving Within Opened Triangle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwant Open Ġ= Ġ(! menu Is Open Ġ&& Ġhover ed Ġ&& Ġ! moving Within Opened Triangle ) Ġ|| Ġ(! menu Is Open Ġ&& Ġhover ed Ġ&& Ġpressed ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( g . nav Activate Id Ġ== Ġid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwant Close Ġ= Ġmenu Is Open ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwant Open Ġ= Ġ! menu Is Open ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( g . nav Id Ġ== Ġid Ġ&& Ġg . nav Move Request Ġ&& Ġg . nav Move Dir Ġ== ĠDir . Right ) Ġ{ Ġ// ĠNav - Right Ġto Ġopen ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwant Open Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Move Request Cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ Ġ// ĠMenu Ġbar ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( menu Is Open Ġ&& Ġpressed Ġ&& Ġmenu setIs Open ) Ġ{ Ġ// ĠClick Ġan Ġopen Ġmenu Ġagain Ġto Ġclose Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwant Close Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwant Open Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Is Open Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( pressed Ġ|| Ġ( hover ed Ġ&& Ġmenu setIs Open Ġ&& Ġ! menu Is Open )) Ġ// ĠFirst Ġclick Ġto Ġopen , Ġthen Ġhover Ġto Ġopen Ġothers ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwant Open Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( g . nav Id Ġ== Ġid Ġ&& Ġg . nav Move Request Ġ&& Ġg . nav Move Dir Ġ== ĠDir . Down ) Ġ{ Ġ// ĠNav - Down Ġto Ġopen ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwant Open Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Move Request Cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ/* Ġ Ġexplicitly Ġclose Ġif Ġan Ġopen Ġmenu Ġbecomes Ġdisabled , Ġfacilitate Ġusers Ġcode Ġa Ġlot Ġin Ġpattern Ġsuch Ġas ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' if Ġ( Begin Menu (" options ", Ġhas _ object )) Ġ{ Ġ.. use Ġobject .. Ġ}' ĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġif Ġ(! enabled ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwant Close Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( want Close Ġ&& Ġis Popup Open ( id )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose Popup To Level ( g . current Popup Stack . size ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! menu Is Open Ġ&& Ġwant Open Ġ&& Ġg . open Popup Stack . size Ġ> Ġg . current Popup Stack . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDon 't Ġre cycle Ġsame Ġmenu Ġlevel Ġin Ġthe Ġsame Ġframe , Ġfirst Ġclose Ġthe Ġother Ġmenu Ġand Ġyield Ġfor Ġa Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen Popup ( label ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmenu Is Open Ġ= Ġmenu Is Open Ġ|| Ġwant Open ĊĠĠĠĠĠĠĠ Ġif Ġ( want Open ) Ġopen Popup ( label ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( menu Is Open ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġ ĠSub - menus Ġare ĠChild Window Ġso Ġthat Ġmouse Ġcan Ġbe Ġhover ing Ġacross Ġthem Ġ( otherwise Ġtop - most Ġpopup Ġmenu ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwould Ġste al Ġfocus Ġand Ġnot Ġallow Ġhover ing Ġon Ġparent Ġmenu ) ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Next Window Pos ( popup Pos , ĠCon d . Always ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġflags Ġ= ĠW f . Child Menu Ġor ĠW f . Always Auto Resize Ġor ĠW f . No Move Ġor ĠW f . No Title Bar Ġor ĠW f . No Saved Settings Ġor ĠW f . No Nav Focus ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( window . flags Ġhas Ġ( Wf . Popup Ġor ĠW f . Child Menu )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflags Ġ= Ġflags Ġor ĠW f . Child Window ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmenu Is Open Ġcan Ġbe Ġ' false ' Ġwhen Ġthe Ġpopup Ġis Ġcompletely Ġcli pped Ġ( e . g . Ġzero Ġsize Ġdisplay ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Is Open Ġ= Ġbegin Popup Ex ( id , Ġflags ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmenu Is Open ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠOnly Ġcall ĠEnd Menu () Ġif ĠBegin Menu () Ġreturns Ġtrue ! Ġ*/ ĊĠĠĠ Ġfun Ġend Menu () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* Ġ ĠNav : ĠWhen Ġa Ġleft Ġmove Ġrequest Ġ_ within Ġour Ġchild Ġmenu _ Ġfailed , Ġclose Ġthe Ġmenu . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠA Ġmenu Ġdoesn 't Ġclose Ġitself Ġbecause ĠEnd MenuBar () Ġwants Ġthe Ġcatch Ġthe Ġlast ĠLeft <> Right Ġinputs . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHowever , Ġit Ġmeans Ġthat Ġwith Ġthe Ġcurrent Ġcode , Ġa Ġbegin Menu () Ġfrom Ġoutside Ġanother Ġmenu Ġor Ġa Ġmenu - bar Ġwon 't Ġbe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclo s able Ġwith Ġthe ĠLeft Ġdirection . ĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġwindow Ġ= Ġg . current Window !! ĊĠĠĠĠĠĠĠ Ġg . nav Window ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . parent Window Ġ=== Ġwindow Ġ&& Ġg . nav Move Dir Ġ== ĠDir . Left Ġ&& Ġnav Move Request But No Result Y et () Ġ&& Ġwindow . dc . layout Type Ġ== ĠL t . Vertical ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose Popup To Level ( g . open Popup Stack . last Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Move Request Cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġend Popup () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġreturn Ġtrue Ġwhen Ġactivated . Ġshortcuts Ġare Ġdisplayed Ġfor Ġconvenience Ġbut Ġnot Ġprocessed Ġby ĠImGui Ġat Ġthe Ġmoment ĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmenu Item ( label : ĠString , Ġshortcut : ĠString Ġ= Ġ"", Ġselected : ĠBoolean Ġ= Ġfalse , Ġenabled : ĠBoolean Ġ= Ġtrue ): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġwindow Ġ= Ġcurrent Window ĊĠĠĠĠĠĠĠ Ġif Ġ( window . skip Items ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġval Ġpos Ġ= ĠVec 2 ( window . dc . cursor Pos ) ĊĠĠĠĠĠĠĠ Ġval Ġlabel Size Ġ= Ġcalc Text Size ( label , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġflags Ġ= ĠS f . Pressed On Release Ġor Ġif Ġ( enabled ) ĠS f . None Ġelse ĠS f . Disabled ĊĠĠĠĠĠĠĠ Ġval Ġpressed : ĠBoolean ĊĠĠĠĠĠĠĠ Ġif Ġ( window . dc . layout Type Ġ== ĠL t . Horizontal ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġ ĠM imic Ġthe Ġexact Ġlayout Ġspacing Ġof Ġbegin Menu () Ġto Ġallow Ġmenu Item () Ġinside Ġa Ġmenu Ġbar , Ġwhich Ġis Ġa Ġlittle ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmis leading Ġbut Ġmay Ġbe Ġuseful ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNote Ġthat Ġin Ġthis Ġsituation Ġwe Ġrender Ġneither Ġthe Ġshortcut Ġneither Ġthe Ġselected Ġtick Ġmark ĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġw Ġ= Ġlabel Size . x ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . dc . cursor Pos . x Ġ+= Ġ( style . item Spacing . x Ġ* Ġ 0 . 5 f ). i . f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpush Style Var ( Style Var . Item Spacing , Ġstyle . item Spacing Ġ* Ġ 2 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpressed Ġ= Ġselect able ( label , Ġfalse , Ġflags , ĠVec 2 ( w , Ġ 0 f )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpop Style Var () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġ Ġ- 1 Ġspacing Ġto Ġcomp ens ate Ġthe Ġspacing Ġadded Ġwhen Ġselect able () Ġdid Ġa Ġsame Line (). ĠIt Ġwould Ġalso Ġwork ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Ġcall Ġsame Line () Ġourselves Ġafter Ġthe Ġpop Style Var (). ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . dc . cursor Pos . x Ġ+= Ġ( style . item Spacing . x Ġ* Ġ(- 1 f Ġ+ Ġ 0 . 5 f )). i . f ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshortcut Size Ġ= Ġif Ġ( shortcut . isNotEmpty ()) Ġcalc Text Size ( shortcut ) Ġelse ĠVec 2 () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġw Ġ= Ġwindow . menu Columns . decl Columns ( label Size . x , Ġshortcut Size . x , Ġ( g . fontSize Ġ* Ġ 1 . 2 f )). i . f Ġ// ĠFeedback Ġfor Ġnext Ġframe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġextra W Ġ= Ġglm . max ( 0 f , Ġcontent Region Avail . x Ġ- Ġw ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpressed Ġ= Ġselect able ( label , Ġfalse , Ġflags Ġor ĠS f . Draw Fill Avail Width , ĠVec 2 ( w , Ġ 0 f )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( shortcut Size . x Ġ> Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpush Style Color ( Col . Text , Ġstyle . colors [ Col . Text Disabled ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Text ( pos Ġ+ ĠVec 2 ( window . menu Columns . pos [ 1 ] Ġ+ Ġextra W , Ġ 0 f ), Ġshortcut , Ġ 0 , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpop Style Color () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( selected ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Check Mark ( pos Ġ+ ĠVec 2 ( window . menu Columns . pos [ 2 ] Ġ+ Ġextra W Ġ+ Ġg . fontSize Ġ* Ġ 0 . 4 f , Ġg . fontSize Ġ* Ġ 0 . 1 3 4 f Ġ* Ġ 0 . 5 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( if Ġ( enabled ) ĠCol . Text Ġelse ĠCol . Text Disabled ). u 3 2 , Ġg . fontSize Ġ* Ġ 0 . 8 6 6 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġpressed ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġreturn Ġtrue Ġwhen Ġactivated Ġ+ Ġtoggle Ġ(* p _ selected ) Ġif Ġp _ selected Ġ!= ĠNULL Ġ*/ ĊĠĠĠ Ġfun Ġmenu Item ( label : ĠString , Ġshortcut : ĠString Ġ= Ġ"", Ġp Selected : ĠBoolean Array ?, Ġenabled : ĠBoolean Ġ= Ġtrue ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( menuItem ( label , Ġshortcut , Ġp Selected ?. get ( 0 ) Ġ== Ġtrue , Ġenabled )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp Selected ?. let Ġ{ Ġit [ 0 ] Ġ= Ġ! it [ 0 ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġfalse ĊĊĠĠĠ Ġfun Ġmenu Item ( label : ĠString , Ġshortcut : ĠString Ġ= Ġ"", Ġselected : ĠK Mutable Property 0 < Boolean > ?, Ġenabled : ĠBoolean Ġ= Ġtrue ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item ( label , Ġshortcut , Ġselected ?. get () Ġ== Ġtrue , Ġenabled ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ) Ġselected ?. apply Ġ{ Ġset (! get ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ }