/*
* 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.presence;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import org.jitsi.service.resources.*;
import net.java.sip.communicator.plugin.desktoputil.*;
import net.java.sip.communicator.util.skin.*;
/**
* The <tt>NewStatusMessageDialog</tt> is the dialog containing the form for
* changing the status message for a protocol provider.
*
* @author Yana Stamcheva
* @author Adam Netocny
*/
public class NewStatusMessageDialog
extends SIPCommDialog
implements ActionListener,
Skinnable
{
/**
* The icon.
*/
private final static String RENAME_DIALOG_ICON =
"service.gui.icons.RENAME_DIALOG_ICON";
/**
* The field, containing the status message.
*/
private final JTextField messageTextField = new JTextField();
/**
* The button, used to cancel this dialog.
*/
private final JButton cancelButton
= new JButton(
DesktopUtilActivator.getResources().getI18NString(
"service.gui.CANCEL"));
/**
* The current status message.
*/
private final String currentStatusMessage;
/**
* Message panel.
*/
private JPanel messagePanel;
/**
* The parent menu.
*/
private final AbstractStatusMessageMenu parentMenu;
/**
* A checkbox when checked, the new message will be saved.
*/
private JCheckBox saveNewMessage;
/**
* Creates an instance of <tt>NewStatusMessageDialog</tt>.
*
* @param currentStatusMessage the current status message.
*/
public NewStatusMessageDialog(String currentStatusMessage,
AbstractStatusMessageMenu parentMenu)
{
super(false);
this.currentStatusMessage = currentStatusMessage;
this.parentMenu = parentMenu;
this.init();
pack();
}
/**
* Initializes the <tt>NewStatusMessageDialog</tt> by adding the buttons,
* fields, etc.
*/
private void init()
{
ResourceManagementService r = DesktopUtilActivator.getResources();
JLabel messageLabel
= new JLabel(r.getI18NString("service.gui.NEW_STATUS_MESSAGE"));
JPanel dataPanel
= new TransparentPanel(new BorderLayout(5, 5));
JTextArea infoArea
= new JTextArea(r.getI18NString("service.gui.STATUS_MESSAGE_INFO"));
JLabel infoTitleLabel
= new JLabel(r.getI18NString("service.gui.NEW_STATUS_MESSAGE"));
JPanel labelsPanel = new TransparentPanel(new GridLayout(0, 1));
JButton okButton = new JButton(r.getI18NString("service.gui.OK"));
JPanel buttonsPanel
= new TransparentPanel(new FlowLayout(FlowLayout.RIGHT));
saveNewMessage
= new JCheckBox(
r.getI18NString("service.gui.NEW_STATUS_MESSAGE_SAVE"));
this.setTitle(r.getI18NString("service.gui.NEW_STATUS_MESSAGE"));
this.getRootPane().setDefaultButton(okButton);
this.setPreferredSize(new Dimension(550, 200));
infoArea.setEditable(false);
infoArea.setLineWrap(true);
infoArea.setWrapStyleWord(true);
infoArea.setOpaque(false);
dataPanel.add(messageLabel, BorderLayout.WEST);
messageTextField.setText(currentStatusMessage);
dataPanel.add(messageTextField, BorderLayout.CENTER);
infoTitleLabel.setHorizontalAlignment(JLabel.CENTER);
infoTitleLabel.setFont(
infoTitleLabel.getFont().deriveFont(Font.BOLD, 18.0f));
saveNewMessage.setSelected(true);
JPanel saveToCustomPanel
= new TransparentPanel(new FlowLayout(FlowLayout.RIGHT));
saveToCustomPanel.add(saveNewMessage);
labelsPanel.add(infoTitleLabel);
labelsPanel.add(infoArea);
labelsPanel.add(dataPanel);
labelsPanel.add(saveToCustomPanel);
messagePanel = new TransparentPanel(new GridBagLayout());
GridBagConstraints messagePanelConstraints = new GridBagConstraints();
messagePanelConstraints.anchor = GridBagConstraints.NORTHWEST;
messagePanelConstraints.fill = GridBagConstraints.NONE;
messagePanelConstraints.gridx = 0;
messagePanelConstraints.gridy = 0;
messagePanelConstraints.insets = new Insets(5, 0, 5, 10);
messagePanelConstraints.weightx = 0;
messagePanelConstraints.weighty = 0;
messagePanel
.add(new ImageCanvas(
DesktopUtilActivator.getImage(RENAME_DIALOG_ICON)),
messagePanelConstraints);
messagePanelConstraints.anchor = GridBagConstraints.NORTH;
messagePanelConstraints.fill = GridBagConstraints.HORIZONTAL;
messagePanelConstraints.gridx = 1;
messagePanelConstraints.insets = new Insets(0, 0, 0, 0);
messagePanelConstraints.weightx = 1;
messagePanel.add(labelsPanel, messagePanelConstraints);
okButton.setName("ok");
cancelButton.setName("cancel");
okButton.setMnemonic(r.getI18nMnemonic("service.gui.OK"));
cancelButton.setMnemonic(r.getI18nMnemonic("service.gui.CANCEL"));
okButton.addActionListener(this);
cancelButton.addActionListener(this);
buttonsPanel.add(okButton);
buttonsPanel.add(cancelButton);
JPanel mainPanel = new TransparentPanel(new GridBagLayout());
mainPanel.setBorder(BorderFactory.createEmptyBorder(5, 10, 0, 10));
GridBagConstraints mainPanelConstraints = new GridBagConstraints();
mainPanelConstraints.anchor = GridBagConstraints.NORTH;
mainPanelConstraints.fill = GridBagConstraints.BOTH;
mainPanelConstraints.gridx = 0;
mainPanelConstraints.gridy = 0;
mainPanelConstraints.weightx = 1;
mainPanelConstraints.weighty = 1;
mainPanel.add(messagePanel, mainPanelConstraints);
mainPanelConstraints.anchor = GridBagConstraints.SOUTHEAST;
mainPanelConstraints.fill = GridBagConstraints.NONE;
mainPanelConstraints.gridy = 1;
mainPanelConstraints.weightx = 0;
mainPanelConstraints.weighty = 0;
mainPanel.add(buttonsPanel, mainPanelConstraints);
this.getContentPane().add(mainPanel);
}
/**
* Handles the <tt>ActionEvent</tt>. In order to change the status message
* with the new one calls the <tt>PublishStatusMessageThread</tt>.
*
* @param e the event that notified us of the action
*/
@Override
public void actionPerformed(ActionEvent e)
{
JButton button = (JButton)e.getSource();
String name = button.getName();
if (name.equals("ok"))
{
parentMenu.setCurrentMessage(messageTextField.getText(),
parentMenu.getNewMessageItem(),
saveNewMessage.isSelected());
parentMenu.publishStatusMessage(messageTextField.getText(),
parentMenu.getNewMessageItem(),
saveNewMessage.isSelected());
}
this.dispose();
}
/**
* Requests the focus in the text field contained in this
* dialog.
*/
public void requestFocusInField()
{
this.messageTextField.requestFocus();
}
/**
* Artificially clicks the cancel button when this panel is escaped.
* @param isEscaped indicates if this dialog is closed by the Esc shortcut
*/
@Override
protected void close(boolean isEscaped)
{
if (isEscaped)
cancelButton.doClick();
}
/**
* Reloads icon.
*/
public void loadSkin()
{
if(messagePanel != null)
{
for(Component component : messagePanel.getComponents())
{
if(component instanceof ImageCanvas)
{
ImageCanvas cmp = (ImageCanvas)component;
cmp.setImage(
DesktopUtilActivator.getImage(RENAME_DIALOG_ICON));
}
}
}
}
}