package gui.mouse;
import gui.ClosableJFrame;
import java.awt.event.MouseMotionListener;
public abstract class MouseController
    implements java.awt.event.MouseListener, MouseMotionListener {
  private java.awt.Point pressPoint;
  public void mouseMoved(java.awt.event.MouseEvent e) {
  }
  public void mouseReleased(java.awt.event.MouseEvent e) {
    released(e.getPoint());
  }
  public void mouseEntered(java.awt.event.MouseEvent e) {
  }
  public void mouseExited(java.awt.event.MouseEvent e) {
  }
  public void mouseClicked(java.awt.event.MouseEvent e) {
    if (e.getClickCount() == 2) {
      doubleClicked(e.getPoint());
      return;
    }
    if (e.isShiftDown() && e.getClickCount() == 1) {
      shiftClicked(e.getPoint());
      return;
    }
    clicked(e.getPoint());
  }
  public void mousePressed(java.awt.event.MouseEvent e) {
    pressPoint = e.getPoint();
    pressed(pressPoint);
  }
  public void mouseDragged(java.awt.event.MouseEvent e) {
    if (e.isShiftDown())
      dragShift(pressPoint, e.getPoint());
    else
      dragged(pressPoint, e.getPoint());
  }
  public abstract void released(java.awt.Point p);
  public abstract void dragged(
      java.awt.Point p1, java.awt.Point p2);
  public abstract void dragShift(
      java.awt.Point p1, java.awt.Point p2);
  public abstract void pressed(java.awt.Point p);
  public abstract void doubleClicked(java.awt.Point p);
  public abstract void clicked(java.awt.Point p);
  public abstract void shiftClicked(java.awt.Point p);
  public static void main(String args[]) {
    ClosableJFrame cf = new ClosableJFrame();
    cf.addMouseController(new MouseController() {
      public void pressed(java.awt.Point p) {
        System.out.println("pressed:x,y=" + p.x + "," + p.y);
      }
      public void released(java.awt.Point p) {
        System.out.println("rel:x,y=" + p.x + "," + p.y);
      }
      public void dragShift(
          java.awt.Point p1, java.awt.Point p2) {
        System.out.println(
            "draShift:x1,y1,x2,y2=" + p1 + ": " + p2);
      }
      public void doubleClicked(java.awt.Point p) {
        System.out.println("d 2 clicked:x,y=" + p.x + "," + p.y);
      }
      public void clicked(java.awt.Point p) {
        System.out.println("clicked:x,y=" + p.x + "," + p.y);
      }
      public void shiftClicked(java.awt.Point p) {
        System.out.println("Sh clicked:x,y=" + p.x + "," + p.y);
      }
      public void dragged(
          java.awt.Point p1, java.awt.Point p2) {
        System.out.println(
            "dra:x1,y1,x2,y2=" + p1 + ": " + p2);
      }
    });
    cf.setSize(200, 200);
    cf.setVisible(true);
  }
}