package org.limewire.ui.swing.friends.login;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import javax.swing.Action;
import javax.swing.Icon;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import net.miginfocom.swing.MigLayout;
import org.jdesktop.application.Resource;
import org.jdesktop.swingx.JXButton;
import org.limewire.friend.api.FriendConnectionFactory;
import org.limewire.ui.swing.action.AbstractAction;
import org.limewire.ui.swing.components.decorators.ButtonDecorator;
import org.limewire.ui.swing.friends.settings.FriendAccountConfiguration;
import org.limewire.ui.swing.friends.settings.FriendAccountConfigurationManager;
import org.limewire.ui.swing.util.GuiUtils;
import org.limewire.ui.swing.util.I18n;
import org.limewire.ui.swing.util.ResizeUtils;
import com.google.inject.Inject;
import com.google.inject.Provider;
public class ServiceSelectionLoginPanel extends JPanel {
public static final String CONFIG = "limewire.configProperty";
@Resource Color labelTextForeground;
@Resource Font labelTextFont;
@Resource Color messageTextForeground;
@Resource Font messageTextFont;
@Resource private Icon shareIcon;
@Resource private Icon browseIcon;
@Resource private Icon chatIcon;
private final LoginPopupPanel parent;
private final Provider<XMPPUserEntryLoginPanelFactory> xmppLoginPanelFactory;
private final Map<FriendAccountConfiguration, Action> loginActions = new HashMap<FriendAccountConfiguration, Action>();
@Inject
public ServiceSelectionLoginPanel(LoginPopupPanel parent, FriendAccountConfigurationManager accountManager,
ButtonDecorator buttonDecorator, FriendConnectionFactory friendConnectionFactory,
Provider<XMPPUserEntryLoginPanelFactory> xmppLoginPanelFactory) {
super(new BorderLayout());
setOpaque(false);
GuiUtils.assignResources(this);
this.parent = parent;
this.xmppLoginPanelFactory = xmppLoginPanelFactory;
JPanel topPanel = new JPanel(new MigLayout("insets 0, gap 0, alignx center, flowy"));
JLabel shareLabel = new JLabel(I18n.tr("Share"));
shareLabel.setFont(labelTextFont);
shareLabel.setForeground(labelTextForeground);
topPanel.add(shareLabel, "gaptop 8");
JLabel shareIconLabel = new JLabel(shareIcon);
topPanel.add(shareIconLabel, "gapright 14, wrap");
JLabel browseLabel = new JLabel(I18n.tr("Browse"));
browseLabel.setFont(labelTextFont);
browseLabel.setForeground(labelTextForeground);
topPanel.add(browseLabel);
JLabel browseIconLabel = new JLabel(browseIcon);
topPanel.add(browseIconLabel, "gapright 14, wrap");
JLabel chatLabel = new JLabel(I18n.tr("Chat"));
chatLabel.setFont(labelTextFont);
chatLabel.setForeground(labelTextForeground);
topPanel.add(chatLabel);
JLabel chatIconLabel = new JLabel(chatIcon);
topPanel.add(chatIconLabel);
JPanel centerPanel = new JPanel(new MigLayout("gap 0, insets 15 0 0 0, align center"));
JLabel signOnMessageLabel = new JLabel(I18n.tr("Share with friends on LimeWire with the following:"));
signOnMessageLabel.setOpaque(false);
signOnMessageLabel.setForeground(messageTextForeground);
signOnMessageLabel.setFont(messageTextFont);
centerPanel.add(signOnMessageLabel);
JPanel bottomPanel = new JPanel(new MigLayout("gap 0, insets 0, align center"));
bottomPanel.setOpaque(false);
Action loginAction = new ServiceAction(accountManager.getConfig("Gmail"));
loginActions.put(accountManager.getConfig("Gmail"), loginAction);
JXButton gmailButton = new JXButton(loginAction);
loginAction = new ServiceAction(accountManager.getConfig("LiveJournal"));
loginActions.put(accountManager.getConfig("LiveJournal"), loginAction);
JXButton liveJournalButton = new JXButton(loginAction);
loginAction = new ServiceAction(I18n.tr("Other"), accountManager.getConfig("Jabber"));
loginActions.put(accountManager.getConfig("Jabber"), loginAction);
JXButton otherButton = new JXButton(loginAction);
ResizeUtils.forceSize(gmailButton, new Dimension(180, 58));
ResizeUtils.forceSize(liveJournalButton, new Dimension(180, 58));
ResizeUtils.forceSize(otherButton, new Dimension(180, 58));
buttonDecorator.decorateFlatButton(gmailButton);
buttonDecorator.decorateFlatButton(liveJournalButton);
buttonDecorator.decorateFlatButton(otherButton);
JPanel selectionPanel = new JPanel(new MigLayout("nogrid, gap 0, insets 0 0 30 0, alignx center, filly"));
selectionPanel.setOpaque(false);
selectionPanel.add(gmailButton, "gaptop 10, gapright 30");
selectionPanel.add(liveJournalButton, "wrap");
selectionPanel.add(otherButton, "gaptop 30, alignx center");
bottomPanel.add(selectionPanel);
add(topPanel, BorderLayout.NORTH);
add(centerPanel, BorderLayout.CENTER);
add(bottomPanel, BorderLayout.SOUTH);
}
private class ServiceAction extends AbstractAction {
public ServiceAction(FriendAccountConfiguration config) {
super(config.getLabel(), config.getLargeIcon());
putValue(CONFIG, config);
}
public ServiceAction(String nameOverride, FriendAccountConfiguration config) {
super(nameOverride, config.getLargeIcon());
putValue(CONFIG, config);
}
@Override
public void actionPerformed(ActionEvent arg0) {
FriendAccountConfiguration config = (FriendAccountConfiguration)getValue(CONFIG);
JComponent component = xmppLoginPanelFactory.get().create(config);
parent.setLoginComponent(component);
}
}
public Map<FriendAccountConfiguration, Action> getLoginActions() {
return Collections.unmodifiableMap(loginActions);
}
}