package org.insightech.er.editor.view.tool;
import java.util.List;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.gef.EditPartViewer;
import org.eclipse.gef.Request;
import org.eclipse.gef.RequestConstants;
import org.eclipse.gef.commands.CompoundCommand;
import org.eclipse.gef.tools.PanningSelectionTool;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.MouseEvent;
import org.insightech.er.editor.controller.command.diagram_contents.element.node.MoveElementCommand;
import org.insightech.er.editor.controller.editpart.element.ERDiagramEditPart;
import org.insightech.er.editor.controller.editpart.element.node.ERTableEditPart;
import org.insightech.er.editor.controller.editpart.element.node.NodeElementEditPart;
import org.insightech.er.editor.controller.editpart.element.node.NoteEditPart;
import org.insightech.er.editor.model.ERDiagram;
import org.insightech.er.editor.model.diagram_contents.element.node.NodeElement;
import org.insightech.er.editor.model.diagram_contents.element.node.ermodel.ERModel;
public class MovablePanningSelectionTool extends PanningSelectionTool {
public static boolean shift = false;
@Override
protected boolean handleKeyUp(KeyEvent event) {
if (event.keyCode == SWT.SHIFT) {
shift = true;
}
return super.handleKeyUp(event);
}
/**
* {@inheritDoc}
*/
@Override
protected boolean handleKeyDown(KeyEvent event) {
int dx = 0;
int dy = 0;
if (event.keyCode == SWT.SHIFT) {
shift = true;
}
if (event.keyCode == SWT.ARROW_DOWN) {
dy = 1;
} else if (event.keyCode == SWT.ARROW_LEFT) {
dx = -1;
} else if (event.keyCode == SWT.ARROW_RIGHT) {
dx = 1;
} else if (event.keyCode == SWT.ARROW_UP) {
dy = -1;
}
NodeElementEditPart targetEditPart = null;
Object model = this.getCurrentViewer().getContents().getModel();
ERDiagram diagram = null;
if (model instanceof ERModel) {
diagram = ((ERModel) model).getDiagram();
}
if (model instanceof ERDiagram) {
diagram = (ERDiagram) model;
}
if (diagram != null) {
List selectedObject = this.getCurrentViewer().getSelectedEditParts();
if (!selectedObject.isEmpty()) {
CompoundCommand command = new CompoundCommand();
for (Object object : selectedObject) {
if (object instanceof ERTableEditPart
|| object instanceof NoteEditPart) {
NodeElementEditPart editPart = (NodeElementEditPart) object;
targetEditPart = editPart;
NodeElement nodeElement = (NodeElement) editPart.getModel();
MoveElementCommand moveElementCommand = new MoveElementCommand(
diagram, editPart.getFigure().getBounds(),
nodeElement.getX() + dx, nodeElement.getY() + dy,
nodeElement.getWidth(), nodeElement.getHeight(),
nodeElement);
command.add(moveElementCommand);
}
}
this.getCurrentViewer().getEditDomain().getCommandStack().execute(
command.unwrap());
}
}
if (event.keyCode == SWT.CR && targetEditPart != null) {
Request request = new Request();
request.setType(RequestConstants.REQ_OPEN);
targetEditPart.performRequest(request);
}
return super.handleKeyDown(event);
}
@Override
public void mouseDown(MouseEvent e, EditPartViewer viewer) {
if (viewer.getContents() instanceof ERDiagramEditPart) {
ERDiagramEditPart editPart = (ERDiagramEditPart) viewer
.getContents();
ERDiagram diagram = (ERDiagram) editPart.getModel();
diagram.mousePoint = new Point(e.x, e.y);
editPart.getFigure().translateToRelative(diagram.mousePoint);
}
super.mouseDown(e, viewer);
}
}