Tue, 12 Feb 2008 19:55:02 +0100
add THD computation for simple traces of power spectrum
39 | 1 | # |
2 | ||
3 | import os, sys | |
4 | import time | |
5 | import glob | |
6 | ||
7 | from PyQt4 import QtGui, QtCore, uic | |
8 | from PyQt4.QtCore import SIGNAL, Qt | |
9 | ||
10 | if "-m" in sys.argv: | |
11 | from dump_datablock_mockup import HP3562dumper | |
43
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
12 | else: |
39 | 13 | from dump_datablock import HP3562dumper |
14 | ||
42
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
15 | from pygpibtoolkit.qt4.qpreferences import BaseItem, IntItem, UnicodeItem, ColorItem |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
16 | from pygpibtoolkit.qt4.qpreferences import PointItem, SizeItem, ByteArrayItem |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
17 | from pygpibtoolkit.qt4.qpreferences import AbstractPreferences |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
18 | from pygpibtoolkit.qt4.qpreferenceseditor import PreferencesEditor |
39 | 19 | |
42
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
20 | from pygpibtoolkit.tools import str_num_cmp |
39 | 21 | |
42
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
22 | import pygpibtoolkit.qt4.resources_rc |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
23 | |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
24 | from datablockwidget import getChild |
39 | 25 | |
26 | class Preferences(AbstractPreferences): | |
27 | ORGANISATION="Logilab" | |
42
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
28 | APPLICATION="q3562" |
39 | 29 | |
30 | _pos = PointItem() | |
31 | _size = SizeItem() | |
32 | _appState = ByteArrayItem() | |
33 | ||
34 | device = UnicodeItem(default='/dev/ttyUSB0', | |
35 | name=u'device', | |
36 | description=u'GPIB device', | |
37 | group="GPIB settings") | |
42
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
38 | address = IntItem(default=0, min=0, max=16, |
39 | 39 | name=u'GPIB address', |
40 | group="GPIB settings") | |
41 | ||
42 | background = ColorItem(default=QtGui.QColor("white"), | |
42
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
43 | name="Plots background", |
39 | 44 | group="Colors") |
45 | ||
42
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
46 | class Qt3562(QtGui.QMainWindow): |
39 | 47 | def __init__(self, parent=None): |
48 | QtGui.QMainWindow.__init__(self, parent) | |
42
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
49 | self.workspace = QtGui.QWorkspace() |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
50 | self.setCentralWidget(self.workspace) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
51 | self.connect(self.workspace, SIGNAL("windowActivated(QWidget *)"), |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
52 | self.updateMenus) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
53 | self.windowMapper = QtCore.QSignalMapper(self) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
54 | self.connect(self.windowMapper, QtCore.SIGNAL("mapped(QWidget *)"), |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
55 | self.workspace, QtCore.SLOT("setActiveWindow(QWidget *)")) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
56 | |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
57 | self.createActions() |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
58 | self.createMenus() |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
59 | self.createToolBars() |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
60 | self.createStatusBar() |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
61 | self.updateMenus() |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
62 | |
39 | 63 | self._prefs = Preferences() |
64 | self.initializeGPIB() | |
65 | if self._prefs._pos: | |
66 | self.move(self._prefs._pos) | |
67 | if self._prefs._size: | |
68 | self.resize(self._prefs._size) | |
69 | if self._prefs._appState: | |
70 | self.restoreState(self._prefs._appState) | |
71 | self.readPreferences() | |
72 | ||
73 | def readPreferences(self): | |
74 | bg = self._prefs.background | |
43
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
75 | #pen_colors = [self._prefs["color%d"%i] for i in range(8)] |
42
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
76 | #self.plotterWidget.pen_colors = pen_colors |
43
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
77 | |
42
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
78 | def createActions(self): |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
79 | self.openAct = QtGui.QAction(QtGui.QIcon(":/icons/open.png"), |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
80 | self.tr("&Open..."), self) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
81 | self.openAct.setShortcut(self.tr("Ctrl+O")) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
82 | self.openAct.setStatusTip(self.tr("Open an existing data block file")) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
83 | self.connect(self.openAct, QtCore.SIGNAL("triggered()"), self.open) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
84 | |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
85 | self.saveAsAct = QtGui.QAction(self.tr("Save &As..."), self) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
86 | self.saveAsAct.setStatusTip(self.tr("Save the document under a new name")) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
87 | self.connect(self.saveAsAct, QtCore.SIGNAL("triggered()"), self.saveAs) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
88 | |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
89 | self.exitAct = QtGui.QAction(self.tr("E&xit"), self) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
90 | self.exitAct.setShortcut(self.tr("Ctrl+Q")) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
91 | self.exitAct.setStatusTip(self.tr("Exit the application")) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
92 | self.connect(self.exitAct, QtCore.SIGNAL("triggered()"), self.close) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
93 | |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
94 | self.closeAct = QtGui.QAction(self.tr("Cl&ose"), self) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
95 | self.closeAct.setShortcut(self.tr("Ctrl+W")) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
96 | self.closeAct.setStatusTip(self.tr("Close the active window")) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
97 | self.connect(self.closeAct, QtCore.SIGNAL("triggered()"), |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
98 | self.workspace.closeActiveWindow) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
99 | |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
100 | self.closeAllAct = QtGui.QAction(self.tr("Close &All"), self) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
101 | self.closeAllAct.setStatusTip(self.tr("Close all the windows")) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
102 | self.connect(self.closeAllAct, QtCore.SIGNAL("triggered()"), |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
103 | self.workspace.closeAllWindows) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
104 | |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
105 | self.tileAct = QtGui.QAction(self.tr("&Tile"), self) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
106 | self.tileAct.setStatusTip(self.tr("Tile the windows")) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
107 | self.connect(self.tileAct, QtCore.SIGNAL("triggered()"), |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
108 | self.workspace.tile) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
109 | |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
110 | self.cascadeAct = QtGui.QAction(self.tr("&Cascade"), self) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
111 | self.cascadeAct.setStatusTip(self.tr("Cascade the windows")) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
112 | self.connect(self.cascadeAct, QtCore.SIGNAL("triggered()"), |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
113 | self.workspace.cascade) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
114 | |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
115 | self.arrangeAct = QtGui.QAction(self.tr("Arrange &icons"), self) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
116 | self.arrangeAct.setStatusTip(self.tr("Arrange the icons")) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
117 | self.connect(self.arrangeAct, QtCore.SIGNAL("triggered()"), |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
118 | self.workspace.arrangeIcons) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
119 | |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
120 | self.nextAct = QtGui.QAction(self.tr("Ne&xt"), self) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
121 | self.nextAct.setShortcut(self.tr("Ctrl+F6")) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
122 | self.nextAct.setStatusTip(self.tr("Move the focus to the next window")) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
123 | self.connect(self.nextAct, QtCore.SIGNAL("triggered()"), |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
124 | self.workspace.activateNextWindow) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
125 | |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
126 | self.previousAct = QtGui.QAction(self.tr("Pre&vious"), self) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
127 | self.previousAct.setShortcut(self.tr("Ctrl+Shift+F6")) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
128 | self.previousAct.setStatusTip(self.tr("Move the focus to the previous " |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
129 | "window")) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
130 | self.connect(self.previousAct, QtCore.SIGNAL("triggered()"), |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
131 | self.workspace.activatePreviousWindow) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
132 | |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
133 | self.separatorAct = QtGui.QAction(self) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
134 | self.separatorAct.setSeparator(True) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
135 | |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
136 | self.aboutAct = QtGui.QAction(self.tr("&About"), self) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
137 | self.aboutAct.setStatusTip(self.tr("Show the application's About box")) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
138 | self.connect(self.aboutAct, QtCore.SIGNAL("triggered()"), self.about) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
139 | |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
140 | self.aboutQtAct = QtGui.QAction(self.tr("About &Qt"), self) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
141 | self.aboutQtAct.setStatusTip(self.tr("Show the Qt library's About box")) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
142 | self.connect(self.aboutQtAct, QtCore.SIGNAL("triggered()"), |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
143 | QtGui.qApp, QtCore.SLOT("aboutQt()")) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
144 | |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
145 | |
43
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
146 | self.getStateAct = QtGui.QAction(self.tr("Get state"), self) |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
147 | self.getStateAct.setStatusTip(self.tr("Retrieve State from GPIB device")) |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
148 | self.connect(self.getStateAct, QtCore.SIGNAL("triggered()"), |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
149 | self.getState) |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
150 | self.getTraceAct = QtGui.QAction(self.tr("Get trace"), self) |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
151 | self.getTraceAct.setStatusTip(self.tr("Retrieve Trace from GPIB device")) |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
152 | self.connect(self.getTraceAct, QtCore.SIGNAL("triggered()"), |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
153 | self.getTrace) |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
154 | self.getCoordAct = QtGui.QAction(self.tr("Get coord"), self) |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
155 | self.getCoordAct.setStatusTip(self.tr("Retrieve Coord from GPIB device")) |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
156 | self.connect(self.getCoordAct, QtCore.SIGNAL("triggered()"), |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
157 | self.getCoord) |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
158 | |
39 | 159 | def setupUi(self): |
160 | self.connect(self.actionPreferences, SIGNAL('triggered(bool)'), | |
161 | self.preferencesTriggered) | |
162 | self.connect(self.actionQuit, SIGNAL('triggered(bool)'), | |
163 | self.quitTriggered) | |
164 | self.actionQuit.setShortcut(QtGui.QKeySequence(u'Ctrl+Q')) | |
165 | self.connect(self.actionOpen, SIGNAL('triggered(bool)'), | |
166 | self.openTriggered) | |
167 | self.actionOpen.setShortcut(QtGui.QKeySequence(u'Ctrl+O')) | |
168 | self.connect(self.actionSave, SIGNAL('triggered(bool)'), | |
169 | self.saveTriggered) | |
170 | self.actionSave.setShortcut(QtGui.QKeySequence(u'Ctrl+S')) | |
171 | self.connect(self.actionSaveAs, SIGNAL('triggered(bool)'), | |
172 | self.saveAsTriggered) | |
173 | ||
42
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
174 | |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
175 | def about(self): |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
176 | QtGui.QMessageBox.about(self, self.tr("About Q3562"), |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
177 | self.tr("A simple application to talk to the HP3562A DSA.")) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
178 | |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
179 | def updateMenus(self): |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
180 | hasMdiChild = (self.activeMdiChild() is not None) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
181 | self.saveAsAct.setEnabled(hasMdiChild) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
182 | self.closeAct.setEnabled(hasMdiChild) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
183 | self.closeAllAct.setEnabled(hasMdiChild) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
184 | self.tileAct.setEnabled(hasMdiChild) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
185 | self.cascadeAct.setEnabled(hasMdiChild) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
186 | self.arrangeAct.setEnabled(hasMdiChild) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
187 | self.nextAct.setEnabled(hasMdiChild) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
188 | self.previousAct.setEnabled(hasMdiChild) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
189 | self.separatorAct.setVisible(hasMdiChild) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
190 | |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
191 | def updateWindowMenu(self): |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
192 | self.windowMenu.clear() |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
193 | self.windowMenu.addAction(self.closeAct) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
194 | self.windowMenu.addAction(self.closeAllAct) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
195 | self.windowMenu.addSeparator() |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
196 | self.windowMenu.addAction(self.tileAct) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
197 | self.windowMenu.addAction(self.cascadeAct) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
198 | self.windowMenu.addAction(self.arrangeAct) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
199 | self.windowMenu.addSeparator() |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
200 | self.windowMenu.addAction(self.nextAct) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
201 | self.windowMenu.addAction(self.previousAct) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
202 | self.windowMenu.addAction(self.separatorAct) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
203 | |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
204 | windows = self.workspace.windowList() |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
205 | self.separatorAct.setVisible(len(windows) != 0) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
206 | |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
207 | i = 0 |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
208 | for child in windows: |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
209 | if i < 9: |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
210 | text = self.tr("&%1 %2").arg(i + 1).arg(child.userFriendlyName()) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
211 | else: |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
212 | text = self.tr("%1 %2").arg(i + 1).arg(child.userFriendlyName()) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
213 | i += 1 |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
214 | action = self.windowMenu.addAction(text) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
215 | action.setCheckable(True) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
216 | action.setChecked(child == self.activeMdiChild()) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
217 | self.connect(action, QtCore.SIGNAL("triggered()"), |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
218 | self.windowMapper, QtCore.SLOT("map()")) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
219 | self.windowMapper.setMapping(action, child) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
220 | |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
221 | def createMenus(self): |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
222 | self.fileMenu = self.menuBar().addMenu(self.tr("&File")) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
223 | self.fileMenu.addAction(self.openAct) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
224 | self.fileMenu.addAction(self.saveAsAct) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
225 | self.fileMenu.addSeparator() |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
226 | self.fileMenu.addAction(self.exitAct) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
227 | |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
228 | self.windowMenu = self.menuBar().addMenu(self.tr("&Window")) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
229 | self.connect(self.windowMenu, QtCore.SIGNAL("aboutToShow()"), |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
230 | self.updateWindowMenu) |
39 | 231 | |
43
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
232 | |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
233 | |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
234 | self.deviceMenu = self.menuBar().addMenu(self.tr("&Device")) |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
235 | self.deviceMenu.addAction(self.getStateAct) |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
236 | self.deviceMenu.addAction(self.getTraceAct) |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
237 | self.deviceMenu.addAction(self.getCoordAct) |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
238 | |
42
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
239 | self.menuBar().addSeparator() |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
240 | self.helpMenu = self.menuBar().addMenu(self.tr("&Help")) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
241 | self.helpMenu.addAction(self.aboutAct) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
242 | self.helpMenu.addAction(self.aboutQtAct) |
43
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
243 | |
42
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
244 | def createToolBars(self): |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
245 | self.fileToolBar = self.addToolBar(self.tr("File")) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
246 | self.fileToolBar.addAction(self.openAct) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
247 | self.fileToolBar.addAction(self.saveAsAct) |
43
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
248 | self.fileToolBar.addSeparator() |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
249 | self.fileToolBar.addAction(self.getStateAct) |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
250 | self.fileToolBar.addAction(self.getTraceAct) |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
251 | self.fileToolBar.addAction(self.getCoordAct) |
42
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
252 | |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
253 | def createStatusBar(self): |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
254 | self.statusBar().showMessage(self.tr("Ready")) |
43
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
255 | |
39 | 256 | def preferencesTriggered(self, checked=False): |
257 | PreferencesEditor(self._prefs, self).exec_() | |
258 | self.readPreferences() | |
259 | self.replotCurrent() | |
260 | ||
261 | def closeEvent(self, event): | |
262 | if 1: | |
263 | #if self.promptForSave(): | |
264 | self._prefs._pos = self.pos() | |
265 | self._prefs._size = self.size() | |
266 | self._prefs._appState = self.saveState() | |
267 | event.accept() | |
268 | else: | |
269 | event.ignore() | |
270 | ||
42
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
271 | def open(self, checked=False): |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
272 | filenames = QtGui.QFileDialog.getOpenFileNames(self, "Open a dumped data block file", '.', 'bin files (*.bin)\nAll files (*)') |
39 | 273 | self.openFiles(filenames) |
43
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
274 | |
39 | 275 | def openFiles(self, filenames): |
276 | ok = False | |
277 | for filename in filenames: | |
278 | filename = str(filename) | |
279 | if os.path.exists(filename): | |
280 | data = open(filename).read() | |
281 | name = os.path.basename(filename) | |
43
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
282 | #name = os.path.splitext(name)[0] |
42
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
283 | child_cls = getChild(data) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
284 | assert child_cls |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
285 | child = child_cls(data, name=name) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
286 | self.workspace.addWindow(child) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
287 | child.show() |
39 | 288 | ok = True |
42
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
289 | self.statusBar().showMessage(self.tr("File(s) loaded"), 2000) |
39 | 290 | return ok |
42
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
291 | |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
292 | def saveAs(self, checked=False): |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
293 | return |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
294 | # index = self.plotsView.selectionModel().currentIndex() |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
295 | # if index.isValid(): |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
296 | # filename = QtGui.QFileDialog.getSaveFileName(self, "Selecte a file name to save HPGL file", '.', 'HPGL files (*.plt)\nAll files (*)') |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
297 | # n = index.row() |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
298 | # value = unicode(self.plotsView.model().data(index, Qt.DisplayRole).toString()) |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
299 | # open(filename, 'w').write(self._plots[value]) |
39 | 300 | |
42
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
301 | def activeMdiChild(self): |
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
302 | return self.workspace.activeWindow() |
39 | 303 | |
304 | def initializeGPIB(self): | |
305 | try: | |
43
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
306 | self.gpib_dumper = HP3562dumper(device=self._prefs.device, |
39 | 307 | address=self._prefs.address, |
308 | ) | |
43
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
309 | self.captureThread = GPIBReceiver(self.gpib_dumper) |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
310 | self.connect(self.captureThread, SIGNAL('datablockDumped(const QByteArray)'), |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
311 | self.datablockReceived) |
39 | 312 | self.captureThread.start() |
313 | except Exception, e: | |
43
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
314 | print e |
39 | 315 | self.gpib_plotter = None |
316 | ||
43
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
317 | def datablockReceived(self, datablock): |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
318 | datablock = datablock.data() |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
319 | child_cls = getChild(datablock) |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
320 | assert child_cls |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
321 | child = child_cls(datablock) |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
322 | self.workspace.addWindow(child) |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
323 | child.show() |
39 | 324 | |
43
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
325 | def getState(self): |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
326 | self.captureThread.startCapture(mode="state") |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
327 | |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
328 | def getTrace(self): |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
329 | self.captureThread.startCapture(mode="trace") |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
330 | |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
331 | def getCoord(self): |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
332 | self.captureThread.startCapture(mode="coord") |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
333 | |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
334 | class GPIBReceiver(QtCore.QThread): |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
335 | def __init__(self, cnx): |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
336 | QtCore.QThread.__init__(self) |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
337 | self.gpibdumper = cnx |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
338 | |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
339 | self._cancelmutex = QtCore.QMutex() |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
340 | self._cancel = False |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
341 | self._modemutex = QtCore.QMutex() |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
342 | self._mode = None |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
343 | #self._nreceived = 0 |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
344 | self._startstopmutex = QtCore.QMutex() |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
345 | self._startstop = QtCore.QWaitCondition() |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
346 | self._capturing = False |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
347 | |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
348 | def cancel(self): |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
349 | self._cancelmutex.lock() |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
350 | self._cancel = True |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
351 | self._cancelmutex.unlock() |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
352 | |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
353 | def startCapture(self, mode): |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
354 | self._modemutex.lock() |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
355 | self._mode = mode |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
356 | self._modemutex.unlock() |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
357 | self._startstop.wakeOne() |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
358 | |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
359 | def stopCapture(self): |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
360 | self._startstopmutex.lock() |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
361 | self._capturing = False |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
362 | self._startstopmutex.unlock() |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
363 | |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
364 | def run(self): |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
365 | while 1: |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
366 | self._cancelmutex.lock() |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
367 | if self._cancel: |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
368 | return |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
369 | self._cancelmutex.unlock() |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
370 | self._startstopmutex.lock() |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
371 | if not self._capturing: |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
372 | self._startstop.wait(self._startstopmutex) |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
373 | self._capturing = True |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
374 | self._startstopmutex.unlock() |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
375 | self._modemutex.lock() |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
376 | mode = self._mode |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
377 | self._modemutex.unlock() |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
378 | datablock = self.gpibdumper.dump(mode=mode) |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
379 | self._capturing = False |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
380 | timestamp = time.time() |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
381 | if datablock: |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
382 | self.emit(SIGNAL('datablockDumped(const QByteArray)'), |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
383 | QtCore.QByteArray(datablock)) |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
384 | self.msleep(10) |
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
385 | |
39 | 386 | def main(): |
387 | import optparse | |
388 | opt = optparse.OptionParser('A simple PyQt4 HP7470A GPIB plotter emulator for USB-GPIB bundle (ProLogix)') | |
389 | opt.add_option('-m', '--mockup', default=False, | |
390 | action="store_true", | |
391 | dest='mockup', | |
392 | help='Use a pseudo GPIB connection (for test purpose)', | |
393 | ) | |
394 | opt.add_option('-v', '--verbose', default=False, | |
395 | action="store_true", | |
396 | dest="verbose", | |
397 | help="Verbose mode",) | |
398 | ||
399 | options, argv = opt.parse_args(sys.argv) | |
400 | ||
401 | a = QtGui.QApplication(argv) | |
42
a947d80b1afd
make q3562 app beginning to work; can now display state & trace datablock with some options.
David Douard <david.douard@logilab.fr>
parents:
40
diff
changeset
|
402 | w = Qt3562() |
39 | 403 | files = [f for f in argv[1:] if os.path.isfile(f)] |
404 | files.sort(cmp=str_num_cmp) | |
43
a250bd7a2022
more work on HP3562A data block dumper/displayer application.
David Douard <david.douard@logilab.fr>
parents:
42
diff
changeset
|
405 | w.openFiles(files) |
39 | 406 | |
407 | w.show() | |
408 | a.exec_() | |
409 | ||
410 | if __name__ == '__main__': | |
411 | main() |