[Bio] / Speck / SpeckRemoteControl.py Repository:
ViewVC logotype

Annotation of /Speck/SpeckRemoteControl.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (view) (download) (as text)

1 : sheradon 1.1 #!/usr/bin/env python
2 :    
3 :     from wxPython.wx import *
4 :     from xmlrpclib import *
5 :    
6 :    
7 :     class remoteControlWindow(wxFrame):
8 :     # ------------------------------
9 :     def __init__(self, title, size):
10 :     # ------------------------------
11 :     wxFrame.__init__(self, None, wxID_ANY, title, size=size)
12 :    
13 :     self.addressBox = wxTextCtrl(self, wxID_ANY, 'http://chromium.mcs.anl.gov:8008')
14 :     self.serverBtn = wxButton(self, 3, 'Set Server')
15 :     self.rcp = remoteControlPanel(self)
16 :     EVT_BUTTON(self.serverBtn, 3, self.rcp.setServer)
17 :    
18 :     self.flipButtons = wxCheckBox(self, wxID_ANY, 'Reverse mouse buttons')
19 :     self.zoomOut = wxButton(self, 1, '-')
20 :     self.zoomIn = wxButton(self, 2, '+')
21 :     EVT_BUTTON(self.zoomOut, 1, self.rcp.zoomOut)
22 :     EVT_BUTTON(self.zoomIn, 2, self.rcp.zoomIn)
23 :    
24 :     # Assemble sizers
25 :     sizer = wxBoxSizer(wxVERTICAL)
26 :     sizer2 = wxBoxSizer(wxHORIZONTAL)
27 :     sizer3 = wxBoxSizer(wxHORIZONTAL)
28 :     sizer.Add(self.rcp, 1, wxEXPAND|wxALL, 5)
29 :     sizer.Add(sizer2, 0, wxEXPAND|wxALL, 5)
30 :     sizer.Add(sizer3, 0, wxALIGN_BOTTOM|wxEXPAND|wxALL, 5)
31 :     sizer2.Add(self.flipButtons, 1, wxEXPAND)
32 :     sizer2.Add(self.zoomOut, 0, wxLEFT, 10)
33 :     sizer2.Add(self.zoomIn, 0)
34 :     sizer3.Add(self.addressBox, 1, wxEXPAND)
35 :     sizer3.Add(self.serverBtn, 0, wxALIGN_RIGHT|wxLEFT, 10)
36 :     self.SetAutoLayout(1)
37 :     self.SetSizer(sizer)
38 :    
39 :     class remoteControlPanel(wxPanel):
40 :     # -------------------------
41 :     def __init__(self, parent):
42 :     # -------------------------
43 :     wxPanel.__init__(self, parent, wxID_ANY, wxDefaultPosition,
44 :     wxDefaultSize, wxSIMPLE_BORDER)
45 :     self.parent = parent
46 :     self.setServer()
47 :    
48 :     EVT_KEY_DOWN(self, self.OnKeyDown)
49 :     EVT_KEY_UP(self, self.OnKeyUp)
50 :     EVT_LEFT_DOWN(self, self.OnLeftDown)
51 :     EVT_LEFT_UP(self, self.OnLeftUp)
52 :     EVT_LEFT_DCLICK(self, self.OnLeftDClick)
53 :     EVT_RIGHT_DOWN(self, self.OnRightDown)
54 :     EVT_RIGHT_UP(self, self.OnRightUp)
55 :     EVT_RIGHT_DCLICK(self, self.OnRightDClick)
56 :     EVT_MIDDLE_DOWN(self, self.OnMiddleDown)
57 :     EVT_MIDDLE_UP(self, self.OnMiddleUp)
58 :     EVT_MIDDLE_DCLICK(self, self.OnMiddleDClick)
59 :     EVT_MOTION(self, self.OnMotion)
60 :    
61 :     # -------------------------
62 :     def setServer(self, event=None):
63 :     # -------------------------
64 :     self.uri = self.parent.addressBox.GetValue()
65 :     self.server = Server(self.uri)
66 :    
67 :     # -------------------------
68 :     def zoomOut(self, event):
69 :     # -------------------------
70 :     try: self.server.fireKeyDown(45)
71 :     except: pass
72 :     # -------------------------
73 :     def zoomIn(self, event):
74 :     # -------------------------
75 :     try: self.server.fireKeyDown(61)
76 :     except: pass
77 :    
78 :     # -------------------------
79 :     def OnKeyDown(self, event):
80 :     # -------------------------
81 :     try: self.server.fireKeyDown(event.GetKeyCode())
82 :     except: pass
83 :     # -------------------------
84 :     def OnKeyUp(self, event):
85 :     # -------------------------
86 :     try: self.server.fireKeyUp(event.GetKeyCode())
87 :     except: pass
88 :    
89 :     # ---------------------------------
90 :     def scaledEventCoords(self, event):
91 :     # ---------------------------------
92 :     """Returns you (x, y), floats in [0, 1].
93 :     Used so that your remote-control client window can
94 :     be any size and its events will always be interpreted
95 :     correctly by the server.
96 :     @type event: wxMouseEvent
97 :     @rtype: float, float
98 :     """
99 :     x = float(event.GetX()) / float(self.GetSize()[0])
100 :     y = float(event.GetY()) / float(self.GetSize()[1])
101 :     return x, y
102 :    
103 :     # -------------------------
104 :     def OnMotion(self, event):
105 :     # -------------------------
106 :     x = float(event.GetX()) / float(self.GetSize()[0])
107 :     y = float(event.GetY()) / float(self.GetSize()[1])
108 :     try: self.server.fireMotion(x, y)
109 :     except: pass
110 :    
111 :     # -------------------------
112 :     def OnLeftDown(self, event):
113 :     # -------------------------
114 :     x = float(event.GetX()) / float(self.GetSize()[0])
115 :     y = float(event.GetY()) / float(self.GetSize()[1])
116 :     if self.parent.flipButtons.GetValue():
117 :     try: self.server.fireRightDown(x, y)
118 :     except: pass
119 :     else:
120 :     try: self.server.fireLeftDown(x, y)
121 :     except: pass
122 :     # -------------------------
123 :     def OnLeftUp(self, event):
124 :     # -------------------------
125 :     x = float(event.GetX()) / float(self.GetSize()[0])
126 :     y = float(event.GetY()) / float(self.GetSize()[1])
127 :     if self.parent.flipButtons.GetValue():
128 :     try: self.server.fireRightUp(x, y)
129 :     except: pass
130 :     else:
131 :     try: self.server.fireLeftUp(x, y)
132 :     except: pass
133 :     # -------------------------
134 :     def OnLeftDClick(self, event):
135 :     # -------------------------
136 :     x = float(event.GetX()) / float(self.GetSize()[0])
137 :     y = float(event.GetY()) / float(self.GetSize()[1])
138 :     if self.parent.flipButtons.GetValue():
139 :     try: self.server.fireRightDClick(x, y)
140 :     except: pass
141 :     else:
142 :     try: self.server.fireLeftDClick(x, y)
143 :     except: pass
144 :    
145 :     # -------------------------
146 :     def OnRightDown(self, event):
147 :     # -------------------------
148 :     x = float(event.GetX()) / float(self.GetSize()[0])
149 :     y = float(event.GetY()) / float(self.GetSize()[1])
150 :     if self.parent.flipButtons.GetValue():
151 :     try: self.server.fireLeftDown(x, y)
152 :     except: pass
153 :     else:
154 :     try: self.server.fireRightDown(x, y)
155 :     except: pass
156 :     # -------------------------
157 :     def OnRightUp(self, event):
158 :     # -------------------------
159 :     x = float(event.GetX()) / float(self.GetSize()[0])
160 :     y = float(event.GetY()) / float(self.GetSize()[1])
161 :     if self.parent.flipButtons.GetValue():
162 :     try: self.server.fireLeftUp(x, y)
163 :     except: pass
164 :     else:
165 :     try: self.server.fireRightUp(x, y)
166 :     except: pass
167 :     # -------------------------
168 :     def OnRightDClick(self, event):
169 :     # -------------------------
170 :     x = float(event.GetX()) / float(self.GetSize()[0])
171 :     y = float(event.GetY()) / float(self.GetSize()[1])
172 :     if self.parent.flipButtons.GetValue():
173 :     try: self.server.fireLeftDClick(x, y)
174 :     except: pass
175 :     else:
176 :     try: self.server.fireRightDClick(x, y)
177 :     except: pass
178 :    
179 :     # -------------------------
180 :     def OnMiddleDown(self, event):
181 :     # -------------------------
182 :     x, y = self.scaledEventCoords(event)
183 :     try: self.server.fireMiddleDown(x, y)
184 :     except: pass
185 :     # -------------------------
186 :     def OnMiddleUp(self, event):
187 :     # -------------------------
188 :     x, y = self.scaledEventCoords(event)
189 :     try: self.server.fireMiddleUp(x, y)
190 :     except: pass
191 :     # -------------------------
192 :     def OnMiddleDClick(self, event):
193 :     # -------------------------
194 :     x, y = self.scaledEventCoords(event)
195 :     try: self.server.fireMiddleDClick(x, y)
196 :     except: pass
197 :    
198 :    
199 :    
200 :    
201 :     # ------------------------
202 :     if __name__ == '__main__':
203 :     # ------------------------
204 :     uri = 'http://chromium:10321'
205 :     server = ServerProxy(uri)
206 :     app = wxPySimpleApp()
207 :     win = remoteControlWindow('Speck Remote Control', (360, 240))
208 :     win.Show(True)
209 :     app.MainLoop()
210 :    

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3