/*
* 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.chatconfig.replacement;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
import net.java.sip.communicator.impl.replacement.smiley.*;
import net.java.sip.communicator.plugin.chatconfig.*;
import net.java.sip.communicator.plugin.desktoputil.*;
import net.java.sip.communicator.service.replacement.*;
import org.jitsi.service.configuration.*;
import org.jitsi.service.resources.*;
/**
* The ConfigurationForm that would be added in the chat configuration
* window.
*
* @author Purvesh Sahoo
*/
public class ReplacementConfigPanel
extends TransparentPanel
{
/**
* Serial version UID.
*/
private static final long serialVersionUID = 0L;
/**
* Checkbox to enable/disable smiley replacement.
*/
private JCheckBox enableSmiley;
/**
* Checkbox to enable/disable replacements other than smileys.
*/
private JRadioButton enableReplacement;
/**
* Checkbox to enable/disable proposal messages for image/video replacement.
*/
private JRadioButton enableReplacementProposal;
/**
* Checkbox to disable image/video replacement.
*/
private JRadioButton disableReplacement;
/**
* Jtable to list all the available replacement sources.
*/
private JTable table;
/**
* Create an instance of Replacement Config
*/
public ReplacementConfigPanel()
{
super(new BorderLayout());
add(ChatConfigActivator
.createConfigSectionComponent(ChatConfigActivator.getResources()
.getI18NString("plugin.chatconfig.replacement.TITLE")),
BorderLayout.WEST);
add(createMainPanel());
initValues();
}
/**
* Init the main panel.
*
* @return the created component
*/
private Component createMainPanel()
{
JPanel mainPanel = new TransparentPanel();
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
ResourceManagementService R = ChatConfigActivator.getResources();
enableSmiley =
new SIPCommCheckBox(R.getI18NString(
"plugin.chatconfig.replacement.ENABLE_SMILEY_STATUS"));
mainPanel.add(enableSmiley);
enableSmiley.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
saveData();
}
});
mainPanel.add(Box.createVerticalStrut(10));
JPanel replacementPanel = new TransparentPanel();
replacementPanel.setLayout(new BoxLayout(replacementPanel, BoxLayout.Y_AXIS));
replacementPanel.setBorder(
BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder(R.getI18NString(
"plugin.chatconfig.replacement.REPLACEMENT_TITLE")),
BorderFactory.createEmptyBorder(3, 3, 3, 3)));
enableReplacement =
new SIPCommRadioButton(R.getI18NString(
"plugin.chatconfig.replacement.ENABLE_REPLACEMENT_STATUS"));
replacementPanel.add(enableReplacement);
enableReplacement.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
saveData();
}
});
enableReplacementProposal =
new SIPCommRadioButton(R.getI18NString(
"plugin.chatconfig.replacement.ENABLE_REPLACEMENT_PROPOSAL"
));
replacementPanel.add(enableReplacementProposal);
enableReplacementProposal.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0)
{
saveData();
}
});
disableReplacement = new SIPCommRadioButton(R.getI18NString(
"plugin.chatconfig.replacement.DISABLE_REPLACEMENT"));
replacementPanel.add(disableReplacement);
disableReplacement.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0)
{
saveData();
}
});
ButtonGroup replacementGroup = new ButtonGroup();
replacementGroup.add(enableReplacement);
replacementGroup.add(enableReplacementProposal);
replacementGroup.add(disableReplacement);
// the JTable to list all the available sources
table = new JTable();
table.setShowGrid(false);
table.setTableHeader(null);
table.setOpaque(true);
table.setBackground(Color.white);
JScrollPane tablePane = new JScrollPane(table);
tablePane.setOpaque(false);
tablePane.setPreferredSize(
new Dimension(replacementPanel.getWidth(), 150));
tablePane.setAlignmentX(LEFT_ALIGNMENT);
JPanel container = new TransparentPanel(new BorderLayout());
container.setPreferredSize(
new Dimension(replacementPanel.getWidth(), 200));
container.setLayout(new BoxLayout(container, BoxLayout.Y_AXIS));
JLabel label =
new JLabel(R.getI18NString(
"plugin.chatconfig.replacement.REPLACEMENT_SOURCES"));
label.setDisplayedMnemonic(R.getI18nMnemonic(
"plugin.chatconfig.replacement.REPLACEMENT_SOURCES"));
label.setLabelFor(table);
container.add(label);
container.add(Box.createRigidArea(new Dimension(0, 5)));
container.add(tablePane, BorderLayout.EAST);
/*
* list of the source names. Removing 'Smiley' as it shouldn't show up in
* the table.
*/
Set keys = ChatConfigActivator.getReplacementSources().keySet();
ArrayList sourceList = new ArrayList(keys);
sourceList.remove("SMILEY");
Collections.sort(sourceList);
table.setModel(new ReplacementConfigurationTableModel(sourceList));
table.getSelectionModel().addListSelectionListener(
new ListSelectionListener()
{
public void valueChanged(ListSelectionEvent e)
{
if (e.getValueIsAdjusting())
return;
if (table.getSelectedRow() != -1)
{
boolean isEnabled =
(Boolean) table.getValueAt(table.getSelectedRow(),
0);
if (isEnabled)
{
enableReplacement.setSelected(true);
}
}
}
});
TableColumnModel tableColumnModel = table.getColumnModel();
TableColumn tableColumn = tableColumnModel.getColumn(0);
tableColumn.setMaxWidth(tableColumn.getMinWidth());
table.setDefaultRenderer(table.getColumnClass(1),
new FixedTableCellRenderer());
replacementPanel.add(Box.createVerticalStrut(10));
replacementPanel.add(container);
mainPanel.add(replacementPanel);
return mainPanel;
}
/**
* Init the values of the widgets
*/
private void initValues()
{
ConfigurationService configService =
ChatConfigActivator.getConfigurationService();
this.enableSmiley.setSelected(
configService.getBoolean(
ReplacementProperty.getPropertyName(
ReplacementServiceSmileyImpl.SMILEY_SOURCE),
true));
this.enableReplacement.setSelected(
configService.getBoolean(
ReplacementProperty.REPLACEMENT_ENABLE, true));
this.enableReplacementProposal.setSelected(
configService.getBoolean(
ReplacementProperty.REPLACEMENT_PROPOSAL, true));
this.disableReplacement.setSelected(
!this.enableReplacement.isSelected()
&& !this.enableReplacementProposal.isSelected());
this.table.setEnabled(enableReplacement.isSelected());
}
/**
* Save data in the configuration file
*/
private void saveData()
{
ConfigurationService configService =
ChatConfigActivator.getConfigurationService();
configService.setProperty(ReplacementProperty
.getPropertyName(ReplacementServiceSmileyImpl.SMILEY_SOURCE),
Boolean.toString(enableSmiley.isSelected()));
configService.setProperty(ReplacementProperty.REPLACEMENT_ENABLE,
Boolean.toString(enableReplacement.isSelected()));
configService.setProperty(
"plugin.chatconfig.replacement.proposal.enable",
Boolean.toString(enableReplacementProposal.isSelected()));
table.getSelectionModel().clearSelection();
table.setEnabled(enableReplacement.isSelected()
|| enableReplacementProposal.isSelected());
}
/**
* Renderer for text column in the table.
*/
private static class FixedTableCellRenderer
extends DefaultTableCellRenderer
{
/**
* Serial version UID.
*/
private static final long serialVersionUID = 0L;
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean selected, boolean focused, int row, int column)
{
setEnabled(table == null || table.isEnabled());
super.getTableCellRendererComponent(table, value, selected, focused,
row, column);
return this;
}
}
}