package org.limewire.ui.swing;
import java.awt.BorderLayout;
import java.awt.Insets;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import org.limewire.service.MessageCallback;
import org.limewire.service.Switch;
import org.limewire.ui.swing.components.FocusJOptionPane;
import org.limewire.ui.swing.components.HTMLLabel;
import org.limewire.ui.swing.components.MultiLineLabel;
import org.limewire.ui.swing.util.GuiUtils;
import org.limewire.ui.swing.util.I18n;
/**
* Displays messages to the user using the standard LimeWire messaging service
* classes.
*/
public class MessageHandler implements MessageCallback {
@Override
public void showError(final String error) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
FocusJOptionPane.showMessageDialog(GuiUtils.getMainFrame(), getLabel(I18n
.tr(error)), I18n.tr("Error"), JOptionPane.ERROR_MESSAGE);
}
});
}
@Override
public void showError(final String error, final Switch ignore) {
if (!ignore.getValue()) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
FocusJOptionPane.showMessageDialog(GuiUtils.getMainFrame(), getLabel(I18n
.tr(error)), I18n.tr("Error"), JOptionPane.ERROR_MESSAGE);
}
});
}
}
@Override
public void showMessage(final String message) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
FocusJOptionPane.showMessageDialog(GuiUtils.getMainFrame(), getLabel(I18n
.tr(message)), I18n.tr("Message"), JOptionPane.INFORMATION_MESSAGE);
}
});
}
@Override
public void showMessage(final String message, final Switch ignore) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
FocusJOptionPane.showMessageDialog(GuiUtils.getMainFrame(), getLabel(I18n
.tr(message)), I18n.tr("Message"), JOptionPane.INFORMATION_MESSAGE);
}
});
}
@Override
public void showFormattedError(final String error, final Object... args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
FocusJOptionPane.showMessageDialog(GuiUtils.getMainFrame(), getLabel(I18n.tr(
error, args)), I18n.tr("Error"), JOptionPane.ERROR_MESSAGE);
}
});
}
@Override
public void showFormattedError(final String error, final Switch ignore, final Object... args) {
if (!ignore.getValue()) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
FocusJOptionPane.showMessageDialog(GuiUtils.getMainFrame(),
doNotDisplayAgainLabel(I18n.tr(error, args), ignore), I18n
.tr("Error"), JOptionPane.ERROR_MESSAGE);
}
});
}
}
@Override
public void showFormattedMessage(final String message, final Object... args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
FocusJOptionPane.showMessageDialog(GuiUtils.getMainFrame(), getLabel(I18n.tr(
message, args)), I18n.tr("Message"), JOptionPane.INFORMATION_MESSAGE);
}
});
}
@Override
public void showFormattedMessage(final String message, final Switch ignore,
final Object... args) {
if (!ignore.getValue()) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
FocusJOptionPane.showMessageDialog(GuiUtils.getMainFrame(),
doNotDisplayAgainLabel(I18n.tr(message, args), ignore), I18n
.tr("Message"), JOptionPane.INFORMATION_MESSAGE);
}
});
}
}
private final JComponent doNotDisplayAgainLabel(final String message, final Switch setting) {
JPanel thePanel = new JPanel(new BorderLayout(0, 15));
JCheckBox option = new JCheckBox(I18n.tr("Do not display this message again"));
JComponent lbl = getLabel(message);
thePanel.add(lbl, BorderLayout.NORTH);
thePanel.add(option, BorderLayout.WEST);
option.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
setting.setValue(e.getStateChange() == ItemEvent.SELECTED);
}
});
return thePanel;
}
private JComponent getLabel(String message) {
if (message.startsWith("<html")) {
HTMLLabel label = new HTMLLabel(message);
label.setMargin(new Insets(5, 5, 5, 5));
return label;
} else {
return new MultiLineLabel(message, 400);
}
}
}