void ContextMenu::popup(const QPoint &p) { QPoint w = p - QPoint(st::dropdownPadding.left(), st::dropdownPadding.top()); QRect r = QDesktopWidget().screenGeometry(p); if (w.x() + width() - st::dropdownPadding.right() > r.x() + r.width()) { w.setX(r.x() + r.width() - width() + st::dropdownPadding.right()); } if (w.y() + height() - st::dropdownPadding.bottom() > r.y() + r.height()) { w.setY(p.y() - height() + st::dropdownPadding.bottom()); } if (w.y() < r.y()) { w.setY(r.y()); } move(w); showStart(); }
void BoardWidget::mouseMoveEvent( QMouseEvent* pEvent ) { if ((!gettingMove && !editMode) || !mbDown) return; int pos = positionOf( pEvent->x(), pEvent->y() ); if (pos == oldPos) return; oldPos = pos; if (editMode) { int f = fieldOf(pos); if (field[f] != Board::out && field[f] != editColor) { if (editColor == Board::color1) field[f] = Board::color1bright; else if (editColor == Board::color2) field[f] = Board::color2bright; else if (field[f] == Board::color1) field[f] = Board::color1bright; else if (field[f] == Board::color2) field[f] = Board::color2bright; if (renderMode) updatePieces(); update(); } return; } if (!startValid) { /* We haven't a valid move yet. Check if we are over a valid start */ startValid = isValidStart(pos, (pEvent->button() == Qt::MidButton)); qDebug() << "Start pos " << pos << " is valid: " << startValid; // actMove.print(); if (!startValid) return; startPos = oldPos = pos; showStart(actMove,1); startShown = true; QString tmp; actValue = - board.calcEvaluation(); tmp = tr("Board value: %1").arg(actValue); emit updateSpy(tmp); return; } /* restore board */ updatePosition(); startShown = false; if (isValidEnd(pos)) { // actMove.print(); board.playMove(actMove); int v = board.calcEvaluation(); board.takeBack(); QString tmp; tmp.sprintf("%+d", v-actValue); QString str = QString("%1 : %2").arg(actMove.name()).arg(tmp); emit updateSpy(str); showMove(actMove,3); setCursor(*arrow[shownDirection]); } else { QString tmp; setCursor(Qt::CrossCursor); if (pos == startPos) { showStart(actMove,1); startShown = true; tmp = tr("Board value: %1").arg(actValue); } else { if (renderMode) updatePieces(); update(); } emit updateSpy(tmp); } }
void BoardWidget::mousePressEvent( QMouseEvent* pEvent ) { int pos = positionOf( pEvent->x(), pEvent->y() ); int f = fieldOf(pos); if (pEvent->button() == Qt::RightButton) { emit rightButtonPressed(f, pEvent->globalPos()); return; } if (!gettingMove && !editMode) { return; } mbDown = true; if (editMode) { editColor = (pEvent->button() == Qt::MidButton) ? Board::color2 : Board::color1; int newColor = (pEvent->button() == Qt::MidButton) ? Board::color2bright : Board::color1bright; if (field[f] == Board::free) { field[f] = newColor; } else if (field[f] == Board::color1) { if (editColor == Board::color1) { editColor = Board::free; newColor = Board::color1bright; } field[f] = newColor; } else if (field[f] == Board::color2) { if (editColor == Board::color2) { editColor = Board::free; newColor = Board::color2bright; } field[f] = newColor; } else { editColor = Board::out; } oldPos = pos; if (renderMode) updatePieces(); update(); return; } startValid = isValidStart(pos, (pEvent->button() == Qt::MidButton)); //qDebug() << "Start pos " << pos << " is valid: " << startValid; // actMove.print(); if (!startValid) return; startPos = oldPos = pos; showStart(actMove,1); startShown = true; QString tmp; actValue = - board.calcEvaluation(); tmp = tr("Board value: %1").arg(actValue); emit updateSpy(tmp); }