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
|