/** * */ package agg.gui.editor; import java.awt.Dimension; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import java.util.Vector; import javax.swing.SwingUtilities; import agg.editor.impl.EdAtomic; import agg.editor.impl.EdGraphObject; import agg.xt_basis.OrdinaryMorphism; /** * @author olga * */ public class RuleEditorMouseMotionAdapter implements MouseMotionListener { private final RuleEditor editor; public RuleEditorMouseMotionAdapter(final RuleEditor ruleeditor) { this.editor = ruleeditor; this.editor.addMouseMotionListener(this); } public void mouseMoved(MouseEvent e) { } public void mouseDragged(MouseEvent e) { // System.out.println(">>> RuleEditor.mouseDragged"); if (this.editor.getRule() == null) { return; } if (SwingUtilities.isMiddleMouseButton(e) || (this.editor.getLeftPanel().getEditMode() == EditorConstants.MOVE)) { if (!this.editor.isSynchronMoveOfMappedObjectsEnabled()) { return; } EdGraphObject go = null; if (this.editor.getActivePanel().getGraph() != null) go = this.editor.getActivePanel().getCanvas().getDraggedObject(); if (go == null) { return; } Vector<EdGraphObject> v = null; if (go.isSelected()) v = this.editor.getActivePanel().getGraph().getSelectedObjs(); else { v = new Vector<EdGraphObject>(1); v.add(go); } Dimension d = this.editor.getActivePanel().getCanvas().getDraggedDimension(); if (this.editor.getActivePanel() == this.editor.getLeftPanel()) { if (!v.isEmpty()) { // move images of RHS OrdinaryMorphism morph = null; if (this.editor.getRule() instanceof EdAtomic) { if (((EdAtomic) this.editor.getRule()).isParent()) if (((EdAtomic) this.editor.getRule()).getConclusions().size() == 1) morph = ((EdAtomic) this.editor.getRule()).getBasisAtomic(); } else { morph = this.editor.getRule().getBasisRule(); } if (morph != null) { Vector<EdGraphObject> images = this.editor.getImages(this.editor.getRule() .getRight(), morph, v); if (!images.isEmpty()) { if (!this.editor.isRightDragging()) { this.editor.getRule().getRight().addMovedToUndo(images); this.editor.setRightDragging(true); } this.editor.getRule().getRight().moveObjects(images, d.width, d.height); this.editor.getRightPanel().updateGraphics(); } } // move images of NAC if (this.editor.getNAC() != null) { Vector<EdGraphObject> images = this.editor.getImages(this.editor.getNAC(), this.editor.getNAC() .getMorphism(), v); if (!images.isEmpty()) { if (!this.editor.isLeftCondDragging()) { this.editor.getNAC().addMovedToUndo(images); this.editor.setLeftCondDragging(true); } this.editor.getNAC().moveObjects(images, d.width, d.height); this.editor.getLeftCondPanel().updateGraphics(); } } // move images of PAC if (this.editor.getPAC() != null) { Vector<EdGraphObject> images = this.editor.getImages(this.editor.getPAC(), this.editor.getPAC() .getMorphism(), v); if (!images.isEmpty()) { if (!this.editor.isLeftCondDragging()) { this.editor.getPAC().addMovedToUndo(images); this.editor.setLeftCondDragging(true); } this.editor.getPAC().moveObjects(images, d.width, d.height); this.editor.getLeftCondPanel().updateGraphics(); } } } } else if (this.editor.getActivePanel() == this.editor.getRightPanel()) { if (!v.isEmpty()) { // move inverse images of LHS Vector<EdGraphObject> invImages = null; OrdinaryMorphism morph = null; if (this.editor.getRule() instanceof EdAtomic) { if (((EdAtomic) this.editor.getRule()).isParent()) { if (((EdAtomic) this.editor.getRule()).getConclusions().size() == 1) morph = ((EdAtomic) this.editor.getRule()).getBasisAtomic(); } } else morph = this.editor.getRule().getBasisRule(); if (morph != null) { invImages = this.editor.getInverseImages(this.editor.getRule().getLeft(), morph, v); if (!invImages.isEmpty()) { if (!this.editor.isLeftDragging()) { this.editor.getRule().getLeft().addMovedToUndo(invImages); this.editor.setLeftDragging(true); } this.editor.getRule().getLeft().moveObjects(invImages, d.width, d.height); this.editor.getLeftPanel().updateGraphics(); } // move images of NAC if (this.editor.getNAC() != null) { Vector<EdGraphObject> imagesNAC = this.editor.getImages(this.editor.getNAC(), this.editor.getNAC() .getMorphism(), invImages); if (!imagesNAC.isEmpty()) { if (!this.editor.isLeftCondDragging()) { this.editor.getNAC().addMovedToUndo(imagesNAC); this.editor.setLeftCondDragging(true); } this.editor.getNAC().moveObjects(imagesNAC, d.width, d.height); this.editor.getLeftCondPanel().updateGraphics(); } } // move images of PAC if (this.editor.getPAC() != null) { Vector<EdGraphObject> imagesPAC = this.editor.getImages(this.editor.getPAC(), this.editor.getPAC() .getMorphism(), invImages); if (!imagesPAC.isEmpty()) { if (!this.editor.isLeftCondDragging()) { this.editor.getPAC().addMovedToUndo(imagesPAC); this.editor.setLeftCondDragging(true); } this.editor.getPAC().moveObjects(imagesPAC, d.width, d.height); this.editor.getLeftCondPanel().updateGraphics(); } } } } } else if (this.editor.getActivePanel() == this.editor.getLeftCondPanel()) { if (!v.isEmpty()) { // move images of LHS Vector<EdGraphObject> invImages = new Vector<EdGraphObject>(0); if (this.editor.getNAC() != null && this.editor.getNAC() == this.editor.getActivePanel().getGraph()) { invImages = this.editor.getInverseImages(this.editor.getRule() .getLeft(), this.editor.getNAC().getMorphism(), v); } else if (this.editor.getPAC() != null && this.editor.getPAC() == this.editor.getActivePanel().getGraph()) { invImages = this.editor.getInverseImages(this.editor.getRule() .getLeft(), this.editor.getPAC().getMorphism(), v); } if (!invImages.isEmpty()) { if (!this.editor.isRightDragging()) { this.editor.getRule().getLeft().addMovedToUndo(invImages); this.editor.setRightDragging(true); } this.editor.getRule().getLeft().moveObjects(invImages, d.width, d.height); this.editor.getLeftPanel().updateGraphics(); } // move images of RHS Vector<EdGraphObject> images = this.editor.getImages(this.editor.getRule().getRight(), this.editor.getRule().getBasisRule(), invImages); if (!images.isEmpty()) { if (!this.editor.isLeftDragging()) { this.editor.getRule().getRight().addMovedToUndo(images); this.editor.setLeftDragging(true); } this.editor.getRule().getRight().moveObjects(images, d.width, d.height); this.editor.getRightPanel().updateGraphics(); } } } } } }