package org.limewire.ui.swing.friends;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import org.limewire.ui.swing.action.AbstractAction;
import org.limewire.ui.swing.components.LimeJDialog;
import org.limewire.ui.swing.util.GuiUtils;
import static org.limewire.ui.swing.util.I18n.tr;
import org.limewire.util.Objects;
import org.limewire.friend.api.FriendConnection;
import net.miginfocom.swing.MigLayout;
/**
* Displays a dialog for adding a friend to the roster of an XMPP account.
*/
public class AddFriendDialog extends LimeJDialog {
public AddFriendDialog(final FriendConnection connection) {
super(GuiUtils.getMainFrame(), tr("Add Friend"));
// The dialog can only be popped up when the user is signed in, so
// connection should never be null
Objects.nonNull(connection, "connection");
setModalityType(ModalityType.MODELESS);
setLayout(new MigLayout());
setResizable(false);
JLabel usernameLabel = new JLabel(tr("Username:"));
JLabel nicknameLabel = new JLabel(tr("Nickname:"));
final JTextField usernameField = new JTextField(18);
final JTextField nicknameField = new JTextField(18);
final Action okAction = new AbstractAction(tr("Add Friend")) {
@Override
public void actionPerformed(ActionEvent e) {
if(!isEnabled()) {
return;
}
// If the user didn't enter a domain, use the service name
String user = usernameField.getText().trim();
if(user.indexOf('@') == -1)
user += "@" + connection.getConfiguration().getServiceName();
final String username = user;
// If the user didn't enter a nickname, use the username
String nick = nicknameField.getText().trim();
if(nick.equals(""))
nick = usernameField.getText();
final String nickname = nick;
setVisible(false);
dispose();
connection.addNewFriend(username, nickname);
}
};
JButton ok = new JButton(okAction);
okAction.setEnabled(false); // Disable until a username is entered
usernameField.addActionListener(okAction);
nicknameField.addActionListener(okAction);
final JButton cancel = new JButton(tr("Cancel"));
cancel.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
setVisible(false);
dispose();
}
});
// Disable the OK button when the username field is empty
usernameField.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void changedUpdate(DocumentEvent e) {
checkIfEmpty();
}
@Override
public void insertUpdate(DocumentEvent e) {
checkIfEmpty();
}
@Override
public void removeUpdate(DocumentEvent e) {
checkIfEmpty();
}
private void checkIfEmpty() {
okAction.setEnabled(!usernameField.getText().trim().equals(""));
}
});
add(usernameLabel);
add(usernameField, "span, wrap");
add(nicknameLabel);
add(nicknameField, "span, wrap");
add(ok, "cell 1 2");
add(cancel, "cell 2 2");
pack();
setLocationRelativeTo(GuiUtils.getMainFrame());
setVisible(true);
}
}