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_()