MouseEventManagerOJ.java :  » Image » objectj » oj » gui » Java Open Source

Java Open Source » Image » objectj 
objectj » oj » gui » MouseEventManagerOJ.java
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);
            }
        }
    }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.