Module ij

Class SyncWindows

java.lang.Object
java.awt.Component
java.awt.Container
java.awt.Window
java.awt.Frame
ij.plugin.frame.PlugInFrame
ij.plugin.frame.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

    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 Details

    • 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 Details

    • 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 Details

    • 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
    • imageUpdated

      public void imageUpdated​(ImagePlus imp)
      Specified by:
      imageUpdated 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
    • close

      public void close()
      Description copied from class: PlugInFrame
      Closes this window.
      Overrides:
      close in class PlugInFrame
    • getInstance

      public static SyncWindows getInstance()
    • commandExecuting

      public java.lang.String commandExecuting​(java.lang.String command)
      Specified by:
      commandExecuting in interface CommandListener