package org.limewire.ui.swing.options; import javax.swing.BorderFactory; import javax.swing.JCheckBox; import javax.swing.JPanel; import net.miginfocom.swing.MigLayout; import org.limewire.core.api.connection.GnutellaConnectionManager; import org.limewire.core.api.network.NetworkManager; import org.limewire.core.settings.DHTSettings; import org.limewire.core.settings.SearchSettings; import org.limewire.core.settings.UltrapeerSettings; import org.limewire.ui.swing.components.MultiLineLabel; import org.limewire.ui.swing.util.I18n; import com.google.inject.Inject; /** * Performance Option View. */ public class PerformanceOptionPanel extends OptionPanel { private final NetworkManager networkManager; private final GnutellaConnectionManager connectionManager; private final String firstMultiLineLabel = I18n.tr("If your computer has a fast internet connection, LimeWire may act as an \"Ultrapeer\" or connect to the Mojito DHT. You may disable these if you notice performance issues."); private final String secondMultiLineLabel = I18n.tr("LimeWire uses a secure communications mode called TLS, which may use more CPU resources."); private final String thirdMultiLineLabel = I18n.tr("Out-of-band Searching helps deliver faster search results to you, but some internet connections may not work well with this feature."); private JCheckBox disableUltraPeerCheckBox; private JCheckBox disableMojitoCheckBox; private JCheckBox disableTLS; private JCheckBox disableOutOfBandSearchCheckBox; @Inject public PerformanceOptionPanel(NetworkManager networkManager, GnutellaConnectionManager connectionManager) { this.networkManager = networkManager; this.connectionManager = connectionManager; setLayout(new MigLayout("insets 15 15 15 15, fillx, wrap", "", "")); setOpaque(false); add(getPerformancePanel(), "pushx, growx"); } private JPanel getPerformancePanel() { JPanel p = new JPanel(); p.setBorder(BorderFactory.createTitledBorder("")); p.setLayout(new MigLayout()); p.setOpaque(false); disableUltraPeerCheckBox = new JCheckBox(I18n.tr("Disable Ultrapeer capabilities")); disableMojitoCheckBox = new JCheckBox(I18n.tr("Disable connecting to the Mojito DHT")); disableTLS = new JCheckBox(I18n.tr("Disable TLS capabilities")); disableOutOfBandSearchCheckBox = new JCheckBox(I18n.tr("Disable Out-of-band searching")); disableUltraPeerCheckBox.setOpaque(false); disableMojitoCheckBox.setOpaque(false); disableTLS.setOpaque(false); disableOutOfBandSearchCheckBox.setOpaque(false); p.add(new MultiLineLabel(firstMultiLineLabel, ReallyAdvancedOptionPanel.MULTI_LINE_LABEL_WIDTH), "wrap"); p.add(disableUltraPeerCheckBox, "gapleft 25, split, wrap"); p.add(disableMojitoCheckBox, "gapleft 25, split, wrap"); p.add(new MultiLineLabel(secondMultiLineLabel, ReallyAdvancedOptionPanel.MULTI_LINE_LABEL_WIDTH), "gaptop 18, wrap"); p.add(disableTLS, "gapleft 25, split, wrap"); p.add(new MultiLineLabel(thirdMultiLineLabel, ReallyAdvancedOptionPanel.MULTI_LINE_LABEL_WIDTH), "gaptop 18, wrap"); p.add(disableOutOfBandSearchCheckBox, "gapleft 25, split, wrap"); return p; } @Override boolean applyOptions() { boolean upChanged = UltrapeerSettings.DISABLE_ULTRAPEER_MODE.getValue() != disableUltraPeerCheckBox.isSelected(); boolean tlsServerChanged = disableTLS.isSelected() != !networkManager.isIncomingTLSEnabled(); boolean isSupernode = connectionManager.isUltrapeer(); UltrapeerSettings.DISABLE_ULTRAPEER_MODE.setValue(disableUltraPeerCheckBox.isSelected()); DHTSettings.DISABLE_DHT_USER.setValue(disableMojitoCheckBox.isSelected()); networkManager.setIncomingTLSEnabled(!disableTLS.isSelected()); networkManager.setOutgoingTLSEnabled(!disableTLS.isSelected()); SearchSettings.OOB_ENABLED.setValue(!disableOutOfBandSearchCheckBox.isSelected()); if((tlsServerChanged || (upChanged && disableUltraPeerCheckBox.isSelected()) && isSupernode)) { connectionManager.restart(); } return false; } @Override boolean hasChanged() { return UltrapeerSettings.DISABLE_ULTRAPEER_MODE.getValue() != disableUltraPeerCheckBox.isSelected() || DHTSettings.DISABLE_DHT_USER.getValue() != disableMojitoCheckBox.isSelected() || (!networkManager.isIncomingTLSEnabled() && !networkManager.isOutgoingTLSEnabled()) != disableTLS.isSelected() || SearchSettings.OOB_ENABLED.getValue() == disableOutOfBandSearchCheckBox.isSelected(); } @Override public void initOptions() { disableUltraPeerCheckBox.setSelected(UltrapeerSettings.DISABLE_ULTRAPEER_MODE.getValue()); disableMojitoCheckBox.setSelected(DHTSettings.DISABLE_DHT_USER.getValue()); disableTLS.setSelected(!networkManager.isIncomingTLSEnabled() || !networkManager.isOutgoingTLSEnabled()); disableOutOfBandSearchCheckBox.setSelected(!SearchSettings.OOB_ENABLED.getValue()); } }