Exemplo n.º 1
0
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;
}
Exemplo n.º 2
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);
	}
}
Exemplo n.º 3
0
/**
 * 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);
}
Exemplo n.º 4
0
void LayerList::onLayerReorder()
{
	if(_selected)
		selectLayer(_selected);
}