public class MooDialog extends JDialog {
+ private Container pane;
+ private Track[] tracks;
+
private JLabel labelA, labelB, labelC, labelD, labelE, labelF, labelG, labelH;
private JTextField textFieldA, textFieldB, textFieldC, textFieldD, textFieldE,
textFieldF, textFieldG, textFieldH, textFieldI, textFieldJ,
SET_TEMPO = 9,
PREFERENCES = 10,
TRANSPOSE = 11,
- SCALE_VELOCITY = 12;
+ SCALE_VELOCITY = 12,
+ RECORD = 13;
+ public static final String[] noteSizes = {"Whole", "Half", "Quarter", "Eighth", "Sixteenth"};
/**
* Constructor of the dialogs.
public MooDialog(int type) {
super(Moosique.getGUI(), false);
- Container pane = getContentPane();
+ pane = getContentPane();
pane.setLayout(null);
- Track[] tracks = Moosique.getSequence().getTracks();
+ tracks = Moosique.getSequence().getTracks();
switch (type) {
- case ADD_TRACK: makeAddDialog(pane, tracks); break;
- case DELETE_TRACK: makeDelDialog(pane, tracks); break;
- case COPY_TRACK: makeCopyDialog(pane, tracks); break;
- case MOVE_TRACK: makeMoveDialog(pane, tracks); break;
- case SET_POSITION: makeSetPositionDialog(pane); break;
- case MANUAL: makeTextDialog(pane, "Manual.txt"); break;
- case INSERT_MEASURE: makeInsertMeasureDialog(pane); break;
- case DELETE_MEASURE: makeDeleteMeasureDialog(pane); break;
- case SET_TEMPO: makeSetTempoDialog(pane); break;
- case PREFERENCES: makePrefsDialog(pane); break;
- case TRANSPOSE: makeTransposeDialog(pane, tracks); break;
- case SCALE_VELOCITY: makeScaleVelocityDialog(pane, tracks); break;
+ case ADD_TRACK: makeAddDialog(); break;
+ case DELETE_TRACK: makeDelDialog(); break;
+ case COPY_TRACK: makeCopyDialog(); break;
+ case MOVE_TRACK: makeMoveDialog(); break;
+ case SET_POSITION: makeSetPositionDialog(); break;
+ case MANUAL: makeTextDialog("User Manual", "Manual.txt", 30, 95); break;
+ case INSERT_MEASURE: makeInsertMeasureDialog(); break;
+ case DELETE_MEASURE: makeDeleteMeasureDialog(); break;
+ case SET_TEMPO: makeSetTempoDialog(); break;
+ case PREFERENCES: makePrefsDialog(); break;
+ case TRANSPOSE: makeTransposeDialog(); break;
+ case SCALE_VELOCITY: makeScaleVelocityDialog(); break;
+ case RECORD: makeRecordDialog(); break;
}
}
* @param pane The container to put the dialog in.
* @param tracks A array containing miditracks.
*/
- private void makeAddDialog(Container pane, Track[] tracks) {
+ private void makeAddDialog() {
setTitle("Add track");
// create the contents of the dialog and add to container
labelA = new JLabel("Name of track", JLabel.CENTER);
pane.add(labelB);
// list of where to add track
trackListA = new JComboBox();
- for (int i = 1; i <= tracks.length; i++) trackListA.addItem("Track " + i);
+ for (int i = 1; i < tracks.length; i++) trackListA.addItem("Track " + i);
pane.add(trackListA);
// ok and cancel button
cancelButton = new JButton("Cancel");
* @param pane The container to put the dialog in.
* @param tracks A array containing miditracks.
*/
- private void makeDelDialog(Container pane, Track[] tracks) {
+ private void makeDelDialog() {
setTitle("Delete track");
// create the contents of the dialog and add to container
labelB = new JLabel("Delete track", JLabel.CENTER);
* @param pane The container to put the dialog in.
* @param tracks A array containing miditracks.
*/
- private void makeCopyDialog(Container pane, Track[] tracks) {
+ private void makeCopyDialog() {
setTitle("Copy Track");
// create the contents of the dialog and add to container
labelA = new JLabel("Track to copy", JLabel.CENTER);
* @param pane The container to put the dialog in.
* @param tracks A array containing miditracks.
*/
- private void makeMoveDialog(Container pane, Track[] tracks) {
+ private void makeMoveDialog() {
setTitle("Move track");
// create the contents of the dialog and add to container
labelA = new JLabel("Track to move", JLabel.CENTER);
* @param pane The container to put the dialog in.
* @param tracks A array containing miditracks.
*/
- private void makeSetPositionDialog(Container pane) {
+ private void makeSetPositionDialog() {
setTitle("Set edit position");
// create the contents of the dialog and add to container
* Builds the insert measure popupdialog.
* @param pane The container to put the dialog in.
*/
- private void makeInsertMeasureDialog(Container pane){
+ private void makeInsertMeasureDialog(){
setTitle("Insert Measure");
// create the contents of the dialog and add to container
labelA = new JLabel("Insert at:", JLabel.RIGHT);
* Builds the delete measure popupdialog.
* @param pane The container to put the dialog in.
*/
- private void makeDeleteMeasureDialog(Container pane) {
+ private void makeDeleteMeasureDialog() {
setTitle("Delete Measure");
// create the contents of the dialog and add to container
labelA = new JLabel("Delete at:", JLabel.RIGHT);
* Builds the set tempo dialog.
* @param pane The container to put the dialog in.
*/
- private void makeSetTempoDialog(Container pane) {
+ private void makeSetTempoDialog() {
setTitle("Set tempo");
// create contents of dialog and add to container
// track edit-intervall labels
* @param pane The container to put the dialog in.
* @param tracks A array containing miditracks.
*/
- private void makeTransposeDialog(Container pane, Track[] tracks) {
+ private void makeTransposeDialog() {
setTitle("Transpose");
// create contents of dialog and add to container
// track edit-intervall labels
* @param pane The container to put the dialog in.
* @param tracks A array containing miditracks.
*/
- private void makeScaleVelocityDialog(Container pane, Track[] tracks) {
+ private void makeScaleVelocityDialog() {
setTitle("Scale velocity");
// create contents of dialog and add to container
// track edit-intervall labels
}
/** creates the "User manual dialog" that displays a textfile
*/
- private void makeTextDialog(Container pane, String filename) {
- setTitle("User Manual");
+ private void makeTextDialog(String title, String filename, int rows, int columns) {
+ setTitle(title);
pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));
File manual = new File(filename);
String s;
br.read(chars, 0, (int)manual.length());
s = new String(chars);
} catch (Exception ex) {
- s = "Manual not found";
+ s = "File not found";
}
- pane.add(new JScrollPane(new JTextArea(s, 30, 95)));
+ JTextArea text = new JTextArea(s, rows, columns);
+ text.setLineWrap(true);
+ text.setWrapStyleWord(true);
+ text.setEnabled(false);
+ text.setDisabledTextColor(Color.black);
+ pane.add(new JScrollPane(text));
Action close = new AbstractAction("Close") {
public void actionPerformed(ActionEvent ae) {
setVisible(false);
setVisible(true);
}
- private void makePrefsDialog(Container pane) {
+ private void makePrefsDialog() {
/*
MidiDevice.Info[] devInfo = MidiSystem.getMidiDeviceInfo();
for (int i = 0; i < devInfo.length; i++) {
*/
}
+ private void makeRecordDialog() {
+ setTitle("Record");
+
+ JPanel panel = new JPanel();
+ panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
+
+ // Creating track combo box,
+ panel.add(new Label("Track: "));
+ trackListA = new JComboBox();
+ for (int i = 1; i < tracks.length; i++) trackListA.addItem("Track " + i);
+ trackListA.setFont(Moosique.getGUI().FONT);
+ panel.add(trackListA);
+
+ // Creating channel combo box
+ panel.add(new Label("Channel: "));
+ JComboBox channelList = new JComboBox();
+ for (int i = 1; i <= 16; i++) channelList.addItem("Channel " + i);
+ channelList.setFont(Moosique.getGUI().FONT);
+ panel.add(channelList);
+
+ // Creating quantize pane
+ JLayeredPane quantizePane = new JLayeredPane();
+ quantizePane.setBorder(BorderFactory.createTitledBorder("Quantize"));
+ JCheckBox quantizeBox = new JCheckBox("Quantize");
+ quantizePane.add(quantizeBox);
+ JLabel quantizeSizeLabel = new JLabel("Resolution");
+ JComboBox quantizeSize = new JComboBox(noteSizes);
+ quantizeSize.setSelectedIndex(4);
+ quantizeSize.setEnabled(false);
+ quantizeSize.setFont(Moosique.getGUI().FONT);
+ quantizeSizeLabel.setLabelFor(quantizeSize);
+ quantizePane.add(quantizeSizeLabel);
+ quantizePane.add(quantizeSize);
+ JCheckBox quantizeLocationBox = new JCheckBox("Affect location", true);
+ quantizeLocationBox.setEnabled(false);
+ quantizePane.add(quantizeLocationBox);
+ JCheckBox quantizeDurationBox = new JCheckBox("Affect duration", true);
+ quantizeDurationBox.setEnabled(false);
+ quantizePane.add(quantizeDurationBox);
+ panel.add(quantizePane);
+
+ // Creating buttons
+ final String btnString1 = "Record!";
+ final String btnString2 = "Cancel";
+ Object[] options = {btnString1, btnString2};
+
+ // Creating option pane
+ optionPane = new JOptionPane(panel,
+ JOptionPane.QUESTION_MESSAGE,
+ JOptionPane.YES_NO_OPTION,
+ null,
+ options,
+ options[0]);
+ 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) return;
+ optionPane.setValue(JOptionPane.UNINITIALIZED_VALUE);
+
+ if (value.equals(btnString1)) {
+ // boolean[] quantizers = {quantize, location, duration};
+ Track track = tracks[trackListA.getSelectedIndex() + 1];
+ int channel = Moosique.getGUI().getView().getTrackView(track).getTitle().getChannel();
+ boolean[] quantizers = {false, false, false};
+ int resolution = Moosique.SIXTEENTH_NOTE;
+ Moosique.record(track, channel, quantizers, resolution);
+ }
+ setVisible(false);
+ }
+ }
+ });
+ setContentPane(optionPane);
+ setDefaultCloseOperation(DISPOSE_ON_CLOSE);
+
+ setResizable(false);
+ pack();
+ setLocationRelativeTo(Moosique.getGUI());
+ setVisible(true);
+ }
+
private MooNote note;
private JOptionPane optionPane;
private JTextField pitch;
*/
public MooDialog(MooNote mn) {
super(Moosique.getGUI(), "Note properties", true);
+
+ note = mn;
+
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(3,2));
- note = mn;
+
pitch = new JTextField(new Integer(note.getPitch()).toString(),3);
panel.add(new Label("Pitch: "));
panel.add(pitch);
}
});
pack();
+ setLocationRelativeTo(Moosique.getGUI());
setVisible(true);
}
}