Skip to content

Commit

Permalink
[NONE] Ensure commit only returns an operation in case of an effect.
Browse files Browse the repository at this point in the history
  • Loading branch information
nyssen committed Aug 17, 2015
1 parent a6392f9 commit e32a3b9
Show file tree
Hide file tree
Showing 5 changed files with 77 additions and 52 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@
*******************************************************************************/
package org.eclipse.gef4.mvc.fx.operations;

import javafx.scene.Node;

import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.operations.AbstractOperation;
import org.eclipse.core.runtime.IAdaptable;
Expand All @@ -22,6 +20,8 @@
import org.eclipse.core.runtime.Status;
import org.eclipse.gef4.geometry.planar.Dimension;

import javafx.scene.Node;

public class FXResizeNodeOperation extends AbstractOperation {

private final Node visual;
Expand All @@ -34,8 +34,10 @@ public FXResizeNodeOperation(Node visual) {
}

public FXResizeNodeOperation(Node visual, double dw, double dh) {
this("Resize", visual, new Dimension(visual.getLayoutBounds()
.getWidth(), visual.getLayoutBounds().getHeight()), dw, dh);
this("Resize", visual,
new Dimension(visual.getLayoutBounds().getWidth(),
visual.getLayoutBounds().getHeight()),
dw, dh);
}

/**
Expand Down Expand Up @@ -93,6 +95,10 @@ public Node getVisual() {
return visual;
}

public boolean hasEffect() {
return dw != 0 && dh != 0;
}

@Override
public IStatus redo(IProgressMonitor monitor, IAdaptable info)
throws ExecutionException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,28 @@
*******************************************************************************/
package org.eclipse.gef4.mvc.fx.operations;

import javafx.scene.transform.Affine;

import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.operations.AbstractOperation;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;

import javafx.scene.transform.Affine;

public class FXTransformOperation extends AbstractOperation {

protected static boolean equals(Affine a1, Affine a2) {
// Affine does not properly implement equals, so we have to implement
// that here
return a1.getMxx() == a2.getMxx() && a1.getMxy() == a2.getMxy()
&& a1.getMxz() == a2.getMxz() && a1.getMyx() == a2.getMyx()
&& a1.getMyy() == a2.getMyy() && a1.getMyz() == a2.getMyz()
&& a1.getMzx() == a2.getMzx() && a1.getMzy() == a2.getMzy()
&& a1.getMzz() == a2.getMzz() && a1.getTx() == a2.getTx()
&& a1.getTy() == a2.getTy() && a1.getTz() == a2.getTz();
}

protected static Affine setAffine(Affine dst, Affine src) {
dst.setMxx(src.getMxx());
dst.setMxy(src.getMxy());
Expand All @@ -39,8 +50,8 @@ protected static Affine setAffine(Affine dst, Affine src) {
}

private final Affine nodeTransform;
private Affine oldTransform;

private Affine oldTransform;
private Affine newTransform;

public FXTransformOperation(Affine nodeTransform) {
Expand Down Expand Up @@ -80,6 +91,10 @@ public Affine getOldTransform() {
return oldTransform;
}

public boolean hasEffect() {
return !equals(newTransform, oldTransform);
}

@Override
public IStatus redo(IProgressMonitor monitor, IAdaptable info)
throws ExecutionException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,16 @@

import java.util.List;

import javafx.geometry.Point2D;
import javafx.scene.Node;
import javafx.scene.input.MouseEvent;

import org.eclipse.gef4.geometry.convert.fx.Geometry2JavaFX;
import org.eclipse.gef4.geometry.planar.Dimension;
import org.eclipse.gef4.geometry.planar.Point;
import org.eclipse.gef4.mvc.models.SelectionModel;
import org.eclipse.gef4.mvc.parts.IContentPart;

import javafx.geometry.Point2D;
import javafx.scene.Node;
import javafx.scene.input.MouseEvent;

public class FXRelocateOnDragPolicy extends AbstractFXOnDragPolicy {

private Point initialMouseLocationInScene = null;
Expand All @@ -33,14 +33,14 @@ public void drag(MouseEvent e, Dimension delta) {
FXResizeRelocatePolicy policy = getResizeRelocatePolicy(part);
if (policy != null) {
Node visual = part.getVisual();
Point2D initialPosInParent = visual.localToParent(visual
.sceneToLocal(Geometry2JavaFX
Point2D initialPosInParent = visual
.localToParent(visual.sceneToLocal(Geometry2JavaFX
.toFXPoint(getInitialMouseLocationInScene())));
Point2D currentPosInParent = visual.localToParent(visual
.sceneToLocal(e.getSceneX(), e.getSceneY()));
Point2D deltaPoint = new Point2D(currentPosInParent.getX()
- initialPosInParent.getX(), currentPosInParent.getY()
- initialPosInParent.getY());
Point2D currentPosInParent = visual.localToParent(
visual.sceneToLocal(e.getSceneX(), e.getSceneY()));
Point2D deltaPoint = new Point2D(
currentPosInParent.getX() - initialPosInParent.getX(),
currentPosInParent.getY() - initialPosInParent.getY());
policy.performResizeRelocate(deltaPoint.getX(),
deltaPoint.getY(), 0, 0);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,6 @@
*******************************************************************************/
package org.eclipse.gef4.mvc.fx.policies;

import javafx.geometry.Bounds;
import javafx.scene.Node;

import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.operations.IUndoableOperation;
import org.eclipse.gef4.geometry.planar.Dimension;
Expand All @@ -24,20 +21,23 @@
import org.eclipse.gef4.mvc.operations.ITransactional;
import org.eclipse.gef4.mvc.policies.AbstractPolicy;

public class FXResizePolicy extends AbstractPolicy<Node> implements
ITransactional {
import javafx.geometry.Bounds;
import javafx.scene.Node;

public class FXResizePolicy extends AbstractPolicy<Node>
implements ITransactional {

protected FXResizeNodeOperation resizeOperation;
protected ForwardUndoCompositeOperation forwardUndoOperation;
protected ForwardUndoCompositeOperation resizeAndRevealOperation;

// can be overridden by subclasses to add an operation for model changes
@Override
public IUndoableOperation commit() {
/*
* TODO: Take out any "empty" operations.
*/
IUndoableOperation commit = forwardUndoOperation;
forwardUndoOperation = null;
IUndoableOperation commit = null;
if (resizeOperation.hasEffect()) {
commit = resizeAndRevealOperation;
}
resizeAndRevealOperation = null;
resizeOperation = null;
return commit;
}
Expand Down Expand Up @@ -70,11 +70,10 @@ public void init() {
Node visualToResize = getVisualToResize();
resizeOperation = new FXResizeNodeOperation("Resize", visualToResize,
getInitialSize(visualToResize), 0, 0);
FXRevealOperation revealOperation = new FXRevealOperation(getHost());
forwardUndoOperation = new ForwardUndoCompositeOperation(
resizeAndRevealOperation = new ForwardUndoCompositeOperation(
resizeOperation.getLabel());
forwardUndoOperation.add(resizeOperation);
forwardUndoOperation.add(revealOperation);
resizeAndRevealOperation.add(resizeOperation);
resizeAndRevealOperation.add(new FXRevealOperation(getHost()));
}

public void performResize(double dw, double dh) {
Expand All @@ -87,11 +86,13 @@ public void performResize(double dw, double dh) {

// ensure visual is not resized below threshold
if (resizable) {
if (resizeOperation.getOldSize().width + layoutDw < getMinimumWidth()) {
if (resizeOperation.getOldSize().width
+ layoutDw < getMinimumWidth()) {
layoutDw = getMinimumWidth()
- resizeOperation.getOldSize().width;
}
if (resizeOperation.getOldSize().height + layoutDh < getMinimumHeight()) {
if (resizeOperation.getOldSize().height
+ layoutDh < getMinimumHeight()) {
layoutDh = getMinimumHeight()
- resizeOperation.getOldSize().height;
}
Expand All @@ -101,7 +102,7 @@ public void performResize(double dw, double dh) {

// locally execute operation
try {
forwardUndoOperation.execute(null, null);
resizeAndRevealOperation.execute(null, null);
} catch (ExecutionException e) {
e.printStackTrace();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,6 @@
*******************************************************************************/
package org.eclipse.gef4.mvc.fx.policies;

import javafx.scene.Node;
import javafx.scene.transform.Affine;

import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.operations.IUndoableOperation;
import org.eclipse.gef4.common.adapt.AdapterKey;
Expand All @@ -29,8 +26,13 @@
import com.google.common.reflect.TypeToken;
import com.google.inject.Provider;

public class FXTransformPolicy extends AbstractPolicy<Node> implements
ITransactional {
import javafx.scene.Node;
import javafx.scene.transform.Affine;

public class FXTransformPolicy extends AbstractPolicy<Node>
implements ITransactional {

public static final String TRANSFORMATION_PROVIDER_ROLE = "transformationProvider";

protected static Dimension getSnapToGridOffset(GridModel gridModel,
final double localX, final double localY,
Expand Down Expand Up @@ -61,15 +63,16 @@ protected static Dimension getSnapToGridOffset(GridModel gridModel,
return new Dimension(snapOffsetX, snapOffsetY);
}

public static final String TRANSFORMATION_PROVIDER_ROLE = "transformationProvider";

private FXTransformOperation transformOperation;
private AffineTransform oldTransform;
private Affine nodeTransform;

@Override
public IUndoableOperation commit() {
IUndoableOperation commit = transformOperation;
IUndoableOperation commit = null;
if (transformOperation.hasEffect()) {
commit = transformOperation;
}
transformOperation = null;
oldTransform = null;
return commit;
Expand All @@ -88,8 +91,8 @@ public Affine getNodeTransform() {
@Override
public void init() {
transformOperation = new FXTransformOperation(getNodeTransform());
oldTransform = JavaFX2Geometry.toAffineTransform(transformOperation
.getOldTransform());
oldTransform = JavaFX2Geometry
.toAffineTransform(transformOperation.getOldTransform());
}

public void setConcatenation(AffineTransform transform) {
Expand All @@ -102,18 +105,18 @@ public void setPreConcatenation(AffineTransform transform) {

public void setTransform(AffineTransform newTransform) {
// snap to grid if needed (TODO: check that this is correct)
Dimension snapToGridOffset = getSnapToGridOffset(getHost().getRoot()
.getViewer().getAdapter(GridModel.class),
newTransform.getTranslateX(), newTransform.getTranslateY(),
0.5, 0.5);
Dimension snapToGridOffset = getSnapToGridOffset(
getHost().getRoot().getViewer().getAdapter(GridModel.class),
newTransform.getTranslateX(), newTransform.getTranslateY(), 0.5,
0.5);
newTransform.setTransform(newTransform.getM00(), newTransform.getM10(),
newTransform.getM01(), newTransform.getM11(),
newTransform.getTranslateX() - snapToGridOffset.width,
newTransform.getTranslateY() - snapToGridOffset.height);

// update operation
transformOperation.setNewTransform(Geometry2JavaFX
.toFXAffine(newTransform));
transformOperation
.setNewTransform(Geometry2JavaFX.toFXAffine(newTransform));

// locally execute operation
try {
Expand Down

0 comments on commit e32a3b9

Please sign in to comment.