/*
* 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.generalconfig;
import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;
import net.java.sip.communicator.plugin.generalconfig.autoaway.*;
import net.java.sip.communicator.plugin.desktoputil.*;
import net.java.sip.communicator.service.msghistory.*;
import net.java.sip.communicator.service.resources.*;
import net.java.sip.communicator.service.systray.*;
import net.java.sip.communicator.util.*;
import net.java.sip.communicator.util.Logger;
import org.jitsi.util.*;
import org.osgi.framework.*;
/**
* The general configuration form.
*
* @author Yana Stamcheva
*/
public class GeneralConfigurationPanel
extends TransparentPanel
{
/**
* Serial version UID.
*/
private static final long serialVersionUID = 0L;
/**
* The Logger used by this GeneralConfigurationPanel for
* logging output.
*/
private final Logger logger
= Logger.getLogger(GeneralConfigurationPanel.class);
/**
* Indicates if the Startup configuration panel should be disabled, i.e.
* not visible to the user.
*/
private static final String STARTUP_CONFIG_DISABLED_PROP
=
"net.java.sip.communicator.plugin.generalconfig.startupconfig.DISABLED";
/**
* Indicates if the Message configuration panel should be disabled, i.e.
* not visible to the user.
*/
private static final String MESSAGE_CONFIG_DISABLED_PROP
=
"net.java.sip.communicator.plugin.generalconfig.messageconfig.DISABLED";
/**
* Indicates if the AutoAway configuration panel should be disabled, i.e.
* not visible to the user.
*/
private static final String AUTO_AWAY_CONFIG_DISABLED_PROP
=
"net.java.sip.communicator.plugin.generalconfig.autoawayconfig.DISABLED";
/**
* Indicates if the Notification configuration panel should be disabled,
* i.e. not visible to the user.
*/
private static final String NOTIFICATION_CONFIG_DISABLED_PROP
=
"net.java.sip.communicator.plugin.generalconfig.notificationconfig.DISABLED";
/**
* Indicates if the Locale configuration panel should be disabled, i.e.
* not visible to the user.
*/
private static final String LOCALE_CONFIG_DISABLED_PROP
=
"net.java.sip.communicator.plugin.generalconfig.localeconfig.DISABLED";
/**
* Indicates if the Call configuration panel should be disabled, i.e.
* not visible to the user.
*/
private static final String CALL_CONFIG_DISABLED_PROP
=
"net.java.sip.communicator.plugin.generalconfig.callconfig.DISABLED";
/**
* Creates the general configuration panel.
*/
public GeneralConfigurationPanel()
{
super(new BorderLayout());
TransparentPanel mainPanel = new TransparentPanel();
BoxLayout boxLayout = new BoxLayout(mainPanel, BoxLayout.Y_AXIS);
mainPanel.setLayout(boxLayout);
mainPanel.setBorder(new EmptyBorder(0, 0, 0, 10));
final JScrollPane scroller = new JScrollPane(mainPanel);
scroller.setOpaque(false);
scroller.getViewport().setOpaque(false);
scroller.setPreferredSize(new Dimension(500, 420));
scroller.setBorder(new EmptyBorder(0, 0, 0, 0));
this.add(scroller, BorderLayout.CENTER);
if(!GeneralConfigPluginActivator.getConfigurationService()
.getBoolean(STARTUP_CONFIG_DISABLED_PROP, false))
{
Component startupConfigPanel = createStartupConfigPanel();
if (startupConfigPanel != null)
{
mainPanel.add(startupConfigPanel);
mainPanel.add(Box.createVerticalStrut(10));
}
}
if(!GeneralConfigPluginActivator.getConfigurationService()
.getBoolean(MESSAGE_CONFIG_DISABLED_PROP, false))
{
mainPanel.add(createMessageConfigPanel());
mainPanel.add(Box.createVerticalStrut(10));
}
if(!GeneralConfigPluginActivator.getConfigurationService()
.getBoolean(AUTO_AWAY_CONFIG_DISABLED_PROP, false))
{
mainPanel.add(new AutoAwayConfigurationPanel());
mainPanel.add(Box.createVerticalStrut(10));
}
if(!GeneralConfigPluginActivator.getConfigurationService()
.getBoolean(NOTIFICATION_CONFIG_DISABLED_PROP, false))
{
Component notifConfigPanel = createNotificationConfigPanel();
if (notifConfigPanel != null)
{
mainPanel.add(notifConfigPanel);
mainPanel.add(Box.createVerticalStrut(10));
}
}
if(!GeneralConfigPluginActivator.getConfigurationService()
.getBoolean(LOCALE_CONFIG_DISABLED_PROP, false))
{
mainPanel.add(createLocaleConfigPanel());
mainPanel.add(Box.createVerticalStrut(10));
}
if(!GeneralConfigPluginActivator.getConfigurationService()
.getBoolean(CALL_CONFIG_DISABLED_PROP, false))
{
mainPanel.add(createCallConfigPanel());
mainPanel.add(Box.createVerticalStrut(10));
}
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
scroller.getVerticalScrollBar().setValue(0);
scroller.revalidate();
scroller.repaint();
}
});
}
/**
* Returns the application name.
* @return the application name
*/
private String getApplicationName()
{
return Resources.getSettingsString("service.gui.APPLICATION_NAME");
}
/**
* Initializes the auto start checkbox. Used only on windows.
* @return the created auto start check box
*/
private Component createAutoStartCheckBox()
{
final JCheckBox autoStartCheckBox = new SIPCommCheckBox();
String label = Resources.getString(
"plugin.generalconfig.AUTO_START",
new String[]{getApplicationName()});
autoStartCheckBox.setText(label);
autoStartCheckBox.setToolTipText(label);
autoStartCheckBox.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
try
{
setAutostart(autoStartCheckBox.isSelected());
}
catch (Exception ex)
{
logger.error("Cannot create/delete startup shortcut", ex);
}
}
});
try
{
autoStartCheckBox.setSelected(
WindowsStartup.isStartupEnabled(getApplicationName()));
}
catch (Exception e)
{
logger.error(e);
}
return autoStartCheckBox;
}
/**
* Creates the message configuration panel.
* @return the created panel
*/
private Component createMessageConfigPanel()
{
JPanel configPanel
= GeneralConfigPluginActivator.createConfigSectionComponent(
Resources.getString("service.gui.MESSAGE"));
configPanel.add(createGroupMessagesCheckbox());
configPanel.add(createHistoryPanel());
configPanel.add(createSendMessagePanel());
configPanel.add(createTypingNitificationsCheckBox());
configPanel.add(createBringToFrontCheckBox());
configPanel.add(createChatAlertsOnMessageCheckbox());
configPanel.add(createMultichatCheckbox());
configPanel.add(createRecentMessagesCheckbox());
return configPanel;
}
/**
* Initializes the group messages check box.
* @return the created check box
*/
private Component createGroupMessagesCheckbox()
{
final JCheckBox groupMessagesCheckBox = new SIPCommCheckBox();
groupMessagesCheckBox.setText(
Resources.getString(
"plugin.generalconfig.GROUP_CHAT_MESSAGES"));
groupMessagesCheckBox.setAlignmentX(JCheckBox.LEFT_ALIGNMENT);
groupMessagesCheckBox.setSelected(
ConfigurationUtils.isMultiChatWindowEnabled());
groupMessagesCheckBox.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
ConfigurationUtils.setMultiChatWindowEnabled(
groupMessagesCheckBox.isSelected());
}
});
return groupMessagesCheckBox;
}
/**
* Initializes the window alert on message check box.
* @return the created check box
*/
private Component createChatAlertsOnMessageCheckbox()
{
final JCheckBox chatAlertOnMessageCheckBox = new SIPCommCheckBox();
chatAlertOnMessageCheckBox.setText(
Resources.getString(
"plugin.generalconfig.CHATALERTS_ON_MESSAGE"));
chatAlertOnMessageCheckBox.setAlignmentX(JCheckBox.LEFT_ALIGNMENT);
chatAlertOnMessageCheckBox.setSelected(
ConfigurationUtils.isAlerterEnabled());
chatAlertOnMessageCheckBox.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
ConfigurationUtils.setAlerterEnabled(
chatAlertOnMessageCheckBox.isSelected());
}
});
return chatAlertOnMessageCheckBox;
}
/**
* Initializes the group messages check box.
* @return the created check box
*/
private Component createMultichatCheckbox()
{
final JCheckBox leaveChatroomCheckBox = new SIPCommCheckBox();
leaveChatroomCheckBox.setText(
Resources.getString(
"plugin.generalconfig.LEAVE_CHATROOM_ON_WINDOW_CLOSE"));
leaveChatroomCheckBox.setAlignmentX(JCheckBox.LEFT_ALIGNMENT);
leaveChatroomCheckBox.setSelected(
ConfigurationUtils.isLeaveChatRoomOnWindowCloseEnabled());
leaveChatroomCheckBox.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
ConfigurationUtils.setLeaveChatRoomOnWindowClose(
leaveChatroomCheckBox.isSelected());
}
});
return leaveChatroomCheckBox;
}
/**
* Initializes the recent messages check box.
* @return the created check box
*/
private Component createRecentMessagesCheckbox()
{
final JCheckBox recentMessagesCheckBox = new SIPCommCheckBox();
recentMessagesCheckBox.setText(
Resources.getString(
"plugin.generalconfig.SHOW_RECENT_MESSAGES"));
recentMessagesCheckBox.setAlignmentX(JCheckBox.LEFT_ALIGNMENT);
recentMessagesCheckBox.setSelected(
ConfigurationUtils.isRecentMessagesShown());
recentMessagesCheckBox.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
ConfigurationUtils.setRecentMessagesShown(
recentMessagesCheckBox.isSelected());
}
});
return recentMessagesCheckBox;
}
/**
* Initializes the history panel.
* @return the created history panel
*/
private Component createHistoryPanel()
{
JPanel logHistoryPanel = new TransparentPanel();
logHistoryPanel.setLayout(new BorderLayout());
logHistoryPanel.setAlignmentX(JCheckBox.LEFT_ALIGNMENT);
// Log history check box.
final JCheckBox logHistoryCheckBox = new SIPCommCheckBox();
logHistoryPanel.add(logHistoryCheckBox, BorderLayout.NORTH);
final MessageHistoryService mhs
= GeneralConfigPluginActivator.getMessageHistoryService();
logHistoryCheckBox.setText(
Resources.getString("plugin.generalconfig.LOG_HISTORY"));
logHistoryCheckBox.setSelected(mhs.isHistoryLoggingEnabled());
logHistoryCheckBox.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
mhs.setHistoryLoggingEnabled(logHistoryCheckBox.isSelected());
}
});
GeneralConfigPluginActivator.getConfigurationService()
.addPropertyChangeListener(
MessageHistoryService.PNAME_IS_MESSAGE_HISTORY_ENABLED,
new PropertyChangeListener()
{
@Override
public void propertyChange(PropertyChangeEvent evt)
{
logHistoryCheckBox.setSelected(
mhs.isHistoryLoggingEnabled());
}
});
// Show history check box.
JPanel showHistoryPanel = new TransparentPanel();
showHistoryPanel.setBorder(
BorderFactory.createEmptyBorder(0, 10, 0, 0));
logHistoryPanel.add(showHistoryPanel, BorderLayout.SOUTH);
final JCheckBox showHistoryCheckBox = new SIPCommCheckBox();
showHistoryPanel.add(showHistoryCheckBox);
showHistoryCheckBox.setText(
Resources.getString("plugin.generalconfig.SHOW_HISTORY"));
showHistoryCheckBox.setSelected(
ConfigurationUtils.isHistoryShown());
showHistoryCheckBox.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
ConfigurationUtils.setHistoryShown(
showHistoryCheckBox.isSelected());
}
});
// History size.
SpinnerNumberModel historySizeSpinnerModel =
new SpinnerNumberModel(0, 0, 140, 1);
final JSpinner historySizeSpinner = new JSpinner();
showHistoryPanel.add(historySizeSpinner);
historySizeSpinner.setModel(historySizeSpinnerModel);
historySizeSpinner.setValue(
ConfigurationUtils.getChatHistorySize());
logHistoryCheckBox.addChangeListener(new ChangeListener()
{
public void stateChanged(ChangeEvent e)
{
showHistoryCheckBox.setEnabled(
logHistoryCheckBox.isSelected());
historySizeSpinner.setEnabled(
logHistoryCheckBox.isSelected());
}
});
showHistoryCheckBox.addChangeListener(new ChangeListener()
{
public void stateChanged(ChangeEvent e)
{
historySizeSpinner.setEnabled(
showHistoryCheckBox.isSelected());
}
});
historySizeSpinnerModel.addChangeListener(
new ChangeListener()
{
public void stateChanged(ChangeEvent e)
{
ConfigurationUtils.setChatHistorySize(
((Integer) historySizeSpinner
.getValue()).intValue());
}
});
JLabel historySizeLabel = new JLabel();
showHistoryPanel.add(historySizeLabel);
historySizeLabel.setText(
Resources.getString("plugin.generalconfig.HISTORY_SIZE"));
if (!mhs.isHistoryLoggingEnabled())
{
showHistoryCheckBox.setEnabled(false);
historySizeSpinner.setEnabled(false);
}
if (!ConfigurationUtils.isHistoryShown())
{
historySizeSpinner.setEnabled(false);
}
return logHistoryPanel;
}
/**
* Initializes the send message configuration panel.
* @return the created message config panel
*/
private Component createSendMessagePanel()
{
TransparentPanel sendMessagePanel
= new TransparentPanel(new BorderLayout(5, 5));
sendMessagePanel.setAlignmentX(JCheckBox.LEFT_ALIGNMENT);
JLabel sendMessageLabel = new JLabel();
sendMessagePanel.add(sendMessageLabel, BorderLayout.WEST);
sendMessageLabel.setText(
Resources.getString("plugin.generalconfig.SEND_MESSAGES_WITH"));
ComboBoxModel sendMessageComboBoxModel
= new DefaultComboBoxModel(
new String[]
{
ConfigurationUtils.ENTER_COMMAND,
ConfigurationUtils.CTRL_ENTER_COMMAND
});
final JComboBox sendMessageComboBox = new JComboBox();
sendMessagePanel.add(sendMessageComboBox);
sendMessageComboBox.setModel(sendMessageComboBoxModel);
sendMessageComboBox.setSelectedItem(
ConfigurationUtils.getSendMessageCommand());
sendMessageComboBox.addItemListener(
new ItemListener()
{
public void itemStateChanged(ItemEvent ev)
{
ConfigurationUtils.setSendMessageCommand(
(String) sendMessageComboBox.getSelectedItem());
}
});
return sendMessagePanel;
}
/**
* Initializes typing notifications panel.
* @return the created check box
*/
private Component createTypingNitificationsCheckBox()
{
final JCheckBox enableTypingNotifiCheckBox = new SIPCommCheckBox();
enableTypingNotifiCheckBox.setLayout(null);
enableTypingNotifiCheckBox.setAlignmentX(JCheckBox.LEFT_ALIGNMENT);
enableTypingNotifiCheckBox.setText(
Resources.getString("service.gui.ENABLE_TYPING_NOTIFICATIONS"));
enableTypingNotifiCheckBox.setPreferredSize(
new Dimension(253, 20));
enableTypingNotifiCheckBox.setSelected(
ConfigurationUtils.isSendTypingNotifications());
enableTypingNotifiCheckBox.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
ConfigurationUtils.setSendTypingNotifications(
enableTypingNotifiCheckBox.isSelected());
}
});
return enableTypingNotifiCheckBox;
}
/**
* Initializes the bring to front check box.
* @return the created check box
*/
private Component createBringToFrontCheckBox()
{
final JCheckBox bringToFrontCheckBox = new SIPCommCheckBox();
bringToFrontCheckBox.setText(
Resources.getString("plugin.generalconfig.BRING_WINDOW_TO_FRONT"));
bringToFrontCheckBox.setAlignmentX(Component.LEFT_ALIGNMENT);
bringToFrontCheckBox.setSelected(
ConfigurationUtils.isAutoPopupNewMessage());
bringToFrontCheckBox.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
ConfigurationUtils.setAutoPopupNewMessage(
bringToFrontCheckBox.isSelected());
}
});
return bringToFrontCheckBox;
}
/**
* Initializes the notification configuration panel.
* @return the created panel
*/
private Component createNotificationConfigPanel()
{
ServiceReference[] handlerRefs = null;
BundleContext bc = GeneralConfigPluginActivator.bundleContext;
try
{
handlerRefs = bc.getServiceReferences(
PopupMessageHandler.class.getName(),
null);
}
catch (InvalidSyntaxException ex)
{
logger.warn("Error while retrieving service refs", ex);
}
if (handlerRefs == null)
return null;
JPanel notifConfigPanel = GeneralConfigPluginActivator.
createConfigSectionComponent(
Resources.getString(
"plugin.notificationconfig.POPUP_NOTIF_HANDLER"));
final JComboBox notifConfigComboBox = new JComboBox();
String configuredHandler = (String) GeneralConfigPluginActivator
.getConfigurationService().getProperty("systray.POPUP_HANDLER");
for (ServiceReference ref : handlerRefs)
{
PopupMessageHandler handler =
(PopupMessageHandler) bc.getService(ref);
notifConfigComboBox.addItem(handler);
if (configuredHandler != null &&
configuredHandler.equals(handler.getClass().getName()))
{
notifConfigComboBox.setSelectedItem(handler);
}
}
// We need an entry in combo box that represents automatic
// popup handler selection in systray service. It is selected
// only if there is no user preference regarding which popup
// handler to use.
String auto = "Auto";
notifConfigComboBox.addItem(auto);
if (configuredHandler == null)
{
notifConfigComboBox.setSelectedItem(auto);
}
notifConfigComboBox.addItemListener(new ItemListener()
{
public void itemStateChanged(ItemEvent evt)
{
if (notifConfigComboBox.getSelectedItem() instanceof String)
{
// "Auto" selected. Delete the user's preference and
// select the best available handler.
ConfigurationUtils.setPopupHandlerConfig(null);
GeneralConfigPluginActivator.getSystrayService()
.selectBestPopupMessageHandler();
} else
{
PopupMessageHandler handler =
(PopupMessageHandler)
notifConfigComboBox.getSelectedItem();
ConfigurationUtils.setPopupHandlerConfig(
handler.getClass().getName());
GeneralConfigPluginActivator.getSystrayService()
.setActivePopupMessageHandler(handler);
}
}
});
notifConfigPanel.add(notifConfigComboBox);
return notifConfigPanel;
}
/**
* Model for the language combobox.
*/
private static class LocaleItem
implements Comparable
{
private Locale locale;
private int translated;
public LocaleItem(Locale locale, int translated)
{
this.locale = locale;
this.translated = translated;
}
@Override
public int compareTo(LocaleItem o)
{
return locale.getDisplayLanguage().compareTo(
o.locale.getDisplayLanguage());
}
}
/**
* 3-column layout to show the language in the current locale, the
* locale of the language itself and the percentage of translation.
*/
@SuppressWarnings("serial")
private static class LanguageDropDownRenderer
extends JPanel
implements ListCellRenderer
{
JLabel[] labels = new JLabel[3];
public LanguageDropDownRenderer()
{
setLayout(new GridLayout(0, 3));
for (int i = 0; i < labels.length; i++)
{
labels[i] = new JLabel();
add(labels[i]);
}
labels[2].setHorizontalAlignment(JLabel.RIGHT);
}
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus)
{
LocaleItem lm = (LocaleItem)value;
if (value != null)
{
labels[0].setText(lm.locale.getDisplayName());
labels[1].setText(lm.locale.getDisplayName(lm.locale));
labels[2].setText(Resources.getString(
"plugin.generalconfig.DEFAULT_LANGUAGE_TRANSLATED",
new String[]{
Integer.toString(lm.translated)
}));
}
else
{
labels[0].setText("");
labels[1].setText("");
labels[2].setText("");
}
this.setBackground(isSelected
? list.getSelectionBackground()
: list.getBackground());
return this;
}
}
/**
* Initializes the local configuration panel.
* @return the created component
*/
private Component createLocaleConfigPanel()
{
JPanel localeConfigPanel = GeneralConfigPluginActivator.
createConfigSectionComponent(
Resources.getString("plugin.generalconfig.DEFAULT_LANGUAGE"));
LanguagePack lp = ServiceUtils.getService(
GeneralConfigPluginActivator.bundleContext,
LanguagePack.class);
Map defaultRes = lp.getResources(Locale.ENGLISH);
Locale currentLocale = ConfigurationUtils.getCurrentLanguage();
LocaleItem currentLocaleItem = null;
java.util.List languages = new ArrayList();
Iterator iter = Resources.getResources().getAvailableLocales();
while (iter.hasNext())
{
Locale locale = iter.next();
// count the number of translated strings
Set res = lp.getResourceKeys(locale);
int count = 0;
for (String key : defaultRes.keySet())
{
if (res.contains(key))
{
count++;
}
}
LocaleItem li = new LocaleItem(
locale,
count * 100 / defaultRes.size());
languages.add(li);
if (locale.equals(currentLocale))
{
currentLocaleItem = li;
}
}
Collections.sort(languages);
final JComboBox localesConfigComboBox = new JComboBox();
localesConfigComboBox.setRenderer(new LanguageDropDownRenderer());
for (LocaleItem li : languages)
{
localesConfigComboBox.addItem(li);
}
localesConfigComboBox.setSelectedItem(currentLocaleItem);
localesConfigComboBox.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
GeneralConfigPluginActivator.getUIService().getPopupDialog().
showMessagePopupDialog(Resources.getString(
"plugin.generalconfig.DEFAULT_LANGUAGE_RESTART_WARN"));
LocaleItem li =
(LocaleItem)localesConfigComboBox.getSelectedItem();
ConfigurationUtils.setLanguage(li.locale);
}
});
localeConfigPanel.add(localesConfigComboBox);
String label = "* " +
Resources.getString(
"plugin.generalconfig.DEFAULT_LANGUAGE_RESTART_WARN");
JLabel warnLabel = new JLabel(label);
warnLabel.setToolTipText(label);
warnLabel.setForeground(Color.GRAY);
warnLabel.setFont(warnLabel.getFont().deriveFont(8));
warnLabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 8, 0));
warnLabel.setHorizontalAlignment(JLabel.RIGHT);
localeConfigPanel.add(warnLabel);
return localeConfigPanel;
}
/**
* Creates the call configuration panel.
*
* @return the call configuration panel
*/
private Component createCallConfigPanel()
{
JPanel callConfigPanel = GeneralConfigPluginActivator.
createConfigSectionComponent(
Resources.getString("service.gui.CALL"));
callConfigPanel.add(createNormalizeNumberCheckBox());
callConfigPanel.add(createAcceptPhoneNumberWithAlphaCharCheckBox());
return callConfigPanel;
}
/**
* Creates the normalized phone number check box.
*
* @return the created component
*/
private Component createNormalizeNumberCheckBox()
{
JPanel checkBoxPanel = new TransparentPanel(new BorderLayout());
SIPCommCheckBox formatPhoneNumber = new SIPCommCheckBox("",
ConfigurationUtils.isNormalizePhoneNumber());
formatPhoneNumber.setAlignmentY(Component.TOP_ALIGNMENT);
formatPhoneNumber.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
ConfigurationUtils.setNormalizePhoneNumber(
((JCheckBox)e.getSource()).isSelected());
}
});
StyledHTMLEditorPane checkBoxTextLabel = new StyledHTMLEditorPane();
checkBoxTextLabel.setContentType("text/html");
checkBoxTextLabel.appendToEnd(
"" + GeneralConfigPluginActivator.getResources().getI18NString(
"plugin.generalconfig.REMOVE_SPECIAL_PHONE_SYMBOLS") + "");
checkBoxTextLabel.setBorder(
BorderFactory.createEmptyBorder(3, 0, 0, 0));
checkBoxTextLabel.setOpaque(false);
checkBoxTextLabel.setEditable(false);
checkBoxPanel.add(formatPhoneNumber, BorderLayout.WEST);
checkBoxPanel.add(checkBoxTextLabel, BorderLayout.CENTER);
return checkBoxPanel;
}
/**
* Creates the accept phone number with alphabetical character check box.
*
* @return the created component
*/
private Component createAcceptPhoneNumberWithAlphaCharCheckBox()
{
JPanel checkBoxPanel = new TransparentPanel(new BorderLayout());
// Checkbox to accept string with alphabetical characters as potential
// phone numbers.
SIPCommCheckBox acceptPhoneNumberWithAlphaChars
= new SIPCommCheckBox("",
ConfigurationUtils.acceptPhoneNumberWithAlphaChars());
acceptPhoneNumberWithAlphaChars.setAlignmentY(Component.TOP_ALIGNMENT);
acceptPhoneNumberWithAlphaChars.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
ConfigurationUtils.setAcceptPhoneNumberWithAlphaChars(
((JCheckBox)e.getSource()).isSelected());
}
});
StyledHTMLEditorPane acceptPhoneNumberWithAlphaCharsTextLabel
= new StyledHTMLEditorPane();
acceptPhoneNumberWithAlphaCharsTextLabel.setContentType("text/html");
acceptPhoneNumberWithAlphaCharsTextLabel.appendToEnd(
""
+ GeneralConfigPluginActivator.getResources().getI18NString(
"plugin.generalconfig.ACCEPT_PHONE_NUMBER_WITH_ALPHA_CHARS")
+ "");
acceptPhoneNumberWithAlphaCharsTextLabel.setBorder(
BorderFactory.createEmptyBorder(3, 0, 0, 0));
acceptPhoneNumberWithAlphaCharsTextLabel.setOpaque(false);
acceptPhoneNumberWithAlphaCharsTextLabel.setEditable(false);
// The example of changing letters to numbers in a phone number.
String label = "* " + Resources.getString(
"plugin.generalconfig.ACCEPT_PHONE_NUMBER_WITH_ALPHA_CHARS_EXAMPLE");
JLabel exampleLabel = new JLabel(label);
exampleLabel.setToolTipText(label);
exampleLabel.setForeground(Color.GRAY);
exampleLabel.setFont(exampleLabel.getFont().deriveFont(8));
exampleLabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 8, 0));
exampleLabel.setHorizontalAlignment(JLabel.LEFT);
// Adds the components to the current panel.
checkBoxPanel.add(acceptPhoneNumberWithAlphaChars, BorderLayout.WEST);
checkBoxPanel.add(
acceptPhoneNumberWithAlphaCharsTextLabel,
BorderLayout.CENTER);
checkBoxPanel.add(
exampleLabel,
BorderLayout.SOUTH);
return checkBoxPanel;
}
/**
* Initializes the startup config panel.
* @return the created component
*/
public Component createStartupConfigPanel()
{
if (!OSUtils.IS_WINDOWS)
return null;
JPanel updateConfigPanel = GeneralConfigPluginActivator.
createConfigSectionComponent(
Resources.getString("plugin.generalconfig.STARTUP_CONFIG"));
updateConfigPanel.add(createAutoStartCheckBox());
updateConfigPanel.add(createUpdateCheckBox());
return updateConfigPanel;
}
/**
* Initializes the update check panel.
* @return the created component
*/
public Component createUpdateCheckBox()
{
JCheckBox updateCheckBox = new SIPCommCheckBox();
updateCheckBox.setText(
Resources.getString("plugin.generalconfig.CHECK_FOR_UPDATES"));
updateCheckBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
GeneralConfigPluginActivator.getConfigurationService()
.setProperty(
"net.java.sip.communicator.plugin.updatechecker.ENABLED",
Boolean.toString(
((JCheckBox)e.getSource()).isSelected()));
}
});
updateCheckBox.setSelected(
GeneralConfigPluginActivator.getConfigurationService().getBoolean((
"net.java.sip.communicator.plugin.updatechecker.ENABLED"), true));
return updateCheckBox;
}
/**
* Sets the auto start.
* @param isAutoStart indicates if the auto start property is set to true or
* false
* @throws Exception if something goes wrong when obtaining the canonical
* path or when creating or saving the shortcut
*/
private void setAutostart(boolean isAutoStart)
throws Exception
{
String workingDir = new File(".").getCanonicalPath();
WindowsStartup.setAutostart(
getApplicationName(), workingDir, isAutoStart);
}
}