Mercurial > lcfOS
diff python/hexviewer.py @ 124:d38729d35c4d stm32f4discovery flash with python
New implementation of hexfile viewer
author | Windel Bouwman |
---|---|
date | Sat, 12 Jan 2013 15:43:10 +0100 |
parents | ad14c7c52589 |
children | 205578c96a79 |
line wrap: on
line diff
--- a/python/hexviewer.py Sat Jan 12 12:52:18 2013 +0100 +++ b/python/hexviewer.py Sat Jan 12 15:43:10 2013 +0100 @@ -60,11 +60,62 @@ self.hexfile = hf self.update() +class HexFileModel(QAbstractTableModel): + def __init__(self): + super().__init__() + self.hexFile = None + def setHexFile(self, hf): + self.hexFile = hf + self.modelReset.emit() + def getHexFile(self): + return self.hexFile + HexFile = property(getHexFile, setHexFile) + def rowCount(self, parent): + if self.hexFile: + region = self.hexFile.regions[-1] + r = len(region.data) + s = r >> 4 + if r % 16 != 0: + s += 1 + return s + return 0 + def columnCount(self, parent): + return 16 + 1 + def headerData(self, section, orientation, role): + if role == Qt.DisplayRole: + if orientation == Qt.Horizontal: + if section in range(16): + return '{0:X}'.format(section) + elif section == 16: + return 'Ascii' + elif orientation == Qt.Vertical: + region = self.hexFile.regions[-1] + addr = region.address + 16 * section + return '0x{0:X}'.format(addr) + def data(self, index, role): + if index.isValid(): + row = index.row() + col = index.column() + region = self.hexFile.regions[-1] + chunk = region.data[row * 16: row * 16 + 16] + + if role == Qt.DisplayRole: + if col in range(16): + return '{0:02X}'.format(chunk[col]) + else: + s = chunk.decode(encoding='ascii', errors='replace') + return s + class BinViewMain(QMainWindow): def __init__(self): super().__init__() self.bv = BinViewer() - self.setCentralWidget(self.bv) + #self.setCentralWidget(self.bv) + tableView = QTableView() + self.setCentralWidget(tableView) + self.hfm = HexFileModel() + self.hfm.modelReset.connect(tableView.resizeColumnsToContents) + tableView.setModel(self.hfm) mb = self.menuBar() fileMenu = mb.addMenu("File") @@ -86,9 +137,11 @@ app = QApplication(sys.argv) bv = BinViewMain() bv.show() - bv.bv.setHexFile(hexfile.HexFile('audio.hex')) + hf = hexfile.HexFile('audio.hex') + #bv.bv.setHexFile( + bv.hfm.HexFile = hf qpv = QtPropertyViewer() qpv.propertyModel.InspectedWidget = bv - qpv.show() + #qpv.show() app.exec_()