pygpibtoolkit/HP3562A/datablockwidget.py

Mon, 11 Feb 2008 23:36:58 +0100

author
David Douard <david.douard@logilab.fr>
date
Mon, 11 Feb 2008 23:36:58 +0100
changeset 44
c4bdd390918c
child 46
235686915f92
permissions
-rw-r--r--

added some forgoten files to Hg

44
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
1 #
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
2 import re
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
3 import numpy
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
4 from itertools import izip, count as icount
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
5
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
6 from PyQt4 import QtCore, QtGui
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
7 from PyQt4.QtCore import Qt, SIGNAL
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
8 import state_decoder
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
9 import trace_decoder
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
10 import coord_decoder
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
11 from pygpibtoolkit.qt4.mpl import QMplCanvas
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
12
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
13 children = [ ]
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
14
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
15 def getChild(datablock):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
16 """
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
17 Try to find the appropriate MDI child widget for the given datablock.
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
18 """
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
19 for child in children:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
20 if child.isValidDatablock(datablock):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
21 print "using" , child
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
22 return child
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
23 return None
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
24
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
25 class DatablockMDIChild(QtGui.QMainWindow):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
26 seqnumber = 1
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
27 _username = "Window"
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
28
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
29 @classmethod
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
30 def isValidDatablock(cls, datablock):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
31 return False
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
32
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
33 def __init__(self, datablock, name=None):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
34 QtGui.QMainWindow.__init__(self)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
35 if name is not None:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
36 self.username = name
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
37 else:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
38 self.username = self.__class__._username + " " + str(self.seqnumber)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
39 self.setAttribute(Qt.WA_DeleteOnClose)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
40 self.isUntitled = True
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
41 self.dataIsModified = False
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
42 self.setDatablock(datablock)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
43 self.setWindowTitle(self.username)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
44 self.setupUI()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
45 self.updateHeaderData()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
46
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
47 def setDatablock(self, datablock):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
48 self.datablock = datablock
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
49
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
50 def setupUI(self):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
51 # setup headers views as a docked window
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
52 assert isinstance(self._header_struct, tuple)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
53 self.headerDocks = []
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
54 self.tables = []
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
55 for i, header_struct in enumerate(self._header_struct):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
56 dock = QtGui.QDockWidget("Header" + (i>0 and (' %s'%(i+1)) or ''),
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
57 self)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
58 #dock.setFeatures(dock.NoDockWidgetFeatures)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
59 sarea = QtGui.QScrollArea(dock)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
60 dock.setWidget(sarea)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
61 self.addDockWidget(QtCore.Qt.RightDockWidgetArea, dock)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
62 self.headerDocks.append(dock)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
63
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
64 l = QtGui.QVBoxLayout(sarea)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
65 l.setContentsMargins(0,0,0,0)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
66 table = QtGui.QTableWidget(sarea)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
67 table.setAlternatingRowColors(True)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
68 table.verticalHeader().hide()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
69 l.addWidget(table, 1)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
70 self.tables.append(table)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
71
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
72 def setupRowsHeight(self, table):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
73 if table.verticalHeader().minimumSectionSize()>0:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
74 cellsize = table.verticalHeader().minimumSectionSize()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
75 else:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
76 cellsize = 17
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
77 table.verticalHeader().setDefaultSectionSize(cellsize)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
78
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
79 def updateHeaderData(self):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
80 for header, table, header_struct in izip(self.header, self.tables, self._header_struct):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
81 table.clear()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
82 table.setRowCount(len(header_struct))
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
83 table.setColumnCount(2)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
84 table.setHorizontalHeaderLabels(['Parameter', 'Value'])
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
85 bool_re = re.compile(r'((?P<before>.*) )?(?P<flag>\w+/\w+)( (?P<after>.*))?')
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
86 item = QtGui.QTableWidgetItem()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
87 item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
88 for i, row in enumerate(header_struct):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
89 key = row[0]
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
90 typ = row[1]
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
91 if typ is None:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
92 continue
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
93 val = header.get(key, "N/A")
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
94 if isinstance(val, basestring):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
95 val = unicode(val)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
96 elif typ is bool and isinstance(val, typ):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
97 m = bool_re.match(key)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
98 if m:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
99 d = m.groupdict()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
100 key = ""
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
101 if d['before']:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
102 key += d['before']
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
103 if d['after']:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
104 key += d['after']
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
105 key = key.capitalize()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
106 val = d['flag'].split('/')[not val]
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
107 else:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
108 val = str(val)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
109 else:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
110 val = str(val)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
111 val = val.strip()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
112 if val:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
113 if val[0]+val[-1] in ['""',"''"]:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
114 val = val[1:-1]
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
115 if val[0:2]+val[-1] in ['u""',"u''"]:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
116 val = val[2:-1]
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
117 while val and val.endswith(chr(0)):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
118 val = val[:-1]
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
119 item_ = QtGui.QTableWidgetItem(item)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
120 item_.setText(key)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
121 table.setItem(i, 0, item_)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
122 item_ = QtGui.QTableWidgetItem(item)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
123 item_.setText(val)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
124 table.setItem(i, 1, item_)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
125 table.resizeColumnsToContents()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
126 table.resizeRowsToContents()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
127 # self.setupRowsHeight(self.table)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
128
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
129 def userFriendlyName(self):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
130 return self.username
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
131
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
132 def closeEvent(self, event):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
133 if self.maybeSave():
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
134 event.accept()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
135 else:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
136 event.ignore()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
137
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
138 def maybeSave(self):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
139 if self.dataIsModified:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
140 ret = QtGui.QMessageBox.warning(self, self.tr("MDI"),
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
141 self.tr("'%1' has been modified.\n"\
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
142 "Do you want to save your changes?")
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
143 .arg(self.userFriendlyCurrentFile()),
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
144 QtGui.QMessageBox.Yes | QtGui.QMessageBox.Default,
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
145 QtGui.QMessageBox.No,
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
146 QtGui.QMessageBox.Cancel | QtGui.QMessageBox.Escape)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
147 if ret == QtGui.QMessageBox.Yes:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
148 return self.save()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
149 elif ret == QtGui.QMessageBox.Cancel:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
150 return False
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
151 return True
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
152
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
153 class StateBinaryDatablockMDIChild(DatablockMDIChild):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
154 _username = "State"
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
155 _header_struct = state_decoder.HEADER,
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
156 @classmethod
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
157 def isValidDatablock(cls, datablock):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
158 try:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
159 h = state_decoder.decode_state(datablock)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
160 assert len(h)>0
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
161 return True
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
162 except Exception, e:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
163 return False
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
164
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
165 def setDatablock(self, datablock):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
166 DatablockMDIChild.setDatablock(self, datablock)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
167 self.header = [state_decoder.decode_state(self.datablock)]
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
168
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
169 class TraceBinaryDatablockMDIChild(DatablockMDIChild):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
170 _username = "Trace"
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
171 _header_struct = trace_decoder.HEADER,
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
172 @classmethod
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
173 def isValidDatablock(cls, datablock):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
174 try:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
175 h, t = trace_decoder.decode_trace(datablock)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
176 assert len(h)>0
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
177 assert len(t)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
178 return True
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
179 except Exception, e:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
180 return False
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
181
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
182 def __init__(self, datablock, name=None):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
183 DatablockMDIChild.__init__(self, datablock, name)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
184 self.updateTraceData()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
185
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
186 def setDatablock(self, datablock):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
187 DatablockMDIChild.setDatablock(self, datablock)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
188 self.header, self.trace = trace_decoder.decode_trace(self.datablock)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
189 self.header = [self.header]
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
190
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
191 def setupToolBar(self):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
192 toolbar = QtGui.QToolBar(self)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
193 self.addToolBar(toolbar)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
194 self.ylogaction = QtGui.QAction(self.tr("Y Log"), self)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
195 self.ylogaction.setCheckable(True)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
196 self.connect(self.ylogaction, SIGNAL('toggled(bool)'),
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
197 self.updateTraceData)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
198 toolbar.addAction(self.ylogaction)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
199
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
200
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
201 def setupUI(self):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
202 self.setupToolBar()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
203 DatablockMDIChild.setupUI(self)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
204 mainw = QtGui.QWidget(self)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
205 l = QtGui.QVBoxLayout(mainw)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
206 l.setMargin(0)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
207 self.canvas = QMplCanvas(self)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
208 l.addWidget(self.canvas, 1)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
209 self.setCentralWidget(mainw)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
210
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
211 def updateTraceData(self):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
212 #self.canvas.deleteLater()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
213 #self.canvas = QMplCanvas()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
214 #self.centralWidget().layout().addWidget(self.canvas, 1)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
215 f0 = self.header[0]['Start freq value']
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
216 dx = self.header[0]['Delta X-axis']
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
217 n = self.header[0]['Number of elements']
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
218 x = numpy.linspace(f0, f0+dx*n, len(self.trace))
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
219 y = self.trace.copy()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
220 if self.ylogaction.isChecked():
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
221 minv = min(y[y>0])
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
222 y[y==0] = minv
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
223 y = numpy.log10(y)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
224 y = y*10
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
225 self.canvas.axes.clear()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
226 self.canvas.axes.plot(x, y, 'r')
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
227 self.canvas.axes.set_xlim(min(x), max(x))
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
228 self.canvas.axes.set_xlabel("%s (%s)"%(self.header[0]['Domain'],
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
229 self.header[0]['X axis units']))
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
230 if self.ylogaction.isChecked():
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
231 self.canvas.axes.set_ylabel('db (%s)'%self.header[0]['Amplitude units'])
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
232 else:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
233 self.canvas.axes.set_ylabel('%s'%self.header[0]['Amplitude units'])
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
234 self.canvas.axes.grid(True)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
235 if self.header[0]['Display function']:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
236 self.canvas.axes.set_title(self.header[0]['Display function'])
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
237
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
238 self.canvas.repaint()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
239
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
240 class CoordBinaryDatablockMDIChild(TraceBinaryDatablockMDIChild):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
241 _username = "Coord"
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
242 _header_struct = coord_decoder.TRACE_HEADER, coord_decoder.HEADER,
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
243 @classmethod
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
244 def isValidDatablock(cls, datablock):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
245 try:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
246 h1, h2, t = coord_decoder.decode_coord(datablock)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
247 assert len(h1)>0
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
248 assert len(h2)>0
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
249 assert len(t)>0
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
250 return True
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
251 except Exception, e:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
252 return False
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
253 def setupToolBar(self):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
254 pass
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
255
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
256 def setDatablock(self, datablock):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
257 DatablockMDIChild.setDatablock(self, datablock)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
258 h1, h2, self.trace = coord_decoder.decode_coord(self.datablock)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
259 self.header = [h2, h1]
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
260
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
261 def updateTraceData(self):
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
262 f0 = self.header[0]['Start freq value']
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
263 dx = self.header[0]['Delta X-axis']
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
264 n = self.header[0]['Number of elements']
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
265 x = numpy.linspace(f0, f0+dx*n, len(self.trace))
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
266 y = self.trace.copy()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
267
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
268 y = y.clip(min=self.header[1]['Min value of data'],
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
269 max=self.header[1]['Max value of data'],)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
270
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
271 self.canvas.axes.clear()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
272 self.canvas.axes.plot(x, y, 'r')
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
273 self.canvas.axes.set_xlim(min(x), max(x))
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
274 self.canvas.axes.set_xlabel("%s (%s)"%(self.header[0]['Domain'],
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
275 self.header[0]['X axis units']))
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
276 self.canvas.axes.set_ylabel('%s (%s)'%(self.header[1]['Y coordinates'],
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
277 self.header[0]['Amplitude units']))
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
278 self.canvas.axes.grid(True)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
279 if self.header[0]['Display function']:
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
280 self.canvas.axes.set_title(self.header[0]['Display function'])
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
281
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
282 self.canvas.repaint()
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
283
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
284
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
285 children.append(CoordBinaryDatablockMDIChild)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
286 children.append(TraceBinaryDatablockMDIChild)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
287 children.append(StateBinaryDatablockMDIChild)
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
288
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
289
c4bdd390918c added some forgoten files to Hg
David Douard <david.douard@logilab.fr>
parents:
diff changeset
290

mercurial