/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Copyright @ 2015 Atlassian Pty Ltd
*
* 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 net.java.sip.communicator.plugin.desktoputil.wizard;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.util.*;
import net.java.sip.communicator.plugin.desktoputil.*;
import org.jitsi.service.neomedia.*;
import org.jitsi.service.neomedia.codec.*;
import org.jitsi.service.resources.*;
/**
* The encodings configuration panel (used in the account configuration wizards)
*
* @author Boris Grozev
*/
public class EncodingsPanel
extends TransparentPanel
{
/**
* The <tt>ResourceManagementService</tt> used by this class
*/
private static ResourceManagementService resourceService
= UtilActivator.getResources();
/**
* The "override global settings" checkbox.
*/
private final JCheckBox overrideCheckBox;
/**
* The <tt>MediaConfiguration</tt> instance we'll use to obtain most of the
* <tt>Component</tt>s for the panel
*/
private final MediaConfigurationService mediaConfiguration;
/**
* A panel to hold the audio encodings table
*/
private JPanel audioPanel;
/**
* The audio encodings table (and "up"/"down" buttons)
*/
private Component audioControls;
/**
* A panel to hold the video encodings table
*/
private JPanel videoPanel;
/**
* The video encodings table (and "up"/"down" buttons)
*/
private Component videoControls;
/**
* Holds the properties we need to get/set for the encoding preferences
*/
private Map<String, String> encodingProperties
= new HashMap<String, String>();
/**
* An <tt>EncodingConfiguration</tt> we'll be using to manage preferences
* for us
*/
private EncodingConfiguration encodingConfiguration;
/**
* The "reset" button
*/
private JButton resetButton = new JButton(resourceService.getI18NString(
"plugin.jabberaccregwizz.RESET"));
/**
* Builds an object, loads the tables with the global configuration..
*/
public EncodingsPanel()
{
super(new BorderLayout());
overrideCheckBox = new SIPCommCheckBox(resourceService.
getI18NString("plugin.jabberaccregwizz.OVERRIDE_ENCODINGS"),
false);
overrideCheckBox.addChangeListener(new ChangeListener()
{
public void stateChanged(ChangeEvent e)
{
updateTableState();
}
});
mediaConfiguration
= UtilActivator.getMediaConfiguration();
//by default (on account creation) use an <tt>EncodingConfiguration</tt>
//loaded with the global preferences. But make a new instance, because
//we do not want to change the current one
encodingConfiguration = mediaConfiguration.getMediaService()
.createEmptyEncodingConfiguration();
encodingConfiguration.loadEncodingConfiguration(mediaConfiguration
.getMediaService().getCurrentEncodingConfiguration());
audioControls = mediaConfiguration.
createEncodingControls(MediaType.AUDIO, encodingConfiguration);
videoControls = mediaConfiguration.
createEncodingControls(MediaType.VIDEO, encodingConfiguration);
JPanel mainPanel = new TransparentPanel();
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
add(mainPanel, BorderLayout.NORTH);
JPanel checkBoxPanel
= new TransparentPanel(new BorderLayout());
checkBoxPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
checkBoxPanel.add(overrideCheckBox,BorderLayout.WEST);
resetButton.setToolTipText(resourceService.getI18NString(
"plugin.jabberaccregwizz.RESET_DESCRIPTION"));
checkBoxPanel.add(resetButton,BorderLayout.EAST);
resetButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
encodingConfiguration.loadEncodingConfiguration(
mediaConfiguration.getMediaService()
.getCurrentEncodingConfiguration());
encodingConfiguration.storeProperties(encodingProperties,
ProtocolProviderFactory.ENCODING_PROP_PREFIX+".");
resetTables();
}
});
audioPanel = new TransparentPanel(new BorderLayout(10, 10));
audioPanel.setBorder(BorderFactory.createTitledBorder(
resourceService.getI18NString("plugin.jabberaccregwizz.AUDIO")));
audioPanel.add(audioControls);
videoPanel = new TransparentPanel(new BorderLayout(10, 10));
videoPanel.setBorder(BorderFactory.createTitledBorder(
resourceService.getI18NString("plugin.jabberaccregwizz.VIDEO")));
videoPanel.add(videoControls);
mainPanel.add(checkBoxPanel);
mainPanel.add(audioPanel);
mainPanel.add(videoPanel);
}
/**
* Saves the settings we hold in <tt>registration</tt>
* @param registration the <tt>EncodingsRegistrationUtil</tt> to use
*/
public void commitPanel(EncodingsRegistrationUtil registration)
{
registration.setOverrideEncodings(overrideCheckBox.isSelected());
encodingConfiguration.storeProperties(encodingProperties,
ProtocolProviderFactory.ENCODING_PROP_PREFIX+".");
registration.setEncodingProperties(encodingProperties);
}
/**
* Loads encoding configuration from given <tt>encodingsReg</tt> object.
*
* @param encodingsReg the encoding registration object to use.
*/
public void loadAccount(EncodingsRegistrationUtil encodingsReg)
{
overrideCheckBox.setSelected(encodingsReg.isOverrideEncodings());
encodingConfiguration
= encodingsReg.createEncodingConfig(
mediaConfiguration.getMediaService());
encodingConfiguration.storeProperties(encodingProperties);
resetTables();
}
/**
* Recreates the audio and video controls. Necessary when
* our encodingConfiguration reference has changed.
*/
private void resetTables()
{
audioPanel.remove(audioControls);
videoPanel.remove(videoControls);
audioControls = mediaConfiguration.
createEncodingControls(MediaType.AUDIO, encodingConfiguration);
videoControls = mediaConfiguration.
createEncodingControls(MediaType.VIDEO, encodingConfiguration);
audioPanel.add(audioControls);
videoPanel.add(videoControls);
updateTableState();
}
/**
* Enables or disables the encodings tables based on the override checkbox.
*/
private void updateTableState()
{
audioControls.setEnabled(overrideCheckBox.isSelected());
videoControls.setEnabled(overrideCheckBox.isSelected());
}
}