RFC: double click support in matplotlib

matplotlib doesn't support double clicks, and I was wondering if that
was a design decision, or something that had been relegated to the "to
do" box for someday. Hoping that it was still in the "todo" box, I
think I can put most of it in without too much trouble, and supply you
with a patch.

The changes would be:
  1) an extra flag MouseEvent, so that in a button_press_event
handler, you can can tell if the press was a result of a double click
or not, and
  2) code in the backends to catch and set the double click flag properly

I looked through the backends, and it was clear what to do in order to
support double clicks for all but backend_macosx.py. I might be able
to deduce what to do there, but will likely need some support from
someone in order to get that one done.

To support the double clicks, I would rather not create a new event
like 'button_doubleclick_event', for backwards compatibility. I
believe that if we just stick with 'button_press_event' and set an
extra flag within the MouseEvent, any existing mpl code will still
work properly, because the normal sequence of events on a double click
are; DOWN, UP, DBLCLICK, UP. In current versions of matplotlib, the
DBLCLICK event is treated as a DOWN, and the strategy of just adding a
extra flag in MouseEvent would mean that existing mpl code would still
see the double click event as a DOWN.

Anyway, I want to "throw a feeler" out there, and ask if the patch
would be accepted were I to go ahead and do it. I didn't want to spend
the time working on it if a decision had already been made a while
back to not ever support double clicks.

···

--
Daniel Hyams
dhyams@...149...

My vote would be yes, but I think i would want it as a separate event. Consider some of the widgets like lasso and the zoom bbox. If one were to attach a button_press_event for the purpose of detecting double clicks, I would imagine that there may exist conflicts (or those widget codes would have to be adjusted to exclusively respond only to single clicks). Would existing widgets also fire even if a double-click occured?

My 2 cents,
Ben Rootl

···

On Saturday, October 22, 2011, Daniel Hyams <dhyams@…149…> wrote:

matplotlib doesn’t support double clicks, and I was wondering if that
was a design decision, or something that had been relegated to the "to

do" box for someday. Hoping that it was still in the “todo” box, I
think I can put most of it in without too much trouble, and supply you
with a patch.

The changes would be:

  1. an extra flag MouseEvent, so that in a button_press_event
    handler, you can can tell if the press was a result of a double click
    or not, and
  2. code in the backends to catch and set the double click flag properly

I looked through the backends, and it was clear what to do in order to
support double clicks for all but backend_macosx.py. I might be able
to deduce what to do there, but will likely need some support from

someone in order to get that one done.

To support the double clicks, I would rather not create a new event
like ‘button_doubleclick_event’, for backwards compatibility. I
believe that if we just stick with ‘button_press_event’ and set an

extra flag within the MouseEvent, any existing mpl code will still
work properly, because the normal sequence of events on a double click
are; DOWN, UP, DBLCLICK, UP. In current versions of matplotlib, the

DBLCLICK event is treated as a DOWN, and the strategy of just adding a
extra flag in MouseEvent would mean that existing mpl code would still
see the double click event as a DOWN.

Anyway, I want to “throw a feeler” out there, and ask if the patch

would be accepted were I to go ahead and do it. I didn’t want to spend
the time working on it if a decision had already been made a while
back to not ever support double clicks.

I added double click support in, here in the following issue report:

I did use the extra flag in MouseEvent, but I can change this to a
separate event if all think that it is appropriate; I still favor the
flag for backwards compatibility. All backends are done except for
cocoagg; see the issue report above for details.

···

On Sat, Oct 22, 2011 at 10:57 PM, Benjamin Root <ben.root@...553...> wrote:

On Saturday, October 22, 2011, Daniel Hyams <dhyams@...149...> wrote:

matplotlib doesn't support double clicks, and I was wondering if that
was a design decision, or something that had been relegated to the "to
do" box for someday. Hoping that it was still in the "todo" box, I
think I can put most of it in without too much trouble, and supply you
with a patch.

The changes would be:
1) an extra flag MouseEvent, so that in a button_press_event
handler, you can can tell if the press was a result of a double click
or not, and
2) code in the backends to catch and set the double click flag properly

I looked through the backends, and it was clear what to do in order to
support double clicks for all but backend_macosx.py. I might be able
to deduce what to do there, but will likely need some support from
someone in order to get that one done.

To support the double clicks, I would rather not create a new event
like 'button_doubleclick_event', for backwards compatibility. I
believe that if we just stick with 'button_press_event' and set an
extra flag within the MouseEvent, any existing mpl code will still
work properly, because the normal sequence of events on a double click
are; DOWN, UP, DBLCLICK, UP. In current versions of matplotlib, the
DBLCLICK event is treated as a DOWN, and the strategy of just adding a
extra flag in MouseEvent would mean that existing mpl code would still
see the double click event as a DOWN.

Anyway, I want to "throw a feeler" out there, and ask if the patch
would be accepted were I to go ahead and do it. I didn't want to spend
the time working on it if a decision had already been made a while
back to not ever support double clicks.

My vote would be yes, but I think i would want it as a separate event.
Consider some of the widgets like lasso and the zoom bbox. If one were to
attach a button_press_event for the purpose of detecting double clicks, I
would imagine that there may exist conflicts (or those widget codes would
have to be adjusted to exclusively respond only to single clicks). Would
existing widgets also fire even if a double-click occured?

My 2 cents,
Ben Rootl

--
Daniel Hyams
dhyams@...149...

Thanks, I will look deeper into it tommorow. I am curious about what you mean by backwards compatibility? How do you see having a new event type cause issues?

Ben Root

···

On Sunday, October 23, 2011, Daniel Hyams <dhyams@…149…> wrote:

I added double click support in, here in the following issue report:

https://github.com/matplotlib/matplotlib/issues/550

I did use the extra flag in MouseEvent, but I can change this to a
separate event if all think that it is appropriate; I still favor the
flag for backwards compatibility. All backends are done except for

cocoagg; see the issue report above for details.

Ben:

In current versions of matplotlib, the double click event is always
just bound to the same handler as a single press. Such as the
following code in backends/backend_wx.py:

  bind(self,wx.EVT_LEFT_DOWN,self._onLeftButtonDown)
  bind(self,wx.EVT_LEFT_DCLICK,self._onLeftButtonDown)
  bind(self,wx.EVT_LEFT_UP,self._onLeftButtonUp)

so when someone double clicks on a canvas, the events sent would be
(except in the case of gtk*) DOWN, UP, DOWN, UP.

If a new event is created for the double click, the sequence of events
generated would be DOWN,UP,DCLICK,UP.

If you use a flag with in MouseEvent to signify the double click, the
sequence of events would be DOWN,UP,DOWN.DCLICK,UP basically. This
means that old code that relies on double clicks generating a DOWN
event would still work, and newer code that wants to use double clicks
need only query the MouseEvent.dblclick flag to see if a press was a
double click or not.

* for gtk, the event sequence for a double click is currently
DOWN,UP,DOWN,DOWN,UP. That's the only backend that I've seen that
does it this way. With the patch, the event sequence would be
DOWN,UP,DOWN,DOWN.DCLICK,UP.

···

On Sun, Oct 23, 2011 at 9:13 PM, Benjamin Root <ben.root@...553...> wrote:

On Sunday, October 23, 2011, Daniel Hyams <dhyams@...149...> wrote:

I added double click support in, here in the following issue report:

Add double click support to matplotlib · Issue #550 · matplotlib/matplotlib · GitHub

I did use the extra flag in MouseEvent, but I can change this to a
separate event if all think that it is appropriate; I still favor the
flag for backwards compatibility. All backends are done except for
cocoagg; see the issue report above for details.

Thanks, I will look deeper into it tommorow. I am curious about what you
mean by backwards compatibility? How do you see having a new event type
cause issues?

Ben Root

--
Daniel Hyams
dhyams@...149...

Hello,

I don't think the web documentation is showing up for the new Sankey

diagram class. I probably failed to hook it in somehow. Could
someone please take a look?

The file that would have produced the documentation is

matplotlib/lib/matplotlib/sankey.py. I expected it would show up at
http://matplotlib.sourceforge.net/api/sankey_api.html ,
but there’s no such page.

The Sankey demos did show up on the examples page and in the

gallery. Also, the overview showed up in the “what’s new” page.

Thanks.

Kevin

Whoops. I knew I forgot something. API docs are generated from adding a file to doc/api. I will upload a patch soon.

Ben

···

On Sunday, October 30, 2011, Kevin Davies <kdavies4@…149…> wrote:

Hello,

I don’t think the web documentation is showing up for the new Sankey diagram class. I probably failed to hook it in somehow. Could someone please take a look?

The file that would have produced the documentation is matplotlib/lib/matplotlib/sankey.py. I expected it would show up at
http://matplotlib.sourceforge.net/api/sankey_api.html, but there’s no such page.

The Sankey demos did show up on the examples page and in the gallery. Also, the overview showed up in the “what’s new” page.

Thanks.

Kevin