Verder gewerkt aan PanelDevice. Feedback moet algemeen worden voor Devices.

This commit is contained in:
Bram Veenboer
2011-03-06 13:05:36 +00:00
parent b38f9541d5
commit d8e79c3363
9 changed files with 211 additions and 169 deletions

View File

@@ -52,7 +52,7 @@ public class Main extends EventListener {
}
public void initialise() throws DeviceInitialiseException {
//add(new JIntellitypeDevice());
add(new JIntellitypeDevice());
//add(new PlayerDevice());
add(new RumblepadDevice());
//add(new WiimoteDevice());

View File

@@ -1,156 +1,163 @@
package pm.device.panel;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.ScrollPaneConstants;
import pm.util.swing.HoldButton;
import pm.util.swing.HoldButtonListener;
import pm.util.swing.ToggleButton;
public class Panel extends JFrame implements ChangeListener, HoldButtonListener {
protected static final long serialVersionUID = 1L;
public class Panel extends JFrame implements HoldButtonListener {
protected static final long serialVersionUID = 1L;
protected final static String TITLE = "MIMIS Panel Device";
protected PanelButtonListener panelButtonListener;
protected ClassLoader classLoader;
protected ClassLoader classLoader;
protected JButton previousButton;
protected JButton rewindButton;
protected JButton stopButton;
protected JButton pauseButton;
protected JButton playButton;
protected JButton forwardButton;
protected JButton nextButton;
protected JButton volumeDownButton;
protected JButton muteButton;
protected JButton volumeUpButton;
protected boolean setPositionValue;
protected JTextArea feedbackArea;
protected JScrollPane scrollPane;
Panel(PanelButtonListener panelButtonListener) {
super(TITLE);
this.panelButtonListener = panelButtonListener;
classLoader = getClass().getClassLoader();
createControls();
layoutControls();
pack();
setResizable(false);
setVisible(true);
}
protected HoldButton previousButton;
protected HoldButton rewindButton;
protected HoldButton stopButton;
protected ToggleButton playPauseToggleButton;
protected HoldButton forwardButton;
protected HoldButton nextButton;
protected HoldButton volumeDownButton;
protected ToggleButton muteToggleButton;
protected HoldButton volumeUpButton;
protected HoldButton repeatButton;
protected HoldButton shuffleButton;
protected URL getResource(String name) {
return classLoader.getResource(name);
}
Panel(PanelButtonListener panelButtonListener) {
super(TITLE);
this.panelButtonListener = panelButtonListener;
classLoader = getClass().getClassLoader();
createControls();
layoutControls();
pack();
setResizable(false);
setVisible(true);
}
protected ImageIcon getImageIcon(String name) {
return new ImageIcon(getResource(name));
}
protected URL getResource(String name) {
return classLoader.getResource(name);
}
protected JButton getButton(String name, String text) {
JButton button = (JButton) new HoldButton(this);
button.setIcon(getImageIcon(name));
button.setToolTipText(text);
return button;
}
protected ImageIcon getImageIcon(String name) {
return new ImageIcon(getResource(name));
}
protected void createControls() {
previousButton = getButton("icons/previous.png", "Go to previous track");
rewindButton = getButton("icons/rewind.png", "Skip backward");
stopButton = getButton("icons/stop.png", "Stop");
pauseButton = getButton("icons/pause.png", "Play/pause");
playButton = getButton("icons/play.png", "Play/pause");
forwardButton = getButton("icons/forward.png", "Skip forward");
nextButton = getButton("icons/next.png", "Go to next track");
protected HoldButton getButton(String name, String text) {
HoldButton button = new HoldButton(this);
button.setIcon(getImageIcon(name));
button.setToolTipText(text);
button.setFocusPainted(false);
return button;
}
protected ToggleButton getToggleButton(String firstName, String secondName, String text) {
ImageIcon firstImageIcon = getImageIcon(firstName);
ImageIcon secondImageIcon = getImageIcon(secondName);
ToggleButton button = new ToggleButton(this, firstImageIcon, secondImageIcon);
button.setToolTipText(text);
button.setFocusPainted(false);
return button;
}
protected void createControls() {
previousButton = getButton("icons/previous.png", "Go to previous track");
rewindButton = getButton("icons/rewind.png", "Skip backward");
playPauseToggleButton = getToggleButton("icons/play.png", "icons/pause.png", "Play/pause");//getButton("icons/play.png", "Play/pause");
forwardButton = getButton("icons/forward.png", "Skip forward");
nextButton = getButton("icons/next.png", "Go to next track");
volumeDownButton = getButton("icons/volumeDown.png", "Decrease volume");
muteButton = getButton("icons/mute.png", "Toggle Mute");
volumeUpButton = getButton("icons/volumeUp.png", "Increase volume");
}
muteToggleButton = getToggleButton("icons/mute.png", "icons/unmute.png", "Toggle Mute");
volumeUpButton = getButton("icons/volumeUp.png", "Increase volume");
repeatButton = getButton("icons/repeat.png", "Repeat");
shuffleButton = getButton("icons/shuffle.png", "Shuffle");
}
protected void layoutControls() {
//setLayout(new BorderLayout());
//JPanel positionPanel = new JPanel();
/* Feedback panel */
JPanel feedbackPanel = new JPanel();
JTextField feedbackField = new JTextField("Hier komt allerlei feedback te staan!", 64);
feedbackField.setEditable(false);
feedbackPanel.add(feedbackField);
add(feedbackPanel, BorderLayout.NORTH);
/* Control panel */
JPanel controlPanel = new JPanel();
protected void layoutControls() {
setLayout(new BorderLayout());
layoutFeedbackPanel();
layoutControlPanel();
}
protected void layoutFeedbackPanel() {
JPanel feedbackPanel = new JPanel();
feedbackArea = new JTextArea(10, 32);
feedbackArea.setEditable(false);
feedbackPanel.add(feedbackArea);
scrollPane = new JScrollPane();
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.getViewport().add(feedbackArea);
feedbackPanel.add(scrollPane);
add(feedbackPanel, BorderLayout.SOUTH);
feedbackArea.append("Hier komt allerlei feedback te staan!\n");
feedbackArea.append("Hier komt allerlei feedback te staan!\n");
feedbackArea.append("Hier komt allerlei feedback te staan!\n");
feedbackArea.append("Hier komt allerlei feedback te staan!\n");
feedbackArea.append("Hier komt allerlei feedback te staan!\n");
feedbackArea.append("Hier komt allerlei feedback te staan!\n");
feedbackArea.append("Hier komt allerlei feedback te staan!\n");
feedbackArea.append("Hier komt allerlei feedback te staan!\n");
feedbackArea.append("Hier komt allerlei feedback te staan!\n");
feedbackArea.append("Hier komt allerlei feedback te staan!\n");
feedbackArea.append("Hier komt allerlei feedback te staan!\n");
feedbackArea.append("Hier komt allerlei feedback te staan!\n");
feedbackArea.append("Hier komt allerlei feedback te staan!\n");
feedbackArea.append("Hier komt allerlei feedback te staan!\n");
feedbackArea.append("Hier komt allerlei feedback te staan!\n");
feedbackArea.append("Hier komt allerlei feedback te staan!\n");
feedbackArea.append("Hier komt allerlei feedback te staan!\n");
JScrollBar scrollBar = scrollPane.getVerticalScrollBar();
scrollBar.setValue(scrollBar.getMaximum());
}
controlPanel.add(previousButton);
controlPanel.add(rewindButton);
controlPanel.add(stopButton);
controlPanel.add(pauseButton);
controlPanel.add(playButton);
controlPanel.add(forwardButton);
controlPanel.add(nextButton);
controlPanel.add(volumeDownButton);
controlPanel.add(muteButton);
controlPanel.add(volumeUpButton);
add(controlPanel, BorderLayout.CENTER);
/* TODO: zorg dat de knoppen 4x3 of 3x4 staan, voeg shuffle en repeat toe
protected void layoutControlPanel() {
JPanel controlPanel = new JPanel();
controlPanel.setLayout(new BorderLayout());
JPanel seekPanel = new JPanel();
seekPanel.add(previousButton);
seekPanel.add(rewindButton);
seekPanel.add(forwardButton);
seekPanel.add(nextButton);
JPanel upperControlPanel = new JPanel();
controlPanel.add(upperControlPanel, BorderLayout.NORTH);
upperControlPanel.add(previousButton);
upperControlPanel.add(rewindButton);
upperControlPanel.add(playPauseToggleButton);
upperControlPanel.add(forwardButton);
upperControlPanel.add(nextButton);
JPanel modePanel = new JPanel();
controlPanel.add(stopButton);
controlPanel.add(pauseButton);
controlPanel.add(playButton);
JPanel volumePanel = new JPanel();
controlPanel.add(volumeDownButton);
controlPanel.add(muteButton);
controlPanel.add(volumeUpButton);
JPanel lowerControlPanel = new JPanel();
controlPanel.add(lowerControlPanel, BorderLayout.SOUTH);
lowerControlPanel.add(repeatButton);
lowerControlPanel.add(volumeDownButton);
lowerControlPanel.add(muteToggleButton);
lowerControlPanel.add(volumeUpButton);
lowerControlPanel.add(shuffleButton);
controlPanel.add(seekPanel);
controlPanel.add(modePanel);
controlPanel.add(volumePanel);
add(controlPanel, BorderLayout.CENTER);
*/
}
}
/* Listeners */
public void stateChanged(ChangeEvent event) {
/* Wordt niet meer gebruikt
Object source = event.getSource();
if (positionSlider.equals(source)) {
if (!setPositionValue) {
float positionValue = (float) positionSlider.getValue() / 100.0f;
System.out.println(positionValue);
}
} else if (volumeSlider.equals(source)) {
}
*/
}
public void buttonPressed(HoldButton button) {
if (button.equals(previousButton)) {
panelButtonListener.buttonPressed(PanelButton.PREVIOUS);
} else if (button.equals(rewindButton)) {
panelButtonListener.buttonPressed(PanelButton.REWIND);
} else if (button.equals(stopButton)) {
panelButtonListener.buttonPressed(PanelButton.STOP);
} else if (button.equals(pauseButton)) {
panelButtonListener.buttonPressed(PanelButton.PAUSE);
} else if (button.equals(playButton)) {
/* Listeners */
public void buttonPressed(HoldButton button) {
if (button.equals(previousButton)) {
panelButtonListener.buttonPressed(PanelButton.PREVIOUS);
} else if (button.equals(rewindButton)) {
panelButtonListener.buttonPressed(PanelButton.REWIND);
} else if (button.equals(playPauseToggleButton)) {
panelButtonListener.buttonPressed(PanelButton.PLAY);
} else if (button.equals(forwardButton)) {
panelButtonListener.buttonPressed(PanelButton.FORWARD);
@@ -158,64 +165,51 @@ public class Panel extends JFrame implements ChangeListener, HoldButtonListener
panelButtonListener.buttonPressed(PanelButton.NEXT);
} else if (button.equals(volumeDownButton)) {
panelButtonListener.buttonPressed(PanelButton.VOLUME_DOWN);
} else if (button.equals(muteButton)) {
} else if (button.equals(muteToggleButton)) {
panelButtonListener.buttonPressed(PanelButton.MUTE);
} else if (button.equals(volumeUpButton)) {
panelButtonListener.buttonPressed(PanelButton.VOLUME_UP);
} else if (button.equals(repeatButton)) {
panelButtonListener.buttonPressed(PanelButton.REPEAT);
} else if (button.equals(shuffleButton)) {
panelButtonListener.buttonPressed(PanelButton.SHUFFLE);
}
}
}
public void buttonReleased(HoldButton button) {
if (button.equals(previousButton)) {
public void buttonReleased(HoldButton button) {
if (button.equals(previousButton)) {
panelButtonListener.buttonReleased(PanelButton.PREVIOUS);
} else if (button.equals(rewindButton)) {
panelButtonListener.buttonReleased(PanelButton.REWIND);
} else if (button.equals(stopButton)) {
panelButtonListener.buttonReleased(PanelButton.STOP);
} else if (button.equals(pauseButton)) {
panelButtonListener.buttonReleased(PanelButton.PAUSE);
} else if (button.equals(playButton)) {
} else if (button.equals(playPauseToggleButton)) {
panelButtonListener.buttonReleased(PanelButton.PLAY);
playPauseToggleButton.toggle();
} else if (button.equals(forwardButton)) {
panelButtonListener.buttonReleased(PanelButton.FORWARD);
} else if (button.equals(nextButton)) {
panelButtonListener.buttonReleased(PanelButton.NEXT);
} else if (button.equals(volumeDownButton)) {
panelButtonListener.buttonReleased(PanelButton.VOLUME_DOWN);
} else if (button.equals(muteButton)) {
} else if (button.equals(muteToggleButton)) {
panelButtonListener.buttonReleased(PanelButton.MUTE);
muteToggleButton.toggle();
} else if (button.equals(volumeUpButton)) {
panelButtonListener.buttonReleased(PanelButton.VOLUME_UP);
} else if (button.equals(repeatButton)) {
panelButtonListener.buttonReleased(PanelButton.REPEAT);
} else if (button.equals(shuffleButton)) {
panelButtonListener.buttonReleased(PanelButton.SHUFFLE);
}
}
}
/* Update, is niet meer nodig? Alle informatie wordt in het TextField geprint
public void updateTime(long millis) {
String s = String.format(
"%02d:%02d:%02d",
TimeUnit.MILLISECONDS.toHours(millis),
TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
timeLabel.setText(s);
}
/* Feedback */
public void addFeedback(String format, Object... args) {
feedbackArea.append(String.format(format, args));
JScrollBar scrollBar = scrollPane.getVerticalScrollBar();
scrollBar.setValue(scrollBar.getMaximum());
}
public void updatePosition(int value) {
positionProgressBar.setValue(value);
setPositionValue = true;
positionSlider.setValue(value);
setPositionValue = false;
}
public void updateChapter(int chapter, int chapterCount) {
String s = chapterCount != -1 ? (chapter + 1) + "/" + chapterCount
: "-";
chapterLabel.setText(s);
chapterLabel.invalidate();
validate();
}
public void updateVolume(int value) {
volumeSlider.setValue(value);
}
*/
public void clearFeedback() {
feedbackArea.setText("");
}
}

View File

@@ -12,5 +12,7 @@ public enum PanelButton implements Button {
NEXT,
VOLUME_DOWN,
MUTE,
VOLUME_UP;
VOLUME_UP,
REPEAT,
SHUFFLE;
}

View File

@@ -7,6 +7,12 @@ public class ArrayCycle<E> extends ArrayList<E> {
protected int index = 0;
public ArrayCycle(E... elementArary) {
for (E element : elementArary) {
add(element);
}
}
public E current() {
return this.get(index);
}

View File

@@ -0,0 +1,22 @@
package pm.util.swing;
import javax.swing.ImageIcon;
import pm.util.ArrayCycle;
public class CycleButton extends HoldButton {
protected static final long serialVersionUID = 1L;
protected ArrayCycle<ImageIcon> imageIconCycle;
public CycleButton(HoldButtonListener holdButtonListener, ArrayCycle<ImageIcon> imageIconCycle) {
super(holdButtonListener);
this.imageIconCycle = imageIconCycle;
cycle();
}
public void cycle() {
setIcon(imageIconCycle.current());
imageIconCycle.next();
}
}

View File

@@ -1,4 +1,4 @@
package pm.device.panel;
package pm.util.swing;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

View File

@@ -1,4 +1,4 @@
package pm.device.panel;
package pm.util.swing;
public interface HoldButtonListener {
public void buttonPressed(HoldButton button);

View File

@@ -0,0 +1,18 @@
package pm.util.swing;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import pm.util.ArrayCycle;
public class ToggleButton extends CycleButton {
protected static final long serialVersionUID = 1L;
public ToggleButton(HoldButtonListener holdButtonListener, ImageIcon firstImageIcon, ImageIcon secondImageIcon) {
super(holdButtonListener, new ArrayCycle<ImageIcon>(firstImageIcon, secondImageIcon));
}
public void toggle() {
cycle();
}
}