]> ruin.nu Git - moosique.git/blobdiff - MooNoteProp.java
*** empty log message ***
[moosique.git] / MooNoteProp.java
index bc264865b68cf3412a77206f2ce6fcaa63301a56..e1826e304bf59d86f2170c3be9199c1536e4d21b 100644 (file)
 import javax.swing.*;
 import java.awt.*;
 import java.awt.event.*;
+import java.beans.*;
 
-/*
+/**
  * Graphical representation of a MIDI note.
  * 
  * @author  Andersson, Andreen, Lanneskog, Pehrson
  * @version 1
  */
-public class MooNoteProp extends JFrame{
+
+public class MooNoteProp extends JDialog{
 
        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 MooNoteProp (MooNote mn) {
+    public MooNoteProp(MooNote mn) {
+        super((JFrame)null, true);
                note = mn;
+        setTitle("Note properties");
+
+               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();
-       }
+    }
+
+       public static void main(String[] args){
 
-                       
+               MooNote n = new MooNote(0,0,10,20,0,30);
+               MooNoteProp prop = new MooNoteProp(n);
+               prop.setVisible(true);
+               prop = new MooNoteProp(n);
+               prop.setVisible(true);
+
+       }
 }