From: Einar Pehrson Date: Tue, 13 May 2003 20:58:07 +0000 (+0000) Subject: Fixed mouse listener for progress indicator X-Git-Url: https://ruin.nu/git/?p=moosique.git;a=commitdiff_plain;h=a25242af0e55e3db5135b29e2d7e554d5fafaaaa Fixed mouse listener for progress indicator --- diff --git a/MooGUI.java b/MooGUI.java index 16709f5..21dbdd5 100644 --- a/MooGUI.java +++ b/MooGUI.java @@ -101,6 +101,7 @@ public class MooGUI extends JFrame { public void setSequence(Sequence sequence) { seq = sequence; view.setTracks(seq.getTracks()); + toolbar.resetProgInd(); } /** diff --git a/MooToolbar.java b/MooToolbar.java index a3b250a..08e4a0d 100644 --- a/MooToolbar.java +++ b/MooToolbar.java @@ -11,10 +11,12 @@ import javax.sound.midi.*; public class MooToolbar extends JToolBar { private JButton rewind, playpause, stop, fastforward; - private JLabel measure, beats, ticks, measureValue, beatsValue, ticksValue; + private JLabel measure, beats, ticks, measuresValue, beatsValue, ticksValue; private JPanel progIndPanel; private ImageIcon playIcon, pauseIcon; - private MooMouseAdapter mouseAdapter; + private MAdapter mouseAdapter; + private int ticksPerBeat; + public static final int beatsPerMeasure = 4; public static final Color bgColor = new Color(192, 224, 255); /** @@ -24,7 +26,7 @@ public class MooToolbar extends JToolBar { public MooToolbar() { // setAlignmentX(LEFT_ALIGNMENT); setFloatable(false); - mouseAdapter = new MooMouseAdapter(); + mouseAdapter = new MAdapter(); // Creates playback buttons rewind = createButton("images/rewind.gif", "Rewind"); @@ -44,7 +46,7 @@ public class MooToolbar extends JToolBar { measure = createLabel("Msr", 10); beats = createLabel("Beat", 10); ticks = createLabel("Tick", 10); - measureValue = formatProgInd(createLabel("1", 16)); + measuresValue = formatProgInd(createLabel("1", 16)); beatsValue = formatProgInd(createLabel("1", 16)); ticksValue = formatProgInd(createLabel("1", 16)); JPanel spacenorth = new JPanel(); @@ -61,7 +63,7 @@ public class MooToolbar extends JToolBar { progIndPanel.add(beats); progIndPanel.add(ticks); progIndPanel.add(spacesouth); - progIndPanel.add(measureValue); + progIndPanel.add(measuresValue); progIndPanel.add(beatsValue); progIndPanel.add(ticksValue); add(progIndPanel); @@ -76,26 +78,25 @@ public class MooToolbar extends JToolBar { resetProgInd(); } else { // Otherwise, calculates the current song position in measures, beats and ticks. - int ticksPerBeat = Moosique.getSequence().getResolution(); - int beatsPerMeasure = 4; long measures = tickPosition / (beatsPerMeasure * ticksPerBeat); long beats = (tickPosition - measures * beatsPerMeasure * ticksPerBeat) / ticksPerBeat; long ticks = tickPosition - measures * beatsPerMeasure * ticksPerBeat - beats * ticksPerBeat; - measureValue.setText(Long.toString(1 + measures)); + measuresValue.setText(Long.toString(1 + measures)); beatsValue.setText(Long.toString(1 + beats)); ticksValue.setText(Long.toString(1 + ticks)); } } - /* - * Resets the progress indicator + /** + * Resets the progress indicator. */ - private void resetProgInd() { - measureValue.setText("1"); + public void resetProgInd() { + measuresValue.setText("1"); beatsValue.setText("1"); ticksValue.setText("1"); playpause.setIcon(playIcon); playpause.setToolTipText("Play"); + ticksPerBeat = Moosique.getSequence().getResolution(); } /* @@ -121,36 +122,71 @@ public class MooToolbar extends JToolBar { * Formats the given label for the progress indicator. */ private JLabel formatProgInd(JLabel label){ + label.addMouseListener(mouseAdapter); label.setBorder(BorderFactory.createLineBorder(Color.black)); label.setBackground(Color.white); return label; } - class MooMouseAdapter extends MouseAdapter { + class MAdapter extends MouseAdapter { public void mouseClicked(MouseEvent e) { - if (((JButton)e.getSource()).getToolTipText() == "Play") { - playpause.setIcon(pauseIcon); - playpause.setToolTipText("Pause"); - Moosique.play(); - } else if (((JButton)e.getSource()).getToolTipText() == "Pause") { - playpause.setIcon(playIcon); - playpause.setToolTipText("Resume"); - Moosique.pause(); - } else if (((JButton)e.getSource()).getToolTipText() == "Resume") { - playpause.setIcon(pauseIcon); - playpause.setToolTipText("Pause"); - Moosique.resume(); - } else if (((JButton)e.getSource()).getToolTipText() == "Stop") { - resetProgInd(); - Moosique.stop(); + if (e.getSource() instanceof JButton) { + String toolTip = ((JButton)e.getSource()).getToolTipText(); + if (toolTip == "Play") { + playpause.setIcon(pauseIcon); + playpause.setToolTipText("Pause"); + Moosique.play(); + } else if (toolTip == "Pause") { + playpause.setIcon(playIcon); + playpause.setToolTipText("Resume"); + Moosique.pause(); + } else if (toolTip == "Resume") { + playpause.setIcon(pauseIcon); + playpause.setToolTipText("Pause"); + Moosique.resume(); + } else if (toolTip == "Stop") { + resetProgInd(); + Moosique.stop(); + } + } else if (e.getSource() instanceof JLabel) { + long position = Moosique.getSequencer().getTickPosition(); + if (e.getSource().equals(measuresValue)) { + if (SwingUtilities.isRightMouseButton(e)) { + System.out.println("IncM"); + position += beatsPerMeasure * ticksPerBeat; + } else if (SwingUtilities.isLeftMouseButton(e) && Integer.parseInt(measuresValue.getText()) > 1) { + System.out.println("DecM"); + position -= beatsPerMeasure * ticksPerBeat; + } + } else if (e.getSource().equals(beatsValue)) { + if (SwingUtilities.isRightMouseButton(e)) { + System.out.println("IncB"); + position += ticksPerBeat; + } else if (SwingUtilities.isLeftMouseButton(e) && Integer.parseInt(beatsValue.getText()) > 1) { + System.out.println("DecB"); + position -= ticksPerBeat; + } + } else if (e.getSource().equals(ticksValue)) { + if (SwingUtilities.isRightMouseButton(e)) { + System.out.println("IncT"); + position += 1; + } else if (SwingUtilities.isLeftMouseButton(e) && Integer.parseInt(ticksValue.getText()) > 1) { + System.out.println("DecT"); + position -= 1; + } + } + Moosique.getSequencer().setTickPosition(position); + Moosique.getGUI().update(position); } } public void mousePressed(MouseEvent e) { - if (((JButton)e.getSource()).getToolTipText() == "Rewind") { - Moosique.rewind(96); - } else if (((JButton)e.getSource()).getToolTipText() == "Fast forward") { - Moosique.forward(96); + if (e.getSource() instanceof JButton) { + if (((JButton)e.getSource()).getToolTipText() == "Rewind") { + Moosique.rewind(beatsPerMeasure * ticksPerBeat); + } else if (((JButton)e.getSource()).getToolTipText() == "Fast forward") { + Moosique.forward(beatsPerMeasure * ticksPerBeat); + } } } diff --git a/MooView.java b/MooView.java index 50819ef..d64f885 100644 --- a/MooView.java +++ b/MooView.java @@ -62,7 +62,7 @@ public class MooView extends JScrollPane { for (int i = 1; i < tracks.length; i++) { trackPanel.add(new MooTrackView(tracks[i])); titlePanel.add(new MooTrackTitle(tracks[i],i)); - progressBar.setValue(i+1); + progressBar.setValue(i); } progressDialog.dispose(); } diff --git a/Moosique.java b/Moosique.java index c100436..3ab7586 100644 --- a/Moosique.java +++ b/Moosique.java @@ -195,10 +195,12 @@ public class Moosique { * Stops playback of the current sequence. */ public static void stop() { - sequencer.stop(); - sequencer.setTickPosition(position); - player.interrupt(); - gui.update((long)0); + if (sequencer.isRunning()) { + sequencer.stop(); + sequencer.setTickPosition(position); + player.interrupt(); + gui.update((long)0); + } } /** @@ -206,7 +208,7 @@ public class Moosique { * @return the tick position */ public static long getPosition() { - return position; + return sequencer.getTickPosition(); } /** @@ -214,7 +216,7 @@ public class Moosique { * @param ticks the tick position */ public static void setPosition(long ticks) { - position = ticks; + sequencer.setTickPosition(ticks); } /**