def scroll_h(self, dx): self.qpix.scroll(dx * self.fontWidth, 0, self.qpix.rect()) qp = QtGui.QPainter() qp.begin(self.qpix) qp.setFont(self.font) qp.setPen(self.textPen) factor = abs(dx) if dx < 0: qp.fillRect((self.COLUMNS - 1 * factor) * self.fontWidth, 0, factor * self.fontWidth, self.ROWS * self.fontHeight + self.SPACER, self.backgroundBrush) if dx > 0: qp.fillRect(0, 0, factor * self.fontWidth, self.ROWS * self.fontHeight + self.SPACER, self.backgroundBrush) cemu = ConsoleEmulator(qp, self.ROWS, self.COLUMNS) page = self.transformationEngine.decorate() # scriem pe fiecare coloana in parte for column in range(factor): # fiecare caracter de pe coloana for i in range(self.ROWS): if dx < 0: # cu (column) selectam coloana idx = (i + 1) * self.COLUMNS - (column + 1) if dx > 0: idx = i * self.COLUMNS + column # c = self.dataModel.getDisplayablePage()[idx] c = self.transformationEngine.getChar(idx) qp.setPen(self.transformationEngine.choosePen(idx)) if self.transformationEngine.chooseBrush(idx) is not None: qp.setBackgroundMode(1) qp.setBackground( self.transformationEngine.chooseBrush(idx)) # self.decorate(qp, (idx, c), self.dataModel.getDisplayablePage()) if dx < 0: cemu.writeAt(self.COLUMNS - (column + 1), i, self.cp437(c)) if dx > 0: cemu.writeAt(column, i, self.cp437(c)) qp.setBackgroundMode(0) qp.end()
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): # draw background qp.fillRect(0, 0, self.COLUMNS * self.fontWidth, self.ROWS * self.fontHeight, self.backgroundBrush) # set text pen&font qp.setFont(self.font) qp.setPen(self.textPen) cemu = ConsoleEmulator(qp, self.ROWS, self.COLUMNS) # ast = self.dataModel.current_class.get_ast() for i in range(self.ROWS): if i < len(self.LINES): line = self.LINES[i] cemu.writeAt(0, i, line)
def scroll_h(self, dx): self.qpix.scroll(dx * self.fontWidth, 0, self.qpix.rect()) qp = QtGui.QPainter() qp.begin(self.qpix) qp.setFont(self.font) qp.setPen(self.textPen) factor = abs(dx) if dx < 0: qp.fillRect((self.COLUMNS - 1 * factor) * self.fontWidth, 0, factor * self.fontWidth, self.ROWS * self.fontHeight + self.SPACER, self.backgroundBrush) if dx > 0: qp.fillRect(0, 0, factor * self.fontWidth, self.ROWS * self.fontHeight + self.SPACER, self.backgroundBrush) cemu = ConsoleEmulator(qp, self.ROWS, self.COLUMNS) page = self.transformationEngine.decorate() # scriem pe fiecare coloana in parte for column in range(factor): # fiecare caracter de pe coloana for i in range(self.ROWS): if dx < 0: # cu (column) selectam coloana idx = (i + 1) * self.COLUMNS - (column + 1) if dx > 0: idx = i * self.COLUMNS + column # c = self.dataModel.getDisplayablePage()[idx] c = self.transformationEngine.getChar(idx) qp.setPen(self.transformationEngine.choosePen(idx)) if self.transformationEngine.chooseBrush(idx) is not None: qp.setBackgroundMode(1) qp.setBackground(self.transformationEngine.chooseBrush(idx)) # self.decorate(qp, (idx, c), self.dataModel.getDisplayablePage()) if dx < 0: cemu.writeAt(self.COLUMNS - (column + 1), i, self.cp437(c)) if dx > 0: cemu.writeAt(column, i, self.cp437(c)) qp.setBackgroundMode(0) qp.end()
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 draw(self): # i don't really like this in terms of arhitecture. We have # artificially introduced getHeaderInfo() in Views. Then we had one top # banner implemented per plugin. I will think to a better solution 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) cemu.writeAt(1, 0, 'FileAddr') offset = 11 text = self.viewMode.getHeaderInfo() cemu.writeAt(offset, 0, text) qp.end()
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 scroll_h(self, dx): gap = self.gap # hex part self.qpix.scroll( dx * 3 * self.fontWidth, 0, QtCore.QRect(0, 0, self.COLUMNS * 3 * self.fontWidth, self.ROWS * self.fontHeight + self.SPACER)) # text part self.qpix.scroll( dx * self.fontWidth, 0, QtCore.QRect((self.COLUMNS * 3 + gap) * self.fontWidth, 0, self.COLUMNS * self.fontWidth, self.ROWS * self.fontHeight + self.SPACER)) qp = QtGui.QPainter() qp.begin(self.qpix) qp.setFont(self.font) qp.setPen(self.textPen) factor = abs(dx) # There are some trails from the characters, when scrolling. trail == number of pixel to erase near the character trail = 5 textBegining = self.COLUMNS * 3 + gap if dx < 0: # hex qp.fillRect((self.COLUMNS - 1 * factor) * 3 * self.fontWidth, 0, factor * self.fontWidth * 3, self.ROWS * self.fontHeight + self.SPACER, self.backgroundBrush) # text qp.fillRect( (textBegining + self.COLUMNS - 1 * factor) * self.fontWidth, 0, factor * self.fontWidth + trail, self.ROWS * self.fontHeight + self.SPACER, self.backgroundBrush) if dx > 0: # hex qp.fillRect(0, 0, factor * 3 * self.fontWidth, self.ROWS * self.fontHeight + self.SPACER, self.backgroundBrush) # text qp.fillRect(textBegining * self.fontWidth - trail, 0, factor * self.fontWidth + trail, self.ROWS * self.fontHeight + self.SPACER, self.backgroundBrush) cemu = ConsoleEmulator(qp, self.ROWS, self.CON_COLUMNS) page = self.transformationEngine.decorate() # scriem pe fiecare coloana in parte for column in range(factor): # fiecare caracter de pe coloana for i in range(self.ROWS): if dx < 0: # cu (column) selectam coloana idx = (i + 1) * self.COLUMNS - (column + 1) if dx > 0: idx = i * self.COLUMNS + column if len(self.getDisplayablePage()) > idx: qp.setPen(self.transformationEngine.choosePen(idx)) else: break if self.transformationEngine.chooseBrush(idx) is not None: qp.setBackgroundMode(1) qp.setBackground( self.transformationEngine.chooseBrush(idx)) c = self.getDisplayablePage()[idx] hex_s = str(hex(c)[2:]).zfill(2) + ' ' if dx < 0: cemu.writeAt((self.COLUMNS - (column + 1)) * 3, i, hex_s, noBackgroudOnSpaces=True) cemu.writeAt(textBegining + self.COLUMNS - (column + 1), i, self.cp437(c)) if dx > 0: cemu.writeAt(column * 3, i, hex_s, noBackgroudOnSpaces=True) cemu.writeAt(textBegining + column, i, self.cp437(c)) qp.setBackgroundMode(0) 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()
def scroll_h(self, dx): gap = self.gap # hex part self.qpix.scroll(dx * 3 * self.fontWidth, 0, QtCore.QRect(0, 0, self.COLUMNS * 3 * self.fontWidth, self.ROWS * self.fontHeight + self.SPACER)) # text part self.qpix.scroll(dx * self.fontWidth, 0, QtCore.QRect((self.COLUMNS * 3 + gap) * self.fontWidth, 0, self.COLUMNS * self.fontWidth, self.ROWS * self.fontHeight + self.SPACER)) qp = QtGui.QPainter() qp.begin(self.qpix) qp.setFont(self.font) qp.setPen(self.textPen) factor = abs(dx) # There are some trails from the characters, when scrolling. trail == number of pixel to erase near the character trail = 5 textBegining = self.COLUMNS * 3 + gap if dx < 0: # hex qp.fillRect((self.COLUMNS - 1 * factor) * 3 * self.fontWidth, 0, factor * self.fontWidth * 3, self.ROWS * self.fontHeight + self.SPACER, self.backgroundBrush) # text qp.fillRect((textBegining + self.COLUMNS - 1 * factor) * self.fontWidth, 0, factor * self.fontWidth + trail, self.ROWS * self.fontHeight + self.SPACER, self.backgroundBrush) if dx > 0: # hex qp.fillRect(0, 0, factor * 3 * self.fontWidth, self.ROWS * self.fontHeight + self.SPACER, self.backgroundBrush) # text qp.fillRect(textBegining * self.fontWidth - trail, 0, factor * self.fontWidth + trail, self.ROWS * self.fontHeight + self.SPACER, self.backgroundBrush) cemu = ConsoleEmulator(qp, self.ROWS, self.CON_COLUMNS) page = self.transformationEngine.decorate() # scriem pe fiecare coloana in parte for column in range(factor): # fiecare caracter de pe coloana for i in range(self.ROWS): if dx < 0: # cu (column) selectam coloana idx = (i + 1) * self.COLUMNS - (column + 1) if dx > 0: idx = i * self.COLUMNS + column if len(self.getDisplayablePage()) > idx: qp.setPen(self.transformationEngine.choosePen(idx)) else: break if self.transformationEngine.chooseBrush(idx) is not None: qp.setBackgroundMode(1) qp.setBackground(self.transformationEngine.chooseBrush(idx)) c = self.getDisplayablePage()[idx] hex_s = str(hex(c)[2:]).zfill(2) + ' ' if dx < 0: cemu.writeAt((self.COLUMNS - (column + 1)) * 3, i, hex_s, noBackgroudOnSpaces=True) cemu.writeAt(textBegining + self.COLUMNS - (column + 1), i, self.cp437(c)) if dx > 0: cemu.writeAt(column * 3, i, hex_s, noBackgroudOnSpaces=True) cemu.writeAt(textBegining + column, i, self.cp437(c)) qp.setBackgroundMode(0) qp.end()