Hi,
I recently modified my NavCanvas to support zooming in and out using the
mouse scroll. I've attached the version hoping it will be useful or if
NavCanvas feels like it would want this feature added. I know its not
cross-platform friendly but I can't test/develop it on any other system
but windows.
Cheers
Astan
"""
A Panel that includes the FloatCanvas and Navigation controls
"""
import wx
import FloatCanvas, Resources
class NavCanvas(wx.Panel):
"""
NavCanvas.py
This is a high level window that encloses the FloatCanvas in a panel
and adds a Navigation toolbar.
"""
def __init__(self,
parent,
id = wx.ID_ANY,
size = wx.DefaultSize,
**kwargs): # The rest just get passed into FloatCanvas
wx.Panel.__init__(self, parent, id, size=size)
self.BuildToolbar()
## Create the vertical sizer for the toolbar and Panel
box = wx.BoxSizer(wx.VERTICAL)
box.Add(self.ToolBar, 0, wx.ALL | wx.ALIGN_LEFT | wx.GROW, 4)
self.Canvas = FloatCanvas.FloatCanvas(self, **kwargs)
box.Add(self.Canvas, 1, wx.GROW)
self.SetSizerAndFit(box)
import GUIMode # here so that it doesn't get imported before wx.App()
self.GUIZoomIn = GUIMode.GUIZoomIn(self.Canvas)
self.GUIZoomOut = GUIMode.GUIZoomOut(self.Canvas)
self.GUIMove = GUIMode.GUIMove(self.Canvas)
self.GUIMouse = GUIMode.GUIMouse(self.Canvas)
# default to Mouse mode
self.ToolBar.ToggleTool(self.PointerTool.GetId(), True)
self.Canvas.SetMode(self.GUIMouse)
return None
def BuildToolbar(self):
tb = wx.ToolBar(self)
self.ToolBar = tb
tb.SetToolBitmapSize((24,24))
self.PointerTool = tb.AddRadioTool(wx.ID_ANY,
bitmap=Resources.getPointerBitmap(), shortHelp = "Pointer")
self.Bind(wx.EVT_TOOL, lambda evt : self.SetMode(Mode=self.GUIMouse),
self.PointerTool)
self.ZoomInTool = tb.AddRadioTool(wx.ID_ANY,
bitmap=Resources.getMagPlusBitmap(), shortHelp = "Zoom In")
self.Bind(wx.EVT_TOOL, lambda evt : self.SetMode(Mode=self.GUIZoomIn),
self.ZoomInTool)
self.ZoomOutTool = tb.AddRadioTool(wx.ID_ANY,
bitmap=Resources.getMagMinusBitmap(), shortHelp = "Zoom Out")
self.Bind(wx.EVT_TOOL, lambda evt : self.SetMode(Mode=self.GUIZoomOut),
self.ZoomOutTool)
self.MoveTool = tb.AddRadioTool(wx.ID_ANY,
bitmap=Resources.getHandBitmap(), shortHelp = "Move")
self.Bind(wx.EVT_TOOL, lambda evt : self.SetMode(Mode=self.GUIMove),
self.MoveTool)
tb.AddSeparator()
self.Bind(wx.EVT_MOUSEWHEEL,self.ZoomInOut)
self.ZoomButton = wx.Button(tb, label="Zoom To Fit")
tb.AddControl(self.ZoomButton)
self.ZoomButton.Bind(wx.EVT_BUTTON, self.ZoomToFit)
tb.Realize()
## fixme: remove this when the bug is fixed!
wx.CallAfter(self.HideShowHack) # this required on wxPython 2.8.3 on
OS-X
return tb
def HideShowHack(self):
##fixme: remove this when the bug is fixed!
"""
Hack to hide and show button on toolbar to get around OS-X bug on
wxPython2.8 on OS-X
"""
self.ZoomButton.Hide()
self.ZoomButton.Show()
def SetMode(self, Mode):
self.Canvas.SetMode(Mode)
def ZoomToFit(self,Event):
self.Canvas.ZoomToBB()
self.Canvas.SetFocus() # Otherwise the focus stays on the Button, and
wheel events are lost.
def ZoomInOut(self,Event):
if Event.GetWheelRotation() > 0:
self.SetMode(Mode=self.GUIZoomIn)
self.ToolBar.ToggleTool(self.ZoomInTool.GetId(),True)
else:
self.SetMode(Mode=self.GUIZoomOut)
self.ToolBar.ToggleTool(self.ZoomOutTool.GetId(),True)
_______________________________________________
FloatCanvas mailing list
[email protected]
http://mail.mithis.com/cgi-bin/mailman/listinfo/floatcanvas