File: NavCanvas.py

package info (click to toggle)
wxwidgets2.6 2.6.3.2.1.5%2Betch1
  • links: PTS
  • area: main
  • in suites: etch
  • size: 83,228 kB
  • ctags: 130,941
  • sloc: cpp: 820,043; ansic: 113,030; python: 107,485; makefile: 42,996; sh: 10,305; lex: 194; yacc: 128; xml: 95; pascal: 74
file content (118 lines) | stat: -rw-r--r-- 3,730 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
"""
A Panel that includes the FloatCanvas and Navigation controls

"""

import wx

import FloatCanvas, Resources

ID_ZOOM_IN_BUTTON = wx.NewId()
ID_ZOOM_OUT_BUTTON = wx.NewId()
ID_ZOOM_TO_FIT_BUTTON = wx.NewId()
ID_MOVE_MODE_BUTTON = wx.NewId()
ID_POINTER_BUTTON = wx.NewId()


#---------------------------------------------------------------------------
    
class NavCanvas(wx.Panel):
    """
    NavCanvas.py

    This is a high level window that encloses the FloatCanvas in a panel
    and adds a Navigation toolbar.

    Copyright: Christopher Barker)

    License: Same as the version of wxPython you are using it with

    Please let me know if you're using this!!!

    Contact me at:

    Chris.Barker@noaa.gov

    """ 
    
    def __init__(self, parent, id = -1,
                 size = wx.DefaultSize,
                 **kwargs): # The rest just get passed into FloatCanvas

        wx.Panel.__init__( self, parent, id, wx.DefaultPosition, size)

        ## Create the vertical sizer for the toolbar and Panel
        box = wx.BoxSizer(wx.VERTICAL)
        box.Add(self.BuildToolbar(), 0, wx.ALL | wx.ALIGN_LEFT | wx.GROW, 4)
        
        self.Canvas = FloatCanvas.FloatCanvas( self, wx.NewId(),
                                   size = wx.DefaultSize,
                                   **kwargs)
        box.Add(self.Canvas,1,wx.GROW)

        box.Fit(self)
        self.SetSizer(box)

        # default to Mouse mode
        self.ToolBar.ToggleTool(ID_POINTER_BUTTON,1)
        self.Canvas.SetMode("Mouse")
        
        return None

    def __getattr__(self, name):
        """
        Delegate all extra methods to the Canvas
        """
        attrib = getattr(self.Canvas, name)
        ## add the attribute to this module's dict for future calls
        self.__dict__[name] = attrib
        return attrib

    def BuildToolbar(self):
        tb = wx.ToolBar(self,-1)
        self.ToolBar = tb
        
        tb.SetToolBitmapSize((24,24))
        
        tb.AddTool(ID_POINTER_BUTTON, Resources.getPointerBitmap(), isToggle=True, shortHelpString = "Pointer")
        wx.EVT_TOOL(self, ID_POINTER_BUTTON, self.SetToolMode)

        tb.AddTool(ID_ZOOM_IN_BUTTON, Resources.getMagPlusBitmap(), isToggle=True, shortHelpString = "Zoom In")
        wx.EVT_TOOL(self, ID_ZOOM_IN_BUTTON, self.SetToolMode)
        
        tb.AddTool(ID_ZOOM_OUT_BUTTON, Resources.getMagMinusBitmap(), isToggle=True, shortHelpString = "Zoom Out")
        wx.EVT_TOOL(self, ID_ZOOM_OUT_BUTTON, self.SetToolMode)
        
        tb.AddTool(ID_MOVE_MODE_BUTTON, Resources.getHandBitmap(), isToggle=True, shortHelpString = "Move")
        wx.EVT_TOOL(self, ID_MOVE_MODE_BUTTON, self.SetToolMode)
        
        tb.AddSeparator()
        
        tb.AddControl(wx.Button(tb, ID_ZOOM_TO_FIT_BUTTON, "Zoom To Fit",wx.DefaultPosition, wx.DefaultSize))
        wx.EVT_BUTTON(self, ID_ZOOM_TO_FIT_BUTTON, self.ZoomToFit)

        tb.Realize()
        S = tb.GetSize()
        tb.SetSizeHints(S[0],S[1])
        return tb

    def SetToolMode(self,event):
        for id in [ID_ZOOM_IN_BUTTON,
                   ID_ZOOM_OUT_BUTTON,
                   ID_MOVE_MODE_BUTTON,
                   ID_POINTER_BUTTON]:
            self.ToolBar.ToggleTool(id,0)
        self.ToolBar.ToggleTool(event.GetId(),1)
        if event.GetId() == ID_ZOOM_IN_BUTTON:
            self.Canvas.SetMode("ZoomIn")
        elif event.GetId() == ID_ZOOM_OUT_BUTTON:
            self.Canvas.SetMode("ZoomOut")
        elif event.GetId() == ID_MOVE_MODE_BUTTON:
            self.Canvas.SetMode("Move")
        elif event.GetId() == ID_POINTER_BUTTON:
            self.Canvas.SetMode("Mouse")


    def ZoomToFit(self,Event):
        self.Canvas.ZoomToBB()