コード例 #1
0
ファイル: UIDisasm.cpp プロジェクト: GPDP2/yabause
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);
   }
}
コード例 #2
0
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;
   }
}