コード例 #1
0
ファイル: contextmenu.cpp プロジェクト: AmesianX/tdesktop
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();
}
コード例 #2
0
ファイル: BoardWidget.cpp プロジェクト: weidendo/qenolaba
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);
    }
}
コード例 #3
0
ファイル: BoardWidget.cpp プロジェクト: weidendo/qenolaba
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);
}