Parent Directory
|
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 |