import javax.swing.*;
import java.awt.*;
+import java.awt.event.*;
import javax.sound.midi.*;
+import java.beans.*;
/*
* The add dialog that pops up if the user clicks on the add track menuitem
private JTextField textfield;
private JComboBox trackList, trackLust;
private JButton okbutton, cancelbutton;
- public static final int ADD_TRACK = 1, DELETE_TRACK = 2, COPY_TRACK = 3, MOVE_TRACK = 4;
+ public static final int ADD_TRACK = 1,
+ DELETE_TRACK = 2,
+ COPY_TRACK = 3,
+ MOVE_TRACK = 4;
/*
* Creates the add dialog
setVisible(true);
break;
}
-
-
-
-
-
}
+ private MooNote note;
+ private JOptionPane optionPane;
+ private JTextField pitch;
+ private JTextField velocity;
+ private JTextField length;
+
+ /**
+ * Creates a new note preference dialog.
+ * @param mn the note that will be graphically represented
+ */
+ public MooDialog(MooNote mn) {
+ super(Moosique.getGUI(), "Note properties", false);
+ note = mn;
+ pitch = new JTextField(new Integer(note.getPitch()).toString(),3);
+ JPanel pitchpanel = new JPanel();
+ pitchpanel.add(new Label("Pitch: "));
+ pitchpanel.add(pitch);
+
+
+ velocity = new JTextField(new Integer(note.getVelocity()).toString(),3);
+ JPanel velocitypanel = new JPanel();
+ velocitypanel.add(new Label("Velocity: "));
+ velocitypanel.add(velocity);
+
+ length = new JTextField(new Integer(note.getDuration()).toString(),5);
+ JPanel lengthpanel = new JPanel();
+ lengthpanel.add(new Label("Length: "));
+ lengthpanel.add(length);
+
+ Object[] array = {"Set the note properties",
+ pitchpanel,
+ velocitypanel,
+ lengthpanel};
+
+ final String btnString1 = "Enter";
+ final String btnString2 = "Cancel";
+ Object[] options = {btnString1, btnString2};
+
+ optionPane = new JOptionPane(array,
+ JOptionPane.QUESTION_MESSAGE,
+ JOptionPane.YES_NO_OPTION,
+ null,
+ options,
+ options[0]);
+ setContentPane(optionPane);
+ setDefaultCloseOperation(DISPOSE_ON_CLOSE);
+
+ ActionListener intValidator = new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ if (e.getSource() instanceof JTextField){
+ JTextField s = (JTextField)e.getSource();
+ int num = Integer.parseInt(s.getText());
+ if (num < 0)
+ num = 0;
+ else if (num > 127 && s != length)
+ num = 127;
+ s.setText(new Integer(num).toString());
+ }
+ }
+ };
+ pitch.addActionListener(intValidator);
+ velocity.addActionListener(intValidator);
+ length.addActionListener(intValidator);
+
+ optionPane.addPropertyChangeListener(new PropertyChangeListener() {
+ public void propertyChange(PropertyChangeEvent e) {
+ String prop = e.getPropertyName();
+
+ if (isVisible()
+ && (e.getSource() == optionPane)
+ && (prop.equals(JOptionPane.VALUE_PROPERTY) ||
+ prop.equals(JOptionPane.INPUT_VALUE_PROPERTY))) {
+ Object value = optionPane.getValue();
+
+ if (value == JOptionPane.UNINITIALIZED_VALUE) {
+ //ignore reset
+ return;
+ }
+
+ // Reset the JOptionPane's value.
+ // If you don't do this, then if the user
+ // presses the same button next time, no
+ // property change event will be fired.
+ optionPane.setValue(
+ JOptionPane.UNINITIALIZED_VALUE);
+
+ if (value.equals(btnString1)) {
+ note.setPitch(Integer.parseInt(pitch.getText()));
+ note.setVelocity(Integer.parseInt(velocity.getText()));
+ note.setDuration(Integer.parseInt(length.getText()));
+
+ setVisible(false);
+ } else { // user closed dialog or clicked cancel
+ setVisible(false);
+ }
+ }
+ }
+ });
+ pack();
+ }
}