Class CombinedLocoSelTreePane
- java.lang.Object
-
- java.awt.Component
-
- java.awt.Container
-
- javax.swing.JComponent
-
- javax.swing.JPanel
-
- jmri.util.swing.JmriPanel
-
- jmri.jmrit.symbolicprog.LocoSelPane
-
- jmri.jmrit.symbolicprog.CombinedLocoSelPane
-
- jmri.jmrit.symbolicprog.CombinedLocoSelTreePane
-
- 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:
LocoSelTreePane
public class CombinedLocoSelTreePane extends CombinedLocoSelPane
Provide GUI controls to select a known loco and/or new decoder.This is an extension of the CombinedLocoSelPane class to use a JTree instead of a JComboBox for the decoder selection. The loco selection (Roster manipulation) parts are unchanged.
The JComboBox implementation always had to have selected entries, so we added dummy "select from .." items at the top and used those to indicate that there was no selection in that box. Here, the lack of a selection indicates there's no selection.
Internally, the "filter" is used to only show identified models (leaf nodes). This is implemented in internal InvisibleTreeModel and DecoderTreeNode classes.
The decoder definition
DecoderFile.Showable
attribute also interacts with those.- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static class
CombinedLocoSelTreePane.DecoderTreeNode
(package private) static class
CombinedLocoSelTreePane.InvisibleTreeModel
The following has been taken from an example given in..-
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
-
-
Field Summary
Fields Modifier and Type Field Description protected javax.swing.event.TreeSelectionListener
dListener
The listener for the decoder selection tree.(package private) CombinedLocoSelTreePane.InvisibleTreeModel
dModel
(package private) CombinedLocoSelTreePane.DecoderTreeNode
dRoot
protected javax.swing.JTree
dTree
The decoder selection tree.(package private) java.util.ArrayList<javax.swing.tree.TreePath>
selectedPath
(package private) javax.swing.JRadioButton
showAll
(package private) javax.swing.JRadioButton
showMatched
protected javax.swing.JPanel
viewButtons
A panel immediately below the decoder selection tree.-
Fields inherited from class jmri.jmrit.symbolicprog.CombinedLocoSelPane
_statusLabel, go2, iddecoder, idloco, locoBox, programmerBox, 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
-
-
Constructor Summary
Constructors Constructor Description CombinedLocoSelTreePane(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) void
createDecoderTypeContents()
Reads the available decoders and loads them into the dModel tree model.(package private) java.lang.String
getHoverText(java.lang.String verString, java.lang.String comment)
Provide tooltip text: Decoder comment, with CV version info, formatted as best we can.(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.void
resetSelections()
Resets the Decoder Tree Display selections and sets the state to "Show All".protected java.lang.String
selectedDecoderType()
Convert the decoder selection UI result into a name.(package private) void
setDecoderSelectionFromLoco(java.lang.String loco)
Set the decoder selection to a specific decoder from a selected Loco.void
setShowMatchedOnly(boolean state)
Sets the Loco Selection Pane to "Matched Only"(true)
or "Show All"(false)
.protected void
startIdentifyDecoder()
Identify loco button pressed, start the identify operation.(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 clear selection.void
updateForDecoderTypeID(java.util.List<DecoderFile> pList)
Decoder identify has matched one or more specific types.-
Methods inherited from class jmri.jmrit.symbolicprog.CombinedLocoSelPane
addDecoderIdentButton, createProgrammerSelection, init, layoutRosterSelection, openButton, openKnownLoco, openNewLoco, propertyChange, selectDecoder, selectLoco, startIdentifyLoco, startProgrammer
-
Methods inherited from class jmri.util.swing.JmriPanel
dispose, getHelpTarget, getMenus, getMinimumDimension, getTitle, getWindowInterface, initComponents, initContext, isMultipleInstances, setWindowInterface
-
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
-
-
-
-
Field Detail
-
dTree
protected javax.swing.JTree dTree
The decoder selection tree.
-
viewButtons
protected javax.swing.JPanel viewButtons
A panel immediately below the decoder selection tree.
Used for tree action buttons.
-
dListener
protected transient volatile javax.swing.event.TreeSelectionListener dListener
The listener for the decoder selection tree.
-
showAll
javax.swing.JRadioButton showAll
-
showMatched
javax.swing.JRadioButton showMatched
-
selectedPath
java.util.ArrayList<javax.swing.tree.TreePath> selectedPath
-
-
Constructor Detail
-
CombinedLocoSelTreePane
public CombinedLocoSelTreePane(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 aProgModeSelector
panel that configures the programming mode.
-
-
Method Detail
-
layoutDecoderSelection
protected javax.swing.JPanel layoutDecoderSelection()
Create the panel used to select the decoder.- Overrides:
layoutDecoderSelection
in classCombinedLocoSelPane
- Returns:
- a JPanel for handling the decoder-selection GUI
-
setShowMatchedOnly
public void setShowMatchedOnly(boolean state)
Sets the Loco Selection Pane to "Matched Only"(true)
or "Show All"(false)
.
Changes the Decoder Tree Display and the Radio Buttons.- Parameters:
state
- the desired state
-
createDecoderTypeContents
void createDecoderTypeContents()
Reads the available decoders and loads them into the dModel tree model.
-
getHoverText
java.lang.String getHoverText(java.lang.String verString, java.lang.String comment)
Provide tooltip text: Decoder comment, with CV version info, formatted as best we can.- Parameters:
verString
- version string, typically fromDecoderFile.getVersionsAsString()
comment
- version string, typically fromDecoderFile.getModelComment()
orDecoderFile.getFamilyComment()
- Returns:
- the combined formatted string.
-
startIdentifyDecoder
protected void startIdentifyDecoder()
Identify loco button pressed, start the identify operation. This defines what happens when the identify is done.
This@Override
method invokesresetSelections
before starting.- Overrides:
startIdentifyDecoder
in classCombinedLocoSelPane
-
resetSelections
public void resetSelections()
Resets the Decoder Tree Display selections and sets the state to "Show All".
-
updateForDecoderTypeID
public void updateForDecoderTypeID(java.util.List<DecoderFile> pList)
Decoder identify has matched one or more specific types.- Overrides:
updateForDecoderTypeID
in classCombinedLocoSelPane
- 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.- Overrides:
updateForDecoderMfgID
in classCombinedLocoSelPane
- 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 clear selection.- Overrides:
updateForDecoderNotID
in classCombinedLocoSelPane
- Parameters:
pMfgID
- Manufacturer ID number (CV8)pModelID
- Model ID number (CV7)
-
setDecoderSelectionFromLoco
void setDecoderSelectionFromLoco(java.lang.String loco)
Set the decoder selection to a specific decoder from a selected Loco.This must not trigger an update event from the Tree selection, so we remove and replace the listener.
- Overrides:
setDecoderSelectionFromLoco
in classCombinedLocoSelPane
- Parameters:
loco
- the loco name
-
selectedDecoderType
protected java.lang.String selectedDecoderType()
Convert the decoder selection UI result into a name.- Overrides:
selectedDecoderType
in classCombinedLocoSelPane
- Returns:
- The selected decoder type name, or null if none selected.
-
isDecoderSelected
boolean isDecoderSelected()
Has the user selected a decoder type, either manually or via a successful event?- Overrides:
isDecoderSelected
in classCombinedLocoSelPane
- Returns:
- true if a decoder type is selected
-
-