X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=MooToolbar.java;h=c1244f575e81b717e8db764427727b2d0362fd06;hb=c83e74facf762222fe4578f175408cc50d360518;hp=39cf00b9e5f5a1c89fe6266e9302967fbcca4d4e;hpb=5c89e592698dba86380de9bebc21edeaf03ebbd2;p=moosique.git diff --git a/MooToolbar.java b/MooToolbar.java index 39cf00b..c1244f5 100644 --- a/MooToolbar.java +++ b/MooToolbar.java @@ -1,44 +1,138 @@ import javax.swing.*; +import java.awt.*; +import java.awt.event.*; +import javax.sound.midi.*; -public class MooToolbar extends JToolBar -{ - public MooToolbar() - { +/** + * The application's toolbar, with the most frequently used commands. + * + * @author Björn Lanneskog + */ +public class MooToolbar extends JToolBar { + + private JButton rewind, playpause, stop, fastforward; + private JLabel measure, beats, ticks, measureValue, beatsValue, ticksValue; + private ImageIcon playIcon, pauseIcon; + private MooMouseAdapter mouseAdapter; + public static final Color bgColor = new Color(192, 224, 255); + + /** + * Creates the toolbar. + */ - add(createRewindButton()); - add(createPlayPauseButton()); - add(createStopButton()); - add(createFastForwardButton()); + public MooToolbar() { + // setAlignmentX(LEFT_ALIGNMENT); + setFloatable(false); + mouseAdapter = new MooMouseAdapter(); + + // Creates playback buttons + rewind = createButton("images/rewind.gif", "Rewind"); + playpause = createButton("images/play.gif", "Play"); + stop = createButton("images/stop.gif", "Stop"); + fastforward = createButton("images/forward.gif", "Fast forward"); + playIcon = new ImageIcon("images/play.gif"); + pauseIcon = new ImageIcon("images/pause.gif"); + + // Adds playback buttons + add(rewind); + add(playpause); + add(stop); + add(fastforward); - } + // Creates progress indicator + measure = createLabel("Msr", 10); + beats = createLabel("Beat", 10); + ticks = createLabel("Tick", 10); + measureValue = createLabel("1", 16); + beatsValue = createLabel("1", 16); + ticksValue = createLabel("1", 16); + JPanel spacenorth = new JPanel(); + spacenorth.setBackground(bgColor); + JPanel spacesouth = new JPanel(); + spacesouth.setBackground(bgColor); + + // Creates progress indicator panel and adds components + JPanel progIndPanel = new JPanel(); + progIndPanel.setMaximumSize(new Dimension(120,27)); + progIndPanel.setLayout(new GridLayout(2,4)); + progIndPanel.add(spacenorth); + progIndPanel.add(measure); + progIndPanel.add(beats); + progIndPanel.add(ticks); + progIndPanel.add(spacesouth); + progIndPanel.add(measureValue); + progIndPanel.add(beatsValue); + progIndPanel.add(ticksValue); + add(progIndPanel); - private JButton createRewindButton() - { - JButton rewind = new JButton(new ImageIcon("images/rewind.gif")); - rewind.setToolTipText("rewind"); - return rewind; } - - private JButton createPlayPauseButton() - { - JButton playpause = new JButton(new ImageIcon("images/play.gif")); - playpause.setToolTipText("play/pause"); - return playpause; + + /** + * Updates the progress indicator. + */ + public void updateProgInd() { + int pos = Moosique.getSequencer().getTickPosition(); + int ticksPerBeat = Moosique.getSequencer().getResolution(); + int beatsPerMeasure = 4; + measureValue.setText(pos / (beatsPerMeasure * ticksPerBeat)); + beatsValue.setText((pos - measures * beatsPerMeasure * ticksPerBeat) / ticksPerBeat); + ticksValue.setText(pos - measures * beatsPerMeasure * ticksPerBeat - beats * ticksPerBeat); } - - private JButton createStopButton() - { - JButton stop = new JButton(new ImageIcon("images/stop.gif")); - stop.setToolTipText("stop"); - return stop; + + /** + * Creates a button with the specified image and tooltip. + * @param imagelocation the imagelacation of the the image displayed in the button + * @param tooltip the tooltip associated with this button + * @return button the button to be attached to the toolbar + */ + private JButton createButton(String imagelocation, String tooltip) { + JButton button = new JButton (new ImageIcon(imagelocation)); + button.setToolTipText(tooltip); + button.addMouseListener(mouseAdapter); + return button; } - private JButton createFastForwardButton() - { - JButton fastforward = new JButton(new - ImageIcon("images/forward.gif")); - fastforward.setToolTipText("fast forward"); - return fastforward; + /** + * Creates labels with the specified text and font size. + * @param title the titel displayed on the label + * @param fontsize the fontzise of the text displayed on the label + */ + private JLabel createLabel(String title, int fontSize){ + JLabel label = new JLabel(title,JLabel.CENTER); + label.setFont(new Font("Times New Roman", Font.PLAIN, fontSize)); + label.setBorder(BorderFactory.createLineBorder(Color.black)); + return label; } -} + class MooMouseAdapter extends MouseAdapter { + public void mouseClicked(MouseEvent e) { + if (((JButton)e.getSource()).getToolTipText() == "Play") { + Moosique.play(); + playpause.setIcon(pauseIcon); + playpause.setToolTipText("Pause"); + } else if (((JButton)e.getSource()).getToolTipText() == "Pause") { + Moosique.pause(); + playpause.setIcon(playIcon); + playpause.setToolTipText("Resume"); + } else if (((JButton)e.getSource()).getToolTipText() == "Resume") { + Moosique.resume(); + playpause.setIcon(pauseIcon); + playpause.setToolTipText("Pause"); + } else if (((JButton)e.getSource()).getToolTipText() == "Stop") { + Moosique.stop(); + playpause.setIcon(playIcon); + playpause.setToolTipText("Play"); + } + } + + 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); + } + } + + public void mouseReleased(MouseEvent e) {} + } +} \ No newline at end of file