pygpibtoolkit/HP3562A/q3562A.py

changeset 49
a682ee5e6a55
parent 48
ceb2a3a4de6c
child 52
12dfcb77a590
equal deleted inserted replaced
48:ceb2a3a4de6c 49:a682ee5e6a55
158 self.getCoordAct = QtGui.QAction(self.tr("Get coord"), self) 158 self.getCoordAct = QtGui.QAction(self.tr("Get coord"), self)
159 self.getCoordAct.setCheckable(True) 159 self.getCoordAct.setCheckable(True)
160 self.getCoordAct.setStatusTip(self.tr("Retrieve Coord from GPIB device")) 160 self.getCoordAct.setStatusTip(self.tr("Retrieve Coord from GPIB device"))
161 self.connect(self.getCoordAct, QtCore.SIGNAL("triggered()"), 161 self.connect(self.getCoordAct, QtCore.SIGNAL("triggered()"),
162 self.getCoord) 162 self.getCoord)
163
164 self.channelActGroups = QtGui.QActionGroup(self)
165 self.channelActGroups.setExclusive(True)
166 self.channelAAct = QtGui.QAction(self.tr("Channel A"), self)
167 self.channelAAct.setCheckable(True)
168 self.channelAAct.setChecked(True)
169 self.channelAAct.setStatusTip(self.tr("Retrieve from channel A"))
170 self.channelActGroups.addAction(self.channelAAct)
171 self.channelBAct = QtGui.QAction(self.tr("Channel B"), self)
172 self.channelBAct.setCheckable(True)
173 self.channelBAct.setStatusTip(self.tr("Retrieve from channel B"))
174 self.channelActGroups.addAction(self.channelBAct)
175
163 176
164 def setupUi(self): 177 def setupUi(self):
165 self.connect(self.actionPreferences, SIGNAL('triggered(bool)'), 178 self.connect(self.actionPreferences, SIGNAL('triggered(bool)'),
166 self.preferencesTriggered) 179 self.preferencesTriggered)
167 self.connect(self.actionQuit, SIGNAL('triggered(bool)'), 180 self.connect(self.actionQuit, SIGNAL('triggered(bool)'),
227 self.fileMenu = self.menuBar().addMenu(self.tr("&File")) 240 self.fileMenu = self.menuBar().addMenu(self.tr("&File"))
228 self.fileMenu.addAction(self.openAct) 241 self.fileMenu.addAction(self.openAct)
229 self.fileMenu.addAction(self.saveAsAct) 242 self.fileMenu.addAction(self.saveAsAct)
230 self.fileMenu.addSeparator() 243 self.fileMenu.addSeparator()
231 self.fileMenu.addAction(self.exitAct) 244 self.fileMenu.addAction(self.exitAct)
232 245
246 self.deviceMenu = self.menuBar().addMenu(self.tr("&Device"))
247 self.deviceMenu.addAction(self.channelAAct)
248 self.deviceMenu.addAction(self.channelBAct)
249 self.deviceMenu.addSeparator()
250 self.deviceMenu.addAction(self.getStateAct)
251 self.deviceMenu.addAction(self.getTraceAct)
252 self.deviceMenu.addAction(self.getCoordAct)
253
233 self.windowMenu = self.menuBar().addMenu(self.tr("&Window")) 254 self.windowMenu = self.menuBar().addMenu(self.tr("&Window"))
234 self.connect(self.windowMenu, QtCore.SIGNAL("aboutToShow()"), 255 self.connect(self.windowMenu, QtCore.SIGNAL("aboutToShow()"),
235 self.updateWindowMenu) 256 self.updateWindowMenu)
236 257
237
238
239 self.deviceMenu = self.menuBar().addMenu(self.tr("&Device"))
240 self.deviceMenu.addAction(self.getStateAct)
241 self.deviceMenu.addAction(self.getTraceAct)
242 self.deviceMenu.addAction(self.getCoordAct)
243
244 self.menuBar().addSeparator() 258 self.menuBar().addSeparator()
245 self.helpMenu = self.menuBar().addMenu(self.tr("&Help")) 259 self.helpMenu = self.menuBar().addMenu(self.tr("&Help"))
246 self.helpMenu.addAction(self.aboutAct) 260 self.helpMenu.addAction(self.aboutAct)
247 self.helpMenu.addAction(self.aboutQtAct) 261 self.helpMenu.addAction(self.aboutQtAct)
248 262
250 self.fileToolBar = self.addToolBar(self.tr("File")) 264 self.fileToolBar = self.addToolBar(self.tr("File"))
251 self.fileToolBar.setObjectName('filetoolbar') 265 self.fileToolBar.setObjectName('filetoolbar')
252 self.fileToolBar.addAction(self.openAct) 266 self.fileToolBar.addAction(self.openAct)
253 self.fileToolBar.addAction(self.saveAsAct) 267 self.fileToolBar.addAction(self.saveAsAct)
254 self.fileToolBar.addSeparator() 268 self.fileToolBar.addSeparator()
255 self.fileToolBar.addAction(self.getStateAct) 269
256 self.fileToolBar.addAction(self.getTraceAct) 270 self.deviceToolBar = self.addToolBar(self.tr("Device"))
257 self.fileToolBar.addAction(self.getCoordAct) 271 self.deviceToolBar.setObjectName('devicetoolbar')
272 self.deviceToolBar.addAction(self.channelAAct)
273 self.deviceToolBar.addAction(self.channelBAct)
274 self.deviceToolBar.addSeparator()
275 self.deviceToolBar.addAction(self.getStateAct)
276 self.deviceToolBar.addAction(self.getTraceAct)
277 self.deviceToolBar.addAction(self.getCoordAct)
258 278
259 def createStatusBar(self): 279 def createStatusBar(self):
260 self.statusBar().showMessage(self.tr("Ready")) 280 self.statusBar().showMessage(self.tr("Ready"))
261 281
262 def preferencesTriggered(self, checked=False): 282 def preferencesTriggered(self, checked=False):
330 self.getTraceAct.setChecked(False) 350 self.getTraceAct.setChecked(False)
331 self.getCoordAct.setChecked(False) 351 self.getCoordAct.setChecked(False)
332 self.statusBar().showMessage(self.tr("Received data block"), 2000) 352 self.statusBar().showMessage(self.tr("Received data block"), 2000)
333 self._receiving = False 353 self._receiving = False
334 354
355 def selectChannel(self):
356 if self.channelAAct.isEnabled():
357 self.captureThread.sendCommand("A")
358 else:
359 self.captureThread.sendCommand("B")
360
335 def getState(self): 361 def getState(self):
336 if self._receiving: 362 if self._receiving:
337 return 363 return
338 self._receiving = True 364 self._receiving = True
339 self.statusBar().showMessage(self.tr("Waiting for a %1 data block").arg(self.tr('state'))) 365 self.statusBar().showMessage(self.tr("Waiting for a %1 data block").arg(self.tr('state')))
340 self.getStateAct.setChecked(True) 366 self.getStateAct.setChecked(True)
341 self.captureThread.startCapture(mode="state") 367 self.captureThread.startCapture(mode="state")
342 368
343 def getTrace(self): 369 def getTrace(self):
344 if self._receiving: 370 if self._receiving:
345 return 371 return
346 self._receiving = True 372 self._receiving = True
347 self.statusBar().showMessage(self.tr("Waiting for a %1 data block").arg(self.tr('trace'))) 373 self.statusBar().showMessage(self.tr("Waiting for a %1 data block").arg(self.tr('trace')))
348 self.getTraceAct.setChecked(True) 374 self.getTraceAct.setChecked(True)
375 self.selectChannel()
349 self.captureThread.startCapture(mode="trace") 376 self.captureThread.startCapture(mode="trace")
350 377
351 def getCoord(self): 378 def getCoord(self):
352 if self._receiving: 379 if self._receiving:
353 return 380 return
354 self._receiving = True 381 self._receiving = True
355 self.statusBar().showMessage(self.tr("Waiting for a %1 data block").arg(self.tr('coord'))) 382 self.statusBar().showMessage(self.tr("Waiting for a %1 data block").arg(self.tr('coord')))
356 self.getCoordAct.setChecked(True) 383 self.getCoordAct.setChecked(True)
384 self.selectChannel()
357 self.captureThread.startCapture(mode="coord") 385 self.captureThread.startCapture(mode="coord")
358 386
359 class GPIBReceiver(QtCore.QThread): 387 class GPIBConnection(QtCore.QThread):
360 def __init__(self, cnx): 388 def __init__(self, cnx):
361 QtCore.QThread.__init__(self) 389 QtCore.QThread.__init__(self)
362 self.gpibdumper = cnx 390 self.gpibdumper = cnx
363 391
364 self._cancelmutex = QtCore.QMutex() 392 self._cancelmutex = QtCore.QMutex()
373 def cancel(self): 401 def cancel(self):
374 self._cancelmutex.lock() 402 self._cancelmutex.lock()
375 self._cancel = True 403 self._cancel = True
376 self._cancelmutex.unlock() 404 self._cancelmutex.unlock()
377 405
406 def sendCommand(self, cmd):
407 if self._capturing:
408 return
409 return self.gpibdumper.send_command(cmd)
410
378 def startCapture(self, mode): 411 def startCapture(self, mode):
379 self._modemutex.lock() 412 self._modemutex.lock()
380 self._mode = mode 413 self._mode = mode
381 self._modemutex.unlock() 414 self._modemutex.unlock()
382 self._startstop.wakeOne() 415 self._startstop.wakeOne()

mercurial