/* * File : ConfigPanel*.java * Created : 11 mar. 2004 * By : TuxPaper * * Copyright (C) 2004, 2005, 2006 Aelitis SAS, All rights Reserved * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details ( see the LICENSE file ). * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * AELITIS, SAS au capital de 46,603.30 euros, * 8 Allee Lenotre, La Grille Royale, 78600 Le Mesnil le Roi, France. */ package org.gudy.azureus2.ui.swt.views.configsections; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.gudy.azureus2.plugins.ui.config.ConfigSection; import org.gudy.azureus2.ui.swt.components.LinkLabel; import org.gudy.azureus2.ui.swt.config.*; import org.gudy.azureus2.ui.swt.plugins.UISWTConfigSection; import org.gudy.azureus2.ui.swt.ImageRepository; import org.gudy.azureus2.ui.swt.Messages; import org.gudy.azureus2.core3.config.COConfigurationManager; import org.gudy.azureus2.core3.config.impl.TransferSpeedValidator; import org.gudy.azureus2.core3.internat.MessageText; import com.aelitis.azureus.core.AzureusCore; public class ConfigSectionTransfer implements UISWTConfigSection { private AzureusCore core; public ConfigSectionTransfer( AzureusCore _core ) { core = _core; } public String configSectionGetParentSection() { return ConfigSection.SECTION_ROOT; } public String configSectionGetName() { return ConfigSection.SECTION_TRANSFER; } public void configSectionSave() { } public void configSectionDelete() { } public int maxUserMode() { return 2; } public Composite configSectionCreate(final Composite parent) { GridData gridData; GridLayout layout; Label label; Composite cSection = new Composite(parent, SWT.NULL); gridData = new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL); cSection.setLayoutData(gridData); layout = new GridLayout(); layout.numColumns = 2; layout.marginHeight = 0; cSection.setLayout(layout); int userMode = COConfigurationManager.getIntParameter("User Mode"); // store the initial d/l speed so we can do something sensible later final int[] manual_max_download_speed = { COConfigurationManager .getIntParameter("Max Download Speed KBs") }; // max upload speed gridData = new GridData(); label = new Label(cSection, SWT.NULL); label.setLayoutData(gridData); Messages.setLanguageText(label, "ConfigView.label.maxuploadspeed"); gridData = new GridData(); gridData.widthHint = 35; final IntParameter paramMaxUploadSpeed = new IntParameter(cSection, "Max Upload Speed KBs", 0, -1); paramMaxUploadSpeed.setLayoutData(gridData); // max upload speed when seeding final Composite cMaxUploadSpeedOptionsArea = new Composite(cSection, SWT.NULL); layout = new GridLayout(); layout.numColumns = 3; layout.marginWidth = 0; layout.marginHeight = 0; cMaxUploadSpeedOptionsArea.setLayout(layout); gridData = new GridData(); gridData.horizontalIndent = 15; gridData.horizontalSpan = 2; cMaxUploadSpeedOptionsArea.setLayoutData(gridData); label = new Label(cMaxUploadSpeedOptionsArea, SWT.NULL); Image img = ImageRepository.getImage("subitem"); img.setBackground(label.getBackground()); gridData = new GridData(GridData.VERTICAL_ALIGN_BEGINNING); label.setLayoutData(gridData); label.setImage(img); gridData = new GridData(); final BooleanParameter enable_seeding_rate = new BooleanParameter( cMaxUploadSpeedOptionsArea, "enable.seedingonly.upload.rate", "ConfigView.label.maxuploadspeedseeding"); enable_seeding_rate.setLayoutData(gridData); gridData = new GridData(); gridData.widthHint = 35; final IntParameter paramMaxUploadSpeedSeeding = new IntParameter( cMaxUploadSpeedOptionsArea, "Max Upload Speed Seeding KBs", 0, -1); paramMaxUploadSpeedSeeding.setLayoutData(gridData); enable_seeding_rate .setAdditionalActionPerformer(new ChangeSelectionActionPerformer( paramMaxUploadSpeedSeeding.getControl())); if (userMode < 2) { // wiki link Composite cWiki = new Composite(cSection, SWT.COLOR_GRAY); gridData = new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL); gridData.horizontalSpan = 2; cWiki.setLayoutData(gridData); layout = new GridLayout(); layout.numColumns = 4; layout.marginHeight = 0; cWiki.setLayout(layout); gridData = new GridData(); gridData.horizontalIndent = 6; gridData.horizontalSpan = 2; label = new Label(cWiki, SWT.NULL); label.setLayoutData(gridData); label.setText(MessageText.getString("Utils.link.visit") + ":"); gridData = new GridData(); gridData.horizontalIndent = 10; gridData.horizontalSpan = 2; new LinkLabel(cWiki, gridData, "ConfigView.section.transfer.speeds.wiki", "http://azureus.aelitis.com/wiki/index.php/Good_settings"); } if ( userMode > 1 ){ gridData = new GridData(); label = new Label(cSection, SWT.NULL); label.setLayoutData(gridData); Messages.setLanguageText(label, "ConfigView.label.maxuploadswhenbusymin" ); gridData = new GridData(); gridData.widthHint = 35; new IntParameter(cSection, "max.uploads.when.busy.inc.min.secs", 0, -1).setLayoutData(gridData); } // max download speed gridData = new GridData(); label = new Label(cSection, SWT.NULL); label.setLayoutData(gridData); Messages.setLanguageText(label, "ConfigView.label.maxdownloadspeed"); gridData = new GridData(); gridData.widthHint = 35; final IntParameter paramMaxDownSpeed = new IntParameter(cSection, "Max Download Speed KBs", 0, -1); paramMaxDownSpeed.setLayoutData(gridData); // max upload/download limit dependencies Listener l = new Listener() { public void handleEvent(Event event) { boolean disableAuto = false; boolean disableAutoSeeding = false; if(enable_seeding_rate.isSelected()) { disableAutoSeeding = event.widget == paramMaxUploadSpeedSeeding.getControl(); disableAuto = event.widget == paramMaxDownSpeed.getControl() || event.widget == paramMaxUploadSpeed.getControl(); } else { disableAuto = true; disableAutoSeeding = true; } if(disableAuto) COConfigurationManager.setParameter(TransferSpeedValidator.AUTO_UPLOAD_ENABLED_CONFIGKEY, false); if(disableAutoSeeding) COConfigurationManager.setParameter(TransferSpeedValidator.AUTO_UPLOAD_SEEDING_ENABLED_CONFIGKEY, false); } }; paramMaxDownSpeed.getControl().addListener(SWT.Selection, l); paramMaxUploadSpeed.getControl().addListener(SWT.Selection, l); paramMaxUploadSpeedSeeding.getControl().addListener(SWT.Selection, l); paramMaxUploadSpeed.addChangeListener(new ParameterChangeAdapter() { public void parameterChanged(Parameter p, boolean internal) { if ( paramMaxUploadSpeed.isDisposed()){ paramMaxUploadSpeed.removeChangeListener( this ); return; } // we don't want to police these limits when auto-speed is running as // they screw things up bigtime if ( TransferSpeedValidator.isAutoSpeedActive( core.getGlobalManager())){ return; } int up_val = paramMaxUploadSpeed.getValue(); int down_val = paramMaxDownSpeed.getValue(); if (up_val != 0 && up_val < COConfigurationManager.CONFIG_DEFAULT_MIN_MAX_UPLOAD_SPEED) { if ((down_val == 0) || down_val > (up_val * 2)) { paramMaxDownSpeed.setValue(up_val * 2); } } else { if (down_val != manual_max_download_speed[0]) { paramMaxDownSpeed.setValue(manual_max_download_speed[0]); } } } }); paramMaxDownSpeed.addChangeListener(new ParameterChangeAdapter() { public void parameterChanged(Parameter p, boolean internal) { if ( paramMaxDownSpeed.isDisposed()){ paramMaxDownSpeed.removeChangeListener( this ); return; } // we don't want to police these limits when auto-speed is running as // they screw things up bigtime if ( TransferSpeedValidator.isAutoSpeedActive( core.getGlobalManager())){ return; } int up_val = paramMaxUploadSpeed.getValue(); int down_val = paramMaxDownSpeed.getValue(); if (!internal) { manual_max_download_speed[0] = down_val; } if (up_val < COConfigurationManager.CONFIG_DEFAULT_MIN_MAX_UPLOAD_SPEED) { if (up_val != 0 && up_val < (down_val * 2)) { paramMaxUploadSpeed.setValue((down_val + 1) / 2); } else if (down_val == 0) { paramMaxUploadSpeed.setValue(0); } } } }); if (userMode > 0) { // max uploads gridData = new GridData(); label = new Label(cSection, SWT.NULL); label.setLayoutData(gridData); Messages.setLanguageText(label, "ConfigView.label.maxuploads"); gridData = new GridData(); gridData.widthHint = 35; IntParameter paramMaxUploads = new IntParameter(cSection, "Max Uploads", 2, -1); paramMaxUploads.setLayoutData(gridData); // max uploads when seeding final Composite cMaxUploadsOptionsArea = new Composite(cSection, SWT.NULL); layout = new GridLayout(); layout.numColumns = 3; layout.marginWidth = 0; layout.marginHeight = 0; cMaxUploadsOptionsArea.setLayout(layout); gridData = new GridData(); gridData.horizontalIndent = 15; gridData.horizontalSpan = 2; cMaxUploadsOptionsArea.setLayoutData(gridData); label = new Label(cMaxUploadsOptionsArea, SWT.NULL); img = ImageRepository.getImage("subitem"); img.setBackground(label.getBackground()); gridData = new GridData(GridData.VERTICAL_ALIGN_BEGINNING); label.setLayoutData(gridData); label.setImage(img); gridData = new GridData(); BooleanParameter enable_seeding_uploads = new BooleanParameter( cMaxUploadsOptionsArea, "enable.seedingonly.maxuploads", "ConfigView.label.maxuploadsseeding"); enable_seeding_uploads.setLayoutData(gridData); gridData = new GridData(); gridData.widthHint = 35; IntParameter paramMaxUploadsSeeding = new IntParameter( cMaxUploadsOptionsArea, "Max Uploads Seeding", 2, -1); paramMaxUploadsSeeding.setLayoutData(gridData); enable_seeding_uploads .setAdditionalActionPerformer(new ChangeSelectionActionPerformer( paramMaxUploadsSeeding.getControl())); //// gridData = new GridData(); label = new Label(cSection, SWT.NULL); label.setLayoutData(gridData); Messages.setLanguageText(label, "ConfigView.label.max_peers_per_torrent"); gridData = new GridData(); gridData.widthHint = 35; IntParameter paramMaxClients = new IntParameter(cSection, "Max.Peer.Connections.Per.Torrent"); paramMaxClients.setLayoutData(gridData); ///// // max peers when seeding final Composite cMaxPeersOptionsArea = new Composite(cSection, SWT.NULL); layout = new GridLayout(); layout.numColumns = 3; layout.marginWidth = 0; layout.marginHeight = 0; cMaxPeersOptionsArea.setLayout(layout); gridData = new GridData(); gridData.horizontalIndent = 15; gridData.horizontalSpan = 2; cMaxPeersOptionsArea.setLayoutData(gridData); label = new Label(cMaxPeersOptionsArea, SWT.NULL); img = ImageRepository.getImage("subitem"); img.setBackground(label.getBackground()); gridData = new GridData(GridData.VERTICAL_ALIGN_BEGINNING); label.setLayoutData(gridData); label.setImage(img); gridData = new GridData(); BooleanParameter enable_max_peers_seeding = new BooleanParameter( cMaxPeersOptionsArea, "Max.Peer.Connections.Per.Torrent.When.Seeding.Enable", "ConfigView.label.maxuploadsseeding"); enable_max_peers_seeding.setLayoutData(gridData); gridData = new GridData(); gridData.widthHint = 35; IntParameter paramMaxPeersSeeding = new IntParameter( cMaxPeersOptionsArea, "Max.Peer.Connections.Per.Torrent.When.Seeding", 0, -1); paramMaxPeersSeeding.setLayoutData(gridData); enable_max_peers_seeding .setAdditionalActionPerformer(new ChangeSelectionActionPerformer( paramMaxPeersSeeding.getControl())); ///// gridData = new GridData(); label = new Label(cSection, SWT.NULL); label.setLayoutData(gridData); Messages.setLanguageText(label, "ConfigView.label.max_peers_total"); gridData = new GridData(); gridData.widthHint = 35; IntParameter paramMaxClientsTotal = new IntParameter(cSection, "Max.Peer.Connections.Total"); paramMaxClientsTotal.setLayoutData(gridData); gridData = new GridData(); label = new Label(cSection, SWT.NULL); label.setLayoutData(gridData); Messages.setLanguageText(label, "ConfigView.label.maxseedspertorrent"); gridData = new GridData(); gridData.widthHint = 35; new IntParameter(cSection,"Max Seeds Per Torrent").setLayoutData(gridData); gridData = new GridData(); gridData.horizontalSpan = 2; BooleanParameter useReqLimiting = new BooleanParameter(cSection, "Use Request Limiting", "ConfigView.label.userequestlimiting"); useReqLimiting.setLayoutData(gridData); gridData = new GridData(); gridData.horizontalSpan = 2; BooleanParameter useReqLimitingPrios = new BooleanParameter(cSection, "Use Request Limiting Priorities", "ConfigView.label.userequestlimitingpriorities"); useReqLimitingPrios.setLayoutData(gridData); useReqLimiting .setAdditionalActionPerformer(new ChangeSelectionActionPerformer( useReqLimitingPrios.getControl())); gridData = new GridData(); gridData.horizontalSpan = 2; BooleanParameter allowSameIP = new BooleanParameter(cSection, "Allow Same IP Peers", "ConfigView.label.allowsameip"); allowSameIP.setLayoutData(gridData); // lazy bit field gridData = new GridData(); gridData.horizontalSpan = 2; BooleanParameter lazybf = new BooleanParameter(cSection, "Use Lazy Bitfield", "ConfigView.label.lazybitfield"); lazybf.setLayoutData(gridData); // prioritise first/last pieces gridData = new GridData(); gridData.horizontalSpan = 2; BooleanParameter firstPiece = new BooleanParameter(cSection, "Prioritize First Piece", "ConfigView.label.prioritizefirstpiece"); firstPiece.setLayoutData(gridData); // Further prioritize High priority files according to % complete and size of file gridData = new GridData(); gridData.horizontalSpan = 2; BooleanParameter mostCompletedFiles = new BooleanParameter(cSection, "Prioritize Most Completed Files", "ConfigView.label.prioritizemostcompletedfiles"); mostCompletedFiles.setLayoutData(gridData); // ignore ports Composite cMiniArea = new Composite(cSection, SWT.NULL); layout = new GridLayout(); layout.numColumns = 2; layout.marginHeight = 0; layout.marginWidth = 0; cMiniArea.setLayout(layout); gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = 2; cMiniArea.setLayoutData(gridData); gridData = new GridData(); label = new Label(cMiniArea, SWT.NULL); label.setLayoutData(gridData); Messages.setLanguageText(label, "ConfigView.label.transfer.ignorepeerports"); gridData = new GridData(); gridData.widthHint = 125; StringParameter ignore_ports = new StringParameter(cMiniArea, "Ignore.peer.ports", "0"); ignore_ports.setLayoutData(gridData); gridData = new GridData(); gridData.horizontalSpan = 2; BooleanParameter pauseOnExit = new BooleanParameter(cSection, "Pause Downloads On Exit", "ConfigView.label.pause.downloads.on.exit"); pauseOnExit.setLayoutData(gridData); gridData = new GridData(); gridData.horizontalSpan = 2; BooleanParameter resumeOnStart = new BooleanParameter(cSection, "Resume Downloads On Start", "ConfigView.label.resume.downloads.on.start"); resumeOnStart.setLayoutData(gridData); } return cSection; } }