Package org.deepsymmetry.beatlink.data
Class WaveformPreviewComponent
- java.lang.Object
-
- java.awt.Component
-
- java.awt.Container
-
- javax.swing.JComponent
-
- org.deepsymmetry.beatlink.data.WaveformPreviewComponent
-
- All Implemented Interfaces:
ImageObserver,MenuContainer,Serializable
public class WaveformPreviewComponent extends JComponent
Provides a convenient way to draw a waveform preview in a user interface, including annotations like the current time and minute markers (if you supplyTrackMetadataso the total length can be determined), and cue markers (if you also supply aCueList). Can also be configured to automatically update itself to reflect the state of a specified player, showing the current track, playback state, and position, as long as it is able to load appropriate metadata, which includes beat grids for translating beat numbers into track time.- See Also:
- Serialized Form
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class javax.swing.JComponent
JComponent.AccessibleJComponent
-
Nested classes/interfaces inherited from class java.awt.Container
Container.AccessibleAWTContainer
-
Nested classes/interfaces inherited from class java.awt.Component
Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy
-
-
Field Summary
Fields Modifier and Type Field Description static ColorBRIGHT_PLAYEDThe color for brighter sections of the already-played section of the playback progress bar.static ColorDIM_PLAYEDThe color for darker sections of the already-played section of the playback progress bar.static ColorDIM_UNPLAYEDThe color for the darker sections of hte not-yet-played sections of the playback progress bar.static intMIN_WAVEFORM_WIDTHThe minimum acceptable width for the waveform.-
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 WaveformPreviewComponent(int player)Create a view which updates itself to reflect the track loaded on a particular player, and that player's playback progress.WaveformPreviewComponent(WaveformPreview preview, int duration, CueList cueList)Create a view which draws a specific waveform, even if it is not currently loaded in a player.WaveformPreviewComponent(WaveformPreview preview, TrackMetadata metadata)Create a view which draws a specific waveform, even if it is not currently loaded in a player.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclearPlaybackState()Removes all stored playback state.voidclearPlaybackState(int player)Clear the playback state stored for a player, such as when it has unloaded the track.CueListgetCueList()Get the cue list associated with this track.PlaybackStategetFurthestPlaybackState()Look up the playback state that has reached furthest in the track.DimensiongetMinimumSize()intgetMonitoredPlayer()See which player is having its state tracked automatically by the component, if any.Set<PlaybackState>getPlaybackState()Look up all recorded playback state information.PlaybackStategetPlaybackState(int player)Look up the playback state recorded for a particular player.DimensiongetPreferredSize()longgetTimeForX(int x)Determine the playback time that corresponds to a particular X coordinate in the component given the current scale.intmillisecondsToX(long milliseconds)Converts a time in milliseconds to the appropriate x coordinate for drawing something at that time.protected voidpaintComponent(Graphics g)voidsetMonitoredPlayer(int player)Configures the player whose current track waveforms and status will automatically be reflected.voidsetOverlayPainter(OverlayPainter painter)Arrange for an overlay to be painted on top of the component.voidsetPlaybackState(int player, long position, boolean playing)Set the current playback state for a player.voidsetRepaintDelegate(RepaintDelegate delegate)Establish a host component to which allComponent.repaint(int, int, int, int)calls should be delegated, presumably because we are being soft-loaded in a large user interface to save on memory.voidsetWaveformPreview(WaveformPreview preview, int duration, CueList cueList)Change the waveform preview being drawn.voidsetWaveformPreview(WaveformPreview preview, TrackMetadata metadata)Change the waveform preview being drawn.StringtoString()-
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, getNextFocusableComponent, getPopupLocation, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getUIClassID, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintImmediately, paintImmediately, paramString, 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, updateUI
-
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, getAccessibleContext, 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, getPeer, 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, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, transferFocus, transferFocusBackward, transferFocusUpCycle
-
-
-
-
Field Detail
-
MIN_WAVEFORM_WIDTH
public static final int MIN_WAVEFORM_WIDTH
The minimum acceptable width for the waveform.- See Also:
- Constant Field Values
-
BRIGHT_PLAYED
public static final Color BRIGHT_PLAYED
The color for brighter sections of the already-played section of the playback progress bar.
-
DIM_PLAYED
public static final Color DIM_PLAYED
The color for darker sections of the already-played section of the playback progress bar.
-
DIM_UNPLAYED
public static final Color DIM_UNPLAYED
The color for the darker sections of hte not-yet-played sections of the playback progress bar.
-
-
Constructor Detail
-
WaveformPreviewComponent
public WaveformPreviewComponent(int player)
Create a view which updates itself to reflect the track loaded on a particular player, and that player's playback progress.- Parameters:
player- the player number to monitor, or zero if it should start out monitoring no player
-
WaveformPreviewComponent
public WaveformPreviewComponent(WaveformPreview preview, TrackMetadata metadata)
Create a view which draws a specific waveform, even if it is not currently loaded in a player.- Parameters:
preview- the waveform preview to displaymetadata- information about the track whose waveform we are drawing, so we can translate times into positions
-
WaveformPreviewComponent
public WaveformPreviewComponent(WaveformPreview preview, int duration, CueList cueList)
Create a view which draws a specific waveform, even if it is not currently loaded in a player.- Parameters:
preview- the waveform preview to displayduration- the playback duration, in seconds, of the track whose waveform we are drawing, so we can translate times into positionscueList- the hot cues and memory points stored for the track, if any, so we can draw them
-
-
Method Detail
-
getCueList
public CueList getCueList()
Get the cue list associated with this track.- Returns:
- the cues defined for the track.
-
setOverlayPainter
public void setOverlayPainter(OverlayPainter painter)
Arrange for an overlay to be painted on top of the component.- Parameters:
painter- if notnull, itsOverlayPainter.paintOverlay(Component, Graphics)method will be called once this component has done its own painting
-
getFurthestPlaybackState
public PlaybackState getFurthestPlaybackState()
Look up the playback state that has reached furthest in the track. This is used to render the “played until” graphic below the preview.- Returns:
- the playback state, if any, with the highest
PlaybackState.positionvalue
-
setRepaintDelegate
public void setRepaintDelegate(RepaintDelegate delegate)
Establish a host component to which allComponent.repaint(int, int, int, int)calls should be delegated, presumably because we are being soft-loaded in a large user interface to save on memory.- Parameters:
delegate- the permanent component that can actually accumulate repaint regions, ornullif we are being hosted normally in a container, so we should use the normal repaint process.
-
setPlaybackState
public void setPlaybackState(int player, long position, boolean playing)Set the current playback state for a player. Will cause part of the component to be redrawn if the player state has changed (and we have theTrackMetadatawe need to translate the time into a position in the component). This will be quickly overruled if a player is being monitored, but can be used in other contexts.- Parameters:
player- the player number whose playback state is being recordedposition- the current playback position of that player in millisecondsplaying- whether the player is actively playing the track- Throws:
IllegalStateException- if the component is configured to monitor a player, and this is called with state for a different playerIllegalArgumentException- if player is less than one- Since:
- 0.5.0
-
clearPlaybackState
public void clearPlaybackState(int player)
Clear the playback state stored for a player, such as when it has unloaded the track.- Parameters:
player- the player number whose playback state is no longer valid- Since:
- 0.5.0
-
clearPlaybackState
public void clearPlaybackState()
Removes all stored playback state.- Since:
- 0.5.0
-
getPlaybackState
public PlaybackState getPlaybackState(int player)
Look up the playback state recorded for a particular player.- Parameters:
player- the player number whose playback state information is desired- Returns:
- the corresponding playback state, if any has been stored
- Since:
- 0.5.0
-
getPlaybackState
public Set<PlaybackState> getPlaybackState()
Look up all recorded playback state information.- Returns:
- the playback state recorded for any player
- Since:
- 0.5.0
-
setWaveformPreview
public void setWaveformPreview(WaveformPreview preview, TrackMetadata metadata)
Change the waveform preview being drawn. This will be quickly overruled if a player is being monitored, but can be used in other contexts.- Parameters:
preview- the waveform preview to displaymetadata- information about the track whose waveform we are drawing, so we can translate times into positions and display hot cues and memory points
-
setWaveformPreview
public void setWaveformPreview(WaveformPreview preview, int duration, CueList cueList)
Change the waveform preview being drawn. This will be quickly overruled if a player is being monitored, but can be used in other contexts.- Parameters:
preview- the waveform preview to displayduration- the playback duration, in seconds, of the track whose waveform we are drawing, so we can translate times into positionscueList- the hot cues and memory points stored for the track, if any, so we can draw them
-
setMonitoredPlayer
public void setMonitoredPlayer(int player)
Configures the player whose current track waveforms and status will automatically be reflected. Whenever a new track is loaded on that player, the waveform and metadata will be updated, and the current playback position and state of the player will be reflected by the component.- Parameters:
player- the player number to monitor, or zero if monitoring should stop
-
getMonitoredPlayer
public int getMonitoredPlayer()
See which player is having its state tracked automatically by the component, if any.- Returns:
- the player number being monitored, or zero if none
-
getPreferredSize
public Dimension getPreferredSize()
- Overrides:
getPreferredSizein classJComponent
-
getMinimumSize
public Dimension getMinimumSize()
- Overrides:
getMinimumSizein classJComponent
-
millisecondsToX
public int millisecondsToX(long milliseconds)
Converts a time in milliseconds to the appropriate x coordinate for drawing something at that time. Can only be called when we haveTrackMetadata.- Parameters:
milliseconds- the time at which something should be drawn- Returns:
- the component x coordinate at which it should be drawn
-
getTimeForX
public long getTimeForX(int x)
Determine the playback time that corresponds to a particular X coordinate in the component given the current scale.- Parameters:
x- the horizontal position within the component coordinate space- Returns:
- the number of milliseconds into the track this would correspond to (may fall outside the actual track)
-
paintComponent
protected void paintComponent(Graphics g)
- Overrides:
paintComponentin classJComponent
-
-