package edu.mbl.jif.gui.imaging.player;
import edu.mbl.jif.gui.slider.SpinInteger;
import edu.mbl.jif.utils.StaticSwingUtils;
import edu.mbl.jif.gui.*;
import edu.mbl.jif.utils.JifUtils;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.event.*;
public abstract class PlayerControlHoriz extends JPanel {
private JPanel panel_Buttons = new JPanel();
protected JPanel panel_Lower = new JPanel();
protected JPanel panel_Upper = new JPanel();
private JButton button_StepBack = new JButton();
private JButton button_Begin = new JButton();
private JButton button_PlayRev = new JButton();
private JButton button_StepFwd = new JButton();
public JButton button_Pause = new JButton();
private JButton button_End = new JButton();
private JButton button_PlayFwd = new JButton();
public JToggleButton togglePlayStop = new JToggleButton();
private JSlider slider = new JSlider();
private ChangeListener sliderListener;
private JToggleButton button_Repeat = new JToggleButton();
protected boolean repeat = false;
private JToggleButton button_Bounce = new JToggleButton();
protected boolean bounce = false;
private SpinInteger spin_FPS;
private boolean isPlaying = false;
private int currentFrame = 0;
private int lastFrame = 0;
private Border border1;
JLabel valueMax = new JLabel();
JLabel valueCurrent = new JLabel();
Component component1;
Component component2;
public PlayerControlHoriz() {
super();
try {
jbInit();
} catch (Exception e) {
e.printStackTrace();
}
}
private void jbInit() throws Exception {
String imagePath = "edu/mbl/jif/gui/imaging/player/icons";
component1 = Box.createHorizontalStrut(7);
component2 = Box.createHorizontalStrut(8);
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
setBorder(BorderFactory.createLoweredBevelBorder());
setOpaque(true);
//
button_StepBack.setMargin(new Insets(0, 0, 0, 0));
button_StepBack.setIcon(JifUtils.loadImageIcon("playPrev.gif", imagePath));
button_StepBack.setMaximumSize(new Dimension(24, 24));
button_StepBack.setMinimumSize(new Dimension(24, 24));
button_StepBack.setPreferredSize(new Dimension(24, 24));
button_StepBack.setToolTipText("Step to Previous Frame");
button_StepBack.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
button_StepBack_actionPerformed(e);
}
});
button_Begin.setMargin(new Insets(0, 0, 0, 0));
button_Begin.setIcon(JifUtils.loadImageIcon("playBegin.gif", imagePath));
button_Begin.setMaximumSize(new Dimension(24, 24));
button_Begin.setMinimumSize(new Dimension(24, 24));
button_Begin.setPreferredSize(new Dimension(24, 24));
button_Begin.setToolTipText("Go to Beginning");
button_Begin.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
button_Begin_actionPerformed(e);
}
});
button_PlayRev.setMargin(new Insets(0, 0, 0, 0));
button_PlayRev.setIcon(JifUtils.loadImageIcon("playRev.gif", imagePath));
button_PlayRev.setMaximumSize(new Dimension(24, 24));
button_PlayRev.setMinimumSize(new Dimension(24, 24));
button_PlayRev.setPreferredSize(new Dimension(24, 24));
button_PlayRev.setToolTipText("Play in Reverse");
button_PlayRev.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
button_PlayRev_actionPerformed(e);
}
});
button_StepFwd.setMargin(new Insets(0, 0, 0, 0));
button_StepFwd.setIcon(JifUtils.loadImageIcon("playNext.gif", imagePath));
button_StepFwd.setMaximumSize(new Dimension(24, 24));
button_StepFwd.setMinimumSize(new Dimension(24, 24));
button_StepFwd.setPreferredSize(new Dimension(24, 24));
button_StepFwd.setToolTipText("Step to Next Frame");
button_StepFwd.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
button_StepFwd_actionPerformed(e);
}
});
button_Pause.setMargin(new Insets(0, 0, 0, 0));
button_Pause.setIcon(JifUtils.loadImageIcon("playPause.gif", imagePath));
button_Pause.setMaximumSize(new Dimension(24, 24));
button_Pause.setMinimumSize(new Dimension(24, 24));
button_Pause.setPreferredSize(new Dimension(24, 24));
button_Pause.setToolTipText("Pause");
button_Pause.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
button_Pause_actionPerformed(e);
}
});
button_End.setMargin(new Insets(0, 0, 0, 0));
button_End.setIcon(JifUtils.loadImageIcon("playEnd.gif", imagePath));
button_End.setMaximumSize(new Dimension(24, 24));
button_End.setMinimumSize(new Dimension(24, 24));
button_End.setPreferredSize(new Dimension(24, 24));
button_End.setToolTipText("Go to End");
button_End.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
button_End_actionPerformed(e);
}
});
button_PlayFwd.setMargin(new Insets(0, 0, 0, 0));
button_PlayFwd.setIcon(JifUtils.loadImageIcon("playFwd.gif", imagePath));
button_PlayFwd.setMaximumSize(new Dimension(24, 24));
button_PlayFwd.setMinimumSize(new Dimension(24, 24));
button_PlayFwd.setPreferredSize(new Dimension(24, 24));
button_PlayFwd.setToolTipText("Play Forward");
button_PlayFwd.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
button_PlayFwd_actionPerformed(e);
}
});
togglePlayStop.setMaximumSize(new Dimension(24, 24));
togglePlayStop.setMinimumSize(new Dimension(24, 24));
togglePlayStop.setPreferredSize(new Dimension(24, 24));
togglePlayStop.setIcon(JifUtils.loadImageIcon("playFwd.gif", imagePath));
togglePlayStop.setSelectedIcon(JifUtils.loadImageIcon("playPause.gif", imagePath));
togglePlayStop.setMargin(new Insets(1, 1, 1, 1));
togglePlayStop.setToolTipText("Play / Stop");
togglePlayStop.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent ev) {
//System.out.println("ItemEvent!" + ev.getStateChange());
if (ev.getStateChange() == ItemEvent.DESELECTED) {
//System.out.println("Deselected");
button_Pause_actionPerformed(null);
}
if (ev.getStateChange() == ItemEvent.SELECTED) {
//System.out.println("Selected");
button_PlayFwd_actionPerformed(null);
}
}
});
//
button_Repeat.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
button_Repeat_actionPerformed(e);
}
});
button_Bounce.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
button_Bounce_actionPerformed(e);
}
});
//
border1 = BorderFactory.createEmptyBorder();
panel_Buttons.setBorder(border1);
panel_Buttons.setLayout(new BoxLayout(panel_Buttons, BoxLayout.X_AXIS));
//panel_Buttons.setBorder(BorderFactory.createRaisedBevelBorder());
panel_Buttons.setOpaque(false);
valueMax.setFont(new java.awt.Font("Dialog", 0, 10));
valueMax.setMaximumSize(new Dimension(30, 14));
valueMax.setMinimumSize(new Dimension(30, 14));
valueMax.setPreferredSize(new Dimension(30, 14));
valueMax.setText("/ MAX");
valueCurrent.setFont(new java.awt.Font("Dialog", 0, 10));
valueCurrent.setMaximumSize(new Dimension(24, 14));
valueCurrent.setMinimumSize(new Dimension(24, 14));
valueCurrent.setPreferredSize(new Dimension(24, 14));
valueCurrent.setHorizontalAlignment(SwingConstants.RIGHT);
valueCurrent.setHorizontalTextPosition(SwingConstants.RIGHT);
valueCurrent.setText("0");
button_Repeat.setMaximumSize(new Dimension(24, 24));
button_Repeat.setMinimumSize(new Dimension(24, 24));
button_Repeat.setPreferredSize(new Dimension(24, 24));
button_Bounce.setMaximumSize(new Dimension(24, 24));
button_Bounce.setMinimumSize(new Dimension(24, 24));
button_Bounce.setPreferredSize(new Dimension(24, 24));
panel_Lower.setOpaque(false);
panel_Upper.setOpaque(false);
panel_Buttons.add(component1, null);
panel_Buttons.add(button_Begin, null);
// panel_Buttons.add(button_PlayRev, null);
panel_Buttons.add(button_StepBack, null);
//panel_Buttons.add(button_Pause, null);
panel_Buttons.add(button_StepFwd, null);
//panel_Buttons.add(button_PlayFwd, null);
panel_Buttons.add(togglePlayStop, null);
panel_Buttons.add(button_End, null);
//
button_Repeat.setToolTipText("Repeat");
button_Repeat.setIcon(JifUtils.loadImageIcon("repeat.gif", imagePath));
button_Repeat.setMargin(new Insets(2, 1, 2, 1));
button_Bounce.setIcon(JifUtils.loadImageIcon("bounce.gif", imagePath));
button_Bounce.setMargin(new Insets(2, 1, 2, 1));
button_Bounce.setToolTipText("Bounce (forward/backward)");
//
slider.setPreferredSize(new Dimension(100, 27));
slider.setMaximum(lastFrame - 1);
slider.setMinimum(0);
slider.setValue(0);
slider.setMinorTickSpacing(1);
slider.setMajorTickSpacing(10);
slider.setPaintTicks(false);
slider.setPaintLabels(false);
slider.setSnapToTicks(true);
slider.setOpaque(true);
slider.setBackground(Color.lightGray);
//
final SpinnerNumberModel modelNum = new SpinnerNumberModel(2, 1, 100, 1);
spin_FPS = new SpinInteger("fps", modelNum, "##", 3, 10);
modelNum.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
fps_Changed(modelNum.getNumber().intValue());
}
});
spin_FPS.setOpaque(false);
spin_FPS.setMaximumSize(new Dimension(100, 24));
spin_FPS.setMinimumSize(new Dimension(70, 24));
spin_FPS.setPreferredSize(new Dimension(70, 24));
this.setBackground(Color.lightGray);
this.setPreferredSize(new Dimension(256, 100));
this.setMinimumSize(new Dimension(200, 100));
panel_Lower.setLayout(new BoxLayout(panel_Lower, BoxLayout.X_AXIS));
panel_Upper.setLayout(new BoxLayout(panel_Upper, BoxLayout.X_AXIS));
panel_Lower.add(panel_Buttons, null);
panel_Lower.add(spin_FPS, null);
panel_Lower.add(button_Repeat, null);
panel_Lower.add(button_Bounce, null);
panel_Lower.add(component2, null);
panel_Lower.add(valueCurrent, null);
panel_Lower.add(valueMax, null);
panel_Upper.add(slider, null);
this.add(panel_Upper);
this.add(panel_Lower);
}
public void setLastFrame(int numFrames) {
lastFrame = numFrames;
StaticSwingUtils.dispatchToEDT(new Runnable() {
public void run() {
slider.setMaximum(lastFrame - 1);
valueMax.setText("/ " + String.valueOf(lastFrame));
}
});
sliderListener = new ChangeListener() {
// This method is called whenever the slider's value is changed
public void stateChanged(ChangeEvent evt) {
JSlider slider = (JSlider) evt.getSource();
int value = slider.getValue();
sliderMoved(value);
}
};
enableSliderListener(true);
}
public void setbackground(Color color) {
this.setBackground(color);
slider.setBackground(color);
}
void fps_Changed(int value) {
}
public void setFPS(int fps) {
spin_FPS.setValue(fps);
}
void button_Begin_actionPerformed(ActionEvent e) {
// updateSliderPosition(currentFrame);
}
void button_PlayRev_actionPerformed(ActionEvent e) {
// updateSliderPosition(currentFrame);
}
void button_StepBack_actionPerformed(ActionEvent e) {
// updateSliderPosition(currentFrame);
}
void button_Pause_actionPerformed(ActionEvent e) {
// updateSliderPosition(currentFrame);
}
void button_StepFwd_actionPerformed(ActionEvent e) {
// updateSliderPosition(currentFrame);
}
void button_PlayFwd_actionPerformed(ActionEvent e) {
// updateSliderPosition(currentFrame);
}
void button_End_actionPerformed(ActionEvent e) {
// updateSliderPosition(currentFrame);
}
void button_Repeat_actionPerformed(ActionEvent e) {
if (button_Repeat.isSelected()) {
button_Bounce.setSelected(false);
bounce = false;
repeat = true;
} else {
repeat = false;
}
}
void button_Bounce_actionPerformed(ActionEvent e) {
if (button_Bounce.isSelected()) {
button_Repeat.setSelected(false);
repeat = false;
bounce = true;
} else {
bounce = false;
}
}
public boolean isRepeat() {
return repeat;
}
public boolean isBounce() {
return bounce;
}
public void setCurrentDisplay(final int n) {
StaticSwingUtils.dispatchToEDT(new Runnable() {
public void run() {
valueCurrent.setText(String.valueOf(n));
}
});
}
abstract void sliderMoved(int i);
//{
// System.out.println("Slider: " + i);
// valueCurrent.setText(String.valueOf(i));
//}
public void updateSliderPosition(int frame) {
final int f = frame;
StaticSwingUtils.dispatchToEDT(new Runnable() {
public void run() {
slider.setValue(f);
slider.repaint();
valueCurrent.setText(String.valueOf(f + 1));
}
});
}
public void enableSliderListener(boolean t) {
if (t) {
slider.addChangeListener(sliderListener);
} else {
slider.removeChangeListener(sliderListener);
}
}
public void setEnabledAll(boolean t) {
button_Begin.setEnabled(t);
button_PlayRev.setEnabled(t);
button_StepBack.setEnabled(t);
button_Pause.setEnabled(t);
button_StepFwd.setEnabled(t);
button_PlayFwd.setEnabled(t);
button_End.setEnabled(t);
}
public static void main(String[] args) {
// JFrame f = new JFrame();
// PlayerControlHoriz pc = new PlayerControlHoriz();
// pc.setLastFrame(33);
// pc.setBackground(Color.lightGray);
// f.getContentPane().add(pc, BorderLayout.CENTER);
// f.pack();
// //f.validate();
// f.setVisible(true);
}
}