import java.awt.*;
import java.awt.geom.Point2D;
import javax.swing.*;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;

import demo.view.ViewActionDemo;

import y.view.EditMode;
import y.view.Graph2DView;

public class MouseWheelDemo extends ViewActionDemo
{
  protected MouseWheelListener scrollingMWL;
  
  public MouseWheelDemo()
  {
    scrollingMWL = new WheelScroller(view);
  }
  
  protected JToolBar createToolBar()
  {
    JToolBar bar = super.createToolBar();
    bar.addSeparator();
    
    JToggleButton btn = new JToggleButton("Wheel Scrolling");
    btn.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent ev)
      {
        JToggleButton btn = (JToggleButton)ev.getSource();
        if (btn.isSelected())
          view.getCanvasComponent().addMouseWheelListener(scrollingMWL);
        else
          view.getCanvasComponent().removeMouseWheelListener(scrollingMWL);
      }
    });
    bar.add(btn);
    
    return bar;
  }
  
  class WheelScroller implements MouseWheelListener
  {
    protected Graph2DView view;
    
    public WheelScroller(Graph2DView view)
    {
      this.view = view;
    }
    
    public void mouseWheelMoved(MouseWheelEvent e)
    {
      Point2D p2 = view.getCenter();
      Point p = view.getViewPoint();
      Dimension d = view.getViewSize();
      Rectangle r = view.getWorldRect();
      
      if (e.getWheelRotation() >= 0)
      {
        if (r.getY() + r.getHeight() - 1 > p.getY() + d.height / view.getZoom())
          p2.setLocation(p2.getX(), p2.getY() + e.getScrollAmount());
      }
      else
      {
        if (r.getY() + 1 < p.getY())
          p2.setLocation(p2.getX(), p2.getY() - e.getScrollAmount());
      }
      
      if (r.contains(p2))
      {
        view.setCenter(p2.getX(), p2.getY());
        view.updateView();
      }
    }
  }
  
  /**
   * Launches this demo. 
   */
  public static void main(String args[])
  {
    MouseWheelDemo demo = new MouseWheelDemo();
    demo.startInFrame("Mouse Wheel Demo");
  }
}
