package org.limewire.ui.swing.properties; import static org.limewire.ui.swing.util.I18n.tr; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Window; import java.awt.event.ActionEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.SwingUtilities; import javax.swing.event.AncestorEvent; import javax.swing.event.AncestorListener; import net.miginfocom.swing.MigLayout; import org.jdesktop.application.Resource; import org.limewire.bittorrent.Torrent; import org.limewire.core.settings.BittorrentSettings; import org.limewire.ui.swing.action.AbstractAction; import org.limewire.ui.swing.util.GuiUtils; import org.limewire.ui.swing.util.I18n; public class TorrentSelectorPanel implements PropertyChangeListener { @Resource private Color foreground; @Resource private Color backgroundColor; @Resource private Font headerFont; private final JPanel component; private FileInfoBittorrentPanel bittorrentPanel; private JButton okButton; private JCheckBox checkBox; private int closeValue = JOptionPane.CANCEL_OPTION; public TorrentSelectorPanel(Torrent torrent, FileInfoPanelFactory factory) { GuiUtils.assignResources(this); component = new JPanel(new MigLayout("fill, gap 0, insets 0", "[grow]", "[][][grow][]")); component.setPreferredSize(new Dimension(440, 500)); component.setBackground(backgroundColor); bittorrentPanel = factory.createBittorentPanel(torrent); bittorrentPanel.addPropertyChangeListener(this); component.add(factory.createOverviewPanel(torrent).getComponent(), "growx, wrap, gapleft 5, gapright 5"); component.add(createHeaderLabel(I18n.tr("Choose files to download")), "gapleft 5, wrap"); component.add(bittorrentPanel.getComponent(), "grow"); createFooter(); component.addAncestorListener(new AncestorListener() { @Override public void ancestorAdded(AncestorEvent event) { okButton.requestFocusInWindow(); } @Override public void ancestorMoved(AncestorEvent event) { }; @Override public void ancestorRemoved(AncestorEvent event) { } }); } public int getCloseValue() { return closeValue; } public JComponent getComponent() { return component; } public JButton getOkButton() { return okButton; } private void close() { bittorrentPanel.dispose(); Window window = SwingUtilities.getWindowAncestor(component); window.setVisible(false); } /** * Adds a footer with the cancel/ok button to close the dialog. */ private void createFooter() { okButton = new JButton(new OKAction()); checkBox = new JCheckBox(I18n.tr("Always ask before starting torrent")); checkBox.setOpaque(false); checkBox.setSelected(BittorrentSettings.TORRENT_SHOW_POPUP_BEFORE_DOWNLOADING.getValue()); JPanel footerPanel = new JPanel(new MigLayout("fill, insets 0 10 10 15")); footerPanel.add(checkBox, "span, wrap"); footerPanel.add(okButton, "alignx right, aligny bottom, split, tag ok"); footerPanel.add(new JButton(new CancelAction()), "aligny bottom, tag cancel"); footerPanel.setOpaque(false); component.add(footerPanel, "grow, south"); } private JLabel createHeaderLabel(String text) { JLabel label = new JLabel(text); label.setFont(headerFont); label.setForeground(foreground); return label; } /** * Closes the dialog and saves any data that may have changed. */ private class OKAction extends AbstractAction{ public OKAction() { super(tr("OK")); } @Override public void actionPerformed(ActionEvent e) { closeValue = JOptionPane.OK_OPTION; bittorrentPanel.save(); BittorrentSettings.TORRENT_SHOW_POPUP_BEFORE_DOWNLOADING.setValue(checkBox.isSelected()); close(); } } /** * Closes the data and does not save any data even if it * has changed. */ private class CancelAction extends AbstractAction { public CancelAction() { super(tr("Cancel")); } @Override public void actionPerformed(ActionEvent e) { closeValue = JOptionPane.CANCEL_OPTION; close(); } } @Override public void propertyChange(PropertyChangeEvent evt) { if ( evt.getPropertyName().equals( FileInfoBittorrentPanel.TORRENT_FILE_ENTRY_SELECTED) ) { okButton.setEnabled( ((Boolean) evt.getNewValue()).booleanValue() ); } } }