MathGroup Archive 2008

[Date Index] [Thread Index] [Author Index]

Search the Archive

Simulating a Mouseover Event with EventHandler

  • To: mathgroup at smc.vnet.net
  • Subject: [mg91233] Simulating a Mouseover Event with EventHandler
  • From: chandler.seth at gmail.com
  • Date: Sun, 10 Aug 2008 01:54:14 -0400 (EDT)

I believe I have solved the problem I posed in a previous post or at
least improved my understanding of the problem. Here is an example of
what I am trying to do. The idea is that when one passes over an edge
the edge and associated vertices change their appearance. And when one
clicks on a vertex, the vertex and certain associated edges likewise
light up. The keys to solving my problem were (1) understanding the
MouseMoved event; (2) understanding the concept of nested
EventHandlers and (3) understanding how the PassEventsDown option
works.

The next step is to wrap this in a Manipulate so that the effect of
clicking and passing over can be set by the user. By way of example, I
would like to be able to set the variable "direction" interactively.
At the moment, I can't get this to work, as wrapping everything up in
a Manipulate seems to block the behavior I want. If anyone has more
elegant solutions (or an understanding of the Manipulate issue), I
would be grateful.

With[{g = {1 -> 2, 1 -> 10, 2 -> 3, 2 -> 7, 3 -> 4, 3 -> 6, 3 -> 9,
    4 -> 6, 4 -> 7, 4 -> 8, 5 -> 8, 5 -> 9, 5 -> 10, 6 -> 8,
    6 -> 10}}, (activeEdge = {};
  Dynamic@EventHandler[
    LayeredGraphPlot[g, Left, ImageSize -> 600, AspectRatio -> 1/3,
     EdgeRenderingFunction -> (Dynamic@
         EventHandler[{If[MemberQ[activeEdge, #2],
            Directive[Green, Thickness[0.02]],
            Directive[Red, Thickness[0.005]]],
           Arrow[#1]}, {"MouseMoved" :> (activeEdge = {#2})},
          PassEventsUp -> False] &),
     VertexRenderingFunction -> (Dynamic@
         EventHandler[
          With[{activeQ = MemberQ[activeEdge, #2]}, {If[activeQ,
             Directive[Green], Directive[Red]],
            Disk[#1,
             If[activeQ, Scaled[0.05],
              Scaled[0.03]]]}], {"MouseClicked" :> (test =
              List @@@ Cases[g, _[_, #2]];
             activeEdge =
              Switch[direction, 1, List @@@ Cases[g, _[_, #2]], 2,
               List @@@ Cases[g, _[#2, _]], _,
               List @@@ Cases[g, _[___, #2, ___]]])},
          PassEventsUp ->
           False] &)], {"MouseMoved" :> (activeEdge = {})},
    PassEventsDown -> True])]


  • Prev by Date: Re: Piecewise function involving matrices
  • Next by Date: Re: Re: sum question
  • Previous by thread: Re: Printing and Exporting graphics images from Mathematica 6 to PDF?
  • Next by thread: Integrating DiracDelta to get UnitStep