]> git.saurik.com Git - wxWidgets.git/blame - wxPython/demo/MouseGestures.py
Don't decref if the interpreter is not initialized, (eg. it's in its
[wxWidgets.git] / wxPython / demo / MouseGestures.py
CommitLineData
51c5e1f2
RD
1#*******************
2#By Daniel Pozmanter
51c5e1f2
RD
3
4#Thanks to Robin Dunn for taking the time to show me how to do this
5#via the mailing list.
6
7a0c9b39 7#Version 0.0.0
51c5e1f2
RD
8
9#This is a hacked version of DragAndDrop.py from the wxPython demo 2.5.2.8
10
8bd882ee 11import wx, wx.lib.dialogs
51c5e1f2
RD
12from wx.lib.gestures import MouseGestures
13
14#ToDo:
15
16#Add a dialog to record gestures (Have it showcase the manual mode)
17#Allow users to remove gestures
18
19#----------------------------------------------------------------------
20
21class TestPanel(wx.Panel):
22 def __init__(self, parent, log):
23 wx.Panel.__init__(self, parent, -1)
24
25 ID_GESTURE = wx.NewId()
7a0c9b39
RD
26 ID_MOUSE = wx.NewId()
27 ID_MODIFIER = wx.NewId()
28 ID_VISIBLE = wx.NewId()
51c5e1f2
RD
29
30 self.log = log
31
32 #Mouse Gestures:
33
8bd882ee
RD
34 self.mg = MouseGestures(self, Auto=True,
35 MouseButton=wx.MOUSE_BTN_RIGHT)
51c5e1f2
RD
36
37 self.mg.SetGesturesVisible(True)
38
7a0c9b39
RD
39 self.mg.AddGesture('LR', self.ShowSomethingClever, 'Left then Right!')
40 self.mg.AddGesture('39', self.ShowSomethingClever, 'You made a V!')
51c5e1f2
RD
41 self.mg.AddGesture('L', self.LogSomethingClever, 'You moved left')
42 self.mg.AddGesture('9', self.LogSomethingClever, 'You moved right and up')
43 self.mg.AddGesture('U', self.LogSomethingClever, 'You moved up')
7a0c9b39
RD
44 self.mg.AddGesture('DR', self.OnDownThenRight)
45 self.mg.AddGesture('LDRU', self.SetToBlue)
46 self.mg.AddGesture('RDLU', self.SetToOrange)
51c5e1f2
RD
47
48 #Widgets:
49
50 self.btnAddGesture = wx.Button(self, ID_GESTURE, 'Add New Gesture')
7a0c9b39
RD
51 self.btnChangeMouseButton = wx.Button(self, ID_MOUSE, 'Change Mouse Button')
52 self.btnChangeModifier = wx.Button(self, ID_MODIFIER, 'Change Modifier')
53 self.btnToggleVisible = wx.ToggleButton(self, ID_VISIBLE, 'Toggle Gestures Visible')
54 self.btnToggleVisible.SetValue(True)
51c5e1f2
RD
55
56 msg = "Mouse Gestures"
57 text = wx.StaticText(self, -1, "", style=wx.ALIGN_CENTRE)
58 text.SetFont(wx.Font(24, wx.SWISS, wx.NORMAL, wx.BOLD, False))
59 text.SetLabel(msg)
60
61 w,h = text.GetTextExtent(msg)
62 text.SetSize(wx.Size(w,h+1))
7a0c9b39
RD
63 text.SetForegroundColour(wx.BLUE)
64
51c5e1f2
RD
65 #Sizer:
66 outsideSizer = wx.BoxSizer(wx.VERTICAL)
67
7a0c9b39
RD
68 btnSizer = wx.BoxSizer(wx.HORIZONTAL)
69
51c5e1f2
RD
70 outsideSizer.Add(text, 0, wx.EXPAND|wx.ALL, 5)
71 outsideSizer.Add(wx.StaticLine(self, -1), 0, wx.EXPAND)
72 outsideSizer.Add(wx.StaticText(self, -1, ' '), 0, wx.EXPAND)
73 outsideSizer.Add(wx.StaticText(self, -1, 'Hold The Middle Mouse Button Down to Gesticulate'), 0, wx.EXPAND)
7a0c9b39
RD
74 outsideSizer.Add(wx.StaticText(self, -1, 'Left Then Right, Left, The Diagonal Up/Right, Down Then Right, Diagonal Down/Right Then Diagonal Up/Right, and Up are Preset'), 0, wx.EXPAND)
75 outsideSizer.Add(wx.StaticText(self, -1, 'Left,Down,Right,Up Sets the line colour to Blue.'), 0, wx.EXPAND)
76 outsideSizer.Add(wx.StaticText(self, -1, 'Right,Down,Left,Up Sets the line colour to Orange.'), 0, wx.EXPAND)
51c5e1f2 77 outsideSizer.Add(wx.StaticText(self, -1, ' '), 0, wx.EXPAND)
7a0c9b39
RD
78 btnSizer.Add(self.btnAddGesture, 0, wx.SHAPED)
79 btnSizer.Add(self.btnChangeMouseButton, 0, wx.SHAPED)
80 btnSizer.Add(self.btnChangeModifier, 0, wx.SHAPED)
81 btnSizer.Add(self.btnToggleVisible, 0, wx.SHAPED)
82 outsideSizer.Add(btnSizer, 0, wx.SHAPED)
51c5e1f2
RD
83
84 self.SetAutoLayout(True)
85 self.SetSizer(outsideSizer)
86
51c5e1f2 87 #Events:
7a0c9b39
RD
88 self.Bind(wx.EVT_BUTTON, self.OnAddGesture, id=ID_GESTURE)
89 self.Bind(wx.EVT_BUTTON, self.OnChangeMouseButton, id=ID_MOUSE)
90 self.Bind(wx.EVT_BUTTON, self.OnChangeModifiers, id=ID_MODIFIER)
91 self.Bind(wx.EVT_TOGGLEBUTTON, self.OnToggleVisible, id=ID_VISIBLE)
51c5e1f2
RD
92
93 def LogSomethingClever(self, somethingclever):
94 self.log.WriteText(somethingclever)
95
96 def OnAddGesture(self, event):
97 d = wx.TextEntryDialog(self, "Enter Gesture (LRUD1379) (EG Right Then Up Then DownLeft is RU1):", "Add New Gesture", "")
98 answer1 = d.ShowModal()
99 gesture = d.GetValue()
100 d.Destroy()
7a0c9b39 101
51c5e1f2
RD
102 d = wx.TextEntryDialog(self, 'Print the following text on "%s":' % gesture, "Gesture Action", "")
103 answer2 = d.ShowModal()
104 text = d.GetValue()
105 d.Destroy()
7a0c9b39 106
51c5e1f2
RD
107 if (answer1 == wx.ID_OK) and (answer2 == wx.ID_OK):
108 self.mg.AddGesture(gesture.upper(), self.LogSomethingClever, text)
7a0c9b39
RD
109
110 def OnChangeModifiers(self, event):
111 choices = [wx.WXK_CONTROL, wx.WXK_SHIFT, wx.WXK_ALT]
112 schoices = ['Control', 'Shift', 'Alt']
113
114 d = wx.lib.dialogs.MultipleChoiceDialog(self, 'Select Modifier Keys:\n(Select None if you do not want to use modifier keys\n\n', "Change Modifier Keys", schoices)
115 answer = d.ShowModal()
116 tuply = d.GetValue()
117 d.Destroy()
118
119 if (answer == wx.ID_OK):
120 if len(tuply) > 0:
121 modifiers = []
122 modstring = ''
123 for x in tuply:
124 modifiers.append(choices[x])
125 modstring += schoices[x] + ' '
126 self.mg.SetModifiers(modifiers)
127 self.log.WriteText('Set Modifiers to: ' + modstring)
128 else:
129 self.mg.SetModifiers()
130 self.log.WriteText('UnSet All Modifiers')
131
132 def OnChangeMouseButton(self, event):
133 choices = [wx.MOUSE_BTN_LEFT, wx.MOUSE_BTN_MIDDLE, wx.MOUSE_BTN_RIGHT]
134 schoices = ['Left', 'Middle', 'Right']
8bd882ee
RD
135 d = wx.SingleChoiceDialog(self, "Set Mouse Button To", "Change Mouse Button", schoices,
136 wx.CHOICEDLG_STYLE|wx.OK|wx.CANCEL)
7a0c9b39
RD
137 d.SetSize(wx.Size(250, 200))
138 answer = d.ShowModal()
139 i = d.GetSelection()
140 d.Destroy()
141 if (answer == wx.ID_OK):
142 self.mg.SetMouseButton(choices[i])
143 self.log.WriteText('Set the Mouse Button to ' + schoices[i])
51c5e1f2
RD
144
145 def OnDownThenRight(self):
146 self.log.WriteText('You made an "L"!')
147
7a0c9b39
RD
148 def OnToggleVisible(self, event):
149 visual = self.btnToggleVisible.GetValue()
150 self.mg.SetGesturesVisible(visual)
151 if visual:
152 self.log.WriteText('Made Gestures Visible')
153 else:
154 self.log.WriteText('Made Gestures Invisible')
155
156 def SetToBlue(self):
157 self.mg.SetGesturePen(wx.Colour(0, 144, 255), 5)
158 self.log.WriteText('Set Gesture Colour to Blue')
159
160 def SetToOrange(self):
161 self.mg.SetGesturePen(wx.Colour(255, 156, 0), 5)
162 self.log.WriteText('Set Gesture Colour to Orange')
163
164 def ShowSomethingClever(self, somethingclever):
165 d = wx.MessageDialog(self, somethingclever, 'Mouse Gesture Action', wx.OK)
166 d.ShowModal()
167 d.Destroy()
168
51c5e1f2
RD
169#----------------------------------------------------------------------
170
171def runTest(frame, nb, log):
172 win = TestPanel(nb, log)
173 return win
174
175#----------------------------------------------------------------------
176
177
178overview = """\
179<html>
180<body>
181This demo shows how to add MouseGestures
182to your program, and showcases the MouseGestures
183class in all it's mousey glory.
184<p><p>
185</body>
186</html>
187"""
188
189
190if __name__ == '__main__':
191 import sys,os
192 import run
193 run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
194
7a0c9b39 195