void UIDisasm::mouseDoubleClickEvent( QMouseEvent * event ) { if (event->button() == Qt::LeftButton) { // Calculate address QPoint pos = event->pos(); QRect viewportPos = viewport()->rect(); int top = viewportPos.top(); int bottom = viewportPos.bottom(); int posy = pos.y(); int line = posy / fontHeight; int offset=0; int scroll_pos=verticalScrollBar()->value(); int currentAddress=scroll_pos/instructionSize*instructionSize; for (int i = 0; i != line; i++) { char text[256]; offset += disassembleFunction(currentAddress, text); } emit toggleCodeBreakpoint(currentAddress+offset); } }
void UIDisasm::paintEvent(QPaintEvent *event) { QPainter painter(viewport()); // calc position int top = event->rect().top(); int bottom = event->rect().bottom(); verticalScrollBar()->setPageStep(bottom/fontHeight*instructionSize); int pos=verticalScrollBar()->value(); int xPos = 2; int yPosStart = top + fontHeight; QBrush selected = QBrush(selectionColor); QPen colSelected = QPen(Qt::white); QPen colSelected2 = QPen(selectionColor); int currentAddress=pos/instructionSize*instructionSize; for (int yPos = yPosStart; yPos < bottom; ) { char text[256]; int offset = disassembleFunction(currentAddress, text); QString disText(text); if (currentAddress == pc && pc != 0xFFFFFFFF) { int ascent = fontMetrics().ascent(); painter.setBackground(selected); painter.setBackgroundMode(Qt::OpaqueMode); painter.setPen(colSelected2); painter.drawRect(0, yPos-ascent, event->rect().width(), fontHeight); painter.fillRect(0, yPos-ascent, event->rect().width(), fontHeight, selected); painter.setBackgroundMode(Qt::TransparentMode); painter.setPen(colSelected); painter.setPen(this->palette().color(QPalette::WindowText)); painter.drawText(xPos, yPos-ascent, event->rect().width(), ascent, Qt::AlignJustify, disText); } else { painter.setPen(this->palette().color(QPalette::WindowText)); painter.setBackgroundMode(Qt::TransparentMode); painter.drawText(xPos, yPos, disText); } currentAddress += offset; yPos += fontHeight; } }