//(c) Copyright 2008, Scott Vorthmann. All rights reserved. package org.vorthmann.zome.app.impl; import java.awt.event.MouseEvent; import org.vorthmann.j3d.MouseToolDefault; import com.vzome.core.model.Manifestation; import com.vzome.core.render.RenderedManifestation; import com.vzome.desktop.controller.RenderingViewer; /** * Transducer: turns mouse events into pick events on visible Manifestations * * @author Scott Vorthmann * */ public class ManifestationPicker extends MouseToolDefault { private final RenderingViewer viewer; public ManifestationPicker( RenderingViewer viewer ) { this .viewer = viewer; } @Override public void mousePressed( MouseEvent e ) { super.mousePressed( e ); Manifestation target = pick( e ); dragStarted( target, ( e .getModifiers() & MouseEvent.SHIFT_MASK ) != 0 ); } protected void dragStarted( Manifestation target, boolean b ) {} private Manifestation pick( MouseEvent e ) { RenderedManifestation rm = viewer .pickManifestation( e ); Manifestation targetManifestation = null; if ( rm != null && rm.isPickable() ) targetManifestation = rm.getManifestation(); return targetManifestation; } @Override public void mouseReleased( MouseEvent e ) { Manifestation target = pick( e ); dragFinished( target, ( e .getModifiers() & MouseEvent.SHIFT_MASK ) != 0 ); } protected void dragFinished( Manifestation target, boolean b ) {} @Override public void mouseClicked( MouseEvent e ) { Manifestation target = pick( e ); manifestationPicked( target, ( e .getModifiers() & MouseEvent.SHIFT_MASK ) != 0 ); } protected void manifestationPicked( Manifestation target, boolean b ) {} }