diff --git a/java/resource/icons/unmute.png b/java/resource/icons/unmute.png new file mode 100644 index 0000000..c76c3d6 Binary files /dev/null and b/java/resource/icons/unmute.png differ diff --git a/java/src/pm/Main.java b/java/src/pm/Main.java index 6f33feb..c4f0720 100644 --- a/java/src/pm/Main.java +++ b/java/src/pm/Main.java @@ -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()); diff --git a/java/src/pm/device/panel/Panel.java b/java/src/pm/device/panel/Panel.java index d43a2f3..2abd75d 100644 --- a/java/src/pm/device/panel/Panel.java +++ b/java/src/pm/device/panel/Panel.java @@ -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(""); + } } diff --git a/java/src/pm/device/panel/PanelButton.java b/java/src/pm/device/panel/PanelButton.java index deffba5..0154b26 100644 --- a/java/src/pm/device/panel/PanelButton.java +++ b/java/src/pm/device/panel/PanelButton.java @@ -12,5 +12,7 @@ public enum PanelButton implements Button { NEXT, VOLUME_DOWN, MUTE, - VOLUME_UP; + VOLUME_UP, + REPEAT, + SHUFFLE; } diff --git a/java/src/pm/util/ArrayCycle.java b/java/src/pm/util/ArrayCycle.java index af91eb2..7a5372d 100644 --- a/java/src/pm/util/ArrayCycle.java +++ b/java/src/pm/util/ArrayCycle.java @@ -7,6 +7,12 @@ public class ArrayCycle extends ArrayList { protected int index = 0; + public ArrayCycle(E... elementArary) { + for (E element : elementArary) { + add(element); + } + } + public E current() { return this.get(index); } diff --git a/java/src/pm/util/swing/CycleButton.java b/java/src/pm/util/swing/CycleButton.java new file mode 100644 index 0000000..68c12a4 --- /dev/null +++ b/java/src/pm/util/swing/CycleButton.java @@ -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 imageIconCycle; + + public CycleButton(HoldButtonListener holdButtonListener, ArrayCycle imageIconCycle) { + super(holdButtonListener); + this.imageIconCycle = imageIconCycle; + cycle(); + } + + public void cycle() { + setIcon(imageIconCycle.current()); + imageIconCycle.next(); + } +} diff --git a/java/src/pm/device/panel/HoldButton.java b/java/src/pm/util/swing/HoldButton.java similarity index 93% rename from java/src/pm/device/panel/HoldButton.java rename to java/src/pm/util/swing/HoldButton.java index 8abc9ce..d66f963 100644 --- a/java/src/pm/device/panel/HoldButton.java +++ b/java/src/pm/util/swing/HoldButton.java @@ -1,4 +1,4 @@ -package pm.device.panel; +package pm.util.swing; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; diff --git a/java/src/pm/device/panel/HoldButtonListener.java b/java/src/pm/util/swing/HoldButtonListener.java similarity index 82% rename from java/src/pm/device/panel/HoldButtonListener.java rename to java/src/pm/util/swing/HoldButtonListener.java index fe21235..46cab12 100644 --- a/java/src/pm/device/panel/HoldButtonListener.java +++ b/java/src/pm/util/swing/HoldButtonListener.java @@ -1,4 +1,4 @@ -package pm.device.panel; +package pm.util.swing; public interface HoldButtonListener { public void buttonPressed(HoldButton button); diff --git a/java/src/pm/util/swing/ToggleButton.java b/java/src/pm/util/swing/ToggleButton.java new file mode 100644 index 0000000..9efe7b4 --- /dev/null +++ b/java/src/pm/util/swing/ToggleButton.java @@ -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(firstImageIcon, secondImageIcon)); + } + + public void toggle() { + cycle(); + } +}