Class McvComponentGroup

java.lang.Object
ucar.unidata.collab.SharableImpl
ucar.unidata.collab.PropertiedThing
ucar.unidata.ui.ComponentHolder
ucar.unidata.ui.ComponentGroup
ucar.unidata.idv.ui.IdvComponentGroup
edu.wisc.ssec.mcidasv.ui.McvComponentGroup
All Implemented Interfaces:
PropertyChangeListener, EventListener, ucar.unidata.collab.Sharable

public class McvComponentGroup extends ucar.unidata.idv.ui.IdvComponentGroup
Extends the IDV component groups so that we can intercept clicks for Bruce's tab popup menu and handle drag and drop. It also intercepts ViewManager creation in order to wrap components in McIDASVComponentHolders rather than IdvComponentHolders. Doing this allows us to associate ViewManagers back to their ComponentHolders, and this functionality is taken advantage of to form the hierarchical names seen in the McIDASVViewPanel.
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    private class 
    Handle pop-up events for tabs.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private static final String
    Action command for destroying a display.
    private static final String
    Action command for ejecting a display from a tab.
    private static final String
    Action command for renaming a display.
    private boolean
    Whether or not the "tab area" should be visible if there is only a single tab (defaults to false).
    private boolean
    Whether or not the title bar is hidden (defaults to false).
    protected static final String
    Path to the "close tab" icon in the popup menu.
    protected static final String
    Path to the "rename" icon in the popup menu.
    protected static final String
    Path to the eject icon in the popup menu.
    private ucar.unidata.idv.IntegratedDataViewer
    Keep a reference to avoid extraneous calls to getIdv().
    private boolean
    Whether or not init has been called.
    private List<ucar.unidata.ui.ComponentHolder>
    Holders that McV knows are held by this component group.
    private static final org.slf4j.Logger
     
    private final JPopupMenu
    The popup menu for the McV tabbed display interface.
    private int
    Number of tabs that have been stored in this group.
    private boolean
    Whether or not redoLayout() needs to worry about a renamed tab.
    private ucar.unidata.idv.ui.IdvWindow
    Reference to the window associated with this group.

    Fields inherited from class ucar.unidata.ui.ComponentGroup

    container, LAYOUT_BORDER, LAYOUT_DESKTOP, LAYOUT_GRAPH, LAYOUT_GRID, LAYOUT_GRIDBAG, LAYOUT_HSPLIT, LAYOUT_LIST, LAYOUT_MENU, LAYOUT_NAMES, LAYOUT_TABS, LAYOUT_TREE, LAYOUT_VSPLIT, LAYOUTS, outerContainer, tabbedPane

    Fields inherited from class ucar.unidata.ui.ComponentHolder

    ATTR_NAME, BORDER_NAMES, BORDERS, displayBtn, header, isRemoved, nameFld, parent

    Fields inherited from class ucar.unidata.collab.PropertiedThing

    propertiesDialog
  • Constructor Summary

    Constructors
    Constructor
    Description
    Default constructor for serialization.
    McvComponentGroup(ucar.unidata.idv.IntegratedDataViewer idv, String name)
    A pretty typical constructor.
    McvComponentGroup(ucar.unidata.idv.IntegratedDataViewer idv, String name, ucar.unidata.idv.ui.IdvWindow window)
    This constructor catches the window that will be contained in this group.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    addComponent(ucar.unidata.ui.ComponentHolder holder, int index)
    Adds a component holder to this group.
    Doesn't do anything for the time being...
    protected boolean
    destroyDisplay(int idx)
    Prompts the user to confirm removal of the component holder at index idx.
    Create and return the GUI contents.
    protected JPopupMenu
    Create the JPopupMenu that will be displayed for a tab.
    private ucar.unidata.ui.ComponentHolder
    ejectDisplay(int idx)
    Remove the component holder at index idx.
    ucar.unidata.ui.ComponentHolder
     
    int
    Get the index of the active tab in a group.
    protected int
    Returns the number of display components "in" this group.
    boolean
     
    boolean
     
    protected ucar.unidata.ui.ComponentHolder
    getHolderAt(int index)
    Returns the ComponentHolder at the given position within this component group.
    void
    getViewManagers(List viewManagers)
     
    void
    importDisplayControl(ucar.unidata.idv.control.DisplayControlImpl dc)
    Importing a display control entails adding the control to the component group and informing the UI that the control is no longer in its own window.
    int
    indexOf(ucar.unidata.ui.ComponentHolder holder)
    Returns the index of holder within this component group.
    private void
    Initializes the various UI components.
    void
     
    void
    Basically just creates a McVCompHolder for holding a dynamic skin and sets the name of the component holder.
    void
    Create a new component whose type will be determined by the contents of what.
    void
    makeSkin(int index)
    Handles creation of the component represented by the XML skin at the given index.
    ucar.unidata.idv.ui.IdvComponentHolder
    makeSkinAtIndex(int index)
     
    private String
    Create a window title suitable for an application window.
    int
    quietAddComponent(ucar.unidata.ui.ComponentHolder component)
    Adds a component to the end of the list of display components without forcing the IDV-land code to redraw.
    ucar.unidata.ui.ComponentHolder
    Remove the component at index without forcing the IDV-land component group to redraw.
    void
    Forces this group to layout its components.
    protected void
    renameDisplay(int idx)
    Prompt the user to change the name of the component holder at index idx.
    void
    setActiveComponentHolder(ucar.unidata.ui.ComponentHolder holder)
    Used to set the tab associated with holder as the active tab in our JTabbedPane.
    boolean
    setActiveIndex(int index)
    Make the component holder at index active.
    void
    setHideTabArea(boolean hide)
     
    void
    setHideTitleBar(boolean hide)
     
    void
    setIdv(ucar.unidata.idv.IntegratedDataViewer newIdv)
    Overridden so that McV can also update its copy of the IDV reference.
    private boolean
    shouldGenerateName(ucar.unidata.ui.ComponentHolder h, int i)
     

    Methods inherited from class ucar.unidata.idv.ui.IdvComponentGroup

    addGroups, applyProperties, doDrop, dropOk, getAutoImportDisplays, getIdv, getPopupMenuItems, getPropertiesComponents, importAllDisplayControls, setAutoImportDisplays, tryToImportDisplayControl, writeSkin

    Methods inherited from class ucar.unidata.ui.ComponentGroup

    addComponent, doRemove, editLayout, findComponentsWithType, getDisplayComponents, getGridColumns, getIconified, getLastPosition, getLayout, getNumColumns, getNumRows, getTypeName, isAncestor, main, makeTree, print, removeComponent, setDisplayComponents, setGridColumns, setIconified, setLastPosition, setLayout, setNumColumns, setNumRows, setRowsColumns, setState, subtreeChanged, toString, wrapContents, xxxxgetPropertyTabs

    Methods inherited from class ucar.unidata.ui.ComponentHolder

    clearContents, doMakeHeader, getBeingShown, getBorder, getBorderLayoutLocation, getCategory, getContents, getHierachicalName, getIcon, getInternalFrame, getInternalFrameShown, getLayoutRect, getName, getParent, getRoot, getShowHeader, removeDisplayComponent, setBorder, setBorder, setBorderLayoutLocation, setCategory, setInternalFrameShown, setLayoutRect, setName, setParent, setShowHeader, showPopup

    Methods inherited from class ucar.unidata.collab.PropertiedThing

    addPropertyChangeListener, doApplyProperties, firePropertyChange, firePropertyChange, getPropertyListeners, getPropertyTabs, isShowing, propertyChange, removePropertyChangeListener, showProperties, showProperties

    Methods inherited from class ucar.unidata.collab.SharableImpl

    applySharableProperties, doShare, doShare, doShareExternal, doShareInternal, getReceiveShareTime, getSharablePropertiesComponent, getShareGroup, getSharing, getUniqueId, initSharable, receiveShareData, removeSharable, setReceiveShareTime, setShareGroup, setSharing, setUniqueId, showSharableDialog

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Field Details

    • logger

      private static final org.slf4j.Logger logger
    • ICO_CLOSE

      protected static final String ICO_CLOSE
      Path to the "close tab" icon in the popup menu.
      See Also:
    • ICO_RENAME

      protected static final String ICO_RENAME
      Path to the "rename" icon in the popup menu.
      See Also:
    • ICO_UNDOCK

      protected static final String ICO_UNDOCK
      Path to the eject icon in the popup menu.
      See Also:
    • CMD_DISPLAY_DESTROY

      private static final String CMD_DISPLAY_DESTROY
      Action command for destroying a display.
      See Also:
    • CMD_DISPLAY_EJECT

      private static final String CMD_DISPLAY_EJECT
      Action command for ejecting a display from a tab.
      See Also:
    • CMD_DISPLAY_RENAME

      private static final String CMD_DISPLAY_RENAME
      Action command for renaming a display.
      See Also:
    • tabCount

      private int tabCount
      Number of tabs that have been stored in this group.
    • initDone

      private boolean initDone
      Whether or not init has been called.
    • knownHolders

      private List<ucar.unidata.ui.ComponentHolder> knownHolders
      Holders that McV knows are held by this component group. Used to avoid any needless work in redoLayout.
    • idv

      private ucar.unidata.idv.IntegratedDataViewer idv
      Keep a reference to avoid extraneous calls to getIdv().
    • window

      private ucar.unidata.idv.ui.IdvWindow window
      Reference to the window associated with this group.
    • tabRenamed

      private boolean tabRenamed
      Whether or not redoLayout() needs to worry about a renamed tab.
    • hideTabArea

      private boolean hideTabArea
      Whether or not the "tab area" should be visible if there is only a single tab (defaults to false).
    • hideTitleBar

      private boolean hideTitleBar
      Whether or not the title bar is hidden (defaults to false).
  • Constructor Details

    • McvComponentGroup

      Default constructor for serialization.
    • McvComponentGroup

      public McvComponentGroup(ucar.unidata.idv.IntegratedDataViewer idv, String name)
      A pretty typical constructor.
      Parameters:
      idv - The main IDV instance.
      name - Presumably the name of this component group?
    • McvComponentGroup

      public McvComponentGroup(ucar.unidata.idv.IntegratedDataViewer idv, String name, ucar.unidata.idv.ui.IdvWindow window)
      This constructor catches the window that will be contained in this group.
      Parameters:
      idv - The main IDV instance.
      name - Presumably the name of this component group?
      window - The window holding this component group.
  • Method Details

    • getHideTabArea

      public boolean getHideTabArea()
    • setHideTabArea

      public void setHideTabArea(boolean hide)
    • getHideTitleBar

      public boolean getHideTitleBar()
    • setHideTitleBar

      public void setHideTitleBar(boolean hide)
    • init

      private void init()
      Initializes the various UI components.
    • initWith

      public void initWith(Element node)
      Overrides:
      initWith in class ucar.unidata.idv.ui.IdvComponentGroup
    • doMakeContents

      Create and return the GUI contents. Overridden so that McV can implement the right click tab menu and draggable tabs.
      Overrides:
      doMakeContents in class ucar.unidata.ui.ComponentGroup
      Returns:
      GUI contents
    • importDisplayControl

      public void importDisplayControl(ucar.unidata.idv.control.DisplayControlImpl dc)
      Importing a display control entails adding the control to the component group and informing the UI that the control is no longer in its own window.

      Overridden in McV so that the display control is wrapped in a McIDASVComponentHolder rather than a IdvComponentHolder.

      Overrides:
      importDisplayControl in class ucar.unidata.idv.ui.IdvComponentGroup
      Parameters:
      dc - The display control to import.
    • makeDynamicSkin

      public void makeDynamicSkin(Element root)
      Basically just creates a McVCompHolder for holding a dynamic skin and sets the name of the component holder.
      Parameters:
      root - The XML skin that we'll use.
    • createXmlNode

      Doesn't do anything for the time being...
      Overrides:
      createXmlNode in class ucar.unidata.idv.ui.IdvComponentGroup
      Parameters:
      doc -
      Returns:
      XML representation of the contents of this component group.
    • makeSkin

      public void makeSkin(int index)
      Handles creation of the component represented by the XML skin at the given index.

      Overridden so that McV can wrap the component in a McIDASVComponentHolder.

      Overrides:
      makeSkin in class ucar.unidata.idv.ui.IdvComponentGroup
      Parameters:
      index - The index of the skin within the skin resource.
    • makeSkinAtIndex

      public ucar.unidata.idv.ui.IdvComponentHolder makeSkinAtIndex(int index)
    • makeNew

      public void makeNew(String what)
      Create a new component whose type will be determined by the contents of what.

      Overridden so that McV can wrap up the components in McVComponentHolders, which allow McV to map ViewManagers to ComponentHolders.

      Overrides:
      makeNew in class ucar.unidata.idv.ui.IdvComponentGroup
      Parameters:
      what - String that determines what sort of component we create.
    • redoLayout

      public void redoLayout()
      Forces this group to layout its components. Extended because the IDV was doing extra work that McIDAS-V doesn't need, such as dealing with layouts other than LAYOUT_TABS and needlessly reinitializing the group's container.
      Overrides:
      redoLayout in class ucar.unidata.ui.ComponentGroup
      See Also:
      • ComponentGroup.redoLayout()
    • getViewManagers

      public void getViewManagers(List viewManagers)
      Overrides:
      getViewManagers in class ucar.unidata.idv.ui.IdvComponentGroup
    • addComponent

      public void addComponent(ucar.unidata.ui.ComponentHolder holder, int index)
      Adds a component holder to this group. Extended so that the added holder becomes the active tab, and the component is explicitly set to visible in an effort to fix that heavyweight/lightweight component problem.
      Overrides:
      addComponent in class ucar.unidata.ui.ComponentGroup
      Parameters:
      holder -
      index -
      See Also:
      • ComponentGroup.addComponent(ComponentHolder, int)
    • shouldGenerateName

      private boolean shouldGenerateName(ucar.unidata.ui.ComponentHolder h, int i)
    • setActiveComponentHolder

      public void setActiveComponentHolder(ucar.unidata.ui.ComponentHolder holder)
      Used to set the tab associated with holder as the active tab in our JTabbedPane.
      Parameters:
      holder - The active component holder.
    • getActiveIndex

      public int getActiveIndex()
      Get the index of the active tab in a group.
      Returns:
      The index of the active component holder within this group.
    • setActiveIndex

      public boolean setActiveIndex(int index)
      Make the component holder at index active.
      Parameters:
      index - The index of the desired component holder.
      Returns:
      True if the active component holder was set, false otherwise.
    • indexOf

      public int indexOf(ucar.unidata.ui.ComponentHolder holder)
      Returns the index of holder within this component group.
      Overrides:
      indexOf in class ucar.unidata.ui.ComponentGroup
      Returns:
      Either the index of holder, or -1 if ComponentGroup.getDisplayComponents() returns a null List.
      See Also:
    • getHolderAt

      protected ucar.unidata.ui.ComponentHolder getHolderAt(int index)
      Returns the ComponentHolder at the given position within this component group.
      Parameters:
      index - Index of the ComponentHolder to return.
      Returns:
      ComponentHolder at index.
      See Also:
    • getActiveComponentHolder

      public ucar.unidata.ui.ComponentHolder getActiveComponentHolder()
      Returns:
      Component holder that corresponds to the selected tab.
    • setIdv

      public void setIdv(ucar.unidata.idv.IntegratedDataViewer newIdv)
      Overridden so that McV can also update its copy of the IDV reference.
      Overrides:
      setIdv in class ucar.unidata.idv.ui.IdvComponentGroup
    • makeWindowTitle

      private String makeWindowTitle(String title)
      Create a window title suitable for an application window.
      Parameters:
      title - Window title
      Returns:
      Application title plus the window title.
    • getDisplayComponentCount

      protected int getDisplayComponentCount()
      Returns the number of display components "in" this group.
      Returns:
      Either the size() of the List returned by ComponentGroup.getDisplayComponents() or -1 if getDisplayComponents() returns a null List.
    • doMakeTabMenu

      Create the JPopupMenu that will be displayed for a tab.
      Returns:
      Menu initialized with tab options
    • ejectDisplay

      private ucar.unidata.ui.ComponentHolder ejectDisplay(int idx)
      Remove the component holder at index idx. This method does not destroy the component holder.
      Parameters:
      idx - Index of the ejected component holder.
      Returns:
      Component holder that was ejected.
    • renameDisplay

      protected void renameDisplay(int idx)
      Prompt the user to change the name of the component holder at index idx. Nothing happens if the user doesn't enter anything.
      Parameters:
      idx - Index of the component holder.
    • destroyDisplay

      protected boolean destroyDisplay(int idx)
      Prompts the user to confirm removal of the component holder at index idx. Nothing happens if the user declines.
      Parameters:
      idx - Index of the component holder.
      Returns:
      Either true if the user elected to remove, false otherwise.
    • quietRemoveComponentAt

      public ucar.unidata.ui.ComponentHolder quietRemoveComponentAt(int index)
      Remove the component at index without forcing the IDV-land component group to redraw.
      Parameters:
      index - The index of the component to be removed.
      Returns:
      The removed component.
    • quietAddComponent

      public int quietAddComponent(ucar.unidata.ui.ComponentHolder component)
      Adds a component to the end of the list of display components without forcing the IDV-land code to redraw.
      Parameters:
      component - The component to add.
      Returns:
      The index of the newly added component, or -1 if ComponentGroup.getDisplayComponents() returned a null List.