/*
* Created on Jun 30, 2007
*
* Copyright (c) 2006-2007 Jens Gulden
*
* http://www.frinika.com
*
* This file is part of Frinika.
*
* Frinika is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
* Frinika is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with Frinika; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package com.frinika.global;
import com.frinika.project.FrinikaAudioSystem;
import com.frinika.gui.util.PropertiesEditor;
import java.util.Collection;
import java.util.Vector;
import com.frinika.project.gui.ProjectFrame;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
/**
* Content panel for the global configuration dialog. This dialog includes all
* gui-elements for the global options dialog.
*
* As a special thing, the gui-elements just need to be named appropriately
* and be declared non-private, then bound to appropriate config-fields in
* FrinikaConfig. NO ACTIVE CODE FOR GETTING / SETTING options from
* the Config class needs to be implemented, as this is done by
* DefaultOptionsBinder.
*
* This has been initially created as a gui-form with Netbeans 5.5 GUI-builder,
* but as this is a shared class, this isn't likely to be kept. So feel free
* to add code manually.
*
* Thank you I have started to add code manually PJL.
*
* @see DefaultOptionsBinder
* @author Jens Gulden
*
*
*/
public class ConfigDialogPanel extends JPanel {
private ProjectFrame frame;
private PropertiesEditor audioPropertiesEditor;
private JLabel jLabelAudioDirectory;
JTextField textfieldAudioDirectory;
private JButton buttonPickAudioDirectory;
private JLabel jLabelSoundFontDirectory;
JTextField textfieldSoundFontDirectory;
private JButton buttonPickSoundFontDirectory;
private JLabel jLabelPatchNameDirectory;
JTextField textfieldPatchNameDirectory;
private JButton buttonPickPatchNameDirectory;
private JLabel jLabelDefaultSoundFont;
JTextField textfieldDefaultSoundFont;
private JButton buttonPickDefaultSoundFont;
/** Creates new form ConfigDialogPanel */
public ConfigDialogPanel(ProjectFrame frame) {
this.frame = frame;
initComponents();
audioPropertiesEditor = new PropertiesEditor(FrinikaConfig.getProperties());
audioPropertiesPanel.add(audioPropertiesEditor);
//textfieldBufferSize.setMinimumSize(new Dimension(50, textfieldBufferSize.getMinimumSize().height));
// not implemented yet:
audioPanel.remove(labelOutputDevice);
audioPanel.remove(comboboxOutputDevice);
audioPanel.remove(buttonStopOutputDevice);
audioPanel.remove(labelChannels);
audioPanel.remove(comboboxChannels);
audioPanel.remove(labelUnderrunTolerance);
audioPanel.remove(spinnerUnderrunTolerance);
audioPanel.remove(labelBits);
audioPanel.remove(comboboxBits);
audioPanel.remove(labelPriority);
audioPanel.remove(spinnerPriority);
userInterfacePanel.remove(labelRedrawRate);
userInterfacePanel.remove(comboboxRedrawRate);
refreshMidiInDevicesList();
// refreshAudioDevicesList();
}
private void refreshMidiInDevicesList() {
final Vector<String> v = FrinikaConfig.getMidiInDeviceList();
listInputDevices.setModel(new javax.swing.AbstractListModel() {
public int getSize() { return v.size(); }
public Object getElementAt(int i) { return v.elementAt(i); }
});
}
private void refreshAudioDevicesList() {
Collection<String> v = FrinikaConfig.getAvailableAudioDevices();
String[] ss = new String[v.size()];
int i = 0;
for (String s : v) {
ss[i++] = s;
}
comboboxOutputDevice.setModel(new DefaultComboBoxModel(ss));
}
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
tabbedPane = new javax.swing.JTabbedPane();
audioPanel = new javax.swing.JPanel();
labelOutputDevice = new javax.swing.JLabel();
comboboxOutputDevice = new javax.swing.JComboBox();
buttonStopOutputDevice = new javax.swing.JButton();
jLabel2 = new javax.swing.JLabel();
comboboxSampleRate = new javax.swing.JComboBox();
jLabel3 = new javax.swing.JLabel();
spinnerBufferSize = new javax.swing.JSpinner();
// PJL
jLabel3a = new javax.swing.JLabel();
spinnerTicksPerQuarter = new javax.swing.JSpinner();
jLabel3b = new javax.swing.JLabel();
spinnerSequencerPriority = new javax.swing.JSpinner();
//
jLabel4 = new javax.swing.JLabel();
labelChannels = new javax.swing.JLabel();
comboboxChannels = new javax.swing.JComboBox();
labelUnderrunTolerance = new javax.swing.JLabel();
spinnerUnderrunTolerance = new javax.swing.JSpinner();
labelBits = new javax.swing.JLabel();
comboboxBits = new javax.swing.JComboBox();
labelPriority = new javax.swing.JLabel();
spinnerPriority = new javax.swing.JSpinner();
jSeparator2 = new javax.swing.JSeparator();
audioPropertiesPanel = new javax.swing.JPanel();
jSeparator1 = new javax.swing.JSeparator();
jLabel7 = new javax.swing.JLabel();
spinnerOutputLatency = new javax.swing.JSpinner();
buttonMeasureLatency = new javax.swing.JButton();
jSeparator5 = new javax.swing.JSeparator();
checkboxUseDirectMonitoring = new javax.swing.JCheckBox();
checkboxUseMultiplexedJavasoundServer = new javax.swing.JCheckBox();
checkboxAutoconnectJack = new javax.swing.JCheckBox();
checkboxBigEndian = new javax.swing.JCheckBox();
midiPanel = new javax.swing.JPanel();
jLabel8 = new javax.swing.JLabel();
jScrollPane1 = new javax.swing.JScrollPane();
listInputDevices = new javax.swing.JList();
jPanel6 = new javax.swing.JPanel();
jPanel5 = new javax.swing.JPanel();
buttonAddInputDevice = new javax.swing.JButton();
buttonRemoveInputDevice = new javax.swing.JButton();
userInterfacePanel = new javax.swing.JPanel();
labelRedrawRate = new javax.swing.JLabel();
comboboxRedrawRate = new javax.swing.JComboBox();
jLabel10 = new javax.swing.JLabel();
spinnerMouseDragSpeedSpinners = new javax.swing.JSpinner();
jSeparator4 = new javax.swing.JSeparator();
jLabel11 = new javax.swing.JLabel();
textfieldFontTextLane = new javax.swing.JTextField();
buttonPickFontTextLane = new javax.swing.JButton();
jSeparator3 = new javax.swing.JSeparator();
checkboxOpenMaximizedWindow = new javax.swing.JCheckBox();
directoriesPanel = new javax.swing.JPanel();
jLabel14 = new javax.swing.JLabel();
textfieldGroovePatternsDirectory = new javax.swing.JTextField();
buttonPickGroovePatternsDirectory = new javax.swing.JButton();
jLabel15 = new javax.swing.JLabel();
textfieldScriptsDirectory = new javax.swing.JTextField();
buttonPickScriptsDirectory = new javax.swing.JButton();
// PJL
jLabelAudioDirectory = new javax.swing.JLabel();
textfieldAudioDirectory = new javax.swing.JTextField();
buttonPickAudioDirectory = new javax.swing.JButton();
jLabelSoundFontDirectory = new javax.swing.JLabel();
textfieldSoundFontDirectory = new javax.swing.JTextField();
buttonPickSoundFontDirectory = new javax.swing.JButton();
jLabelPatchNameDirectory = new javax.swing.JLabel();
textfieldPatchNameDirectory = new javax.swing.JTextField();
buttonPickPatchNameDirectory = new javax.swing.JButton();
jLabelDefaultSoundFont = new javax.swing.JLabel();
textfieldDefaultSoundFont = new javax.swing.JTextField();
buttonPickDefaultSoundFont = new javax.swing.JButton();
//----
setLayout(new java.awt.BorderLayout());
audioPanel.setLayout(new java.awt.GridBagLayout());
labelOutputDevice.setText("Output Device:");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
audioPanel.add(labelOutputDevice, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
audioPanel.add(comboboxOutputDevice, gridBagConstraints);
buttonStopOutputDevice.setText("Stop");
buttonStopOutputDevice.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
buttonStopOutputDeviceActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
audioPanel.add(buttonStopOutputDevice, gridBagConstraints);
jLabel2.setText("Sample Rate:");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
audioPanel.add(jLabel2, gridBagConstraints);
comboboxSampleRate.setEditable(true);
comboboxSampleRate.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "48000", "44100", "22050" }));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
audioPanel.add(comboboxSampleRate, gridBagConstraints);
jLabel3.setText("Buffer Size:");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
audioPanel.add(jLabel3, gridBagConstraints);
spinnerBufferSize.setModel(new javax.swing.SpinnerNumberModel(512, 0, 9999, 1));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
audioPanel.add(spinnerBufferSize, gridBagConstraints);
jLabel4.setText("msec");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
audioPanel.add(jLabel4, gridBagConstraints);
labelChannels.setText("Channels:");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
audioPanel.add(labelChannels, gridBagConstraints);
comboboxChannels.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "2 Stereo", "1 Mono" }));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
audioPanel.add(comboboxChannels, gridBagConstraints);
labelUnderrunTolerance.setText("Underrun Tolerance:");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
audioPanel.add(labelUnderrunTolerance, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
audioPanel.add(spinnerUnderrunTolerance, gridBagConstraints);
labelBits.setText("Bits:");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
audioPanel.add(labelBits, gridBagConstraints);
comboboxBits.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "16", "24" }));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
audioPanel.add(comboboxBits, gridBagConstraints);
labelPriority.setText("Priority:");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
audioPanel.add(labelPriority, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
audioPanel.add(spinnerPriority, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
audioPanel.add(jSeparator2, gridBagConstraints);
audioPropertiesPanel.setLayout(new java.awt.BorderLayout());
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
audioPanel.add(audioPropertiesPanel, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
audioPanel.add(jSeparator1, gridBagConstraints);
jLabel7.setText("Output Latency (samples):");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
audioPanel.add(jLabel7, gridBagConstraints);
spinnerOutputLatency.setModel(new javax.swing.SpinnerNumberModel(0, 0, 9999, 1));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
audioPanel.add(spinnerOutputLatency, gridBagConstraints);
buttonMeasureLatency.setText("Measure latency...");
buttonMeasureLatency.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
buttonMeasureLatencyActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
audioPanel.add(buttonMeasureLatency, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
audioPanel.add(jSeparator5, gridBagConstraints);
checkboxUseDirectMonitoring.setText("Use Direct Monitoring");
checkboxUseDirectMonitoring.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
checkboxUseDirectMonitoring.setMargin(new java.awt.Insets(0, 0, 0, 0));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
audioPanel.add(checkboxUseDirectMonitoring, gridBagConstraints);
checkboxUseMultiplexedJavasoundServer.setText("Use Multiplexed Javasound Server (Requires Restart)");
checkboxUseMultiplexedJavasoundServer.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
checkboxUseMultiplexedJavasoundServer.setMargin(new java.awt.Insets(0, 0, 0, 0));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
audioPanel.add(checkboxUseMultiplexedJavasoundServer, gridBagConstraints);
checkboxAutoconnectJack.setText("Autoconnect Jack (Requires Restart)");
checkboxAutoconnectJack.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
checkboxAutoconnectJack.setMargin(new java.awt.Insets(0, 0, 0, 0));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
audioPanel.add(checkboxAutoconnectJack, gridBagConstraints);
checkboxBigEndian.setText("Big Endian");
checkboxBigEndian.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
checkboxBigEndian.setMargin(new java.awt.Insets(0, 0, 0, 0));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
audioPanel.add(checkboxBigEndian, gridBagConstraints);
tabbedPane.addTab("Audio", audioPanel);
midiPanel.setLayout(new java.awt.GridBagLayout());
jLabel8.setText("Input Devices:");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
midiPanel.add(jLabel8, gridBagConstraints);
jScrollPane1.setViewportView(listInputDevices);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.weightx = 0.5;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
midiPanel.add(jScrollPane1, gridBagConstraints);
jPanel6.setLayout(null);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.weightx = 0.5;
midiPanel.add(jPanel6, gridBagConstraints);
jPanel5.setLayout(new java.awt.BorderLayout());
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
midiPanel.add(jPanel5, gridBagConstraints);
buttonAddInputDevice.setText("Add");
buttonAddInputDevice.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
buttonAddInputDeviceActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
midiPanel.add(buttonAddInputDevice, gridBagConstraints);
buttonRemoveInputDevice.setText("Remove");
buttonRemoveInputDevice.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
buttonRemoveInputDeviceActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
midiPanel.add(buttonRemoveInputDevice, gridBagConstraints);
// PJL
jLabel3a.setText("Default Ticks Per Beat:");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
midiPanel.add(jLabel3a, gridBagConstraints);
spinnerTicksPerQuarter.setModel(new javax.swing.SpinnerNumberModel(FrinikaConfig.TICKS_PER_QUARTER, 0, 9999, 1));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
midiPanel.add(spinnerTicksPerQuarter, gridBagConstraints);
//
jLabel3b.setText("Seqeuncer Priority:");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx=0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
midiPanel.add(jLabel3b, gridBagConstraints);
gridBagConstraints.gridx=1;
spinnerSequencerPriority.setModel(new javax.swing.SpinnerNumberModel(0, 0, 60, 1));
midiPanel.add(spinnerSequencerPriority, gridBagConstraints);
// ---
tabbedPane.addTab("MIDI", midiPanel);
userInterfacePanel.setLayout(new java.awt.GridBagLayout());
labelRedrawRate.setText("Redraw Rate (jumps):");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
userInterfacePanel.add(labelRedrawRate, gridBagConstraints);
comboboxRedrawRate.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Disable when playing", "1" }));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
userInterfacePanel.add(comboboxRedrawRate, gridBagConstraints);
jLabel10.setText("Mouse drag speed on number-spinners:");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
userInterfacePanel.add(jLabel10, gridBagConstraints);
spinnerMouseDragSpeedSpinners.setModel(new javax.swing.SpinnerNumberModel(2.0, 0.1, 10.0, 0.1));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
userInterfacePanel.add(spinnerMouseDragSpeedSpinners, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
userInterfacePanel.add(jSeparator4, gridBagConstraints);
jLabel11.setText("Font in Text lanes:");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
userInterfacePanel.add(jLabel11, gridBagConstraints);
textfieldFontTextLane.setText("Arial,8,plain");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.weightx = 0.5;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 0);
userInterfacePanel.add(textfieldFontTextLane, gridBagConstraints);
buttonPickFontTextLane.setText("Pick Font...");
buttonPickFontTextLane.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
buttonPickFontTextLaneActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
userInterfacePanel.add(buttonPickFontTextLane, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
userInterfacePanel.add(jSeparator3, gridBagConstraints);
checkboxOpenMaximizedWindow.setText("Open maximized window");
checkboxOpenMaximizedWindow.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
checkboxOpenMaximizedWindow.setMargin(new java.awt.Insets(0, 0, 0, 0));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
userInterfacePanel.add(checkboxOpenMaximizedWindow, gridBagConstraints);
tabbedPane.addTab("User Interface", userInterfacePanel);
// Directories panel ......................
directoriesPanel.setLayout(new java.awt.GridBagLayout());
jLabel14.setText("Groove-Patterns Storage Directory:");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
directoriesPanel.add(jLabel14, gridBagConstraints);
textfieldGroovePatternsDirectory.setText("~/frinika/groove-patterns/");
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.gridx=1;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 0);
directoriesPanel.add(textfieldGroovePatternsDirectory, gridBagConstraints);
buttonPickGroovePatternsDirectory.setText("Pick Directory...");
buttonPickGroovePatternsDirectory.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
buttonPickGroovePatternsDirectoryActionPerformed(evt);
}
});
gridBagConstraints.gridx=2;
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
directoriesPanel.add(buttonPickGroovePatternsDirectory, gridBagConstraints);
//----------------------------- SCRIPTS
jLabel15.setText("JavaScript Storage Directory:");
gridBagConstraints.gridx=0;
gridBagConstraints.gridy=1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
directoriesPanel.add(jLabel15, gridBagConstraints);
textfieldScriptsDirectory.setText("~/frinika/scripts/");
gridBagConstraints.gridx=1;
//gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.weightx = 0.5;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 0);
directoriesPanel.add(textfieldScriptsDirectory, gridBagConstraints);
buttonPickScriptsDirectory.setText("Pick Directory...");
buttonPickScriptsDirectory.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
buttonPickScriptsDirectoryActionPerformed(evt);
}
});
gridBagConstraints.gridx=2;
// gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
directoriesPanel.add(buttonPickScriptsDirectory, gridBagConstraints);
// PJL AUDIO -----------------------------------------------------------------------------
jLabelAudioDirectory.setText("Audio Storage Directory:");
gridBagConstraints.gridx=0;
gridBagConstraints.gridy=2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
directoriesPanel.add(jLabelAudioDirectory, gridBagConstraints);
textfieldAudioDirectory.setText("~/frinika/audio/");
// gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx=1;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.weightx = 0.5;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 0);
directoriesPanel.add(textfieldAudioDirectory, gridBagConstraints);
buttonPickAudioDirectory.setText("Pick Directory...");
buttonPickAudioDirectory.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
buttonPickAudioDirectoryActionPerformed(evt);
}
});
gridBagConstraints.gridx=2;
//gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
directoriesPanel.add(buttonPickAudioDirectory, gridBagConstraints);
//---------------------- SOUND FONT
jLabelSoundFontDirectory.setText("Soundfont Storage Directory:");
gridBagConstraints.gridx=0;
gridBagConstraints.gridy=3;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
directoriesPanel.add(jLabelSoundFontDirectory, gridBagConstraints);
textfieldSoundFontDirectory.setText("~/frinika/soundfont/");
// gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx=1;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.weightx = 0.5;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 0);
directoriesPanel.add(textfieldSoundFontDirectory, gridBagConstraints);
buttonPickSoundFontDirectory.setText("Pick Directory...");
buttonPickSoundFontDirectory.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
buttonPickSoundFontDirectoryActionPerformed(evt);
}
});
gridBagConstraints.gridx=2;
//gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
directoriesPanel.add(buttonPickSoundFontDirectory, gridBagConstraints);
// -- PATCH NAME -------------------------------------------------------------------------------------------------------
jLabelPatchNameDirectory.setText("PatchNames Directory:");
gridBagConstraints.gridx=0;
gridBagConstraints.gridy++;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
directoriesPanel.add(jLabelPatchNameDirectory, gridBagConstraints);
textfieldPatchNameDirectory.setText("~/frinika/patchname/");
// gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx=1;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.weightx = 0.5;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 0);
directoriesPanel.add(textfieldPatchNameDirectory, gridBagConstraints);
buttonPickPatchNameDirectory.setText("Pick Directory...");
buttonPickPatchNameDirectory.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
buttonPickDefaultPatchNameActionDirectoryPerformed(evt);
}
});
gridBagConstraints.gridx=2;
//gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
directoriesPanel.add(buttonPickPatchNameDirectory, gridBagConstraints);
// --- DEFAULT SOUND FONT DIR --------------------------------------------------------------
jLabelDefaultSoundFont.setText("Default Soundfont:");
gridBagConstraints.gridx=0;
gridBagConstraints.gridy++;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
directoriesPanel.add(jLabelDefaultSoundFont, gridBagConstraints);
textfieldDefaultSoundFont.setText("~/frinika/soundfont/8MBGMSFX.SF2");
// gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx=1;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.weightx = 0.5;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 0);
directoriesPanel.add(textfieldDefaultSoundFont, gridBagConstraints);
buttonPickDefaultSoundFont.setText("Pick default Soundfont...");
buttonPickDefaultSoundFont.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
buttonPickDefaultSoundFontActionPerformed(evt);
}
});
gridBagConstraints.gridx=2;
//gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
directoriesPanel.add(buttonPickDefaultSoundFont, gridBagConstraints);
//------------------------------------------------------------------------------------------------
tabbedPane.addTab("Directories", directoriesPanel);
add(tabbedPane, java.awt.BorderLayout.CENTER);
}// </editor-fold>
private void buttonStopOutputDeviceActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonStopOutputDeviceActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_buttonStopOutputDeviceActionPerformed
private void buttonMeasureLatencyActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonMeasureLatencyActionPerformed
FrinikaAudioSystem.latencyMeasureSet();
}//GEN-LAST:event_buttonMeasureLatencyActionPerformed
private void buttonAddInputDeviceActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonAddInputDeviceActionPerformed
// add a new midi in device
Collection<String> v = FrinikaConfig.getAvailableMidiInDevices();
String[] a = new String[v.size()];
int i = 0;
for (String s : v) {
a[i++] = s;
}
String inDev = (String) JOptionPane.showInputDialog(null, "Select midi input device", "Input", JOptionPane.INFORMATION_MESSAGE, null, a, a[0]);
if (inDev == null) {
return;
}
Vector<String> vv = FrinikaConfig.getMidiInDeviceList();
vv.add(inDev);
FrinikaConfig.setMidiInDeviceList(vv);
refreshMidiInDevicesList();
}//GEN-LAST:event_buttonAddInputDeviceActionPerformed
private void buttonRemoveInputDeviceActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonRemoveInputDeviceActionPerformed
// remove currently selected midi input device
String device = listInputDevices.getSelectedValue().toString();
if (device != null) {
Vector v = FrinikaConfig.getMidiInDeviceList();
v.remove(device);
FrinikaConfig.setMidiInDeviceList(v);
refreshMidiInDevicesList();
}
}//GEN-LAST:event_buttonRemoveInputDeviceActionPerformed
private void buttonPickAudioDirectoryActionPerformed(java.awt.event.ActionEvent evt) {
FrinikaConfig.pickDirectory(frame, textfieldAudioDirectory);
}
private void buttonPickSoundFontDirectoryActionPerformed(java.awt.event.ActionEvent evt) {
FrinikaConfig.pickDirectory(frame, textfieldSoundFontDirectory);
}
private void buttonPickDefaultSoundFontActionPerformed(java.awt.event.ActionEvent evt) {
FrinikaConfig.pickFont(frame, textfieldDefaultSoundFont);
}
private void buttonPickDefaultPatchNameActionDirectoryPerformed(java.awt.event.ActionEvent evt) {
FrinikaConfig.pickDirectory(frame, textfieldPatchNameDirectory);
}
private void buttonPickScriptsDirectoryActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonPickScriptsDirectoryActionPerformed
FrinikaConfig.pickDirectory(frame, textfieldScriptsDirectory);
}//GEN-LAST:event_buttonPickScriptsDirectoryActionPerformed
private void buttonPickGroovePatternsDirectoryActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonPickGroovePatternsDirectoryActionPerformed
FrinikaConfig.pickDirectory(frame, textfieldGroovePatternsDirectory);
}//GEN-LAST:event_buttonPickGroovePatternsDirectoryActionPerformed
private void buttonPickFontTextLaneActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonPickFontTextLaneActionPerformed
FrinikaConfig.pickFont(frame, textfieldFontTextLane);
}//GEN-LAST:event_buttonPickFontTextLaneActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JPanel audioPanel;
private javax.swing.JPanel audioPropertiesPanel;
private javax.swing.JButton buttonAddInputDevice;
private javax.swing.JButton buttonMeasureLatency;
private javax.swing.JButton buttonPickFontTextLane;
javax.swing.JButton buttonPickGroovePatternsDirectory;
javax.swing.JButton buttonPickScriptsDirectory;
private javax.swing.JButton buttonRemoveInputDevice;
private javax.swing.JButton buttonStopOutputDevice;
javax.swing.JCheckBox checkboxAutoconnectJack;
javax.swing.JCheckBox checkboxBigEndian;
javax.swing.JCheckBox checkboxOpenMaximizedWindow;
javax.swing.JCheckBox checkboxUseDirectMonitoring;
javax.swing.JCheckBox checkboxUseMultiplexedJavasoundServer;
javax.swing.JComboBox comboboxBits;
javax.swing.JComboBox comboboxChannels;
javax.swing.JComboBox comboboxOutputDevice;
javax.swing.JComboBox comboboxRedrawRate;
javax.swing.JComboBox comboboxSampleRate;
private javax.swing.JPanel directoriesPanel;
private javax.swing.JLabel jLabel10;
private javax.swing.JLabel jLabel11;
private javax.swing.JLabel jLabel14;
private javax.swing.JLabel jLabel15;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel3a; // PJL
private javax.swing.JLabel jLabel3b; // PJL
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
private javax.swing.JPanel jPanel5;
private javax.swing.JPanel jPanel6;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JSeparator jSeparator1;
private javax.swing.JSeparator jSeparator2;
private javax.swing.JSeparator jSeparator3;
private javax.swing.JSeparator jSeparator4;
private javax.swing.JSeparator jSeparator5;
private javax.swing.JLabel labelBits;
private javax.swing.JLabel labelChannels;
private javax.swing.JLabel labelOutputDevice;
private javax.swing.JLabel labelPriority;
private javax.swing.JLabel labelRedrawRate;
private javax.swing.JLabel labelUnderrunTolerance;
private javax.swing.JList listInputDevices;
private javax.swing.JPanel midiPanel;
javax.swing.JSpinner spinnerBufferSize;
javax.swing.JSpinner spinnerTicksPerQuarter; // PJL
javax.swing.JSpinner spinnerSequencerPriority; // PJL
javax.swing.JSpinner spinnerMouseDragSpeedSpinners;
javax.swing.JSpinner spinnerOutputLatency;
javax.swing.JSpinner spinnerPriority;
javax.swing.JSpinner spinnerUnderrunTolerance;
javax.swing.JTabbedPane tabbedPane;
javax.swing.JTextField textfieldFontTextLane;
javax.swing.JTextField textfieldGroovePatternsDirectory;
javax.swing.JTextField textfieldScriptsDirectory;
private javax.swing.JPanel userInterfacePanel;
// End of variables declaration//GEN-END:variables
}