/*
* @(#) JPKIMultimediaUserpanel.java
*
* Urheberrechtlich geschützt, Jan-Philipp Ki.
* Alle Rechte vorbehalten.
*/
package gui;
import control.*;
import media.abstractclasses.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;
/**
* Dient der Interaktion des Programms
* mit dem Benutzer und umgekehrt.
*
* @author Jan-Philipp Ki.
* @version 1.00, 11 03 2007
*/
public class JPKIMultimediaUserpanel extends JPanel implements ActionListener, ChangeListener, Runnable {
private boolean isMute, isPressed;
private int oldValue;
private float currentVolume;
private JLabel volDiscriptor, mediaDiscriptor;
private JButton stop, play, pause;
private JToggleButton mute;
private JSlider volumeController, mediaSlider;
private JPKIMultimediaMainpanel mainPan;
private JPKIMultimediaFile file;
private Thread thread;
public JPKIMultimediaUserpanel(JPKIMultimediaMainpanel mainPan) {
setBorder(new TitledBorder(JPKIMultimediaController.getString("borderName")));
this.mainPan = mainPan;
isMute = false;
isPressed = false;
oldValue = 0;
currentVolume = 0.5f;
volumeController = new JSlider(0,100,50);
volumeController.setMinorTickSpacing(5);
volumeController.setMajorTickSpacing(20);
volumeController.setPaintTicks(true);
volumeController.addChangeListener(this);
mediaSlider = new JSlider(0,100,0);
mediaSlider.setMinorTickSpacing(5);
mediaSlider.setMajorTickSpacing(20);
mediaSlider.setPaintTicks(true);
mediaSlider.setEnabled(false);
mediaSlider.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
stateChange();
}
});
mediaSlider.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
isPressed = true;
}
public void mouseReleased(MouseEvent e) {
isPressed = false;
}
});
mute = new JToggleButton(new ImageIcon(getClass().getResource("images/mute_disabled.gif")));
mute.setSelectedIcon(new ImageIcon(getClass().getResource("images/mute_enabled.gif")));
mute.setRolloverIcon(new ImageIcon(getClass().getResource("images/mute_rollover.gif")));
mute.setToolTipText(JPKIMultimediaController.getString("muteButton"));
mute.setActionCommand("mute");
mute.setContentAreaFilled(false);
mute.setBorderPainted(false);
mute.setFocusPainted(false);
mute.addActionListener(this);
stop = createJButton("stop");
play = createJButton("play");
pause = createJButton("pause");
volDiscriptor = createJLabel(JPKIMultimediaController.getString("volumeSlider"));
mediaDiscriptor = createJLabel(JPKIMultimediaController.getString("stateSlider"));
JPanel sliderPanel = new JPanel(new GridLayout(1,2));
JPanel volumePanel = new JPanel(new BorderLayout());
volumePanel.add(volDiscriptor, BorderLayout.NORTH);
volumePanel.add(volumeController, BorderLayout.CENTER);
JPanel mediaPanel = new JPanel(new BorderLayout());
mediaPanel.add(mediaDiscriptor, BorderLayout.NORTH);
mediaPanel.add(mediaSlider, BorderLayout.CENTER);
sliderPanel.add(volumePanel);
sliderPanel.add(mediaPanel);
JPanel buttonPanel = new JPanel(new GridLayout(1,4));
buttonPanel.add(mute);
buttonPanel.add(play);
buttonPanel.add(stop);
buttonPanel.add(pause);
setLayout(new BorderLayout());
add(sliderPanel, BorderLayout.CENTER);
add(buttonPanel, BorderLayout.EAST);
}
public void actionPerformed(ActionEvent e) {
if (isMute) {
isMute = false;
if (file != null)
file.setVolume(currentVolume);
}
else {
isMute = true;
if (file != null)
file.setVolume(0.0f);
}
}
public void stateChanged(ChangeEvent e) {
currentVolume = (float)volumeController.getValue()/100;
if (isMute)
return;
if (file != null)
file.setVolume(currentVolume);
}
public void run() {
double duration = file.getDuration();
int i = oldValue;
while (i < (int)duration) {
i = (int)file.getMediaTime();
mediaSlider.setValue(i);
oldValue = i;
try { Thread.sleep(1000); } catch (InterruptedException ex) {}
}
i = 0;
oldValue = 0;
mediaSlider.setValue(oldValue);
}
public void play() {
mediaSlider.setEnabled(true);
thread = new Thread(this);
thread.start();
}
public void stop(boolean paused) {
thread.stop();
if (!paused)
oldValue = 0;
mediaSlider.setEnabled(false);
mediaSlider.setValue(oldValue);
}
public void set(JPKIMultimediaFile file) {
if (isMute)
file.setVolume(0.0f);
else
file.setVolume(currentVolume);
mediaSlider.setMaximum((int)file.getDuration());
mediaSlider.setMinorTickSpacing((int)Math.ceil(file.getDuration()/20));
mediaSlider.setMajorTickSpacing((int)Math.ceil(file.getDuration()/5));
this.file = file;
stop.setEnabled(true);
play.setEnabled(true);
pause.setEnabled(true);
}
private void stateChange() {
if (isPressed && file != null)
file.setMediaTime((double)mediaSlider.getValue());
}
private JButton createJButton(String image) {
JButton button = new JButton(new ImageIcon(getClass().getResource("images/" + image + "_enabled.gif")));
button.setDisabledIcon(new ImageIcon(getClass().getResource("images/" + image + "_disabled.gif")));
button.setPressedIcon(new ImageIcon(getClass().getResource("images/" + image + "_click.gif")));
button.setRolloverIcon(new ImageIcon(getClass().getResource("images/" + image + "_rollover.gif")));
button.setToolTipText(JPKIMultimediaController.getString(image + "Button"));
button.setActionCommand(image);
button.setBorderPainted(false);
button.setContentAreaFilled(false);
button.setFocusPainted(false);
button.setEnabled(false);
button.addActionListener(mainPan);
return button;
}
private JLabel createJLabel(String labeltext) {
JLabel label = new JLabel(labeltext);
label.setFont(new Font("Courier",Font.BOLD,10));
label.setHorizontalAlignment(JLabel.CENTER);
return label;
}
}