void ShiftTraceTool::mouseMove(const TPointD &pos, const TMouseEvent &e) {
  GadgetId highlightedGadget = getGadget(pos);
  if (highlightedGadget != m_highlightedGadget) {
    m_highlightedGadget = highlightedGadget;
    invalidate();
  }
}
示例#2
0
void PipeButtonGrid::reset(u8 level) {
	_activeButtons.clear();
	_isComplete = false;

	while (getGadgetCount() > 0) {
		removeGadget(getGadget(getGadgetCount() - 1));
	}

	generateRandomLayout(level);
}
示例#3
0
PipeButtonBase* PipeButtonGrid::getPipeButtonAt(s16 column, s16 row) {

	if (row < 0) return NULL;
	if (row >= _rows) return NULL;
	if (column < 0) return NULL;
	if (column >= _columns) return NULL;

	s16 x = column * _buttonWidth;
	s16 y = row * _buttonHeight;
	
	for (s32 i = 0; i < getGadgetCount(); ++i) {
		if (getGadget(i)->getX() - getX() == x) {
			if (getGadget(i)->getY() - getY() == y) {
				return (PipeButtonBase*)getGadget(i);
			}
		}
	}
	
	return NULL;
}
示例#4
0
void PipeButtonGrid::handleDropEvent(Gadget& source, const WoopsiPoint& point) {

	PipeButtonBase* sourceButton = (PipeButtonBase*)&source;
	PipeButtonBase* destButton;
	
	bool swapped = false;

	for (s32 i = 0; i < getGadgetCount(); ++i) {
		destButton = (PipeButtonBase*)getGadget(i);
		
		// Do not allow swap if the buttons are the same object, the buttons do
		// not collide, the destination cannot swap, or the destination is
		// being dragged
		if (sourceButton == destButton) continue;
		if (!sourceButton->checkCollision(destButton)) continue;
		if (!destButton->canSwap()) continue;
		if (destButton->isBeingDragged()) continue;

		if (isButtonActive(sourceButton)) continue;
		if (isButtonActive(destButton)) continue;
		
		// Exchange button co-ordinates
		s16 destX = destButton->getOriginalX();
		s16 destY = destButton->getOriginalY();
		
		destButton->moveTo(sourceButton->getOriginalX(), sourceButton->getOriginalY());
		destButton->setOriginalCoords(sourceButton->getOriginalX(), sourceButton->getOriginalY());
			
		sourceButton->setOriginalCoords(destX, destY);
		
		swapped = true;
		break;
	}
	
	if (!swapped) sourceButton->resetCoordinates();
}