/** * @brief This method has been reimplemented. It manages the following actions: * - Column resizing * - Header button * * @param[in] event Mouse event * * @return Nothing. */ void AbstractTableView::mousePressEvent(QMouseEvent* event) { if(((event->buttons() & Qt::LeftButton) != 0) && ((event->buttons() & Qt::RightButton) == 0)) { if(mColResizeData.splitHandle == true) { int wColIndex = getColumnIndexFromX(event->x()); int wStartPos = getColumnPosition(wColIndex); // Position X of the start of column mGuiState = AbstractTableView::ResizeColumnState; if(event->x() <= (wStartPos + 2)) { mColResizeData.index = wColIndex - 1; } else { mColResizeData.index = wColIndex; } mColResizeData.lastPosX = event->x(); } else if(mHeader.isVisible && getColumnCount() && (event->y() <= getHeaderHeight()) && (event->y() >= 0)) { int wColIndex = getColumnIndexFromX(event->x()); //qDebug() << "Button " << wColIndex << "has been pressed."; emit headerButtonPressed(wColIndex); mColumnList[wColIndex].header.isPressed = true; mColumnList[wColIndex].header.isMouseOver = true; mHeader.activeButtonIndex = wColIndex; mGuiState = AbstractTableView::HeaderButtonPressed; updateViewport(); } } //QWidget::mousePressEvent(event); }
void CPUDisassembly::mouseDoubleClickEvent(QMouseEvent* event) { if(event->button() != Qt::LeftButton) return; switch(getColumnIndexFromX(event->x())) { case 0: //address { int_t mSelectedVa = rvaToVa(getInitialSelection()); if(mRvaDisplayEnabled && mSelectedVa == mRvaDisplayBase) mRvaDisplayEnabled = false; else { mRvaDisplayEnabled = true; mRvaDisplayBase = mSelectedVa; mRvaDisplayPageBase = getBase(); } reloadData(); } break; case 1: //opcodes { toggleInt3BPAction(); //toggle INT3 breakpoint } break; case 2: //disassembly { assembleAt(); } break; case 3: //comments { setComment(); } break; default: Disassembly::mouseDoubleClickEvent(event); break; } }
/** * @brief This method has been reimplemented. It manages the following actions: * - Column resizing * - Header button * * @param[in] event Mouse event * * @return Nothing. */ void AbstractTableView::mouseMoveEvent(QMouseEvent* event) { int wColIndex = getColumnIndexFromX(event->x()); int wStartPos = getColumnPosition(wColIndex); // Position X of the start of column int wEndPos = getColumnPosition(wColIndex) + getColumnWidth(wColIndex); // Position X of the end of column bool wHandle = ((wColIndex != 0) && (event->x() >= wStartPos) && (event->x() <= (wStartPos + 2))) || ((event->x() <= wEndPos) && (event->x() >= (wEndPos - 2))); if(wColIndex == getColumnCount() - 1 && event->x() > viewport()->width()) //last column wHandle = false; switch(mGuiState) { case AbstractTableView::NoState: { if(event->buttons() == Qt::NoButton) { bool wHasCursor = cursor().shape() == Qt::SplitHCursor ? true : false; if((wHandle == true) && (wHasCursor == false)) { setCursor(Qt::SplitHCursor); mColResizeData.splitHandle = true; mGuiState = AbstractTableView::ReadyToResize; } if((wHandle == false) && (wHasCursor == true)) { unsetCursor(); mColResizeData.splitHandle = false; mGuiState = AbstractTableView::NoState; } } else { QWidget::mouseMoveEvent(event); } } break; case AbstractTableView::ReadyToResize: { if(event->buttons() == Qt::NoButton) { if((wHandle == false) && (mGuiState == AbstractTableView::ReadyToResize)) { unsetCursor(); mColResizeData.splitHandle = false; mGuiState = AbstractTableView::NoState; } } } break; case AbstractTableView::ResizeColumnState: { int delta = event->x() - mColResizeData.lastPosX; bool bCanResize = (getColumnWidth(mColResizeData.index) + delta) >= 20; if(bCanResize) { int wNewSize = getColumnWidth(mColResizeData.index) + delta; setColumnWidth(mColResizeData.index, wNewSize); mColResizeData.lastPosX = event->x(); updateViewport(); } } break; case AbstractTableView::HeaderButtonPressed: { int wColIndex = getColumnIndexFromX(event->x()); if((wColIndex == mHeader.activeButtonIndex) && (event->y() <= getHeaderHeight()) && (event->y() >= 0)) { mColumnList[mHeader.activeButtonIndex].header.isMouseOver = true; } else { mColumnList[mHeader.activeButtonIndex].header.isMouseOver = false; } } break; default: break; } }