On Tue, Jan 28, 2014 at 7:27 PM, Federico Ariza
<ariza.feder...@gmail.com> wrote:
> activate: I agree with you, renamed to trigger
>
> [I don't understand. The `__init__` gets called when the tool object
> is created (and it gets registered with a particular
> `NavigationBase`/`Figure`/`canvas`.  The tool object then sits around
> doing nothing waiting to be triggered.  I can see wanting to remove
> one of these buttons, in which case it will need to be un-registered]
>
> I am not expressing myself correctly, what I am trying to say is that
> the Tool object is only created when the tool is triggered.
> The tool.trigger method is called in the ToolBase.__init__ method
> For ToolBase tools, the object is not registered, so there is no
> reference to it anywhere, so it should be garbage collected. I can add
> a del to the object but I think is unnecesary.
> ToolPersistentBase
> [shouldn't `__init__` be called when the tool is created?
> I think the confusion here is that I don't create the tools until they
> are triggered, until then, is just a reference to the class. in the
> navitaion._tools dict.

If you do not instantiate the object until the button get pushed, why
even bother with a class, can't this just be a function?  I still
think it would be better create the `Tool` objects when you create the
figure and then call their `trigger` function when the button gets
pushed.  For one thing, this makes it dead-simple to rig up the gui
side of things (at least in Qt, I would assume the others are similar
`button.clicked.connect(self._home_tool.trigger)` ) as the functions
we care about already look like call-backs.   I am not sure that the
benefit of doing it the way you wrote it (with the button-push-time
object creation) is worth the added complexity.


I think we only need two kinds of tools, the kind you push once and
they fire off an action (simple push button, need one public function
`trigger` this works for simple actions home, quit, back and things
that create extra windows) and the kind you can toggle on and off
(need two public functions `enable` and `disable` which are what they
do when you turn them on (set up call backs to grab input) and turn
them off (tear down/disconnect the canvas call backs) which eliminates
much of the need for keeping track of locks (I think).  The toggle
kind may or may not be group in to exclusion groups (pan/zoom) but I
could see doing 'toggle grid lines' as this type as well.

Tom

-- 
Thomas Caswell
tcasw...@gmail.com

------------------------------------------------------------------------------
WatchGuard Dimension instantly turns raw network data into actionable 
security intelligence. It gives you real-time visual feedback on key
security issues and trends.  Skip the complicated setup - simply import
a virtual appliance and go from zero to informed in seconds.
http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk
_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel

Reply via email to