void ShiftTraceTool::mouseMove(const TPointD &pos, const TMouseEvent &e) { GadgetId highlightedGadget = getGadget(pos); if (highlightedGadget != m_highlightedGadget) { m_highlightedGadget = highlightedGadget; invalidate(); } }
void PipeButtonGrid::reset(u8 level) { _activeButtons.clear(); _isComplete = false; while (getGadgetCount() > 0) { removeGadget(getGadget(getGadgetCount() - 1)); } generateRandomLayout(level); }
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; }
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(); }