/*
* $Id$
*
* Copyright (c) 2000-2007 by Rodney Kinney
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License (LGPL) as published by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, copies are available
* at http://www.opensource.org.
*/
package VASSAL.chat.ui;
import java.awt.event.ActionEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.net.URL;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JToolBar;
import javax.swing.SwingUtilities;
import VASSAL.build.module.ServerConnection;
import VASSAL.chat.ChatServerConnection;
import VASSAL.i18n.Resources;
/** Adds Connect/Disconnect button to the server controls toolbar */
public class BasicChatControlsInitializer implements ChatControlsInitializer {
private Action connectAction;
private Action disconnectAction;
private ChatServerConnection client;
private JButton connectButton;
private JButton disconnectButton;
private PropertyChangeListener connectionListener;
public BasicChatControlsInitializer(ChatServerConnection client) {
super();
this.client = client;
}
public void initializeControls(final ChatServerControls controls) {
JToolBar toolbar = controls.getToolbar();
connectAction = new AbstractAction(
Resources.getString("Chat.connect")) { //$NON-NLS-1$
private static final long serialVersionUID = 1L;
public void actionPerformed(ActionEvent evt) {
client.setConnected(true);
}
};
URL imageURL = getClass().getResource("/images/connect.gif"); //$NON-NLS-1$
if (imageURL != null) {
connectAction.putValue(Action.SHORT_DESCRIPTION, connectAction.getValue(Action.NAME));
connectAction.putValue(Action.NAME, ""); //$NON-NLS-1$
connectAction.putValue(Action.SMALL_ICON, new ImageIcon(imageURL));
}
connectAction.setEnabled(true);
disconnectAction = new AbstractAction(
Resources.getString("Chat.disconnect")) { //$NON-NLS-1$
private static final long serialVersionUID = 1L;
public void actionPerformed(ActionEvent evt) {
client.setConnected(false);
}
};
imageURL = getClass().getResource("/images/disconnect.gif"); //$NON-NLS-1$
if (imageURL != null) {
disconnectAction.putValue(Action.SHORT_DESCRIPTION, disconnectAction.getValue(Action.NAME));
disconnectAction.putValue(Action.NAME, ""); //$NON-NLS-1$
disconnectAction.putValue(Action.SMALL_ICON, new ImageIcon(imageURL));
}
disconnectAction.setEnabled(false);
connectButton = toolbar.add(connectAction);
disconnectButton = toolbar.add(disconnectAction);
connectionListener = new PropertyChangeListener() {
public void propertyChange(final PropertyChangeEvent evt) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
boolean connected = Boolean.TRUE.equals(evt.getNewValue());
connectAction.setEnabled(!connected);
disconnectAction.setEnabled(connected);
if (!connected) {
controls.getRoomTree().setRooms(new VASSAL.chat.Room[0]);
controls.getCurrentRoom().setRooms(new VASSAL.chat.Room[0]);
}
}
});
}
};
client.addPropertyChangeListener(
ServerConnection.CONNECTED, connectionListener);
}
public void uninitializeControls(ChatServerControls controls) {
controls.getToolbar().remove(connectButton);
controls.getToolbar().remove(disconnectButton);
}
}