def drawTextMode(self, qp, row=0, howMany=1): # draw background qp.fillRect(0, row * self.fontHeight, self.COLUMNS * self.fontWidth, howMany * self.fontHeight + self.SPACER, self.backgroundBrush) # set text pen&font qp.setFont(self.font) qp.setPen(self.textPen) cemu = ConsoleEmulator(qp, self.ROWS, self.COLUMNS) self.page = self.transformationEngine.decorate() cemu.gotoXY(0, row) for i, c in enumerate( self.getDisplayablePage()[row * self.COLUMNS:(row + howMany) * self.COLUMNS]): x = i + row * self.COLUMNS c = self.transformationEngine.getChar(x) qp.setPen(self.transformationEngine.choosePen(x)) if self.transformationEngine.chooseBrush(x) is not None: qp.setBackgroundMode(1) qp.setBackground(self.transformationEngine.chooseBrush(x)) cemu.write(self.cp437(c)) qp.setBackgroundMode(0)
def drawTextMode(self, qp, row=0, howMany=1): # draw background qp.fillRect(0, row * self.fontHeight, self.COLUMNS * self.fontWidth, howMany * self.fontHeight + self.SPACER, self.backgroundBrush) # set text pen&font qp.setFont(self.font) qp.setPen(self.textPen) cemu = ConsoleEmulator(qp, self.ROWS, self.COLUMNS) self.page = self.transformationEngine.decorate() cemu.gotoXY(0, row) for i, c in enumerate(self.getDisplayablePage()[row * self.COLUMNS:(row + howMany) * self.COLUMNS]): x = i + row * self.COLUMNS c = self.transformationEngine.getChar(x) qp.setPen(self.transformationEngine.choosePen(x)) if self.transformationEngine.chooseBrush(x) is not None: qp.setBackgroundMode(1) qp.setBackground(self.transformationEngine.chooseBrush(x)) cemu.write(self.cp437(c)) qp.setBackgroundMode(0)
def drawTextMode(self, qp, row=0, howMany=1): # draw background qp.fillRect(0, row * self.fontHeight, self.CON_COLUMNS * self.fontWidth, howMany * self.fontHeight + self.SPACER, self.backgroundBrush) # set text pen&font qp.setFont(self.font) qp.setPen(self.textPen) cemu = ConsoleEmulator(qp, self.ROWS, self.CON_COLUMNS) page = self.transformationEngine.decorate() cemu.gotoXY(0, row) for i, c in enumerate( self.getDisplayablePage() [row * self.COLUMNS:(row + howMany) * self.COLUMNS]): # TODO: does not apply all decorators w = i + row * self.COLUMNS if (w + 1) % self.COLUMNS == 0: hex_s = str(hex(c)[2:]).zfill(2) else: hex_s = str(hex(c)[2:]).zfill(2) + ' ' qp.setPen(self.transformationEngine.choosePen(w)) if self.transformationEngine.chooseBrush(w) is not None: qp.setBackgroundMode(1) qp.setBackground(self.transformationEngine.chooseBrush(w)) # write hex representation cemu.write(hex_s, noBackgroudOnSpaces=True) # save hex position x, y = cemu.getXY() # write text cemu.writeAt(self.COLUMNS * 3 + self.gap + (w % self.COLUMNS), y, self.cp437(c)) # go back to hex chars cemu.gotoXY(x, y) if (w + 1) % self.COLUMNS == 0: cemu.writeLn() qp.setBackgroundMode(0)
def drawTextMode(self, qp, row=0, howMany=1): # draw background qp.fillRect(0, row * self.fontHeight, self.CON_COLUMNS * self.fontWidth, howMany * self.fontHeight + self.SPACER, self.backgroundBrush) # set text pen&font qp.setFont(self.font) qp.setPen(self.textPen) cemu = ConsoleEmulator(qp, self.ROWS, self.CON_COLUMNS) page = self.transformationEngine.decorate() cemu.gotoXY(0, row) for i, c in enumerate(self.getDisplayablePage()[row * self.COLUMNS:( row + howMany) * self.COLUMNS]): # TODO: does not apply all decorators w = i + row * self.COLUMNS if (w + 1) % self.COLUMNS == 0: hex_s = str(hex(c)[2:]).zfill(2) else: hex_s = str(hex(c)[2:]).zfill(2) + ' ' qp.setPen(self.transformationEngine.choosePen(w)) if self.transformationEngine.chooseBrush(w) is not None: qp.setBackgroundMode(1) qp.setBackground(self.transformationEngine.chooseBrush(w)) # write hex representation cemu.write(hex_s, noBackgroudOnSpaces=True) # save hex position x, y = cemu.getXY() # write text cemu.writeAt(self.COLUMNS * 3 + self.gap + (w % self.COLUMNS), y, self.cp437(c)) # go back to hex chars cemu.gotoXY(x, y) if (w + 1) % self.COLUMNS == 0: cemu.writeLn() qp.setBackgroundMode(0)
def scroll_v(self, dy): self.qpix.scroll(0, dy * self.fontHeight, self.qpix.rect()) qp = QtGui.QPainter() qp.begin(self.qpix) qp.setFont(self.font) qp.setPen(self.textPen) factor = abs(dy) cemu = ConsoleEmulator(qp, self.ROWS, self.CON_COLUMNS) if dy < 0: cemu.gotoXY(0, self.ROWS - factor) qp.fillRect(0, (self.ROWS - factor) * self.fontHeight, self.fontWidth * self.CON_COLUMNS, factor * self.fontHeight + self.SPACER, self.backgroundBrush) if dy > 0: cemu.gotoXY(0, 0) qp.fillRect(0, 0, self.fontWidth * self.CON_COLUMNS, factor * self.fontHeight, self.backgroundBrush) page = self.transformationEngine.decorate() # how many rows for row in range(factor): # for every column for i in range(self.COLUMNS): if dy < 0: # we write from top-down, so get index of the first row that will be displayed # this is why we have factor - row idx = i + (self.ROWS - (factor - row)) * self.COLUMNS if dy > 0: idx = i + (self.COLUMNS * row) qp.setPen(self.transformationEngine.choosePen(idx)) if self.transformationEngine.chooseBrush(idx) is not None: qp.setBackgroundMode(1) qp.setBackground( self.transformationEngine.chooseBrush(idx)) if len(self.getDisplayablePage()) > idx: c = self.getDisplayablePage()[idx] else: break if i == self.COLUMNS - 1: hex_s = str(hex(c)[2:]).zfill(2) else: hex_s = str(hex(c)[2:]).zfill(2) + ' ' # write hex representation cemu.write(hex_s, noBackgroudOnSpaces=True) # save hex position x, y = cemu.getXY() # write text cemu.writeAt(self.COLUMNS * 3 + self.gap + (i % self.COLUMNS), y, self.cp437(c)) # go back to hex chars cemu.gotoXY(x, y) qp.setBackgroundMode(0) cemu.writeLn() qp.end()
def draw(self): qp = QtGui.QPainter() qp.begin(self.qpix) qp.fillRect(0, 0, self.width, self.height, self.backgroundBrush) qp.setPen(self.textPen) qp.setFont(self.font) cemu = ConsoleEmulator(qp, self.height // self.fontHeight, self.width // self.fontWidth) dword = self.dataModel.getDWORD( self.viewMode.getCursorAbsolutePosition(), asString=True) if dword is None: dword = '----' sd = 'DWORD: {0}'.format(dword) pos = 'POS: {0:08x}'.format(self.viewMode.getCursorAbsolutePosition()) qword = self.dataModel.getQWORD( self.viewMode.getCursorAbsolutePosition(), asString=True) if qword is None: qword = '----' sq = 'QWORD: {0}'.format(qword) byte = self.dataModel.getBYTE( self.viewMode.getCursorAbsolutePosition(), asString=True) if byte is None: byte = '-' sb = 'BYTE: {0}'.format(byte) cemu.writeAt(1, 0, pos) cemu.writeAt(17, 0, sd) cemu.writeAt(35, 0, sq) cemu.writeAt(62, 0, sb) qp.drawLine(15 * self.fontWidth + 5, 0, 15 * self.fontWidth + 5, 50) qp.drawLine(33 * self.fontWidth + 5, 0, 33 * self.fontWidth + 5, 50) qp.drawLine(59 * self.fontWidth + 5, 0, 59 * self.fontWidth + 5, 50) qp.drawLine(71 * self.fontWidth + 5, 0, 71 * self.fontWidth + 5, 50) if self.viewMode.selector.getCurrentSelection(): u, v = self.viewMode.selector.getCurrentSelection() if u != v: pen = QtGui.QPen(QtGui.QColor(51, 153, 255), 0, QtCore.Qt.SolidLine) qp.setPen(pen) cemu.writeAt(73, 0, 'Selection: ') cemu.write('{0:x}:{1}'.format(u, v - u)) else: pen = QtGui.QPen(QtGui.QColor(128, 128, 128), 0, QtCore.Qt.SolidLine) qp.setPen(pen) cemu.writeAt(73, 0, '<no selection>') """ qp.drawLine(self.fontWidth*(len(pos) + 1) + 15, 0, self.fontWidth*(len(pos) + 1) + 15, 50) qp.drawLine(self.fontWidth*(len(pos + sd) + 1) + 3*15, 0, self.fontWidth*(len(pos + sd) + 1) + 3*15, 50) qp.drawLine(self.fontWidth*(len(pos + sd + sq) + 1) + 5*15, 0, self.fontWidth*(len(pos + sd + sq) + 1) + 5*15, 50) qp.drawLine(self.fontWidth*(len(pos + sd + sq + sb) + 1) + 8*15, 0, self.fontWidth*(len(pos + sd + sq + sb) + 1) + 8*15, 50) """ # qp.drawLine(270, 0, 270, 50) # qp.drawLine(480, 0, 480, 50) # qp.drawLine(570, 0, 570, 50) """ # position qp.drawText(0 + 5, self.fontHeight, pos) # separator qp.drawLine(120, 0, 120, 50) # dword qp.drawText(130 + 5, self.fontHeight, sd) # separator qp.drawLine(270, 0, 270, 50) # qword qp.drawText(280 + 5, self.fontHeight, sq) # separator qp.drawLine(480, 0, 480, 50) # byte qp.drawText(490 + 5, self.fontHeight, sb) # separator qp.drawLine(570, 0, 570, 50) """ qp.end() pass
def scroll_v(self, dy): self.qpix.scroll(0, dy * self.fontHeight, self.qpix.rect()) qp = QtGui.QPainter() qp.begin(self.qpix) qp.setFont(self.font) qp.setPen(self.textPen) factor = abs(dy) cemu = ConsoleEmulator(qp, self.ROWS, self.CON_COLUMNS) if dy < 0: cemu.gotoXY(0, self.ROWS - factor) qp.fillRect(0, (self.ROWS - factor) * self.fontHeight, self.fontWidth * self.CON_COLUMNS, factor * self.fontHeight + self.SPACER, self.backgroundBrush) if dy > 0: cemu.gotoXY(0, 0) qp.fillRect(0, 0, self.fontWidth * self.CON_COLUMNS, factor * self.fontHeight, self.backgroundBrush) page = self.transformationEngine.decorate() # how many rows for row in range(factor): # for every column for i in range(self.COLUMNS): if dy < 0: # we write from top-down, so get index of the first row that will be displayed # this is why we have factor - row idx = i + (self.ROWS - (factor - row)) * self.COLUMNS if dy > 0: idx = i + (self.COLUMNS * row) qp.setPen(self.transformationEngine.choosePen(idx)) if self.transformationEngine.chooseBrush(idx) is not None: qp.setBackgroundMode(1) qp.setBackground(self.transformationEngine.chooseBrush(idx)) if len(self.getDisplayablePage()) > idx: c = self.getDisplayablePage()[idx] else: break if i == self.COLUMNS - 1: hex_s = str(hex(c)[2:]).zfill(2) else: hex_s = str(hex(c)[2:]).zfill(2) + ' ' # write hex representation cemu.write(hex_s, noBackgroudOnSpaces=True) # save hex position x, y = cemu.getXY() # write text cemu.writeAt(self.COLUMNS * 3 + self.gap + (i % self.COLUMNS), y, self.cp437(c)) # go back to hex chars cemu.gotoXY(x, y) qp.setBackgroundMode(0) cemu.writeLn() qp.end()