/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package omr.ui;
import omr.ui.field.LDoubleField;
import omr.ui.view.LogSlider;
import omr.ui.view.Zoom;
import org.junit.Test;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseWheelEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
/**
* Class {@code MouseWheelTest}
*
* @author Hervé Bitteur
*/
public class MouseWheelTest
extends MouseAdapter
{
//~ Static fields/initializers ---------------------------------------------
private static final double base = 2;
private static final double intervals = 5;
private static final double factor = Math.pow(base, 1d / intervals);
//~ Instance fields --------------------------------------------------------
LogSlider slider;
final Zoom zoom = new Zoom();
//~ Methods ----------------------------------------------------------------
//------//
// main //
//------//
public static void main (String... args)
{
new MouseWheelTest().play();
}
//-----------------//
// mouseWheelMoved //
//-----------------//
@Override
public void mouseWheelMoved (MouseWheelEvent e)
{
/*
* java.awt.event.MouseWheelEvent
* [MOUSE_WHEEL,(628,24),absolute(0,0),button=0,modifiers=Ctrl,extModifiers=Ctrl,clickCount=0,scrollType=WHEEL_UNIT_SCROLL,scrollAmount=3,wheelRotation=-1]
* on javax.swing.JPanel[,0,0,800x30,layout=java.awt.FlowLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=]
*/
//System.out.println("e: " + e);
int scrollAmount = e.getScrollAmount();
int scrollType = e.getScrollType();
int unitsToScroll = e.getUnitsToScroll();
int wheelRotation = e.getWheelRotation();
boolean ctrl = e.isControlDown();
// System.out.println(
// "CTRL:" + ctrl + " amount:" + scrollAmount + " type:" + scrollType +
// " units:" + unitsToScroll + " rotation:" + wheelRotation);
if (ctrl) {
double val = slider.getDoubleValue();
System.out.println("val:" + val);
if (wheelRotation > 0) {
val /= factor;
} else {
val *= factor;
}
System.out.println(" val:" + val);
slider.setDoubleValue(val);
}
}
//------//
// play //
//------//
@Test
public void play ()
{
JFrame frame = new JFrame(getClass().toString());
Container pane = frame.getContentPane();
pane.setLayout(new BorderLayout());
final LDoubleField ldf = new LDoubleField("Ratio", "Current ratio");
JPanel panel = new JPanel();
panel.add(ldf.getLabel(), BorderLayout.WEST);
panel.add(ldf.getField(), BorderLayout.CENTER);
pane.add(panel, BorderLayout.NORTH);
ldf.getField()
.addActionListener(
new ActionListener() {
@Override
public void actionPerformed (ActionEvent e)
{
zoom.setRatio(ldf.getValue());
}
});
slider = new LogSlider(2, 5, LogSlider.HORIZONTAL, -5, 5, 0);
slider.setSnapToTicks(false);
slider.setPreferredSize(new Dimension(800, 70));
pane.add(slider, BorderLayout.SOUTH);
zoom.addChangeListener(
new ChangeListener() {
@Override
public void stateChanged (ChangeEvent e)
{
ldf.setValue(zoom.getRatio());
}
});
zoom.setSlider(slider);
zoom.setRatio(2d);
// Register for wheel events
panel.addMouseWheelListener(this);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocation(100, 100);
frame.pack();
frame.setVisible(true);
}
//----------//
// testZoom //
//----------//
public void testZoom ()
{
play();
}
}