/*
* Created on 20.5.2007
*
* Copyright (c) 2006-2007 Karl Helgason
*
* 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.settings;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsEnvironment;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Toolkit;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JSpinner;
import javax.swing.JTextField;
public class SettingsDialog extends JDialog {
private static final long serialVersionUID = 1L;
public static void main(String[] args)
{
new SettingsDialog().setVisible(true);
}
private static SettingsDialog instance = null;
public static void showSettings()
{
if(instance == null) instance = new SettingsDialog();
instance.setAlwaysOnTop(true);
instance.setModal(false);
instance.setVisible(true);
}
public static void showSettingsModal()
{
if(instance == null) instance = new SettingsDialog();
instance.setAlwaysOnTop(false);
instance.setModal(true);
instance.setVisible(true);
}
public SettingsDialog()
{
super();
setTitle("Settings");
JPanel contentpane = new JPanel();
contentpane.setBorder(BorderFactory.createEmptyBorder(12,12,12,12));
contentpane.setLayout(new BorderLayout());
JPanel audiogroup = new JPanel();
audiogroup.setBorder(BorderFactory.createTitledBorder("Audio"));
audiogroup.setLayout(new FlowLayout(FlowLayout.LEFT, 0,0));
JPanel groupcontent = new JPanel();
audiogroup.add(groupcontent);
groupcontent.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
groupcontent.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.anchor = GridBagConstraints.WEST;
//c.gridwidth = GridBagConstraints.REMAINDER;
c.insets = new Insets(2,2,2,2);
//c.fill = GridBagConstraints.NONE;
c.gridwidth = 1;
c.gridheight = 1;
c.gridy = 0;
c.gridx = 0;
groupcontent.add(new JLabel("Output Device:"),c);
String[] devices = {"Java Sound Device"};
c.gridx = 1;
groupcontent.add(new JComboBox(devices),c);
c.gridy = 1;
c.gridx = 0;
groupcontent.add(new JLabel("Sample Rate:"),c);
JComboBox ratebox = new JComboBox(new String[] {"48000", "44100", "22050"});
ratebox.setEditable(true);
c.gridx = 1;
groupcontent.add(ratebox,c);
c.gridy = 2;
c.gridx = 0;
groupcontent.add(new JLabel("Channels:"),c);
c.gridx = 1;
groupcontent.add(new JComboBox(new String[] {"2 Stereo", "1 Mono"}),c);
c.gridy = 3;
c.gridx = 0;
groupcontent.add(new JLabel("Bits:"),c);
c.gridx = 1;
groupcontent.add(new JComboBox(new String[] {"16", "24"}),c);
c.gridy = 0;
c.gridx = 2;
c.gridheight = 4;
c.fill = GridBagConstraints.BOTH;
JPanel sep = new JPanel();
sep.setMinimumSize(new Dimension(10,10));
sep.setPreferredSize(new Dimension(10,10));
sep.setMaximumSize(new Dimension(10,10));
groupcontent.add(sep,c);
c.fill = GridBagConstraints.NONE;
c.gridheight = 1;
c.gridy = 0;
c.gridx = 3;
groupcontent.add(new JButton("Stop"),c);
c.gridy = 1;
c.gridx = 3;
groupcontent.add(new JLabel("Buffer Size:"),c);
c.gridx = 4;
groupcontent.add(new JTextField("100"),c);
c.gridx = 5;
groupcontent.add(new JLabel("msec"),c);
c.gridy = 2;
c.gridx = 3;
groupcontent.add(new JLabel("Underrun Tolerance:"),c);
c.gridx = 4;
groupcontent.add(new JSpinner(),c);
c.gridy = 3;
c.gridx = 3;
groupcontent.add(new JLabel("Priority:"),c);
c.gridx = 4;
groupcontent.add(new JSpinner(),c);
c.gridy = 4;
c.gridx = 0;
c.fill = GridBagConstraints.BOTH;
c.gridwidth = GridBagConstraints.REMAINDER;
c.insets = new Insets(7,2,2,2);
JSeparator sep2 = new JSeparator(JSeparator.HORIZONTAL);
sep.setMinimumSize(new Dimension(5,5));
sep.setPreferredSize(new Dimension(5,5));
groupcontent.add(sep2,c);
c.insets = new Insets(2,2,2,2);
c.fill = GridBagConstraints.NONE;
c.gridwidth = 1;
c.gridy = 5;
c.gridx = 0;
groupcontent.add(new JLabel("Output Latency (samples)"),c);
c.gridx = 1;
groupcontent.add(new JSpinner(),c);
c.gridx = 3;
groupcontent.add(new JButton("Measure latency..."),c);
c.gridy = 6;
c.gridx = 0;
c.fill = GridBagConstraints.BOTH;
c.gridwidth = GridBagConstraints.REMAINDER;
c.insets = new Insets(7,2,2,2);
sep2 = new JSeparator(JSeparator.HORIZONTAL);
sep.setMinimumSize(new Dimension(5,5));
sep.setPreferredSize(new Dimension(5,5));
groupcontent.add(sep2,c);
c.insets = new Insets(2,2,2,2);
c.fill = GridBagConstraints.NONE;
c.gridy = 7;
groupcontent.add(new JCheckBox("Use Direct Monitoring"),c);
c.gridy = 8;
groupcontent.add(new JCheckBox("Use Multiplexed Javasound Server (Requires Restart)"),c);
c.gridy = 9;
groupcontent.add(new JCheckBox("Autoconnect Jack (Requires Restart)"),c);
JPanel midigroup = new JPanel();
midigroup.setBorder(BorderFactory.createTitledBorder("MIDI"));
midigroup.setLayout(new FlowLayout(FlowLayout.LEFT, 0,0));
groupcontent = new JPanel();
midigroup.add(groupcontent);
groupcontent.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
groupcontent.setLayout(new GridBagLayout());
c = new GridBagConstraints();
c.anchor = GridBagConstraints.NORTHWEST;
c.gridwidth = GridBagConstraints.REMAINDER;
c.insets = new Insets(2,2,2,2);
c.gridwidth = 1;
groupcontent.add(new JLabel("Input Devices :"),c);
c.gridwidth = GridBagConstraints.REMAINDER;
String[] midiindevs = {"Virtual Keyboard", "MIDI Port 1"};
JList midiindev_list = new JList(midiindevs);
JScrollPane midiindev_list_s = new JScrollPane(midiindev_list);
Dimension p = midiindev_list_s.getPreferredSize();
p.height = 70;
p.width = 200;
midiindev_list_s.setPreferredSize(p);
groupcontent.add(midiindev_list_s,c);
JPanel midiindev_butonpanel = new JPanel();
midiindev_butonpanel.setLayout(new FlowLayout(FlowLayout.LEFT,5,0));
midiindev_butonpanel.add(new JButton("Add"));
midiindev_butonpanel.add(new JButton("Remove"));
c.gridx = 1;
groupcontent.add(midiindev_butonpanel,c);
JPanel miscgroup = new JPanel();
miscgroup.setBorder(BorderFactory.createTitledBorder("User Interface"));
miscgroup.setLayout(new FlowLayout(FlowLayout.LEFT, 0,0));
groupcontent = new JPanel();
miscgroup.add(groupcontent);
groupcontent.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
groupcontent.setLayout(new GridBagLayout());
c = new GridBagConstraints();
c.anchor = GridBagConstraints.WEST;
c.gridwidth = GridBagConstraints.REMAINDER;
c.insets = new Insets(2,2,2,2);
c.gridwidth = 1;
groupcontent.add(new JLabel("Redraw Rate (jumps):"),c);
c.gridwidth = GridBagConstraints.REMAINDER;
String[] guivalues = {"Disable when playing", "1"};
groupcontent.add(new JComboBox(guivalues),c);
JPanel grouppane = new JPanel();
grouppane.setLayout(new BoxLayout(grouppane, BoxLayout.Y_AXIS));
grouppane.add(audiogroup);
grouppane.add(midigroup);
grouppane.add(miscgroup);
contentpane.add(grouppane);
JPanel buttonpane = new JPanel();
//buttonpane.setBorder(BorderFactory.createEmptyBorder(10,0,0,0));
buttonpane.setLayout(new FlowLayout(FlowLayout.RIGHT,5,5));
buttonpane.add(new JButton("OK"));
buttonpane.add(new JButton("Cancel"));
buttonpane.add(new JButton("Apply"));
contentpane.add(buttonpane, BorderLayout.SOUTH);
setContentPane(contentpane);
//setSize(500, 400);
pack();
Rectangle windowSize ;
Insets windowInsets;
Toolkit toolkit = Toolkit.getDefaultToolkit();
GraphicsEnvironment ge = java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsConfiguration gc = ge.getDefaultScreenDevice().getDefaultConfiguration();
if(gc == null)
gc = getGraphicsConfiguration();
if(gc != null) {
windowSize = gc.getBounds();
} else {
windowSize = new java.awt.Rectangle(toolkit.getScreenSize());
}
Dimension size = getSize();
Point parent_loc = getLocation();
setLocation(parent_loc.x + windowSize.width/2 - (size.width/2),
parent_loc.y + windowSize.height/2 - (size.height/2));
}
}