/** * 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.chat; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; import net.java.sip.communicator.plugin.desktoputil.*; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.util.*; /** * Dialog with fields for nickname and subject. * * @author Hristo Terezov */ public class ChatRoomJoinOptionsDialog extends ChatOperationReasonDialog { /** * Serial id. */ private static final long serialVersionUID = -916498752420264164L; /** * Text field for the subject. */ private SIPCommTextField subject = new SIPCommTextField(DesktopUtilActivator .getResources().getI18NString("service.gui.SUBJECT")); /** * Label that hides and shows the subject fields panel on click. */ private JLabel cmdExpandSubjectFields; /** * Panel that holds the subject fields. */ private JPanel subjectFieldsPannel = new JPanel(new BorderLayout()); /** * Adds the subject fields to dialog. Sets action listeners. * * @param title the title of the dialog * @param message the message shown in this dialog * @param disableOKIfReasonIsEmpty if true the OK button will be * disabled if the reason text is empty. * @param showReasonLabel specify if we want the "Reason:" label * @param dontDisplaySubjectFields if true the sibject fields will be * hidden. */ public ChatRoomJoinOptionsDialog(String title, String message, boolean showReasonLabel, boolean disableOKIfReasonIsEmpty, boolean dontDisplaySubjectFields) { super(title, message, showReasonLabel, disableOKIfReasonIsEmpty); if(dontDisplaySubjectFields) return; JPanel subjectPanel = new JPanel(new BorderLayout()); subjectPanel.setOpaque(false); subjectPanel.setBorder( BorderFactory.createEmptyBorder(10, 0, 0, 0)); subjectFieldsPannel.setBorder( BorderFactory.createEmptyBorder(10, 30, 0, 0)); subjectFieldsPannel.setOpaque(false); subjectFieldsPannel.add(subject, BorderLayout.CENTER); subjectFieldsPannel.setVisible(false); subject.setFont(getFont().deriveFont(12f)); cmdExpandSubjectFields = new JLabel(); cmdExpandSubjectFields.setBorder(new EmptyBorder(0, 5, 0, 0)); cmdExpandSubjectFields.setIcon(DesktopUtilActivator.getResources() .getImage("service.gui.icons.RIGHT_ARROW_ICON")); cmdExpandSubjectFields.setText(DesktopUtilActivator .getResources().getI18NString("service.gui.SET_SUBJECT")); cmdExpandSubjectFields.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { cmdExpandSubjectFields.setIcon( UtilActivator.getResources().getImage( subjectFieldsPannel.isVisible() ? "service.gui.icons.RIGHT_ARROW_ICON" : "service.gui.icons.DOWN_ARROW_ICON")); subjectFieldsPannel.setVisible( !subjectFieldsPannel.isVisible()); pack(); } }); subjectPanel.add(cmdExpandSubjectFields,BorderLayout.NORTH); subjectPanel.add(subjectFieldsPannel,BorderLayout.CENTER); addToReasonFieldPannel(subjectPanel); this.pack(); } /** * Returns the text entered in the subject field. * * @return the text from the subject field. */ public String getSubject() { return subject.getText(); } /** * Opens a dialog with a fields for the nickname and the subject of the room * and returns them. * * @param pps the protocol provider associated with the chat room. * @param chatRoomId the id of the chat room. * @param defaultNickname the nickname to show if any * @return array with the nickname and subject values. */ public static String[] getJoinOptions(ProtocolProviderService pps, String chatRoomId, String defaultNickname) { return getJoinOptions(false, pps, chatRoomId, defaultNickname); } /** * Opens a dialog with a fields for the nickname and the subject of the room * and returns them. * * @param dontDisplaySubjectFields if true the subject fields will be hidden * @param pps the protocol provider associated with the chat room. * @param chatRoomId the id of the chat room. * @param defaultNickname the nickname to show if any * @return array with the nickname and subject values. */ public static String[] getJoinOptions(boolean dontDisplaySubjectFields, ProtocolProviderService pps, String chatRoomId, String defaultNickname) { String nickName = null; ChatRoomJoinOptionsDialog reasonDialog = new ChatRoomJoinOptionsDialog(DesktopUtilActivator.getResources() .getI18NString("service.gui.CHANGE_NICKNAME"), DesktopUtilActivator.getResources().getI18NString( "service.gui.CHANGE_NICKNAME_LABEL"), false, true, dontDisplaySubjectFields); reasonDialog.setIcon(new ImageIcon(DesktopUtilActivator.getImage( "service.gui.icons.CHANGE_NICKNAME_16x16"))); if(defaultNickname != null) reasonDialog.setReasonFieldText(defaultNickname); int result = reasonDialog.showDialog(); if (result == MessageDialog.OK_RETURN_CODE) { nickName = reasonDialog.getReason().trim(); ConfigurationUtils.updateChatRoomProperty( pps, chatRoomId, "userNickName", nickName); } String[] joinOptions = {nickName, reasonDialog.getSubject()}; return joinOptions; } }