package com.limegroup.gnutella.gui.search; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Cursor; import java.awt.Dimension; import java.awt.Font; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.Box; import javax.swing.Icon; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.JScrollPane; import javax.swing.OverlayLayout; import javax.swing.BorderFactory; import com.limegroup.gnutella.gui.BoxPanel; import com.limegroup.gnutella.gui.GUIMediator; import com.limegroup.gnutella.gui.GUIUtils; import com.limegroup.gnutella.gui.themes.ThemeObserver; import com.limegroup.gnutella.settings.ApplicationSettings; import com.limegroup.gnutella.util.CommonUtils; /** * A JPanel designed to be used as an overlay in the default * search window. */ class OverlayAd extends JPanel implements ThemeObserver { /** * The URL that Pro goes to. */ private static final String PRO_URL = "http://www.limewire.com/clientpro?"; /** * The icon to close the overlay. */ private final Icon CLOSER; /** * The background image. */ private Icon _image; /** * Whether or not this is still the 'Getting Started'. */ private boolean _searchDone; /** * Constructs a new OverlayAd, starting with the 'Getting Started' * image/text. */ OverlayAd() { super(); setLayout(new OverlayLayout(this)); CLOSER = GUIMediator.getThemeImage("kill_on"); _image = GUIMediator.getThemeImage("intro"); Dimension preferredSize = new Dimension(_image.getIconWidth(), _image.getIconHeight()); setMaximumSize(preferredSize); setPreferredSize(preferredSize); try { add(createTextPanel(false)); add(createImagePanel()); GUIUtils.setOpaque(false, this); } catch(NullPointerException npe) { // internal error w/ swing setVisible(false); _searchDone = true; } } /** * Resets everything to be opaque. */ public void updateTheme() { GUIUtils.setOpaque(false, this); } /** * Changes the overlay after a search is done. */ void searchPerformed() { if(!_searchDone) { _searchDone = true; if(CommonUtils.isPro()) OverlayAd.this.setVisible(false); else { _image = GUIMediator.getThemeImage("gopro"); Dimension preferredSize = new Dimension(_image.getIconWidth(), _image.getIconHeight()); setMaximumSize(preferredSize); setPreferredSize(preferredSize); removeAll(); add(createTextPanel(true)); add(createImagePanel()); GUIUtils.setOpaque(false, this); } } } /** * Creates the background image panel. */ private JPanel createImagePanel() { JPanel panel = new JPanel(new BorderLayout()); panel.add(new JLabel(_image), BorderLayout.CENTER); panel.setMaximumSize(getMaximumSize()); panel.setPreferredSize(getPreferredSize()); return panel; } /** * Creates the text panel, with either 'go pro' text or 'getting started' * text. * @param goPro whether or not the text is for going pro or getting started */ private JPanel createTextPanel(boolean goPro) { JPanel panel = new JPanel(new BorderLayout()); if(CommonUtils.isPro() || goPro) panel.add(createNorthPanel(), BorderLayout.NORTH); panel.add(Box.createHorizontalStrut(18), BorderLayout.WEST); JPanel center = goPro ? createGoProCenter() : createGettingStartedCenter(); panel.add(center, BorderLayout.CENTER); panel.add(Box.createHorizontalStrut(18), BorderLayout.EAST); panel.setMaximumSize(getMaximumSize()); panel.setPreferredSize(getPreferredSize()); return panel; } /** * Creates the north panel, with the closer icon. */ private JPanel createNorthPanel() { JPanel box = new BoxPanel(BoxPanel.X_AXIS); box.add(Box.createHorizontalGlue()); if(CommonUtils.isPro()) { JLabel closer = new JLabel(CLOSER); closer.addMouseListener(new MouseListener() { public void mouseClicked(MouseEvent e) { OverlayAd.this.setVisible(false); } public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} }); box.add(closer); } else box.add(Box.createVerticalStrut(CLOSER.getIconHeight())); return box; } /** * Creates the getting started center panel. */ private JPanel createGettingStartedCenter() { JLabel title = new JLabel( GUIMediator.getStringResource("GETTING_STARTED_TITLE")); title.setFont(new Font("Dialog", Font.PLAIN, 24)); title.setForeground(new Color(0x5A, 0x76, 0x94)); JTextArea text = new JTextArea( GUIMediator.getStringResource("GETTING_STARTED_CONTENTS")); text.setLineWrap(true); text.setWrapStyleWord(true); text.setEditable(false); text.setOpaque(false); text.setForeground(new Color(0x00, 0x00, 0x00)); text.setFont(new Font("Dialog", Font.PLAIN, 14)); JScrollPane pane = new JScrollPane(text); pane.setBorder(BorderFactory.createEmptyBorder()); pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); JPanel box = new JPanel(new GridBagLayout()); GridBagConstraints c = new GridBagConstraints(); c.insets = new Insets(40, 0, 5, 0); c.fill = GridBagConstraints.BOTH; c.gridwidth = GridBagConstraints.REMAINDER; c.anchor = GridBagConstraints.NORTHWEST; box.add(title, c); c.weightx = 1; c.weighty = 1; c.insets = new Insets(0, 0, 0, 0); box.add(pane, c); return box; } /** * Creates the Go Pro panel. */ private JPanel createGoProCenter() { JLabel title = new JLabel( GUIMediator.getStringResource("GOING_PRO_TITLE")); title.setFont(new Font("Dialog", Font.BOLD, 16)); title.setForeground(new Color(0x43, 0x43, 0x43)); JTextArea text = new JTextArea( GUIMediator.getStringResource("GOING_PRO_DESCRIPTION")); text.setLineWrap(true); text.setWrapStyleWord(true); text.setEditable(false); text.setOpaque(false); text.setForeground(new Color(0x43, 0x43, 0x43)); text.setFont(new Font("Dialog", Font.PLAIN, 14)); JPanel textPanel = new BoxPanel(BoxPanel.X_AXIS); textPanel.add(Box.createHorizontalStrut(185)); textPanel.add(text); final JPanel box = new BoxPanel(BoxPanel.Y_AXIS); box.add(GUIUtils.center(title)); box.add(Box.createVerticalStrut(80)); box.add(textPanel); MouseListener launcher = new MouseListener() { public void mouseClicked(MouseEvent e) { if(!e.isConsumed()) { e.consume(); GUIMediator.openURL(PRO_URL + ApplicationSettings.LANGUAGE.getValue()); } } public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void mouseEntered(MouseEvent e) { e.getComponent().setCursor( Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); } public void mouseExited(MouseEvent e) { e.getComponent().setCursor(Cursor.getDefaultCursor()); } }; box.addMouseListener(launcher); text.addMouseListener(launcher); title.addMouseListener(launcher); textPanel.addMouseListener(launcher); return box; } }