Module ij

Class SyncWindows

  • All Implemented Interfaces:
    CommandListener, ImageListener, PlugIn, java.awt.event.ActionListener, java.awt.event.FocusListener, java.awt.event.ItemListener, java.awt.event.MouseListener, java.awt.event.MouseMotionListener, java.awt.event.WindowListener, java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, java.util.EventListener, javax.accessibility.Accessible

    public class SyncWindows
    extends PlugInFrame
    implements java.awt.event.ActionListener, java.awt.event.MouseMotionListener, java.awt.event.MouseListener, java.awt.event.ItemListener, ImageListener, CommandListener
    This class "synchronizes" mouse input in multiple windows. Once several windows are synchronized, mouse events in any one of the synchronized windows are propagated to the others. Note, the notion of synchronization use by the SyncWindows class here (i.e. multiple windows that all get the same mouse input) is somewhat different than the use of the synchronize keyword in the Java language. (In Java, synchronize has to do w/ critical section access by multiple threads.)

    Optionally passes on change of z-slice of a stack to other stacks; Optionally translates positions to different windows via offscreen coordinates, i.e. correctly translates coordinates to windows with a different zoom; Updates the list of windows by click of a button;

    Author:
    Patrick Kelly ; Improved GUI, support of image coordinates and z-slices by Joachim Walter
    See Also:
    Serialized Form
    • Nested Class Summary

      • Nested classes/interfaces inherited from class java.awt.Frame

        java.awt.Frame.AccessibleAWTFrame
      • Nested classes/interfaces inherited from class java.awt.Window

        java.awt.Window.AccessibleAWTWindow, java.awt.Window.Type
      • Nested classes/interfaces inherited from class java.awt.Container

        java.awt.Container.AccessibleAWTContainer
      • Nested classes/interfaces inherited from class java.awt.Component

        java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected java.awt.Button bSyncAll
      Buttons for user control.
      protected java.awt.Button bUnsyncAll
      Buttons for user control.
      protected java.awt.Checkbox cChannel
      Checkboxes for user control.
      protected java.awt.Checkbox cCoords
      Checkboxes for user control.
      protected java.awt.Checkbox cCursor
      Checkboxes for user control.
      protected java.awt.Checkbox cFrame
      Checkboxes for user control.
      protected java.awt.Checkbox cScaling
      Checkboxes for user control.
      protected java.awt.Checkbox cSlice
      Checkboxes for user control.
      protected ImageJ ijInstance
      reference to current instance of ImageJ (to avoid repeated IJ.getInstance() s)
      protected int oldX  
      protected int oldY  
      protected java.awt.Panel panel
      Panel for GUI
      protected java.util.Vector vListMap
      Hashtable to map list ids to image window ids.
      protected java.util.Vector vwins
      Indices of synchronized image windows are maintained in this Vector.
      protected java.awt.List wList
      List of currently displayed windows retrieved from ImageJ window manager.
      protected int x  
      protected int y  
      • Fields inherited from class java.awt.Frame

        CROSSHAIR_CURSOR, DEFAULT_CURSOR, E_RESIZE_CURSOR, HAND_CURSOR, ICONIFIED, MAXIMIZED_BOTH, MAXIMIZED_HORIZ, MAXIMIZED_VERT, MOVE_CURSOR, N_RESIZE_CURSOR, NE_RESIZE_CURSOR, NORMAL, NW_RESIZE_CURSOR, S_RESIZE_CURSOR, SE_RESIZE_CURSOR, SW_RESIZE_CURSOR, TEXT_CURSOR, W_RESIZE_CURSOR, WAIT_CURSOR
      • Fields inherited from class java.awt.Component

        accessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
      • Fields inherited from interface java.awt.image.ImageObserver

        ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
    • Constructor Summary

      Constructors 
      Constructor Description
      SyncWindows()
      Create window sync frame.
      SyncWindows​(java.lang.String s)  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void actionPerformed​(java.awt.event.ActionEvent e)
      Implementation of ActionListener interface.
      protected java.awt.Rectangle boundingRect​(int x, int y, int oldX, int oldY)
      Compute bounding rectangle given current and old cursor locations.
      protected java.awt.Panel buildControlPanel()
      Builds panel containing control buttons.
      protected java.awt.Component buildWindowList()
      Builds list of open ImageWindows
      void close()
      Closes this window.
      java.lang.String commandExecuting​(java.lang.String command)  
      protected java.awt.Panel controlPanel()
      Build window list display and button controls.
      void displayChanged​(ij.plugin.frame.DisplayChangeEvent e)
      Method to pass on changes of the z-slice of a stack.
      ImagePlus getImageFromVector​(int n)
      Get ImagePlus from Windows-Vector vwins.
      java.lang.String getImageTitleFromVector​(int n)
      Get the title of image n from Windows-Vector vwins.
      int getIndexOfImage​(ImagePlus image)
      Get index of "image" in vector of synchronized windows, if image is in vector.
      java.awt.Insets getInsets()  
      static SyncWindows getInstance()  
      protected java.awt.Point getMatchingCoords​(ImageCanvas ic, ImageCanvas icc, int x, int y)
      Get Screen Coordinates for ImageCanvas ic matching the OffScreen Coordinates of the current ImageCanvas.
      void imageClosed​(ImagePlus imp)
      Implementation of ImageListener interface: update window list, if image is opened or closed
      void imageOpened​(ImagePlus imp)
      Implementation of ImageListener interface: update window list, if image is opened or closed
      void imageUpdated​(ImagePlus imp)  
      void itemStateChanged​(java.awt.event.ItemEvent e)
      Item Listener method
      void mouseClicked​(java.awt.event.MouseEvent e)
      Propagate mouse clicked events to all synchronized windows.
      void mouseDragged​(java.awt.event.MouseEvent e)
      Propagate mouse dragged events to all synchronized windows.
      void mouseEntered​(java.awt.event.MouseEvent e)
      Propagate mouse entered events to all synchronized windows.
      void mouseExited​(java.awt.event.MouseEvent e)
      Propagate mouse exited events to all synchronized windows.
      void mouseMoved​(java.awt.event.MouseEvent e)
      Draws the "synchronize" cursor in each of the synchronized windows.
      void mousePressed​(java.awt.event.MouseEvent e)
      Propagate mouse pressed events to all synchronized windows.
      void mouseReleased​(java.awt.event.MouseEvent e)
      Propagate mouse released events to all synchronized windows.
      static void setC​(ImageWindow source, int channel)  
      void setCursor​(ImagePlus imp, Roi cursor)  
      static void setT​(ImageWindow source, int frame)  
      static void setZ​(ImageWindow source, int slice)  
      protected void updateWindowList()  
      void windowClosing​(java.awt.event.WindowEvent e)
      Override parent windowClosing method to clean up synchronized resources on exit.
      • Methods inherited from class java.awt.Frame

        addNotify, getAccessibleContext, getCursorType, getExtendedState, getFrames, getIconImage, getMaximizedBounds, getMenuBar, getState, getTitle, isResizable, isUndecorated, paramString, remove, removeNotify, setBackground, setCursor, setExtendedState, setIconImage, setMaximizedBounds, setMenuBar, setOpacity, setResizable, setShape, setState, setTitle, setUndecorated
      • Methods inherited from class java.awt.Window

        addPropertyChangeListener, addPropertyChangeListener, addWindowFocusListener, addWindowListener, addWindowStateListener, applyResourceBundle, applyResourceBundle, createBufferStrategy, createBufferStrategy, dispose, getBackground, getBufferStrategy, getFocusableWindowState, getFocusCycleRootAncestor, getFocusOwner, getFocusTraversalKeys, getIconImages, getInputContext, getListeners, getLocale, getModalExclusionType, getMostRecentFocusOwner, getOpacity, getOwnedWindows, getOwner, getOwnerlessWindows, getShape, getToolkit, getType, getWarningString, getWindowFocusListeners, getWindowListeners, getWindows, getWindowStateListeners, hide, isActive, isAlwaysOnTop, isAlwaysOnTopSupported, isAutoRequestFocus, isFocusableWindow, isFocusCycleRoot, isFocused, isLocationByPlatform, isOpaque, isShowing, isValidateRoot, pack, paint, postEvent, processEvent, processWindowEvent, processWindowFocusEvent, processWindowStateEvent, removeWindowFocusListener, removeWindowListener, removeWindowStateListener, reshape, setAlwaysOnTop, setAutoRequestFocus, setBounds, setBounds, setCursor, setFocusableWindowState, setFocusCycleRoot, setIconImages, setLocation, setLocation, setLocationByPlatform, setLocationRelativeTo, setMinimumSize, setModalExclusionType, setSize, setSize, setType, setVisible, show, toBack, toFront
      • Methods inherited from class java.awt.Container

        add, add, add, add, add, addContainerListener, addImpl, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalPolicy, getLayout, getMaximumSize, getMinimumSize, getMousePosition, getPreferredSize, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, print, printComponents, processContainerEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusTraversalKeys, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setFont, setLayout, transferFocusDownCycle, update, validate, validateTree
      • Methods inherited from class java.awt.Component

        action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getGraphics, getGraphicsConfiguration, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, repaint, requestFocus, requestFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, requestFocusInWindow, resize, resize, revalidate, setComponentOrientation, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setMaximumSize, setMixingCutoutShape, setName, setPreferredSize, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • Methods inherited from interface java.awt.MenuContainer

        getFont, postEvent
    • Field Detail

      • vwins

        protected java.util.Vector vwins
        Indices of synchronized image windows are maintained in this Vector.
      • oldX

        protected int oldX
      • oldY

        protected int oldY
      • x

        protected int x
      • y

        protected int y
      • wList

        protected java.awt.List wList
        List of currently displayed windows retrieved from ImageJ window manager.
      • panel

        protected java.awt.Panel panel
        Panel for GUI
      • cCursor

        protected java.awt.Checkbox cCursor
        Checkboxes for user control.
      • cSlice

        protected java.awt.Checkbox cSlice
        Checkboxes for user control.
      • cChannel

        protected java.awt.Checkbox cChannel
        Checkboxes for user control.
      • cFrame

        protected java.awt.Checkbox cFrame
        Checkboxes for user control.
      • cCoords

        protected java.awt.Checkbox cCoords
        Checkboxes for user control.
      • cScaling

        protected java.awt.Checkbox cScaling
        Checkboxes for user control.
      • bSyncAll

        protected java.awt.Button bSyncAll
        Buttons for user control.
      • bUnsyncAll

        protected java.awt.Button bUnsyncAll
        Buttons for user control.
      • vListMap

        protected java.util.Vector vListMap
        Hashtable to map list ids to image window ids.
      • ijInstance

        protected final ImageJ ijInstance
        reference to current instance of ImageJ (to avoid repeated IJ.getInstance() s)
    • Constructor Detail

      • SyncWindows

        public SyncWindows()
        Create window sync frame. Frame is shown via call to show() or by invoking run method.
      • SyncWindows

        public SyncWindows​(java.lang.String s)
    • Method Detail

      • setC

        public static void setC​(ImageWindow source,
                                int channel)
      • setZ

        public static void setZ​(ImageWindow source,
                                int slice)
      • setT

        public static void setT​(ImageWindow source,
                                int frame)
      • displayChanged

        public void displayChanged​(ij.plugin.frame.DisplayChangeEvent e)
        Method to pass on changes of the z-slice of a stack.
      • mouseMoved

        public void mouseMoved​(java.awt.event.MouseEvent e)
        Draws the "synchronize" cursor in each of the synchronized windows.
        Specified by:
        mouseMoved in interface java.awt.event.MouseMotionListener
      • mouseDragged

        public void mouseDragged​(java.awt.event.MouseEvent e)
        Propagate mouse dragged events to all synchronized windows.
        Specified by:
        mouseDragged in interface java.awt.event.MouseMotionListener
      • mouseClicked

        public void mouseClicked​(java.awt.event.MouseEvent e)
        Propagate mouse clicked events to all synchronized windows.
        Specified by:
        mouseClicked in interface java.awt.event.MouseListener
      • mouseEntered

        public void mouseEntered​(java.awt.event.MouseEvent e)
        Propagate mouse entered events to all synchronized windows.
        Specified by:
        mouseEntered in interface java.awt.event.MouseListener
      • mouseExited

        public void mouseExited​(java.awt.event.MouseEvent e)
        Propagate mouse exited events to all synchronized windows.
        Specified by:
        mouseExited in interface java.awt.event.MouseListener
      • mousePressed

        public void mousePressed​(java.awt.event.MouseEvent e)
        Propagate mouse pressed events to all synchronized windows.
        Specified by:
        mousePressed in interface java.awt.event.MouseListener
      • mouseReleased

        public void mouseReleased​(java.awt.event.MouseEvent e)
        Propagate mouse released events to all synchronized windows.
        Specified by:
        mouseReleased in interface java.awt.event.MouseListener
      • actionPerformed

        public void actionPerformed​(java.awt.event.ActionEvent e)
        Implementation of ActionListener interface.
        Specified by:
        actionPerformed in interface java.awt.event.ActionListener
      • itemStateChanged

        public void itemStateChanged​(java.awt.event.ItemEvent e)
        Item Listener method
        Specified by:
        itemStateChanged in interface java.awt.event.ItemListener
      • windowClosing

        public void windowClosing​(java.awt.event.WindowEvent e)
        Override parent windowClosing method to clean up synchronized resources on exit.
        Specified by:
        windowClosing in interface java.awt.event.WindowListener
        Overrides:
        windowClosing in class PlugInFrame
      • imageOpened

        public void imageOpened​(ImagePlus imp)
        Implementation of ImageListener interface: update window list, if image is opened or closed
        Specified by:
        imageOpened in interface ImageListener
      • imageClosed

        public void imageClosed​(ImagePlus imp)
        Implementation of ImageListener interface: update window list, if image is opened or closed
        Specified by:
        imageClosed in interface ImageListener
      • controlPanel

        protected java.awt.Panel controlPanel()
        Build window list display and button controls. Create Hashtable that connects list entries to window IDs.
      • buildWindowList

        protected java.awt.Component buildWindowList()
        Builds list of open ImageWindows
      • buildControlPanel

        protected java.awt.Panel buildControlPanel()
        Builds panel containing control buttons.
      • boundingRect

        protected java.awt.Rectangle boundingRect​(int x,
                                                  int y,
                                                  int oldX,
                                                  int oldY)
        Compute bounding rectangle given current and old cursor locations. This is used to determine what part of image to redraw.
      • updateWindowList

        protected void updateWindowList()
      • setCursor

        public void setCursor​(ImagePlus imp,
                              Roi cursor)
      • getImageFromVector

        public ImagePlus getImageFromVector​(int n)
        Get ImagePlus from Windows-Vector vwins.
      • getImageTitleFromVector

        public java.lang.String getImageTitleFromVector​(int n)
        Get the title of image n from Windows-Vector vwins. If the image ends with .tif, the extension is removed.
      • getIndexOfImage

        public int getIndexOfImage​(ImagePlus image)
        Get index of "image" in vector of synchronized windows, if image is in vector. Else return -1.
      • getMatchingCoords

        protected java.awt.Point getMatchingCoords​(ImageCanvas ic,
                                                   ImageCanvas icc,
                                                   int x,
                                                   int y)
        Get Screen Coordinates for ImageCanvas ic matching the OffScreen Coordinates of the current ImageCanvas. (srcRect and magnification stored after each received event.) Input: The target ImageCanvas, the current ImageCanvas, x-ScreenCoordinate for current Canvas, y-ScreenCoordinate for current Canvas If the "ImageScaling" checkbox is selected, Scaling and Offset of the images are taken into account.
      • getInsets

        public java.awt.Insets getInsets()
        Overrides:
        getInsets in class java.awt.Container
      • getInstance

        public static SyncWindows getInstance()