From deepayan.sarkar at gmail.com  Thu Oct 23 21:55:08 2008
From: deepayan.sarkar at gmail.com (Deepayan Sarkar)
Date: Thu, 23 Oct 2008 12:55:08 -0700
Subject: [Rd] Getting the panel location of a xyplot matrix using a
	mouse click in a GDCanvas
In-Reply-To: <332394640810231226h518bceb8h61c0132218566a4e@mail.gmail.com>
References: <332394640810231226h518bceb8h61c0132218566a4e@mail.gmail.com>
Message-ID: <eb555e660810231255x31d428abt22e1cb3a28a9d933@mail.gmail.com>

On Thu, Oct 23, 2008 at 12:26 PM, Daniel Kornhauser
<dkor at northwestern.edu> wrote:
> Hi:
>
> I would like to find out the panel of a xyplot matrix where a mouse clicked.
>
> I know this functionality is already bundled in trellis.focus but I can't
> use it because I am coding a stand alone application in Java using with
> GDCanvas as a graphics device.
>
> I tried calling trellis.focus from Java with:
>   re.eval("t = trellis.focus()"));
> However it did not work for an embedded GDCanvas. The above call to the
> trellis.focus() returns null no matter where I click.
>
> (Side note: the functionality must be implemented in the GDCanvas because
> trellis.focus does work correctly in JGR)
>
> I wish to handle all the user GUI events in Java to evaluate different
> commands in an Rengine.
> With a GDCanvas, it's straightforward to get the x y position of a mouse
> click with the standard e.getX() and e.getY()
> So my handler would look like:
>    public void mouseClicked(MouseEvent e) {
>        System.out.println("Clicked" + e.getX() + " " + e.getY());
>        System.out.println(re.eval("t = trellis.focus()"));
>        System.out.println(re.eval("t"));
>       // I would update the panel here ...
>    }
>
> I am only using Java because:
> - I am proficient in Java GUI programmer
> - It is multiplatform
>
> Another way of posing the question is:
> Given the coordinates from grid.location how can I find out the plane of an
> xyplot matrix where the user clicked.
>
> I have tried to figure out how to do it from code using trellis.clickFocus,
> but I have have only been playing with R for a week, so I am quite lost
> reading R code.

The approach in trellis.clickFocus should get you close. One important
point is that

clickLoc <- grid.locator("npc")

returns the location in NPC, whereas your e.getX() and e.getY() would
be in device coordinates. help(grconvertX) should tell you how to make
the conversion.

-Deepayan



[Rd] Getting the panel location of a xyplot matrix using a mouse click in a GDCanvas
Deepayan Sarkar