/* MoveSignalSignalTool.java created 2007-09-26
*
*/
package org.signalml.app.view.signal;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.event.MouseEvent;
import javax.swing.JViewport;
import javax.swing.SwingUtilities;
import org.signalml.app.util.IconUtils;
import org.signalml.plugin.export.signal.AbstractSignalTool;
/** MoveSignalSignalTool
*
*
* @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o.
*/
public class MoveSignalSignalTool extends AbstractSignalTool {
private Point dragStart = null;
private Point dragScrollStart = null;
private SignalPlot plot;
public MoveSignalSignalTool(SignalView signalView) {
super(signalView);
}
@Override
public Cursor getDefaultCursor() {
return IconUtils.getHandCursor();
}
@Override
public void mousePressed(MouseEvent e) {
if (SwingUtilities.isLeftMouseButton(e)) {
Object source = e.getSource();
if (!(source instanceof SignalPlot)) {
plot = null;
return;
}
plot = (SignalPlot) source;
dragStart = e.getLocationOnScreen();
dragScrollStart = plot.getViewport().getViewPosition();
setEngaged(true);
e.consume();
}
}
@Override
public void mouseReleased(MouseEvent e) {
if (SwingUtilities.isLeftMouseButton(e)) {
dragStart = null;
dragScrollStart = null;
setEngaged(false);
plot = null;
e.consume();
}
}
@Override
public void mouseDragged(MouseEvent e) {
if (plot != null) {
if (SwingUtilities.isLeftMouseButton(e)) {
Point position = e.getLocationOnScreen();
JViewport viewport = plot.getViewport();
Dimension d = viewport.getViewSize();
Point p = new Point(dragScrollStart.x, dragScrollStart.y);
p.x -= (position.x - dragStart.x);
p.y -= (position.y - dragStart.y);
p.x = Math.max(0, Math.min(d.width-viewport.getWidth(), p.x));
p.y = Math.max(0, Math.min(d.height-viewport.getHeight(), p.y));
viewport.setViewPosition(p);
dragStart = e.getLocationOnScreen();
dragScrollStart = p;
e.consume();
}
}
}
}