X-Git-Url: https://ruin.nu/git/?p=moosique.git;a=blobdiff_plain;f=MooToolbar.java;h=de416699065e7ba60b327b2c7dddc292f483bfc6;hp=7a16936cbbb8eed3c2a7436d4c4ef133690067c2;hb=HEAD;hpb=4290c2a3878a6c0ed6e43e152a7ea6a79273dea2 diff --git a/MooToolbar.java b/MooToolbar.java index 7a16936..de41669 100644 --- a/MooToolbar.java +++ b/MooToolbar.java @@ -1,7 +1,7 @@ +import javax.sound.midi.*; import javax.swing.*; -import java.awt.event.*; import java.awt.*; -import javax.sound.midi.*; +import java.awt.event.*; /** * The application's toolbar, with the most frequently used commands. @@ -10,109 +10,197 @@ import javax.sound.midi.*; */ public class MooToolbar extends JToolBar { - private JButton rewind, playpause, stop, fastforward; - private JLabel measure, beats, ticks, measurevalue, beatsvalue, ticksvalue; + private JButton rewind, playpause, stop, fastforward, record; + 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); /** * Creates the toolbar. */ - public MooToolbar() { - mouseAdapter = new MooMouseAdapter(); + public MooToolbar() { + setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); + // setAlignmentX(LEFT_ALIGNMENT); + setFloatable(false); + mouseAdapter = new MAdapter(); + // Creates playback buttons rewind = createButton("images/rewind.gif", "Rewind"); - add(rewind); - + record = createButton("images/record.gif", "Record"); playpause = createButton("images/play.gif", "Play"); - add(playpause); + 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"); - - stop = createButton("images/stop.gif", "Stop"); + + // Adds playback buttons + add(rewind); + add(record); + add(playpause); add(stop); - - fastforward = createButton("images/forward.gif", "Fast forward"); add(fastforward); - JPanel progIndPanel = new JPanel(); - progIndPanel.setBorder(BorderFactory.createLineBorder(Color.black)); - progIndPanel.setMaximumSize(new Dimension(100,22)); - progIndPanel.setLayout(new GridLayout(2,3)); - measure = createLabel("Mrs",10); - beats = createLabel("Beat",10); - ticks = createLabel("Tick",10); - measurevalue = createLabel("1", 12); - beatsvalue = createLabel("1",12); - ticksvalue = createLabel("1",12); + // Creates progress indicator + measure = createLabel("Msr", 10); + beats = createLabel("Beat", 10); + ticks = createLabel("Tick", 10); + measuresValue = formatProgInd(createLabel("1", 16)); + beatsValue = formatProgInd(createLabel("1", 16)); + ticksValue = formatProgInd(createLabel("1", 16)); + JPanel spacenorth = new JPanel(); + spacenorth.setBackground(bgColor); + JPanel spacesouth = new JPanel(); + spacesouth.setBackground(bgColor); + + // Creates progress indicator panel and adds components + 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(measurevalue); - progIndPanel.add(beatsvalue); - progIndPanel.add(ticksvalue); + progIndPanel.add(spacesouth); + progIndPanel.add(measuresValue); + progIndPanel.add(beatsValue); + progIndPanel.add(ticksValue); add(progIndPanel); } - + /** - * 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 + * Updates the progress indicator. + * @param tickPosition the tick position to visualize */ - private JButton createButton(String imagelocation, String tooltip) { + public void updateProgInd(long tickPosition) { + System.out.print("Updating to " + tickPosition + " = "); + if (tickPosition == 0) { + resetProgInd(); + System.out.println("1:1:1"); + } else { + int[] position = Moosique.getPositionForTicks(tickPosition); + System.out.println("" + (position[0] + 1) + ":" + (position[1] + 1) + ":" + (position[2] + 1)); + measuresValue.setText(Integer.toString(position[0] + 1)); + beatsValue.setText(Long.toString(position[1] + 1)); + ticksValue.setText(Long.toString(position[2] + 1)); + } + } + + /** + * Resets the progress indicator. + */ + public void resetProgInd() { + measuresValue.setText("1"); + beatsValue.setText("1"); + ticksValue.setText("1"); + updatePlayButton("Play", playIcon); + ticksPerBeat = Moosique.getSequence().getResolution(); + } + + /** + * Creates a button with the specified image and action command / tooltip. + */ + private JButton createButton(String imagelocation, String command) { JButton button = new JButton (new ImageIcon(imagelocation)); - button.setToolTipText(tooltip); + button.setToolTipText(command); + button.setActionCommand(command); button.addMouseListener(mouseAdapter); return button; } /** * 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 value = new JLabel(title,JLabel.CENTER); - value.setFont(new Font("Times New Roman", Font.BOLD, fontSize)); - return value; + JLabel label = new JLabel(title,JLabel.CENTER); + label.setFont(new Font("Times New Roman", Font.PLAIN, fontSize)); + return label; } - - // int pos = Moosique.getSequencer().getTickPosition(); - // int measures = pos / (4 * Moosique.getSequence.get) - // int beats = (pos - measures * 4 * 96) / 96; - // int ticks = (pos - measures*4*96 - beats*96); - - class MooMouseAdapter extends MouseAdapter { + + /** + * 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; + } + + /** + * Updates the play button with the given command and icon. + */ + private void updatePlayButton(String command, Icon icon) { + playpause.setIcon(icon); + playpause.setActionCommand(command); + playpause.setToolTipText(command); + } + + class MAdapter extends MouseAdapter { public void mouseClicked(MouseEvent e) { - if (((JButton)e.getSource()).getToolTipText() == "Play") { + if (e.getSource() instanceof JButton) { + String command = ((JButton)e.getSource()).getActionCommand(); + if (command == "Play") { + updatePlayButton("Pause", pauseIcon); Moosique.play(); - playpause.setIcon(pauseIcon); - playpause.setToolTipText("Pause"); - } else if (((JButton)e.getSource()).getToolTipText() == "Pause") { + } else if (command == "Pause") { + updatePlayButton("Resume", playIcon); Moosique.pause(); - playpause.setIcon(playIcon); - playpause.setToolTipText("Resume"); - } else if (((JButton)e.getSource()).getToolTipText() == "Resume") { + } else if (command == "Resume") { + updatePlayButton("Pause", pauseIcon); Moosique.resume(); - playpause.setIcon(pauseIcon); - playpause.setToolTipText("Pause"); - } else if (((JButton)e.getSource()).getToolTipText() == "Stop") { - Moosique.stop(); - playpause.setIcon(playIcon); - playpause.setToolTipText("Play"); + } else if (command == "Stop") { + updatePlayButton("Play", playIcon); + Moosique.stop(); + } else if (command == "Record") { + MooDialog recordDialog = new MooDialog(MooDialog.RECORD); + } else if (command == "Rewind") { + updatePlayButton("Play", playIcon); + Moosique.setEditPosition(0); + Moosique.stop(); + } else if (command == "Fast forward") { + + } + } else if (e.getSource() instanceof JLabel) { + long position = Moosique.getEditPosition(); + if (e.getSource().equals(measuresValue)) { + if (SwingUtilities.isRightMouseButton(e)) { + position += beatsPerMeasure * ticksPerBeat; + } else if (SwingUtilities.isLeftMouseButton(e) && Integer.parseInt(measuresValue.getText()) > 1) { + position -= beatsPerMeasure * ticksPerBeat; + } + } else if (e.getSource().equals(beatsValue)) { + if (SwingUtilities.isRightMouseButton(e)) { + position += ticksPerBeat; + } else if (SwingUtilities.isLeftMouseButton(e) && Integer.parseInt(beatsValue.getText()) > 1) { + position -= ticksPerBeat; + } + } else if (e.getSource().equals(ticksValue)) { + if (SwingUtilities.isRightMouseButton(e)) { + position += 1; + } else if (SwingUtilities.isLeftMouseButton(e) && Integer.parseInt(ticksValue.getText()) > 1) { + position -= 1; + } + } + Moosique.setEditPosition(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); +/* public void mousePressed(MouseEvent e) { + 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); + } } } public void mouseReleased(MouseEvent e) {} - } -} \ No newline at end of file +*/ } +}