package com.limegroup.gnutella.gui;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.border.Border;
/**
* Dialog for upgrading.
*/
//2345678|012345678|012345678|012345678|012345678|012345678|012345678|012345678|
final class UpgradeWindow {
/**
* Constant handle to the <tt>JDialog</tt> that contains about
* information.
*/
private JDialog dialog;
/**
* Constant handle to the main <tt>BoxPanel</tt> instance.
*/
private final BoxPanel MAIN_PANEL = new BoxPanel(BoxPanel.Y_AXIS);
/**
* Constant handle to the <tt>ImageIcon</tt> to use for the about
* window.
*/
private final ImageIcon ICON =
GUIMediator.getThemeImage("searching");
/**
* Constant dimension for the dialog.
*/
private final Dimension DIALOG_DIMENSION = new Dimension(380, 180);
/**
* Constructs the elements of the about window.
*/
UpgradeWindow(boolean pro) {
final String titleKey;
final String messageKey;
final String upgradeKey;
final String upgradeURL;
final String upgradeWhy;
final boolean randomButtons;
final boolean useButtonTips;
final boolean useLime;
int labelWidth = 300;
if(pro) {
titleKey = "PRO_TITLE";
messageKey = "PRO_LABEL_THANKS";
upgradeKey = "PRO_LABEL_QUESTION";
upgradeURL = "http://www.limewire.com/index.jsp/pro";
upgradeWhy = "http://www.limewire.com/promote/whygopro";
randomButtons = true;
useButtonTips = true;
useLime = true;
} else {
titleKey = "JAVA_UPGRADE_TITLE";
messageKey = "JAVA_UPGRADE_MESSAGE";
upgradeKey = "JAVA_UPGRADE_QUESTION";
upgradeURL = getJavaUpgradeURL();
upgradeWhy = "http://www.limewire.com/whyupgradejava";
randomButtons = false;
useButtonTips = false;
useLime = false;
}
dialog = new JDialog(GUIMediator.getAppFrame());
dialog.setModal(true);
dialog.setResizable(true);
dialog.setTitle(GUIMediator.getStringResource(titleKey));
// set the main panel's border
Border border = BorderFactory.createEmptyBorder(12,6,6,6);
BoxPanel topPanel = new BoxPanel(BoxPanel.X_AXIS);
if(useLime) {
topPanel.add(new JLabel(ICON));
labelWidth -= ICON.getIconWidth();
}
topPanel.add(GUIMediator.getHorizontalSeparator());
topPanel.add(GUIMediator.getHorizontalSeparator());
topPanel.add(GUIMediator.getHorizontalSeparator());
String labelStart =
GUIMediator.getStringResource(messageKey);
String labelEnd =
GUIMediator.getStringResource(upgradeKey);
MultiLineLabel label = new MultiLineLabel(labelStart, labelWidth);
label.setFont(new Font("Dialog", Font.PLAIN, 12));
JLabel label2 = new JLabel(labelEnd);
label2.setFont(new Font("Dialog", Font.PLAIN, 12));
BoxPanel labelPanel = new BoxPanel(BoxPanel.Y_AXIS);
labelPanel.add(Box.createVerticalGlue());
labelPanel.add(label);
labelPanel.add(Box.createVerticalStrut(10));
BoxPanel questionPanel = new BoxPanel(BoxPanel.X_AXIS);
questionPanel.add(Box.createVerticalGlue());
questionPanel.add(label2);
questionPanel.add(Box.createVerticalGlue());
topPanel.add(labelPanel);
MAIN_PANEL.setBorder(border);
MAIN_PANEL.setPreferredSize(DIALOG_DIMENSION);
dialog.setSize(DIALOG_DIMENSION);
ActionListener upgradeDialogListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
GUIMediator.openURL(upgradeURL);
dialog.dispose();
dialog.setVisible(false);
}
};
ActionListener whyDialogListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
GUIMediator.openURL(upgradeWhy);
dialog.dispose();
dialog.setVisible(false);
}
};
ActionListener closeDialogListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
dialog.dispose();
dialog.setVisible(false);
}
};
ActionListener[] listeners = {
upgradeDialogListener,
whyDialogListener,
closeDialogListener
};
// Shuffle the buttons around.
List shuffled = Arrays.asList(listeners);
if(randomButtons)
Collections.shuffle(shuffled);
listeners = (ActionListener[])shuffled.toArray(listeners);
// now make buttonKeys & buttonTips accordingly.
String[] buttonKeys = new String[listeners.length];
String[] buttonTips = new String[listeners.length];
for(int i = 0; i < listeners.length; i++) {
if(listeners[i] == upgradeDialogListener) {
buttonKeys[i] = "YES";
if(useButtonTips)
buttonTips[i] = "GO_PRO_TIP";
} else if (listeners[i] == whyDialogListener) {
buttonKeys[i] = "WHYGOPRO";
if(useButtonTips)
buttonTips[i] = "WHYGOPRO_TIP";
} else if (listeners[i] == closeDialogListener) {
buttonKeys[i] = "GO_PRO_LATER";
if(useButtonTips)
buttonTips[i] = "GO_PRO_LATER_TIP";
}
}
ButtonRow buttons =
new ButtonRow(buttonKeys, buttonTips, listeners);
MAIN_PANEL.add(topPanel);
MAIN_PANEL.add(questionPanel);
MAIN_PANEL.add(Box.createVerticalStrut(10));
MAIN_PANEL.add(buttons);
dialog.getContentPane().add(MAIN_PANEL);
dialog.pack();
}
/**
* Builds the URL for a java upgrade.
*/
private String getJavaUpgradeURL() {
// valid locales are: en, de, es, fr, it, ja, ko, sv, zh
Locale loc = GUIMediator.getLocale();
String language = loc.getLanguage();
if(!language.equals("en") &&
!language.equals("de") &&
!language.equals("es") &&
!language.equals("fr") &&
!language.equals("it") &&
!language.equals("ja") &&
!language.equals("ko") &&
!language.equals("sv") &&
!language.equals("zh"))
language = "en";
return "http://www.limewire.com/javabuttonu/" + language;
}
/**
* Displays the "PRO" dialog window to the user.
*/
static void showProDialog() {
UpgradeWindow window = new UpgradeWindow(true);
window.dialog.setLocationRelativeTo(GUIMediator.getAppFrame());
try {
window.dialog.setVisible(true);
} catch(InternalError ie) {
// happens occasionally, ignore.
}
}
/**
* Displays the 'Java' dialog window to the user.
*/
static void showJavaDialog() {
UpgradeWindow window = new UpgradeWindow(false);
window.dialog.setLocationRelativeTo(GUIMediator.getAppFrame());
try {
window.dialog.setVisible(true);
} catch(InternalError ie) {
// happens occasionally, ignore.
}
}
}