int RectTool::cursorPressEvent(CanvasCursorEvent *event) { if (d->mode != NoOperation) return 0; // pass event to the graphics item auto item = graphicsItem()->scene()->itemAt(event->viewPos, QTransform()); if (item && item != d->frameItem) { event->ignore(); return 0; } d->updateManager->setEnabled(true); d->clickedLayer = layerScene()->rootLayer()->descendantAt(event->data.pos.toQPoint(), handleRadius); d->clickedWithShift = event->modifiers() & Qt::ShiftModifier; if (d->selectingMode == SelectImmediately) { // select immediately the clicked layer selectLayer(d->clickedLayer, d->clickedWithShift); } else { // the clicked layer is already selected, selection is unchanged and current is set to the clicked layer if (layerScene()->selection().contains(d->clickedLayer)) { layerScene()->setCurrent(d->clickedLayer); } // clear selection to insert a new layer else { layerScene()->setSelection({}); } } // decide mode // if already layers are selected and a layer is clicked, mode will be Dragging if (d->selectedLayerInfos.size() && d->clickedLayer) d->mode = Dragging; // if no layer is selected or no layer is clicked, go to Inserting mode if addingType is not NoAdding else if (d->addingType != NoAdding) d->mode = Inserting; // there is nothing to do if (d->mode == NoOperation) return 0; // save drag origin d->dragDistanceEnough = false; d->dragStartPos = event->data.pos; return 0; }
void RectTool::cursorReleaseEvent(CanvasCursorEvent *event, int id) { Q_UNUSED(event); Q_UNUSED(id); if (d->mode == NoOperation) { event->ignore(); return; } d->updateManager->setEnabled(false); bool selectLater = false; if (d->dragDistanceEnough) { switch (d->mode) { case Dragging: { commit(); break; } case Inserting: { finishAdding(); break; } default: { break; } } } else if (d->mode == Inserting && d->selectingMode == SelectLater) { selectLater = true; } d->mode = NoOperation; updateGraphicsItems(); if (selectLater) { selectLayer(d->clickedLayer, d->clickedWithShift); } }
/** * Selects all entities on the given layer. */ void RS_Selection::selectLayer(RS_Entity* e) { if (e==NULL) { return; } bool select = !e->isSelected(); RS_Layer* layer = e->getLayer(true); if (layer==NULL) { return; } RS_String layerName = layer->getName(); selectLayer(layerName, select); }
void LayerList::onLayerReorder() { if(_selected) selectLayer(_selected); }