/**
*
* @author pquiring
*
* Created : Mar 14, 2014
*/
import java.awt.Dimension;
import java.awt.GraphicsEnvironment;
import java.awt.Rectangle;
import java.awt.event.*;
import javax.sound.midi.*;
import javaforce.*;
public class EditSettings extends javax.swing.JDialog {
/**
* Creates new form Settings
*/
public EditSettings(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
setPosition();
JF.assignHotKey(this, ok, KeyEvent.VK_ENTER);
JF.assignHotKey(this, cancel, KeyEvent.VK_ESCAPE);
listDevices();
loadSettings();
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
device = new javax.swing.JComboBox();
ok = new javax.swing.JButton();
cancel = new javax.swing.JButton();
jLabel2 = new javax.swing.JLabel();
recordMode = new javax.swing.JComboBox();
jLabel3 = new javax.swing.JLabel();
recordTrack = new javax.swing.JComboBox();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("Edit Settings");
jLabel1.setText("Recording Midi Device:");
ok.setText("OK");
ok.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
okActionPerformed(evt);
}
});
cancel.setText("Cancel");
cancel.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cancelActionPerformed(evt);
}
});
jLabel2.setText("Recording Mode:");
recordMode.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Overwrite", "Insert" }));
recordMode.setEnabled(false);
jLabel3.setText("Recording Track Mode:");
recordTrack.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Single", "Multi" }));
recordTrack.setEnabled(false);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(device, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGap(0, 0, Short.MAX_VALUE)
.addComponent(cancel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(ok))
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(recordMode, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel3)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(recordTrack, 0, 275, Short.MAX_VALUE)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(device, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(recordMode, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel3)
.addComponent(recordTrack, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 197, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(ok)
.addComponent(cancel))
.addContainerGap())
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void okActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okActionPerformed
saveSettings();
Settings.saveSettings();
dispose();
}//GEN-LAST:event_okActionPerformed
private void cancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelActionPerformed
dispose();
}//GEN-LAST:event_cancelActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton cancel;
private javax.swing.JComboBox device;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JButton ok;
private javax.swing.JComboBox recordMode;
private javax.swing.JComboBox recordTrack;
// End of variables declaration//GEN-END:variables
private boolean listDevices() {
device.removeAllItems();
MidiDevice.Info[] infos = MidiSystem.getMidiDeviceInfo();
int idx = -1;
try {
if (infos == null) throw new Exception("no midi devices found");
for(int a=0;a<infos.length;a++) {
MidiDevice midiDevice = MidiSystem.getMidiDevice(infos[a]);
if (midiDevice.getMaxTransmitters() == 0) continue;
String name = infos[a].getName();
if (name.equals(Settings.current.midiDevice)) {
idx = device.getItemCount();
}
device.addItem(name);
}
if (device.getItemCount() == 0) throw new Exception("no midi devices found");
if (idx != -1) device.setSelectedIndex(idx);
return true;
} catch (Exception e) {
JFLog.log(e);
return false;
}
}
private void loadSettings() {
//midiDevice already loaded
recordMode.setSelectedIndex(Settings.current.recordingMode);
recordTrack.setSelectedIndex(Settings.current.recordingTrack);
}
private void saveSettings() {
String midi = (String)device.getSelectedItem();
if (midi == null) midi = "";
Settings.current.midiDevice = midi;
Settings.current.recordingMode = recordMode.getSelectedIndex();
Settings.current.recordingTrack = recordTrack.getSelectedIndex();
}
private void setPosition() {
Dimension d = getSize();
Rectangle s = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds();
setLocation(s.width/2 - d.width/2, s.height/2 - d.height/2);
}
}