package oj.gui;
import ij.CompositeImage;
import ij.IJ;
import ij.ImagePlus;
import ij.WindowManager;
import ij.gui.ImageWindow;
import java.awt.KeyboardFocusManager;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JOptionPane;
import oj.OJ;
import oj.graphics.CustomCanvasOJ;
import oj.processor.ToolStateProcessorOJ;
import oj.processor.EventProcessorOJ;
import oj.processor.state.MacroToolStateOJ;
import oj.processor.state.MoveCellStateOJ;
import oj.project.DataOJ;
public class MouseEventManagerOJ implements MouseListener, MouseMotionListener {
private static MouseEventManagerOJ instance;
private MouseEventManagerOJ() {
}
public static MouseEventManagerOJ getInstance() {
if (instance == null) {
instance = new MouseEventManagerOJ();
}
return instance;
}
public static void release() {
if (instance != null) {
//remove the listener from any open ImageWindow
for (int i = 0; i < WindowManager.getImageCount(); i++) {
WindowManager.getImage(i).getCanvas().addMouseListener(WindowManager.getImage(i).getCanvas());
WindowManager.getImage(i).getCanvas().addMouseMotionListener(WindowManager.getImage(i).getCanvas());
WindowManager.getImage(i).getCanvas().removeMouseListener(MouseEventManagerOJ.getInstance());
WindowManager.getImage(i).getCanvas().removeMouseMotionListener(MouseEventManagerOJ.getInstance());
}
instance = null;
}
}
private boolean impLinked(ImagePlus imp) {
DataOJ data = OJ.getData();
if (data == null) {
return false;
}
boolean linked = (OJ.getData().getImages().getImageByName(imp.getTitle()) != null);//18.6.2009
return linked;
}
public void replaceMouseListener(ImagePlus imp) {
if (imp != null) {
imp.getCanvas().removeMouseListener(MouseEventManagerOJ.getInstance());
imp.getCanvas().removeMouseMotionListener(MouseEventManagerOJ.getInstance());
imp.getCanvas().removeMouseListener(imp.getCanvas());
imp.getCanvas().removeMouseMotionListener(imp.getCanvas());
imp.getCanvas().addMouseListener(MouseEventManagerOJ.getInstance());
imp.getCanvas().addMouseMotionListener(MouseEventManagerOJ.getInstance());
}
}
public void mouseClicked(MouseEvent e) {
if (!EventProcessorOJ.updateMarkers) {
EventProcessorOJ.updateMarkers = true;//if macro "updateMarkers(true) was not reached 11.2.2011
OJ.getEventProcessor().fireCellChangedEvent();
}
if (KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusedWindow() instanceof ImageWindow) {
ImagePlus imp = ((ImageWindow) KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusedWindow()).getImagePlus();
if (impLinked(imp) && (OJ.isValidData()) && (OJ.getToolStateProcessor().getToolState() != ToolStateProcessorOJ.STATE_NONE) && (!IJ.spaceBarDown())) {
double x = imp.getCanvas().offScreenXD(e.getX());
double y = imp.getCanvas().offScreenYD(e.getY());
int stackIndex = imp.getStackIndex(imp.getChannel(), imp.getSlice(), imp.getFrame());
OJ.getToolStateProcessor().getToolStateObject().mouseClicked(imp.getTitle(), stackIndex, x, y, e.getModifiers());
} else {
imp.getCanvas().mouseClicked(e);
}
}
}
public void mousePressed(MouseEvent e) {
if (KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusedWindow() instanceof ImageWindow) {
ImagePlus imp = ((ImageWindow) KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusedWindow()).getImagePlus();
// boolean aa = OJ.isValidData();
// boolean bb = aa && impLinked(imp);
// boolean cc = bb&&OJ.getToolStateProcessor().getToolState() != ToolStateProcessorOJ.STATE_NONE;
// boolean dd = !IJ.spaceBarDown();
double x = imp.getCanvas().offScreenXD(e.getX());
double y = imp.getCanvas().offScreenYD(e.getY());
int stackIndex = imp.getCurrentSlice();//24.6.2009
if (OJ.isValidData() && impLinked(imp) && (OJ.getToolStateProcessor().getToolState() != ToolStateProcessorOJ.STATE_NONE) && (!IJ.spaceBarDown())) {//4.7.2009
if ((imp instanceof CompositeImage) && (((CompositeImage) imp).getMode() == CompositeImage.COMPOSITE)) {
int channel = CustomCanvasOJ.getChannel(imp, stackIndex);
if (!CustomCanvasOJ.isActiveChannel(imp, channel - 1)) {
JOptionPane.showMessageDialog(imp.getWindow(), "You just tried to add a marker on an invisible stack slice.\nYou must make the channel visible before continuing.", "Marking error", JOptionPane.ERROR_MESSAGE);
return;
}
}
OJ.getToolStateProcessor().getToolStateObject().mousePressed(imp.getTitle(), stackIndex, x, y, e.getModifiers());
if (OJ.getToolStateProcessor().getToolStateObject() instanceof MoveCellStateOJ) {
EventProcessorOJ.BlockEventsOnDrag = true;
}
} else if (OJ.isValidData() && OJ.getToolStateProcessor().getToolStateObject() instanceof MacroToolStateOJ) {//4.7.2009
OJ.getToolStateProcessor().getToolStateObject().mousePressed(imp.getTitle(), stackIndex, x, y, e.getModifiers());
} else {
imp.getCanvas().mousePressed(e);
}
}
}
public void mouseReleased(MouseEvent e) {
if (KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusedWindow() instanceof ImageWindow) {
ImagePlus imp = ((ImageWindow) KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusedWindow()).getImagePlus();
if (impLinked(imp) && (OJ.isValidData()) && (OJ.getToolStateProcessor().getToolState() != ToolStateProcessorOJ.STATE_NONE) && (!IJ.spaceBarDown())) {
EventProcessorOJ.BlockEventsOnDrag = false;
double x = imp.getCanvas().offScreenXD(e.getX());
double y = imp.getCanvas().offScreenYD(e.getY());
int stackIndex = imp.getStackIndex(imp.getChannel(), imp.getSlice(), imp.getFrame());
OJ.getToolStateProcessor().getToolStateObject().mouseReleased(imp.getTitle(), stackIndex, x, y, e.getModifiers());
} else {
imp.getCanvas().mouseReleased(e);
}
}
}
public void mouseEntered(MouseEvent e) {
if (KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusedWindow() instanceof ImageWindow) {
ImagePlus imp = ((ImageWindow) KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusedWindow()).getImagePlus();
if (impLinked(imp) && (OJ.isValidData()) && (OJ.getToolStateProcessor().getToolState() != ToolStateProcessorOJ.STATE_NONE) && (!IJ.spaceBarDown())) {
double x = imp.getCanvas().offScreenXD(e.getX());
double y = imp.getCanvas().offScreenYD(e.getY());
int stackIndex = imp.getStackIndex(imp.getChannel(), imp.getSlice(), imp.getFrame());
OJ.getToolStateProcessor().getToolStateObject().mouseEntered(imp.getTitle(), stackIndex, x, y, e.getModifiers());
} else {
imp.getCanvas().mouseEntered(e);
}
}
}
public void mouseExited(MouseEvent e) {
if (KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusedWindow() instanceof ImageWindow) {
ImagePlus imp = ((ImageWindow) KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusedWindow()).getImagePlus();
if (impLinked(imp) && (OJ.isValidData()) && (OJ.getToolStateProcessor().getToolState() != ToolStateProcessorOJ.STATE_NONE) && (!IJ.spaceBarDown())) {
double x = imp.getCanvas().offScreenXD(e.getX());
double y = imp.getCanvas().offScreenYD(e.getY());
int stackIndex = imp.getStackIndex(imp.getChannel(), imp.getSlice(), imp.getFrame());
OJ.getToolStateProcessor().getToolStateObject().mouseExited(imp.getTitle(), stackIndex, x, y, e.getModifiers());
} else {
imp.getCanvas().mouseExited(e);
}
}
}
public void mouseDragged(MouseEvent e) {
if (KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusedWindow() instanceof ImageWindow) {
ImagePlus imp = ((ImageWindow) KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusedWindow()).getImagePlus();
if (impLinked(imp) && (OJ.isValidData()) && (OJ.getToolStateProcessor().getToolState() != ToolStateProcessorOJ.STATE_NONE) && (!IJ.spaceBarDown())) {
double x = imp.getCanvas().offScreenXD(e.getX());
double y = imp.getCanvas().offScreenYD(e.getY());
IJ.setInputEvent(e);
int stackIndex = imp.getStackIndex(imp.getChannel(), imp.getSlice(), imp.getFrame());
OJ.getToolStateProcessor().getToolStateObject().mouseDragged(imp.getTitle(), stackIndex, x, y, e.getModifiers());
} else {
imp.getCanvas().mouseDragged(e);
}
}
}
public void mouseMoved(MouseEvent e) {
ImagePlus imp2 = WindowManager.getCurrentImage();//19.5.2009
if (imp2 != null) {
if (imp2.getCanvas() != null) {
int sx = e.getX();
int sy = e.getY();
int ox = imp2.getCanvas().offScreenX(sx);
int oy = imp2.getCanvas().offScreenY(sy);
imp2.getCanvas().setCursor(sx, sy, ox, oy);
}
}
if (KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusedWindow() instanceof ImageWindow) {
ImagePlus imp = ((ImageWindow) KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusedWindow()).getImagePlus();
if (impLinked(imp) && (OJ.isValidData()) && (OJ.getToolStateProcessor().getToolState() != ToolStateProcessorOJ.STATE_NONE) && (!IJ.spaceBarDown())) {
double x = imp.getCanvas().offScreenXD(e.getX());
double y = imp.getCanvas().offScreenYD(e.getY());
IJ.setInputEvent(e);
int stackIndex = imp.getStackIndex(imp.getChannel(), imp.getSlice(), imp.getFrame());
OJ.getToolStateProcessor().getToolStateObject().mouseMoved(imp.getTitle(), stackIndex, x, y, e.getModifiers());
} else {
imp.getCanvas().mouseMoved(e);
}
}
}
}
|