annotate at/ofai/music/worm/WormControlPanel.java @ 2:4c3f5bc01c97

* Import BeatRoot v0.5.7
author Chris Cannam
date Fri, 08 Oct 2010 16:11:06 +0100
parents
children
rev   line source
Chris@2 1 /* Performance Worm: Visualisation of Expressive Musical Performance
Chris@2 2 Copyright (C) 2001, 2006 by Simon Dixon
Chris@2 3
Chris@2 4 This program is free software; you can redistribute it and/or modify
Chris@2 5 it under the terms of the GNU General Public License as published by
Chris@2 6 the Free Software Foundation; either version 2 of the License, or
Chris@2 7 (at your option) any later version.
Chris@2 8
Chris@2 9 This program is distributed in the hope that it will be useful,
Chris@2 10 but WITHOUT ANY WARRANTY; without even the implied warranty of
Chris@2 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Chris@2 12 GNU General Public License for more details.
Chris@2 13
Chris@2 14 You should have received a copy of the GNU General Public License along
Chris@2 15 with this program (the file gpl.txt); if not, download it from
Chris@2 16 http://www.gnu.org/licenses/gpl.txt or write to the
Chris@2 17 Free Software Foundation, Inc.,
Chris@2 18 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Chris@2 19 */
Chris@2 20
Chris@2 21 package at.ofai.music.worm;
Chris@2 22
Chris@2 23 import javax.swing.ButtonGroup;
Chris@2 24 import javax.swing.JButton;
Chris@2 25 import javax.swing.JCheckBoxMenuItem;
Chris@2 26 import javax.swing.JMenuItem;
Chris@2 27 import javax.swing.JPanel;
Chris@2 28 import javax.swing.JPopupMenu;
Chris@2 29 import javax.swing.JRadioButtonMenuItem;
Chris@2 30
Chris@2 31 import java.awt.Component;
Chris@2 32 import java.awt.Dimension;
Chris@2 33 import java.awt.GridLayout;
Chris@2 34 import java.awt.event.ActionEvent;
Chris@2 35 import java.awt.event.ActionListener;
Chris@2 36 import java.awt.event.HierarchyBoundsListener;
Chris@2 37 import java.awt.event.HierarchyEvent;
Chris@2 38
Chris@2 39 import at.ofai.music.util.PSPrinter;
Chris@2 40
Chris@2 41
Chris@2 42 class WormControlPanel extends JPanel
Chris@2 43 implements ActionListener, HierarchyBoundsListener {
Chris@2 44
Chris@2 45 static final long serialVersionUID = 0;
Chris@2 46 protected Worm worm;
Chris@2 47 protected JPopupMenu flagMenu;
Chris@2 48 protected JRadioButtonMenuItem[] rb;
Chris@2 49 protected String[] buttonText = {
Chris@2 50 "<<x>>", "<<y>>", "^^^", "<<<", "ML >>", "Smooth", "Flags", "Play","Stop",
Chris@2 51 ">>x<<", ">>y<<", "vvv", ">>>", "<< ML", "Header", "Load", "Save","Quit"};
Chris@2 52
Chris@2 53 public WormControlPanel(Worm w) {
Chris@2 54 worm = w;
Chris@2 55 setBackground(WormConstants.buttonColor);
Chris@2 56 setLayout(new GridLayout(2, buttonText.length / 2));
Chris@2 57 for (int i = 0; i < buttonText.length; i++) {
Chris@2 58 JButton theButton = new JButton(buttonText[i]);
Chris@2 59 theButton.setBackground(WormConstants.buttonColor);
Chris@2 60 theButton.setForeground(WormConstants.buttonTextColor);
Chris@2 61 theButton.addActionListener(this);
Chris@2 62 add(theButton);
Chris@2 63 if (buttonText[i].equals("Flags")) {
Chris@2 64 flagMenu = new JPopupMenu(buttonText[i]);
Chris@2 65 JCheckBoxMenuItem scale = new JCheckBoxMenuItem("AutoScale");
Chris@2 66 scale.setBackground(WormConstants.buttonColor);
Chris@2 67 scale.setForeground(WormConstants.buttonTextColor);
Chris@2 68 scale.setSelected(true);
Chris@2 69 scale.addActionListener(this);
Chris@2 70 worm.setAutoButton(scale);
Chris@2 71 flagMenu.add(scale);
Chris@2 72 flagMenu.addSeparator();
Chris@2 73 JCheckBoxMenuItem glow = new JCheckBoxMenuItem("Glow Worm");
Chris@2 74 glow.setBackground(WormConstants.buttonColor);
Chris@2 75 glow.setForeground(WormConstants.buttonTextColor);
Chris@2 76 glow.setSelected(false);
Chris@2 77 glow.addActionListener(this);
Chris@2 78 flagMenu.add(glow);
Chris@2 79 flagMenu.addSeparator();
Chris@2 80 JCheckBoxMenuItem plots = new JCheckBoxMenuItem("Histograms");
Chris@2 81 plots.setBackground(WormConstants.buttonColor);
Chris@2 82 plots.setForeground(WormConstants.buttonTextColor);
Chris@2 83 plots.setSelected(false);
Chris@2 84 plots.addActionListener(this);
Chris@2 85 flagMenu.add(plots);
Chris@2 86 flagMenu.addSeparator();
Chris@2 87 ButtonGroup bg = new ButtonGroup();
Chris@2 88 rb = new JRadioButtonMenuItem[Worm.smoothLabels.length];
Chris@2 89 for (int j = 0; j < Worm.smoothLabels.length; j++) {
Chris@2 90 rb[j] = new JRadioButtonMenuItem(Worm.smoothLabels[j]);
Chris@2 91 rb[j].setBackground(WormConstants.buttonColor);
Chris@2 92 rb[j].setForeground(WormConstants.buttonTextColor);
Chris@2 93 rb[j].addActionListener(this);
Chris@2 94 flagMenu.add(rb[j]);
Chris@2 95 bg.add(rb[j]);
Chris@2 96 }
Chris@2 97 rb[w.getSmoothMode()].setSelected(true);
Chris@2 98 worm.setSmoothButtons(rb);
Chris@2 99 flagMenu.setInvoker(theButton);
Chris@2 100 flagMenu.addSeparator();
Chris@2 101 JMenuItem printButton = new JMenuItem("Print300");
Chris@2 102 printButton.setBackground(WormConstants.buttonColor);
Chris@2 103 printButton.setForeground(WormConstants.buttonTextColor);
Chris@2 104 printButton.addActionListener(this);
Chris@2 105 flagMenu.add(printButton);
Chris@2 106 JMenuItem printButton2 = new JMenuItem("Print600");
Chris@2 107 printButton2.setBackground(WormConstants.buttonColor);
Chris@2 108 printButton2.setForeground(WormConstants.buttonTextColor);
Chris@2 109 printButton2.addActionListener(this);
Chris@2 110 flagMenu.add(printButton2);
Chris@2 111 } else if (buttonText[i].equals("Play"))
Chris@2 112 worm.setPlayButton(theButton);
Chris@2 113 }
Chris@2 114 setSize(w.getWidth(), WormConstants.cpHeight);
Chris@2 115 setMaximumSize(new Dimension(w.getWidth(), WormConstants.cpHeight));
Chris@2 116 addHierarchyBoundsListener(this);
Chris@2 117 worm.setControlPanel(this); // for callback
Chris@2 118 } // constructor
Chris@2 119
Chris@2 120 public void actionPerformed(ActionEvent e) {
Chris@2 121 if (e.getActionCommand().equals("<<x>>"))
Chris@2 122 worm.xZoom(true);
Chris@2 123 else if (e.getActionCommand().equals(">>x<<"))
Chris@2 124 worm.xZoom(false);
Chris@2 125 else if (e.getActionCommand().equals("<<<"))
Chris@2 126 worm.xMoveRight(false);
Chris@2 127 else if (e.getActionCommand().equals(">>>"))
Chris@2 128 worm.xMoveRight(true);
Chris@2 129 else if (e.getActionCommand().equals("ML >>"))
Chris@2 130 worm.audio.ti.switchLevels(true);
Chris@2 131 else if (e.getActionCommand().equals("<< ML"))
Chris@2 132 worm.audio.ti.switchLevels(false);
Chris@2 133 else if (e.getActionCommand().equals("Play") ||
Chris@2 134 e.getActionCommand().equals("Cont"))
Chris@2 135 worm.play();
Chris@2 136 else if (e.getActionCommand().equals("Pause"))
Chris@2 137 worm.pause();
Chris@2 138 else if (e.getActionCommand().equals("Stop"))
Chris@2 139 worm.stop();
Chris@2 140 else if (e.getActionCommand().equals("<<y>>"))
Chris@2 141 worm.yZoom(true);
Chris@2 142 else if (e.getActionCommand().equals(">>y<<"))
Chris@2 143 worm.yZoom(false);
Chris@2 144 else if (e.getActionCommand().equals("vvv"))
Chris@2 145 worm.yMoveDown(true);
Chris@2 146 else if (e.getActionCommand().equals("^^^"))
Chris@2 147 worm.yMoveDown(false);
Chris@2 148 else if (e.getActionCommand().equals("Header")) {
Chris@2 149 worm.editParameters();
Chris@2 150 } else if (e.getActionCommand().equals("Smooth"))
Chris@2 151 worm.smooth();
Chris@2 152 else if (e.getActionCommand().equals("Flags")) {
Chris@2 153 flagMenu.setVisible(true);
Chris@2 154 flagMenu.setLocation(
Chris@2 155 ((Component)e.getSource()).getLocationOnScreen());
Chris@2 156 } else if (e.getActionCommand().equals("Load")) {
Chris@2 157 new WormLoadDialog(worm);
Chris@2 158 } else if (e.getActionCommand().equals("Save")) {
Chris@2 159 worm.save(new MyFileChooser().browseSave());
Chris@2 160 } else if (e.getActionCommand().equals("Quit"))
Chris@2 161 System.exit(0);
Chris@2 162 else if (e.getActionCommand().equals("AutoScale"))
Chris@2 163 worm.setAutoScaleMode(
Chris@2 164 ((JCheckBoxMenuItem)e.getSource()).isSelected());
Chris@2 165 else if (e.getActionCommand().equals("Glow Worm"))
Chris@2 166 worm.setGlow(((JCheckBoxMenuItem)e.getSource()).isSelected());
Chris@2 167 else if (e.getActionCommand().equals("Histograms"))
Chris@2 168 TempoInducer.plotFlag =
Chris@2 169 ((JCheckBoxMenuItem)e.getSource()).isSelected();
Chris@2 170 else if (e.getActionCommand().equals("Print300"))
Chris@2 171 PSPrinter.print(worm, 300);
Chris@2 172 else if (e.getActionCommand().equals("Print600"))
Chris@2 173 PSPrinter.print(worm, 600);
Chris@2 174 else
Chris@2 175 for (int i = 0; i < Worm.smoothLabels.length; i++)
Chris@2 176 if (e.getActionCommand().equals(Worm.smoothLabels[i]))
Chris@2 177 worm.setSmoothMode(i);
Chris@2 178 } // actionPerformed
Chris@2 179
Chris@2 180 public void ancestorMoved(HierarchyEvent e) {}
Chris@2 181
Chris@2 182 public void ancestorResized(HierarchyEvent e) {
Chris@2 183 setMaximumSize(new Dimension(worm.getWidth(), WormConstants.cpHeight));
Chris@2 184 setSize(worm.getWidth(), WormConstants.cpHeight);
Chris@2 185 repaint();
Chris@2 186 } // ancestorResized()
Chris@2 187
Chris@2 188 } // class WormControlPanel