/**
* $RCSfile: ,v $
* $Revision: $
* $Date: $
*
* Copyright (C) 2004-2011 Jive Software. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jivesoftware.sparkplugin.preferences;
import org.jivesoftware.sparkplugin.ui.components.JavaMixer;
import net.java.sipmack.softphone.SoftPhoneManager;
import org.jivesoftware.spark.SparkManager;
import org.jivesoftware.spark.util.GraphicUtils;
import javax.media.CaptureDeviceInfo;
import javax.media.cdm.CaptureDeviceManager;
import javax.media.format.AudioFormat;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
/**
* Dialog to allow setting of audio device and volume control.
*
* @author Jive Software
*/
public class AudioPreferenceDialog extends JPanel {
private static final long serialVersionUID = -7436724748439424479L;
private JComboBox audioBox = new JComboBox();
private JDialog dialog;
private JButton closeButton;
private JavaMixer javaMixer = new JavaMixer();
public AudioPreferenceDialog() {
setLayout(new GridBagLayout());
audioBox = new JComboBox();
final JLabel inputValueLabel = new JLabel("Input Volume:");
final JLabel outputValueLabel = new JLabel("Output Volume:");
add(inputValueLabel, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(2, 2, 2, 2), 0, 0));
add(javaMixer.getPrefferedInputVolume(), new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(2, 2, 2, 2), 0, 0));
add(outputValueLabel, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(2, 2, 2, 2), 0, 0));
add(javaMixer.getPrefferedMasterVolume(), new GridBagConstraints(1, 2, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(2, 2, 2, 2), 0, 0));
closeButton = new JButton("Close");
closeButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
SipPreference pref = SoftPhoneManager.getInstance().getPreference();
SipPreferences preferences = (SipPreferences)pref.getData();
preferences.setAudioDevice((String)audioBox.getSelectedItem());
pref.saveSipFile();
dialog.dispose();
}
});
add(closeButton, new GridBagConstraints(1, 3, 1, 1, 1.0, 0.0, GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(2, 2, 2, 2), 0, 0));
final Vector<CaptureDeviceInfo> audioDevices = CaptureDeviceManager.getDeviceList(new AudioFormat(AudioFormat.LINEAR, 44100, 16, 1));
final int dev = audioDevices != null ? audioDevices.size() : 0;
for (int i = 0; i < dev; i++) {
CaptureDeviceInfo audioDevice = audioDevices.get(i);
audioBox.addItem(audioDevice.getName());
}
SipPreference pref = SoftPhoneManager.getInstance().getPreference();
SipPreferences preferences = (SipPreferences)pref.getData();
String selectedDevice = preferences.getAudioDevice();
if (selectedDevice != null) {
audioBox.setSelectedItem(selectedDevice);
}
}
public void invoke() {
if (dialog == null) {
dialog = new JDialog(SparkManager.getMainWindow(), "Audio Preferences");
dialog.setLayout(new BorderLayout());
dialog.add(this, BorderLayout.CENTER);
dialog.pack();
GraphicUtils.centerWindowOnScreen(dialog);
}
dialog.setVisible(true);
}
}