Hi,

I'm trying to use the models vocabulary in order to implement keyboard 
navigation on menus. I still have some work to do, but right now I have 
something like this:

:: prepare-menu ( menu -- )
     f <model> :> model
     menu menu-items :> items
     items [ model add-connection ] each
     model menu model<< ;

Here menu is a gadget that contains menu-item gadgets. I have a 
model-changed on my menu-item like this:

M: menu-item model-changed
     swap value>> over = >>selected? relayout-1 ;

My menu-items inherit from button and have a gesture handler setup like 
this:

: activate-item ( item -- )
     dup find-menu set-control-value ;

: inactivate-item ( item -- )
     f swap find-menu set-control-value ;

M: menu-item handle-gesture
     [
         {
             { [ over mouse-enter? ] [ nip activate-item ] }
             { [ over mouse-leave? ] [ nip inactivate-item ] }
             [ 2drop ]
         } cond
     ] 2keep call-next-method ;

The problem I'm having is that the model-changed doesn't seem to trigger 
at all on the menu-items as I mouse over them. I expected the following 
sequence of events:
(1) mouse-enter on menu-item
(2) gesture handler updates value on menu model
(3) menu model triggers model changed on all menu-item(s)
(4) menu-item(s) update their appearances based on model value

I know for sure that:
  - the gesture handler is being invoked
  - the menu gadget has its model slot populated

Is there any reason the model-changed might not be triggered? I see that 
set-model first checks its "locked?" slot before doing anything. Does 
the UI set "locked?" to true during the event handling?

Thanks,
Sankar


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most 
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Factor-talk mailing list
Factor-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/factor-talk

Reply via email to