Class CombinedLocoSelPane

  • All Implemented Interfaces:
    java.awt.image.ImageObserver, java.awt.MenuContainer, java.beans.PropertyChangeListener, java.io.Serializable, java.util.EventListener, javax.accessibility.Accessible
    Direct Known Subclasses:
    CombinedLocoSelListPane, CombinedLocoSelTreePane

    public class CombinedLocoSelPane
    extends LocoSelPane
    implements java.beans.PropertyChangeListener
    Provide GUI controls to select a known loco and/or new decoder.

    When the "open programmer" button is pushed, i.e. the user is ready to continue, the startProgrammer method is invoked. This should be overridden (e.g. in a local anonymous class) to create the programmer frame you're interested in.

    To override this class to use a different decoder-selection GUI, replace members:

    • layoutDecoderSelection
    • updateForDecoderTypeID
    • updateForDecoderMfgID
    • updateForDecoderNotID
    • resetDecoder
    • isDecoderSelected
    • selectedDecoderName
    See Also:
    Serialized Form
    • Nested Class Summary

      • Nested classes/interfaces inherited from class javax.swing.JPanel

        javax.swing.JPanel.AccessibleJPanel
      • Nested classes/interfaces inherited from class javax.swing.JComponent

        javax.swing.JComponent.AccessibleJComponent
      • 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
      (package private) javax.swing.JLabel _statusLabel
      Reference to an external (not in this pane) JLabel that should be updated with status information as identification happens.
      protected javax.swing.JButton go2  
      protected javax.swing.JToggleButton iddecoder  
      protected javax.swing.JToggleButton idloco  
      protected GlobalRosterEntryComboBox locoBox  
      protected javax.swing.JComboBox<java.lang.String> programmerBox  
      (package private) ProgModeSelector selector  
      • Fields inherited from class javax.swing.JComponent

        listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
      • 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
      CombinedLocoSelPane​(javax.swing.JLabel s, ProgModeSelector selector)
      Provide GUI controls to select a known loco and/or new decoder.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      (package private) javax.swing.JToggleButton addDecoderIdentButton()
      Add a decoder identification button.
      protected javax.swing.JPanel createProgrammerSelection()
      Creates a Programmer Selection panel.
      protected void init()
      Initialize the GUI.
      (package private) boolean isDecoderSelected()
      Has the user selected a decoder type, either manually or via a successful event?
      protected javax.swing.JPanel layoutDecoderSelection()
      Create the panel used to select the decoder.
      protected javax.swing.JPanel layoutRosterSelection()
      Create the panel used to select an existing entry.
      protected void openButton()
      handle pushing the open programmer button by finding names, then calling a template method.
      protected void openKnownLoco()
      Start with a locomotive selected, so we're opening an existing RosterEntry.
      protected void openNewLoco()
      Start with a decoder selected, so we're going to create a new RosterEntry.
      void propertyChange​(java.beans.PropertyChangeEvent ev)
      Notification that the Roster has changed, so the locomotive selection list has to be changed.
      protected void selectDecoder​(int mfgID, int modelID, int productID)
      Identify decoder complete, act on it by setting the GUI This will fire "GUI changed" events which will reset the locomotive GUI.
      protected java.lang.String selectedDecoderType()
      Convert the decoder selection UI result into a name.
      protected void selectLoco​(int dccAddress)
      Identify locomotive complete, act on it by setting the GUI.
      (package private) void setDecoderSelectionFromLoco​(java.lang.String loco)
      Set the decoder GUI back to having no selection.
      protected void startIdentifyDecoder()
      Identify loco button pressed, start the identify operation.
      protected void startIdentifyLoco()
      Identify loco button pressed, start the identify operation This defines what happens when the identify is done.
      protected void startProgrammer​(DecoderFile decoderFile, RosterEntry r, java.lang.String progName)
      Start the desired type of programmer.
      (package private) void updateForDecoderMfgID​(java.lang.String pMfg, int pMfgID, int pModelID)
      Decoder identify has not matched specific types, but did find manufacturer match.
      (package private) void updateForDecoderNotID​(int pMfgID, int pModelID)
      Decoder identify did not match anything, warn and show all.
      (package private) void updateForDecoderTypeID​(java.util.List<DecoderFile> pList)
      Decoder identify has matched one or more specific types.
      • Methods inherited from class javax.swing.JPanel

        getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUI
      • Methods inherited from class javax.swing.JComponent

        addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
      • Methods inherited from class java.awt.Container

        add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, 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, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setMixingCutoutShape, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Constructor Detail

      • CombinedLocoSelPane

        public CombinedLocoSelPane​(javax.swing.JLabel s,
                                   ProgModeSelector selector)
        Provide GUI controls to select a known loco and/or new decoder.
        Parameters:
        s - Reference to a JLabel that should be updated with status information as identification happens.
        selector - Reference to a ProgModeSelector panel that configures the programming mode.
    • Method Detail

      • layoutDecoderSelection

        protected javax.swing.JPanel layoutDecoderSelection()
        Create the panel used to select the decoder.
        Returns:
        a JPanel for handling the decoder-selection GUI
      • addDecoderIdentButton

        javax.swing.JToggleButton addDecoderIdentButton()
        Add a decoder identification button.
        Returns:
        the button
      • setDecoderSelectionFromLoco

        void setDecoderSelectionFromLoco​(java.lang.String loco)
        Set the decoder GUI back to having no selection.
        Parameters:
        loco - the loco name
      • isDecoderSelected

        boolean isDecoderSelected()
        Has the user selected a decoder type, either manually or via a successful event?
        Returns:
        true if a decoder type is selected
      • selectedDecoderType

        protected java.lang.String selectedDecoderType()
        Convert the decoder selection UI result into a name.
        Returns:
        The selected decoder type name, or null if none selected.
      • layoutRosterSelection

        protected javax.swing.JPanel layoutRosterSelection()
        Create the panel used to select an existing entry.
        Returns:
        a JPanel for handling the entry-selection GUI
      • init

        protected void init()
        Initialize the GUI.
      • createProgrammerSelection

        protected javax.swing.JPanel createProgrammerSelection()
        Creates a Programmer Selection panel.
        Returns:
        the panel
      • startIdentifyLoco

        protected void startIdentifyLoco()
        Identify loco button pressed, start the identify operation This defines what happens when the identify is done.
      • startIdentifyDecoder

        protected void startIdentifyDecoder()
        Identify loco button pressed, start the identify operation. This defines what happens when the identify is done.
      • propertyChange

        public void propertyChange​(java.beans.PropertyChangeEvent ev)
        Notification that the Roster has changed, so the locomotive selection list has to be changed.
        Specified by:
        propertyChange in interface java.beans.PropertyChangeListener
        Parameters:
        ev - Ignored.
      • selectLoco

        protected void selectLoco​(int dccAddress)
        Identify locomotive complete, act on it by setting the GUI. This will fire "GUI changed" events which will reset the decoder GUI.
        Parameters:
        dccAddress - the address to select
      • selectDecoder

        protected void selectDecoder​(int mfgID,
                                     int modelID,
                                     int productID)
        Identify decoder complete, act on it by setting the GUI This will fire "GUI changed" events which will reset the locomotive GUI.
        Parameters:
        mfgID - the decoder's manufacturer ID value from CV8
        modelID - the decoder's model ID value from CV7
        productID - the decoder's product ID
      • updateForDecoderTypeID

        void updateForDecoderTypeID​(java.util.List<DecoderFile> pList)
        Decoder identify has matched one or more specific types.
        Parameters:
        pList - a list of decoders
      • updateForDecoderMfgID

        void updateForDecoderMfgID​(java.lang.String pMfg,
                                   int pMfgID,
                                   int pModelID)
        Decoder identify has not matched specific types, but did find manufacturer match.
        Parameters:
        pMfg - Manufacturer name. This is passed to save time, as it has already been determined once.
        pMfgID - Manufacturer ID number (CV8)
        pModelID - Model ID number (CV7)
      • updateForDecoderNotID

        void updateForDecoderNotID​(int pMfgID,
                                   int pModelID)
        Decoder identify did not match anything, warn and show all.
        Parameters:
        pMfgID - Manufacturer ID number (CV8)
        pModelID - Model ID number (CV7)
      • openButton

        protected void openButton()
        handle pushing the open programmer button by finding names, then calling a template method.
      • openKnownLoco

        protected void openKnownLoco()
        Start with a locomotive selected, so we're opening an existing RosterEntry.
      • openNewLoco

        protected void openNewLoco()
        Start with a decoder selected, so we're going to create a new RosterEntry.
      • startProgrammer

        protected void startProgrammer​(@CheckForNull
                                       DecoderFile decoderFile,
                                       @Nonnull
                                       RosterEntry r,
                                       @Nonnull
                                       java.lang.String progName)
        Start the desired type of programmer.
        Parameters:
        decoderFile - defines the type of decoder installed; if null, check the RosterEntry re for that
        r - Existing roster entry defining this locomotive
        progName - name of the programmer (Layout connection) being used