Package org.fife.ui.autocomplete
Class AutoCompletePopupWindow
- java.lang.Object
-
- java.awt.Component
-
- java.awt.Container
-
- java.awt.Window
-
- javax.swing.JWindow
-
- org.fife.ui.autocomplete.AutoCompletePopupWindow
-
- All Implemented Interfaces:
java.awt.event.MouseListener
,java.awt.image.ImageObserver
,java.awt.MenuContainer
,java.io.Serializable
,java.util.EventListener
,javax.accessibility.Accessible
,javax.swing.event.CaretListener
,javax.swing.event.ListSelectionListener
,javax.swing.RootPaneContainer
class AutoCompletePopupWindow extends javax.swing.JWindow implements javax.swing.event.CaretListener, javax.swing.event.ListSelectionListener, java.awt.event.MouseListener
The actual popup window of choices. When visible, this window intercepts certain keystrokes in the parent text component and uses them to navigate the completion choices instead. If Enter or Escape is pressed, the window hides itself and notifies theAutoCompletion
to insert the selected text.- Version:
- 1.0
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) class
AutoCompletePopupWindow.CopyAction
Copies text.(package private) class
AutoCompletePopupWindow.DownAction
Selects the next item.(package private) class
AutoCompletePopupWindow.EndAction
Selects the previous item.(package private) class
AutoCompletePopupWindow.EnterAction
Inserts the selected completion.(package private) class
AutoCompletePopupWindow.EscapeAction
Hides this popup window.(package private) class
AutoCompletePopupWindow.HomeAction
Selects the first item.private static class
AutoCompletePopupWindow.KeyActionPair
A mapping from a key (an Object) to an Action.(package private) class
AutoCompletePopupWindow.LeftAction
Moves the caret to the left and updates the completion list accordingly.(package private) class
AutoCompletePopupWindow.PageDownAction
Moves down one page in the completion list.(package private) class
AutoCompletePopupWindow.PageUpAction
Moves up one page in the completion list.private class
AutoCompletePopupWindow.PopupList
The actual list of completion choices in this popup window.(package private) class
AutoCompletePopupWindow.RightAction
Moves the caret to the right and updates the completion list accordingly.(package private) class
AutoCompletePopupWindow.UpAction
Moves up in the completion list.-
Nested classes/interfaces inherited from class javax.swing.JWindow
javax.swing.JWindow.AccessibleJWindow
-
Nested classes/interfaces inherited from class java.awt.Window
java.awt.Window.AccessibleAWTWindow, java.awt.Window.Type
-
-
Field Summary
-
Fields inherited from class javax.swing.JWindow
accessibleContext, rootPane, rootPaneCheckingEnabled
-
-
Constructor Summary
Constructors Constructor Description AutoCompletePopupWindow(java.awt.Window parent, AutoCompletion ac)
Constructor.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
caretUpdate(javax.swing.event.CaretEvent e)
private AutoCompleteDescWindow
createDescriptionWindow()
Creates the description window.private void
createKeyActionPairs()
Creates the mappings from keys to Actions we'll be putting into the text component's ActionMap and InputMap.protected void
doAutocomplete()
private static javax.swing.KeyStroke
getCopyKeyStroke()
Returns the copy keystroke to use for this platform.java.awt.Color
getDescriptionWindowColor()
Returns the background color of the description window.javax.swing.ListCellRenderer
getListCellRenderer()
Returns the default list cell renderer used when a completion provider does not supply its own.Completion
getSelection()
Returns the selected value, ornull
if nothing is selected.private void
insertSelectedCompletion()
Inserts the currently selected completion.private void
installKeyBindings()
Registers keyboard actions to listen for in the text component and intercept.void
mouseClicked(java.awt.event.MouseEvent e)
void
mouseEntered(java.awt.event.MouseEvent e)
void
mouseExited(java.awt.event.MouseEvent e)
void
mousePressed(java.awt.event.MouseEvent e)
void
mouseReleased(java.awt.event.MouseEvent e)
private void
positionDescWindow()
Positions the description window relative to the completion choices window.private void
putBackAction(javax.swing.InputMap im, javax.swing.ActionMap am, int key, AutoCompletePopupWindow.KeyActionPair kap)
"Puts back" the original key/Action pair for a keystroke.private void
replaceAction(javax.swing.InputMap im, javax.swing.ActionMap am, int key, AutoCompletePopupWindow.KeyActionPair kap, AutoCompletePopupWindow.KeyActionPair old)
Replaces a key/Action pair in an InputMap and ActionMap with a new pair.private void
selectFirstItem()
Selects the first item in the completion list.private void
selectLastItem()
Selects the last item in the completion list.private void
selectNextItem()
Selects the next item in the completion list.private void
selectPageDownItem()
Selects the completion item one "page down" from the currently selected one.private void
selectPageUpItem()
Selects the completion item one "page up" from the currently selected one.private void
selectPreviousItem()
Selects the previous item in the completion list.void
setCompletions(java.util.List<Completion> completions)
Sets the completions to display in the choices list.void
setDescriptionWindowColor(java.awt.Color color)
Sets the color of the description window.void
setDescriptionWindowSize(java.awt.Dimension size)
Sets the size of the description window.void
setListCellRenderer(javax.swing.ListCellRenderer<java.lang.Object> renderer)
Sets the default list cell renderer to use when a completion provider does not supply its own.void
setLocationRelativeTo(java.awt.Rectangle r)
Sets the location of this window to be "good" relative to the specified rectangle.void
setVisible(boolean visible)
Toggles the visibility of this popup window.private void
uninstallKeyBindings()
Stops intercepting certain keystrokes from the text component.void
updateUI()
Updates theLookAndFeel
of this window and the description window.void
valueChanged(javax.swing.event.ListSelectionEvent e)
Called when a new item is selected in the popup list.-
Methods inherited from class javax.swing.JWindow
addImpl, createRootPane, getAccessibleContext, getContentPane, getGlassPane, getGraphics, getLayeredPane, getRootPane, getTransferHandler, isRootPaneCheckingEnabled, paramString, remove, repaint, setContentPane, setGlassPane, setLayeredPane, setLayout, setRootPane, setRootPaneCheckingEnabled, setTransferHandler, update, windowInit
-
Methods inherited from class java.awt.Window
addNotify, 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, removeNotify, removeWindowFocusListener, removeWindowListener, removeWindowStateListener, reshape, setAlwaysOnTop, setAutoRequestFocus, setBackground, setBounds, setBounds, setCursor, setFocusableWindowState, setFocusCycleRoot, setIconImage, setIconImages, setLocation, setLocation, setLocationByPlatform, setLocationRelativeTo, setMinimumSize, setModalExclusionType, setOpacity, setShape, setSize, setSize, setType, show, toBack, toFront
-
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalPolicy, getInsets, getLayout, getMaximumSize, getMinimumSize, getMousePosition, getPreferredSize, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, print, printComponents, processContainerEvent, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusTraversalKeys, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setFont, 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, 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, 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, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, 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
-
-
-
-
Field Detail
-
ac
private AutoCompletion ac
The parent AutoCompletion instance.
-
list
private AutoCompletePopupWindow.PopupList list
The list of completion choices.
-
model
private CompletionListModel model
The contents ofComponent.list()
.
-
lastSelection
private Completion lastSelection
A hack to work around the fact that we clear our completion model (and our selection) when hiding the completion window. This allows us to still know what the user selected after the popup is hidden.
-
descWindow
private AutoCompleteDescWindow descWindow
Optional popup window containing a description of the currently selected completion.
-
preferredDescWindowSize
private java.awt.Dimension preferredDescWindowSize
The preferred size of the optional description window. This field only exists because the user may (and usually will) set the size of the description window before it exists (it must be parented to a Window).
-
aboveCaret
private boolean aboveCaret
Whether the completion window and the optional description window should be displayed above the current caret position (as opposed to underneath it, which is preferred unless there is not enough space).
-
descWindowColor
private java.awt.Color descWindowColor
The background color of the description window.
-
lastLine
private int lastLine
-
keyBindingsInstalled
private boolean keyBindingsInstalled
-
escapeKap
private AutoCompletePopupWindow.KeyActionPair escapeKap
-
upKap
private AutoCompletePopupWindow.KeyActionPair upKap
-
downKap
private AutoCompletePopupWindow.KeyActionPair downKap
-
leftKap
private AutoCompletePopupWindow.KeyActionPair leftKap
-
rightKap
private AutoCompletePopupWindow.KeyActionPair rightKap
-
enterKap
private AutoCompletePopupWindow.KeyActionPair enterKap
-
tabKap
private AutoCompletePopupWindow.KeyActionPair tabKap
-
homeKap
private AutoCompletePopupWindow.KeyActionPair homeKap
-
endKap
private AutoCompletePopupWindow.KeyActionPair endKap
-
pageUpKap
private AutoCompletePopupWindow.KeyActionPair pageUpKap
-
pageDownKap
private AutoCompletePopupWindow.KeyActionPair pageDownKap
-
ctrlCKap
private AutoCompletePopupWindow.KeyActionPair ctrlCKap
-
oldEscape
private AutoCompletePopupWindow.KeyActionPair oldEscape
-
oldUp
private AutoCompletePopupWindow.KeyActionPair oldUp
-
oldDown
private AutoCompletePopupWindow.KeyActionPair oldDown
-
oldLeft
private AutoCompletePopupWindow.KeyActionPair oldLeft
-
oldRight
private AutoCompletePopupWindow.KeyActionPair oldRight
-
oldEnter
private AutoCompletePopupWindow.KeyActionPair oldEnter
-
oldTab
private AutoCompletePopupWindow.KeyActionPair oldTab
-
oldHome
private AutoCompletePopupWindow.KeyActionPair oldHome
-
oldEnd
private AutoCompletePopupWindow.KeyActionPair oldEnd
-
oldPageUp
private AutoCompletePopupWindow.KeyActionPair oldPageUp
-
oldPageDown
private AutoCompletePopupWindow.KeyActionPair oldPageDown
-
oldCtrlC
private AutoCompletePopupWindow.KeyActionPair oldCtrlC
-
VERTICAL_SPACE
private static final int VERTICAL_SPACE
The space between the caret and the completion popup.- See Also:
- Constant Field Values
-
SUBSTANCE_LIST_UI
private static final java.lang.String SUBSTANCE_LIST_UI
The class name of the Substance List UI.- See Also:
- Constant Field Values
-
-
Constructor Detail
-
AutoCompletePopupWindow
AutoCompletePopupWindow(java.awt.Window parent, AutoCompletion ac)
Constructor.- Parameters:
parent
- The parent window (hosting the text component).ac
- The auto-completion instance.
-
-
Method Detail
-
caretUpdate
public void caretUpdate(javax.swing.event.CaretEvent e)
- Specified by:
caretUpdate
in interfacejavax.swing.event.CaretListener
-
createDescriptionWindow
private AutoCompleteDescWindow createDescriptionWindow()
Creates the description window.- Returns:
- The description window.
-
createKeyActionPairs
private void createKeyActionPairs()
Creates the mappings from keys to Actions we'll be putting into the text component's ActionMap and InputMap.
-
doAutocomplete
protected void doAutocomplete()
-
getCopyKeyStroke
private static javax.swing.KeyStroke getCopyKeyStroke()
Returns the copy keystroke to use for this platform.- Returns:
- The copy keystroke.
-
getDescriptionWindowColor
public java.awt.Color getDescriptionWindowColor()
Returns the background color of the description window.- Returns:
- The background color, or
null
if it has not been created yet. - See Also:
setDescriptionWindowColor(Color)
-
getListCellRenderer
public javax.swing.ListCellRenderer getListCellRenderer()
Returns the default list cell renderer used when a completion provider does not supply its own.- Returns:
- The default list cell renderer.
- See Also:
setListCellRenderer(ListCellRenderer)
-
getSelection
public Completion getSelection()
Returns the selected value, ornull
if nothing is selected.- Returns:
- The selected value.
-
insertSelectedCompletion
private void insertSelectedCompletion()
Inserts the currently selected completion.- See Also:
getSelection()
-
installKeyBindings
private void installKeyBindings()
Registers keyboard actions to listen for in the text component and intercept.- See Also:
uninstallKeyBindings()
-
mouseClicked
public void mouseClicked(java.awt.event.MouseEvent e)
- Specified by:
mouseClicked
in interfacejava.awt.event.MouseListener
-
mouseEntered
public void mouseEntered(java.awt.event.MouseEvent e)
- Specified by:
mouseEntered
in interfacejava.awt.event.MouseListener
-
mouseExited
public void mouseExited(java.awt.event.MouseEvent e)
- Specified by:
mouseExited
in interfacejava.awt.event.MouseListener
-
mousePressed
public void mousePressed(java.awt.event.MouseEvent e)
- Specified by:
mousePressed
in interfacejava.awt.event.MouseListener
-
mouseReleased
public void mouseReleased(java.awt.event.MouseEvent e)
- Specified by:
mouseReleased
in interfacejava.awt.event.MouseListener
-
positionDescWindow
private void positionDescWindow()
Positions the description window relative to the completion choices window. We assume there is room on one side of the other for this entire window to fit.
-
putBackAction
private void putBackAction(javax.swing.InputMap im, javax.swing.ActionMap am, int key, AutoCompletePopupWindow.KeyActionPair kap)
"Puts back" the original key/Action pair for a keystroke. This is used when this popup is hidden.- Parameters:
im
- The input map.am
- The action map.key
- The keystroke whose key/Action pair to change.kap
- The (original) key/Action pair.- See Also:
replaceAction(InputMap, ActionMap, int, KeyActionPair, KeyActionPair)
-
replaceAction
private void replaceAction(javax.swing.InputMap im, javax.swing.ActionMap am, int key, AutoCompletePopupWindow.KeyActionPair kap, AutoCompletePopupWindow.KeyActionPair old)
Replaces a key/Action pair in an InputMap and ActionMap with a new pair.- Parameters:
im
- The input map.am
- The action map.key
- The keystroke whose information to replace.kap
- The new key/Action pair forkey
.old
- A buffer in which to place the old key/Action pair.- See Also:
putBackAction(InputMap, ActionMap, int, KeyActionPair)
-
selectFirstItem
private void selectFirstItem()
Selects the first item in the completion list.- See Also:
selectLastItem()
-
selectLastItem
private void selectLastItem()
Selects the last item in the completion list.- See Also:
selectFirstItem()
-
selectNextItem
private void selectNextItem()
Selects the next item in the completion list.- See Also:
selectPreviousItem()
-
selectPageDownItem
private void selectPageDownItem()
Selects the completion item one "page down" from the currently selected one.- See Also:
selectPageUpItem()
-
selectPageUpItem
private void selectPageUpItem()
Selects the completion item one "page up" from the currently selected one.- See Also:
selectPageDownItem()
-
selectPreviousItem
private void selectPreviousItem()
Selects the previous item in the completion list.- See Also:
selectNextItem()
-
setCompletions
public void setCompletions(java.util.List<Completion> completions)
Sets the completions to display in the choices list. The first completion is selected.- Parameters:
completions
- The completions to display.
-
setDescriptionWindowSize
public void setDescriptionWindowSize(java.awt.Dimension size)
Sets the size of the description window.- Parameters:
size
- The new size. This cannot benull
.
-
setDescriptionWindowColor
public void setDescriptionWindowColor(java.awt.Color color)
Sets the color of the description window.- Parameters:
color
- The new color. This cannot benull
.- See Also:
getDescriptionWindowColor()
-
setListCellRenderer
public void setListCellRenderer(javax.swing.ListCellRenderer<java.lang.Object> renderer)
Sets the default list cell renderer to use when a completion provider does not supply its own.- Parameters:
renderer
- The renderer to use. If this isnull
, a default renderer is used.- See Also:
getListCellRenderer()
-
setLocationRelativeTo
public void setLocationRelativeTo(java.awt.Rectangle r)
Sets the location of this window to be "good" relative to the specified rectangle. That rectangle should be the location of the text component's caret, in screen coordinates.- Parameters:
r
- The text component's caret position, in screen coordinates.
-
setVisible
public void setVisible(boolean visible)
Toggles the visibility of this popup window.- Overrides:
setVisible
in classjava.awt.Window
- Parameters:
visible
- Whether this window should be visible.
-
uninstallKeyBindings
private void uninstallKeyBindings()
Stops intercepting certain keystrokes from the text component.- See Also:
installKeyBindings()
-
updateUI
public void updateUI()
Updates theLookAndFeel
of this window and the description window.
-
valueChanged
public void valueChanged(javax.swing.event.ListSelectionEvent e)
Called when a new item is selected in the popup list.- Specified by:
valueChanged
in interfacejavax.swing.event.ListSelectionListener
- Parameters:
e
- The event.
-
-