Skip to content

Commit

Permalink
viewer: add keyboard commands for play via "\" and next frame via ->
Browse files Browse the repository at this point in the history
  • Loading branch information
lannybroo committed Jan 11, 2024
1 parent 6642179 commit a7bd6d0
Showing 1 changed file with 39 additions and 20 deletions.
59 changes: 39 additions & 20 deletions viewer/src/main/java/org/jmisb/viewer/PlaybackControlPanel.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package org.jmisb.viewer;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
Expand Down Expand Up @@ -136,30 +138,47 @@ public void mouseMoved(MouseEvent e) {}
.getScaledInstance(iconSize, iconSize, Image.SCALE_SMOOTH));

// Play/pause button
playPauseButton = new JButton(playIcon);
playPauseButton.setEnabled(false);
playPauseButton.addActionListener(
l -> {
if (videoFileInput != null) {
if (videoFileInput.isPlaying()) {
videoFileInput.pause();
} else {
videoFileInput.play();
Action doPlayPause =
new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
if (videoFileInput != null) {
if (videoFileInput.isPlaying()) {
videoFileInput.pause();
} else {
videoFileInput.play();
}
}
updateButtons();
}
updateButtons();
});
};
playPauseButton = new JButton(playIcon);
playPauseButton.setEnabled(false);
playPauseButton.addActionListener(doPlayPause);
playPauseButton
.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
.put(KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SLASH, 0), "playPause");
playPauseButton.getActionMap().put("playPause", doPlayPause);

// Next frame button
Action goNextFrame =
new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
if (videoFileInput != null && !videoFileInput.isPlaying()) {
videoFileInput.sendOneFrame();
}
updateButtons();
}
};
nextFrameButton = new JButton(nextFrameIcon);
nextFrameButton.setEnabled(false);
nextFrameButton.addActionListener(
l -> {
if (videoFileInput != null && !videoFileInput.isPlaying()) {
videoFileInput.sendOneFrame();
}
updateButtons();
});
nextFrameButton.addActionListener(goNextFrame);
nextFrameButton
.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
.put(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, 0), "nextFrame");
nextFrameButton.getActionMap().put("nextFrame", goNextFrame);
// TODO: unreliable .. maybe slider is eating these events too?

// Fast forward button
fastForwardButton = new JButton(ffOffIcon);
Expand Down Expand Up @@ -234,12 +253,12 @@ private void updateButtons() {
nextFrameButton.setEnabled(false);
} else {
nextFrameButton.setEnabled(!videoFileInput.isPlaying());
nextFrameButton.setToolTipText("Next Frame");
nextFrameButton.setToolTipText("Next Frame (→)");
}

if (videoFileInput == null || !videoFileInput.isPlaying()) {
playPauseButton.setIcon(playIcon);
playPauseButton.setToolTipText("Play");
playPauseButton.setToolTipText("Play (\\)");
fastForwardButton.setEnabled(false);
} else {
playPauseButton.setIcon(pauseIcon);
Expand Down

0 comments on commit a7bd6d0

Please sign in to comment.