package org.limewire.ui.swing.options;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import net.miginfocom.swing.MigLayout;
import org.jdesktop.application.Resource;
import org.limewire.core.settings.SharingSettings;
import org.limewire.ui.swing.components.HyperlinkButton;
import org.limewire.ui.swing.options.actions.DialogDisplayAction;
import org.limewire.ui.swing.settings.SwingUiSettings;
import org.limewire.ui.swing.util.GuiUtils;
import org.limewire.ui.swing.util.I18n;
import org.limewire.util.OSUtils;
import com.google.inject.Inject;
import com.google.inject.Provider;
/** Library Option View */
public class LibraryOptionPanel extends OptionPanel {
@Resource private Icon p2pSharedListIcon;
@Resource private Icon sharingMyFilesIcon;
@Resource private Icon sharingArrowIcon;
private final UsePlayerPanel playerPanel;
private OptionPanel iTunesPanel;
private OptionPanel sharingPanel;
private final Provider<UnsafeTypeOptionPanel> unsafeOptionPanelProvider;
private final Provider<ITunesOptionPanel> iTunesOptionPanelProvider;
@Inject
public LibraryOptionPanel(Provider<UnsafeTypeOptionPanel> unsafeTypeOptionPanelProvider,
Provider<ITunesOptionPanel> iTunesOptionPanelProvider) {
this.unsafeOptionPanelProvider = unsafeTypeOptionPanelProvider;
this.iTunesOptionPanelProvider = iTunesOptionPanelProvider;
GuiUtils.assignResources(this);
this.playerPanel = new UsePlayerPanel();
setLayout(new MigLayout("insets 15, fillx, gap 4"));
add(getSharingPanel(), "growx, wrap");
if(OSUtils.isMacOSX() || OSUtils.isWindows()) {
add(getITunesPanel(), "growx, wrap");
} else {
iTunesPanel = null;
}
add(playerPanel, "wrap");
}
@Override
ApplyOptionResult applyOptions() {
ApplyOptionResult result = null;
result = playerPanel.applyOptions();
if (result.isSuccessful())
result.applyResult(getSharingPanel().applyOptions());
if (iTunesPanel != null && result.isSuccessful())
result.applyResult(iTunesPanel.applyOptions());
return result;
}
@Override
boolean hasChanged() {
return playerPanel.hasChanged() || getSharingPanel().hasChanged()
|| iTunesPanel != null ? iTunesPanel.hasChanged() : false;
}
@Override
public void initOptions() {
getSharingPanel().initOptions();
playerPanel.initOptions();
if (iTunesPanel != null) {
iTunesPanel.initOptions();
}
}
private class ITunesPanel extends OptionPanel {
private ITunesOptionPanel iTunesOptionPanel;
public ITunesPanel() {
super("iTunes");
iTunesOptionPanel = iTunesOptionPanelProvider.get();
JButton configureButton = new JButton(new DialogDisplayAction(LibraryOptionPanel.this,
iTunesOptionPanel, I18n.tr("iTunes Configuration"),
I18n.tr("Configure..."), I18n.tr("Configure iTunes")));
add(new JLabel(I18n.tr("Configure how files in your LimeWire interact with iTunes")));
add(configureButton, "gapleft push");
}
@Override
ApplyOptionResult applyOptions() {
return iTunesOptionPanel.applyOptions();
}
@Override
boolean hasChanged() {
return iTunesOptionPanel.hasChanged();
}
@Override
public void initOptions() {
iTunesOptionPanel.initOptions();
}
}
/** Do you want to use the LW player? */
private static class UsePlayerPanel extends OptionPanel {
private JCheckBox useLimeWirePlayer;
public UsePlayerPanel() {
super("");
setBorder(BorderFactory.createEmptyBorder());
setLayout(new MigLayout("ins 0 0 0 0, gap 0"));
useLimeWirePlayer = new JCheckBox(I18n
.tr("Use the LimeWire player when I play Audio and Video files"));
useLimeWirePlayer.setOpaque(false);
add(useLimeWirePlayer);
}
@Override
ApplyOptionResult applyOptions() {
SwingUiSettings.PLAYER_ENABLED.setValue(useLimeWirePlayer.isSelected());
return new ApplyOptionResult(false, true);
}
@Override
boolean hasChanged() {
return useLimeWirePlayer.isSelected() != SwingUiSettings.PLAYER_ENABLED.getValue();
}
@Override
public void initOptions() {
useLimeWirePlayer.setSelected(SwingUiSettings.PLAYER_ENABLED.getValue());
}
}
private OptionPanel getSharingPanel() {
if(sharingPanel == null) {
sharingPanel = new SharingPanel();
}
return sharingPanel;
}
private OptionPanel getITunesPanel() {
if (iTunesPanel == null) {
iTunesPanel = new ITunesPanel();
}
return iTunesPanel;
}
@Override
void setOptionTabItem(OptionTabItem tab) {
super.setOptionTabItem(tab);
getITunesPanel().setOptionTabItem(tab);
getSharingPanel().setOptionTabItem(tab);
this.playerPanel.setOptionTabItem(tab);
}
private class SharingPanel extends OptionPanel {
private final JButton configureButton;
private final JCheckBox shareP2PdownloadedFilesCheckBox;
private final UnsafeTypeOptionPanel unsafeTypeOptionPanel;
private JLabel unsafeMessageLabel;
public SharingPanel() {
super(I18n.tr("Sharing"));
unsafeTypeOptionPanel = unsafeOptionPanelProvider.get();
shareP2PdownloadedFilesCheckBox = new JCheckBox("<html>"+I18n.tr("Add files I download from P2P Users to my Public Shared List")+"</html>");
shareP2PdownloadedFilesCheckBox.setOpaque(false);
configureButton = new JButton(new DialogDisplayAction(LibraryOptionPanel.this,
unsafeTypeOptionPanel, I18n.tr("Unsafe File Sharing"),
I18n.tr("Configure..."), I18n.tr("Configure unsafe file sharing settings")));
final String learnMoreUrl = "http://www.gnutellaforums.com/";
HyperlinkButton learnMoreButton = new LearnMoreButton(learnMoreUrl);
addModifyInfo();
add(shareP2PdownloadedFilesCheckBox);
add(new LearnMoreButton("http://www.gnutellaforums.com/"), "gapleft 15, wrap");
unsafeMessageLabel = new JLabel(I18n.tr("Configure unsafe sharing settings"));
add(unsafeMessageLabel);
add(learnMoreButton, "gapleft 15");
add(configureButton, "gapleft 15");
}
private void addModifyInfo() {
JPanel modifyInfoPanel = new JPanel(new MigLayout("nogrid, insets 0, gap 0"));
modifyInfoPanel.setOpaque(false);
JLabel myFiles = new JLabel(I18n.tr("My Files"), sharingMyFilesIcon, JLabel.CENTER);
myFiles.setVerticalTextPosition(JLabel.BOTTOM);
myFiles.setHorizontalTextPosition(JLabel.CENTER);
modifyInfoPanel.add(new JLabel(I18n.tr("To see or modify files in your Public Shared list, go to:")),
"gapbottom 10, wrap");
modifyInfoPanel.add(myFiles);
modifyInfoPanel.add(new JLabel(sharingArrowIcon), "aligny top, gaptop 17");
modifyInfoPanel.add(new JLabel(I18n.tr("Public Shared"), p2pSharedListIcon, JLabel.RIGHT), "aligny top, gaptop 15");
add(modifyInfoPanel, "wrap");
}
@Override
ApplyOptionResult applyOptions() {
SharingSettings.SHARE_DOWNLOADED_FILES_IN_NON_SHARED_DIRECTORIES.setValue(shareP2PdownloadedFilesCheckBox.isSelected());
SharingSettings.ALLOW_PARTIAL_SHARING.setValue(shareP2PdownloadedFilesCheckBox.isSelected());
return unsafeTypeOptionPanel.applyOptions();
}
@Override
boolean hasChanged() {
return SharingSettings.SHARE_DOWNLOADED_FILES_IN_NON_SHARED_DIRECTORIES.getValue() != shareP2PdownloadedFilesCheckBox.isSelected()
|| SharingSettings.ALLOW_PARTIAL_SHARING.getValue() != shareP2PdownloadedFilesCheckBox.isSelected()
|| unsafeTypeOptionPanel.hasChanged();
}
@Override
public void initOptions() {
unsafeTypeOptionPanel.initOptions();
shareP2PdownloadedFilesCheckBox.setSelected(
SharingSettings.SHARE_DOWNLOADED_FILES_IN_NON_SHARED_DIRECTORIES.getValue());
}
}
}