Basis gelegd voor PanelDevice, todo:

- knop icons cachen om echte togglers mogelijk te maken
- rij if...elseif equals statements met een ButtonList loop korter maken?
- sliders afhandelen
- feedback terugsturen
- naamgeving aanpassen
This commit is contained in:
2011-03-01 09:58:00 +00:00
parent eae4f80c24
commit 1bb7cb7797
21 changed files with 314 additions and 4 deletions

View File

@@ -11,5 +11,6 @@
<classpathentry kind="lib" path="lib/nativecall-0.4.1.jar"/>
<classpathentry kind="lib" path="lib/nativeloader-200505172341.jar"/>
<classpathentry kind="lib" path="cfg"/>
<classpathentry kind="lib" path="resource"/>
<classpathentry kind="output" path="bin"/>
</classpath>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -17,6 +17,7 @@ import pm.device.gui.GUIDevice;
import pm.device.javainput.extreme3d.Extreme3DDevice;
import pm.device.javainput.rumblepad.RumblepadDevice;
import pm.device.jintellitype.JIntellitypeDevice;
import pm.device.panel.PanelDevice;
import pm.device.player.PlayerDevice;
import pm.device.text.TextDevice;
import pm.device.text.lan.LanTextDevice;
@@ -51,22 +52,23 @@ 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());
//add(new GUIDevice());
//add(new TextDevice());
add(new PanelDevice());
//add(new LanTextDevice());
//add(new Extreme3DDevice());
startDevices();
//add(new ExampleApplication());
//add(new WMPApplication());
add(new GomPlayerApplication());
//add(new GomPlayerApplication());
//add(new WinampApplication());
//add(new iTunesApplication());
add(new VLCApplication());
add(new iTunesApplication());
//add(new VLCApplication());
//add(new MPCApplication());
startApplications();
}

View File

@@ -0,0 +1,33 @@
package pm.device.panel;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;
public class HoldButton extends JButton implements MouseListener {
protected static final long serialVersionUID = 1L;
protected HoldButtonListener holdButtonListener;
public HoldButton(HoldButtonListener holdButtonListener) {
this.holdButtonListener = holdButtonListener;
addMouseListener(this);
}
public void mousePressed(MouseEvent event) {
if (event.getButton() == MouseEvent.BUTTON1) {
holdButtonListener.buttonPressed(this);
}
}
public void mouseReleased(MouseEvent event) {
if (event.getButton() == MouseEvent.BUTTON1) {
holdButtonListener.buttonReleased(this);
}
}
public void mouseClicked(MouseEvent event) {}
public void mouseEntered(MouseEvent event) {}
public void mouseExited(MouseEvent event) {}
}

View File

@@ -0,0 +1,6 @@
package pm.device.panel;
public interface HoldButtonListener {
public void buttonPressed(HoldButton button);
public void buttonReleased(HoldButton button);
}

View File

@@ -0,0 +1,216 @@
package pm.device.panel;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import pm.Device;
import pm.macro.state.Press;
public class Panel extends JFrame implements ChangeListener, HoldButtonListener {
protected static final long serialVersionUID = 1L;
protected final static String TITLE = "MIMIS Panel Device";
protected PanelButtonListener panelButtonListener;
protected ClassLoader classLoader;
protected JLabel timeLabel;
protected JLabel chapterLabel;
protected JProgressBar positionProgressBar;
protected JSlider positionSlider;
protected JSlider volumeSlider;
protected JButton previousChapterButton;
protected JButton rewindButton;
protected JButton stopButton;
protected JButton pauseButton;
protected JButton playButton;
protected JButton fastForwardButton;
protected JButton nextChapterButton;
protected JButton toggleMuteButton;
protected boolean setPositionValue;
Panel(PanelButtonListener panelButtonListener) {
super(TITLE);
this.panelButtonListener = panelButtonListener;
classLoader = getClass().getClassLoader();
createControls();
layoutControls();
pack();
setResizable(false);
setVisible(true);
}
protected URL getResource(String name) {
return classLoader.getResource(name);
}
protected ImageIcon getImageIcon(String name) {
return new ImageIcon(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 void createControls() {
timeLabel = new JLabel("hh:mm:ss");
chapterLabel = new JLabel("00/00");
positionProgressBar = new JProgressBar();
positionProgressBar.setToolTipText("Time");
positionSlider = new JSlider();
positionSlider.setToolTipText("Position");
volumeSlider = new JSlider();
volumeSlider.setOrientation(JSlider.HORIZONTAL);
volumeSlider.setPreferredSize(new Dimension(100, 40));
volumeSlider.setToolTipText("Change volume");
previousChapterButton = getButton("icons/control_start_blue.png", "Go to previous chapter");
rewindButton = getButton("icons/control_rewind_blue.png", "Skip back");
stopButton = getButton("icons/control_stop_blue.png", "Stop");
pauseButton = getButton("icons/control_pause_blue.png", "Play/pause");
playButton = getButton("icons/control_play_blue.png", "Play");
fastForwardButton = getButton("icons/control_fastforward_blue.png", "Skip forward");
nextChapterButton = getButton("icons/control_end_blue.png", "Go to next chapter");
toggleMuteButton = getButton("icons/sound_mute.png", "Toggle Mute");
}
protected void layoutControls() {
setLayout(new BorderLayout());
JPanel positionPanel = new JPanel();
positionPanel.setLayout(new GridLayout(2, 1));
positionPanel.add(positionProgressBar);
positionPanel.add(positionSlider);
JPanel topPanel = new JPanel();
topPanel.setLayout(new BorderLayout(8, 0));
topPanel.add(timeLabel, BorderLayout.WEST);
topPanel.add(positionPanel, BorderLayout.CENTER);
topPanel.add(chapterLabel, BorderLayout.EAST);
add(topPanel, BorderLayout.NORTH);
JPanel bottomPanel = new JPanel();
bottomPanel.setLayout(new FlowLayout());
bottomPanel.add(previousChapterButton);
bottomPanel.add(rewindButton);
bottomPanel.add(stopButton);
bottomPanel.add(pauseButton);
bottomPanel.add(playButton);
bottomPanel.add(fastForwardButton);
bottomPanel.add(nextChapterButton);
bottomPanel.add(volumeSlider);
bottomPanel.add(toggleMuteButton);
add(bottomPanel, BorderLayout.SOUTH);
positionSlider.addChangeListener(this);
volumeSlider.addChangeListener(this);
}
/* Listeners */
public void stateChanged(ChangeEvent event) {
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(previousChapterButton)) {
panelButtonListener.buttonPressed(PanelButton.PREVIOUS_CHAPTER);
} 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)) {
panelButtonListener.buttonPressed(PanelButton.PLAY);
} else if (button.equals(fastForwardButton)) {
panelButtonListener.buttonPressed(PanelButton.FAST_FORWARD);
} else if (button.equals(nextChapterButton)) {
panelButtonListener.buttonPressed(PanelButton.NEXT_CHAPTER);
} else if (button.equals(toggleMuteButton)) {
panelButtonListener.buttonPressed(PanelButton.TOGGLE_MUTE);
}
}
public void buttonReleased(HoldButton button) {
if (button.equals(previousChapterButton)) {
panelButtonListener.buttonReleased(PanelButton.PREVIOUS_CHAPTER);
} 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)) {
panelButtonListener.buttonReleased(PanelButton.PLAY);
} else if (button.equals(fastForwardButton)) {
panelButtonListener.buttonReleased(PanelButton.FAST_FORWARD);
} else if (button.equals(nextChapterButton)) {
panelButtonListener.buttonReleased(PanelButton.NEXT_CHAPTER);
} else if (button.equals(toggleMuteButton)) {
panelButtonListener.buttonReleased(PanelButton.TOGGLE_MUTE);
}
}
/* Update */
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);
}
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);
}
}

View File

@@ -0,0 +1,14 @@
package pm.device.panel;
import pm.Button;
public enum PanelButton implements Button {
PREVIOUS_CHAPTER,
REWIND,
STOP,
PAUSE,
PLAY,
FAST_FORWARD,
NEXT_CHAPTER,
TOGGLE_MUTE;
}

View File

@@ -0,0 +1,6 @@
package pm.device.panel;
public interface PanelButtonListener {
public void buttonPressed(PanelButton panelButton);
public void buttonReleased(PanelButton panelButton);
}

View File

@@ -0,0 +1,32 @@
package pm.device.panel;
import pm.Device;
import pm.event.Task;
import pm.macro.state.Press;
import pm.macro.state.Release;
import pm.value.Action;
import pm.value.Target;
public class PanelDevice extends Device implements PanelButtonListener {
protected Panel panel;
public void initialise() {
panel = new Panel(this);
panel.updateTime(12342398);
panel.updatePosition(43);
add(new Press(PanelButton.PLAY), new Task(Action.PLAY, Target.APPLICATION));
}
public void exit() {
panel.dispose();
}
public void buttonPressed(PanelButton panelButton) {
add(new Press(panelButton));
}
public void buttonReleased(PanelButton panelButton) {
add(new Release(panelButton));
}
}