/*
* 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.impl.gui.main.chat.conference;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import net.java.sip.communicator.impl.gui.*;
import net.java.sip.communicator.impl.gui.utils.*;
import net.java.sip.communicator.plugin.desktoputil.*;
import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.util.skin.*;
/**
* The dialog that pops up when a chat room invitation is received.
*
* @author Yana Stamcheva
* @author Valentin Martinet
* @author Adam Netocny
*/
public class InvitationReceivedDialog
extends SIPCommDialog
implements ActionListener,
Skinnable
{
private final JTextArea infoTextArea = new JTextArea();
private final JTextArea invitationReasonTextArea = new JTextArea();
private final JPanel reasonPanel = new JPanel(new BorderLayout());
private final JLabel reasonLabel = new JLabel(
GuiActivator.getResources().getI18NString("service.gui.REASON") + ": ");
private final JTextField reasonField = new JTextField();
private final JPanel dataPanel = new JPanel(new BorderLayout(10, 10));
private final JPanel buttonsPanel
= new JPanel(new FlowLayout(FlowLayout.RIGHT));
private final JButton acceptButton = new JButton(
GuiActivator.getResources().getI18NString("service.gui.ACCEPT"));
private final JButton rejectButton = new JButton(
GuiActivator.getResources().getI18NString("service.gui.REJECT"));
private final JButton ignoreButton = new JButton(
GuiActivator.getResources().getI18NString("service.gui.IGNORE"));
private final JPanel mainPanel = new JPanel(new BorderLayout(10, 10));
private final JPanel northPanel = new JPanel(new BorderLayout(10, 10));
private final JLabel iconLabel = new JLabel(new ImageIcon(
ImageLoader.getImage(ImageLoader.INVITE_DIALOG_ICON)));
private final String title = GuiActivator.getResources()
.getI18NString("service.gui.INVITATION_RECEIVED");
/**
* The <tt>ChatRoomInvitation</tt> for which this dialog is.
*/
private ChatRoomInvitation invitation = null;;
/**
* The <tt>AdHocChatRoomInvitation</tt> for which this dialog is, in case of
* an <tt>AdHocChatRoom</tt>.
*/
private AdHocChatRoomInvitation invitationAdHoc = null;
/**
* The <tt>MultiUserChatManager</tt> is the one that deals with invitation
* events.
*/
private final ConferenceChatManager multiUserChatManager;
/**
* The operation set that would handle the rejection if the user choose to
* reject the invitation.
*/
private OperationSetMultiUserChat multiUserChatOpSet = null;;
/**
* The operation set that would handle the rejection if the user choose to
* reject the invitation, in case of an <tt>AdHocChatRoom</tt>.
*/
private OperationSetAdHocMultiUserChat multiUserChatAdHocOpSet = null;;
/**
* Constructs the <tt>ChatInviteDialog</tt>.
*
* @param multiUserChatManager the <tt>MultiUserChatManager</tt> is the one
* that deals with invitation events
* @param multiUserChatOpSet the operation set that would handle the
* rejection if the user choose to reject the invitation
* @param invitation the invitation that this dialog represents
*/
public InvitationReceivedDialog (ConferenceChatManager multiUserChatManager,
OperationSetMultiUserChat multiUserChatOpSet,
ChatRoomInvitation invitation)
{
super(GuiActivator.getUIService().getMainFrame());
this.multiUserChatManager = multiUserChatManager;
this.multiUserChatOpSet = multiUserChatOpSet;
this.invitation = invitation;
this.setModal(false);
this.setTitle(title);
this.mainPanel.setPreferredSize(new Dimension(400, 230));
// this.mainPanel.setOpaque(false);
infoTextArea.setText(
GuiActivator.getResources().getI18NString(
"service.gui.INVITATION_RECEIVED_MSG",
new String[] { invitation.getInviter(),
invitation.getTargetChatRoom().getName()}));
if(invitation.getReason() != null && invitation.getReason().length() > 0)
{
this.invitationReasonTextArea.setLineWrap(true);
this.invitationReasonTextArea.setWrapStyleWord(true);
this.invitationReasonTextArea.setOpaque(false);
this.invitationReasonTextArea.setEditable(false);
TitledBorder border =
BorderFactory.createTitledBorder(
GuiActivator.getResources()
.getI18NString("service.gui.INVITATION"));
border.setTitleFont(border.getTitleFont().deriveFont(Font.BOLD));
invitationReasonTextArea.setBorder(border);
invitationReasonTextArea.setText(invitation.getReason());
this.dataPanel.add(invitationReasonTextArea, BorderLayout.CENTER);
}
this.initGUI();
}
/**
* Constructs the <tt>ChatInviteDialog</tt>, in case of an
* <tt>AdHocChatRoom</tt>.
*
* @param multiUserChatManager the <tt>MultiUserChatManager</tt> is the one
* that deals with invitation events
* @param multiUserChatAdHocOpSet the operation set that would handle the
* rejection if the user choose to reject the invitation
* @param invitationAdHoc the invitation that this dialog represents
*/
public InvitationReceivedDialog (ConferenceChatManager multiUserChatManager,
OperationSetAdHocMultiUserChat multiUserChatAdHocOpSet,
AdHocChatRoomInvitation invitationAdHoc)
{
super(GuiActivator.getUIService().getMainFrame());
this.multiUserChatManager = multiUserChatManager;
this.multiUserChatAdHocOpSet = multiUserChatAdHocOpSet;
this.invitationAdHoc = invitationAdHoc;
this.setModal(false);
this.setTitle(title);
this.mainPanel.setPreferredSize(new Dimension(400, 230));
// this.mainPanel.setOpaque(false);
infoTextArea.setText(
GuiActivator.getResources().getI18NString(
"service.gui.INVITATION_RECEIVED_MSG",
new String[] {
invitationAdHoc.getInviter(),
invitationAdHoc.getTargetAdHocChatRoom().getName()}));
if(invitationAdHoc.getReason() != null
&& !invitationAdHoc.getReason().equals(""))
{
invitationReasonTextArea.setText(invitationAdHoc.getReason());
invitationReasonTextArea.setBorder(
BorderFactory.createTitledBorder(
GuiActivator.getResources()
.getI18NString("service.gui.INVITATION")));
this.dataPanel.add(invitationReasonTextArea, BorderLayout.CENTER);
}
this.initGUI();
}
/**
* Initializes and builds the GUI.
*/
public void initGUI()
{
this.infoTextArea.setFont(infoTextArea.getFont().deriveFont(Font.BOLD));
this.infoTextArea.setLineWrap(true);
this.infoTextArea.setOpaque(false);
this.infoTextArea.setWrapStyleWord(true);
this.infoTextArea.setEditable(false);
this.northPanel.add(iconLabel, BorderLayout.WEST);
this.northPanel.add(infoTextArea, BorderLayout.CENTER);
this.northPanel.setOpaque(false);
this.reasonPanel.add(reasonLabel, BorderLayout.WEST);
this.reasonPanel.add(reasonField, BorderLayout.CENTER);
this.reasonPanel.setOpaque(false);
this.dataPanel.add(reasonPanel, BorderLayout.SOUTH);
this.dataPanel.setOpaque(false);
this.acceptButton.addActionListener(this);
this.rejectButton.addActionListener(this);
this.ignoreButton.addActionListener(this);
this.buttonsPanel.add(acceptButton);
this.buttonsPanel.add(rejectButton);
this.buttonsPanel.add(ignoreButton);
this.buttonsPanel.setOpaque(false);
this.getRootPane().setDefaultButton(acceptButton);
this.acceptButton.setMnemonic(
GuiActivator.getResources().getI18nMnemonic("service.gui.ACCEPT"));
this.rejectButton.setMnemonic(
GuiActivator.getResources().getI18nMnemonic("service.gui.REJECT"));
this.ignoreButton.setMnemonic(
GuiActivator.getResources().getI18nMnemonic("service.gui.IGNORE"));
this.mainPanel.setBorder(
BorderFactory.createEmptyBorder(15, 15, 15, 15));
this.mainPanel.add(northPanel, BorderLayout.NORTH);
this.mainPanel.add(dataPanel, BorderLayout.CENTER);
this.mainPanel.add(buttonsPanel, BorderLayout.SOUTH);
this.mainPanel.setOpaque(false);
this.getContentPane().add(mainPanel);
this.pack();
}
/**
* Handles the <tt>ActionEvent</tt> triggered when one user clicks
* on one of the buttons.
* @param e the event.
*/
public void actionPerformed(ActionEvent e)
{
JButton button = (JButton)e.getSource();
if (button.equals(acceptButton))
{
if(invitationAdHoc == null)
GuiActivator.getMUCService().acceptInvitation(invitation);
else
try
{
multiUserChatManager.acceptInvitation(
invitationAdHoc, multiUserChatAdHocOpSet);
} catch (OperationFailedException e1)
{
e1.printStackTrace();
}
}
else if (button.equals(rejectButton))
{
if(multiUserChatAdHocOpSet == null && invitationAdHoc == null)
GuiActivator.getMUCService().rejectInvitation(
multiUserChatOpSet, invitation, reasonField.getText());
else
multiUserChatManager.rejectInvitation(multiUserChatAdHocOpSet,
invitationAdHoc, reasonField.getText());
}
this.dispose();
}
/**
* Disposes this dialog when it's closed.
*
* @param isEscaped indicates if the dialog was close by pressing the Esc
* key
*/
@Override
protected void close(boolean isEscaped)
{
this.dispose();
}
/**
* Reloads icon label.
*/
public void loadSkin()
{
iconLabel.setIcon(new ImageIcon(
ImageLoader.getImage(ImageLoader.INVITE_DIALOG_ICON)));
}
}