4 #Thanks to Robin Dunn for taking the time to show me how to do this
9 #This is a hacked version of DragAndDrop.py from the wxPython demo 2.5.2.8
11 import wx
, wx
.lib
.dialogs
12 from wx
.lib
.gestures
import MouseGestures
16 #Add a dialog to record gestures (Have it showcase the manual mode)
17 #Allow users to remove gestures
19 #----------------------------------------------------------------------
21 class TestPanel(wx
.Panel
):
22 def __init__(self
, parent
, log
):
23 wx
.Panel
.__init
__(self
, parent
, -1)
25 ID_GESTURE
= wx
.NewId()
27 ID_MODIFIER
= wx
.NewId()
28 ID_VISIBLE
= wx
.NewId()
34 self
.mg
= MouseGestures(self
, Auto
=True,
35 MouseButton
=wx
.MOUSE_BTN_RIGHT
)
37 self
.mg
.SetGesturesVisible(True)
39 self
.mg
.AddGesture('LR', self
.ShowSomethingClever
, 'Left then Right!')
40 self
.mg
.AddGesture('39', self
.ShowSomethingClever
, 'You made a V!')
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')
44 self
.mg
.AddGesture('DR', self
.OnDownThenRight
)
45 self
.mg
.AddGesture('LDRU', self
.SetToBlue
)
46 self
.mg
.AddGesture('RDLU', self
.SetToOrange
)
50 self
.btnAddGesture
= wx
.Button(self
, ID_GESTURE
, 'Add New Gesture')
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)
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))
61 w
,h
= text
.GetTextExtent(msg
)
62 text
.SetSize(wx
.Size(w
,h
+1))
63 text
.SetForegroundColour(wx
.BLUE
)
66 outsideSizer
= wx
.BoxSizer(wx
.VERTICAL
)
68 btnSizer
= wx
.BoxSizer(wx
.HORIZONTAL
)
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
)
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
)
77 outsideSizer
.Add(wx
.StaticText(self
, -1, ' '), 0, wx
.EXPAND
)
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
)
84 self
.SetAutoLayout(True)
85 self
.SetSizer(outsideSizer
)
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
)
93 def LogSomethingClever(self
, somethingclever
):
94 self
.log
.WriteText(somethingclever
)
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()
102 d
= wx
.TextEntryDialog(self
, 'Print the following text on "%s":' % gesture
, "Gesture Action", "")
103 answer2
= d
.ShowModal()
107 if (answer1
== wx
.ID_OK
) and (answer2
== wx
.ID_OK
):
108 self
.mg
.AddGesture(gesture
.upper(), self
.LogSomethingClever
, text
)
110 def OnChangeModifiers(self
, event
):
111 choices
= [wx
.WXK_CONTROL
, wx
.WXK_SHIFT
, wx
.WXK_ALT
]
112 schoices
= ['Control', 'Shift', 'Alt']
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()
119 if (answer
== wx
.ID_OK
):
124 modifiers
.append(choices
[x
])
125 modstring
+= schoices
[x
] + ' '
126 self
.mg
.SetModifiers(modifiers
)
127 self
.log
.WriteText('Set Modifiers to: ' + modstring
)
129 self
.mg
.SetModifiers()
130 self
.log
.WriteText('UnSet All Modifiers')
132 def OnChangeMouseButton(self
, event
):
133 choices
= [wx
.MOUSE_BTN_LEFT
, wx
.MOUSE_BTN_MIDDLE
, wx
.MOUSE_BTN_RIGHT
]
134 schoices
= ['Left', 'Middle', 'Right']
135 d
= wx
.SingleChoiceDialog(self
, "Set Mouse Button To", "Change Mouse Button", schoices
,
136 wx
.CHOICEDLG_STYLE|wx
.OK|wx
.CANCEL
)
137 d
.SetSize(wx
.Size(250, 200))
138 answer
= d
.ShowModal()
141 if (answer
== wx
.ID_OK
):
142 self
.mg
.SetMouseButton(choices
[i
])
143 self
.log
.WriteText('Set the Mouse Button to ' + schoices
[i
])
145 def OnDownThenRight(self
):
146 self
.log
.WriteText('You made an "L"!')
148 def OnToggleVisible(self
, event
):
149 visual
= self
.btnToggleVisible
.GetValue()
150 self
.mg
.SetGesturesVisible(visual
)
152 self
.log
.WriteText('Made Gestures Visible')
154 self
.log
.WriteText('Made Gestures Invisible')
157 self
.mg
.SetGesturePen(wx
.Colour(0, 144, 255), 5)
158 self
.log
.WriteText('Set Gesture Colour to Blue')
160 def SetToOrange(self
):
161 self
.mg
.SetGesturePen(wx
.Colour(255, 156, 0), 5)
162 self
.log
.WriteText('Set Gesture Colour to Orange')
164 def ShowSomethingClever(self
, somethingclever
):
165 d
= wx
.MessageDialog(self
, somethingclever
, 'Mouse Gesture Action', wx
.OK
)
169 #----------------------------------------------------------------------
171 def runTest(frame
, nb
, log
):
172 win
= TestPanel(nb
, log
)
175 #----------------------------------------------------------------------
181 This demo shows how to add MouseGestures
182 to your program, and showcases the MouseGestures
183 class in all it's mousey glory.
190 if __name__
== '__main__':
193 run
.main(['', os
.path
.basename(sys
.argv
[0])] + sys
.argv
[1:])