package org.gudy.azureus2.ui.swt.views.configsections; import org.gudy.azureus2.ui.swt.plugins.UISWTConfigSection; import org.gudy.azureus2.ui.swt.config.*; import org.gudy.azureus2.ui.swt.Messages; import org.gudy.azureus2.core3.util.AEDiagnostics; import org.gudy.azureus2.core3.util.AEDiagnosticsLogger; import org.gudy.azureus2.core3.config.COConfigurationManager; import org.gudy.azureus2.core3.config.impl.TransferSpeedValidator; import org.gudy.azureus2.core3.config.impl.ConfigurationDefaults; import org.gudy.azureus2.core3.config.impl.ConfigurationParameterNotFoundException; import org.eclipse.swt.widgets.*; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.SWT; import com.aelitis.azureus.core.speedmanager.impl.SpeedManagerImpl; import com.aelitis.azureus.core.speedmanager.impl.v2.SpeedLimitMonitor; import com.aelitis.azureus.core.speedmanager.impl.v2.SpeedManagerAlgorithmProviderV2; /** * Created on May 15, 2007 * Created by Alan Snyder * Copyright (C) 2007 Aelitis, All Rights Reserved. * <p/> * 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, or (at your option) any later version. * 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. * 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. * <p/> * AELITIS, SAS au capital de 63.529,40 euros * 8 Allee Lenotre, La Grille Royale, 78600 Le Mesnil le Roi, France. */ public class ConfigSectionTransferAutoSpeedBeta implements UISWTConfigSection { //upload/download limits IntParameter downMaxLim; IntParameter uploadMaxLim; StringListParameter confDownload; StringListParameter confUpload; //add a comment to the auto-speed debug logs. Group commentGroup; Group uploadCapGroup; //DHT ping set-points Group dhtGroup; IntParameter dGood; IntParameter dGoodTol; IntParameter dBad; IntParameter dBadTol; //general ping set-points. IntParameter adjustmentInterval; BooleanParameter skipAfterAdjustment; Button reset; IntListParameter downloadModeUsedCap; IntListParameter seedModeUsedCap; /** * Create your own configuration panel here. It can be anything that inherits * from SWT's Composite class. * Please be mindfull of small screen resolutions * * @param parent The parent of your configuration panel * @return your configuration panel */ /** * Returns section you want your configuration panel to be under. * See SECTION_* constants. To add a subsection to your own ConfigSection, * return the configSectionGetName result of your parent.<br> */ public String configSectionGetParentSection() { return "transfer.select"; } /** * In order for the plugin to display its section correctly, a key in the * Plugin language file will need to contain * <TT>ConfigView.section.<i><configSectionGetName() result></i>=The Section name.</TT><br> * * @return The name of the configuration section */ public String configSectionGetName() { return "transfer.select.v2"; } /** * User selected Save. * All saving of non-plugin tabs have been completed, as well as * saving of plugins that implement org.gudy.azureus2.plugins.ui.config * parameters. */ public void configSectionSave() { } /** * Config view is closing */ public void configSectionDelete() { } public int maxUserMode() { return 0; } public Composite configSectionCreate(final Composite parent) { GridData gridData; Composite cSection = new Composite(parent, SWT.NULL); gridData = new GridData(GridData.VERTICAL_ALIGN_FILL|GridData.HORIZONTAL_ALIGN_FILL); cSection.setLayoutData(gridData); GridLayout subPanel = new GridLayout(); subPanel.numColumns = 3; cSection.setLayout(subPanel); //add a comment to the debug log. /////////////////////////////////// // Comment group /////////////////////////////////// //comment grouping. commentGroup = new Group(cSection, SWT.NULL); Messages.setLanguageText(commentGroup,"ConfigTransferAutoSpeed.add.comment.to.log.group"); GridLayout commentLayout = new GridLayout(); commentLayout.numColumns = 3; commentGroup.setLayout(commentLayout); gridData = new GridData(GridData.FILL_HORIZONTAL); commentGroup.setLayoutData(gridData); //Label Label commentLabel = new Label(commentGroup,SWT.NULL); Messages.setLanguageText(commentLabel,"ConfigTransferAutoSpeed.add.comment.to.log"); gridData = new GridData(); gridData.widthHint = 70; gridData.horizontalSpan=1; commentLabel.setLayoutData(gridData); //Text-Box final Text commentBox = new Text(commentGroup, SWT.BORDER); gridData = new GridData(GridData.BEGINNING); gridData.widthHint = 200; gridData.horizontalSpan=1; commentBox.setText(""); commentBox.setLayoutData(gridData); //button Button commentButton = new Button( commentGroup, SWT.PUSH); //Messages. gridData = new GridData(); gridData.widthHint = 70; gridData.horizontalSpan=1; commentButton.setLayoutData(gridData); Messages.setLanguageText(commentButton,"ConfigTransferAutoSpeed.log.button"); commentButton.addListener(SWT.Selection, new Listener(){ public void handleEvent(Event event){ //Add a file to the log. AEDiagnosticsLogger dLog = AEDiagnostics.getLogger("AutoSpeed"); String comment = commentBox.getText(); if(comment!=null){ if( comment.length()>0){ dLog.log( "user-comment:"+comment ); commentBox.setText(""); } } } }); //spacer Label commentSpacer = new Label(cSection, SWT.NULL); gridData = new GridData(); gridData.horizontalSpan=3; commentSpacer.setLayoutData(gridData); /////////////////////////// // Upload Capacity used settings. /////////////////////////// uploadCapGroup = new Group(cSection, SWT.NULL); Messages.setLanguageText(uploadCapGroup,"ConfigTransferAutoSpeed.upload.capacity.usage"); GridLayout uCapLayout = new GridLayout(); uCapLayout.numColumns = 2; uploadCapGroup.setLayout(uCapLayout); gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = 3; uploadCapGroup.setLayoutData(gridData); //Label column Label upCapModeLbl = new Label(uploadCapGroup, SWT.NULL); gridData = new GridData(); gridData.widthHint = 80; upCapModeLbl.setLayoutData(gridData); Messages.setLanguageText(upCapModeLbl,"ConfigTransferAutoSpeed.mode"); Label ucSetLbl = new Label(uploadCapGroup, SWT.NULL); gridData = new GridData(); gridData.widthHint = 80; gridData.horizontalSpan = 2; Messages.setLanguageText(ucSetLbl,"ConfigTransferAutoSpeed.capacity.used"); Label dlModeLbl = new Label(uploadCapGroup, SWT.NULL); gridData = new GridData(); gridData.widthHint = 80; Messages.setLanguageText(dlModeLbl,"ConfigTransferAutoSpeed.while.downloading"); //add a drop down. String[] downloadModeNames = { " 80%", " 70%", " 60%", " 50%" }; int[] downloadModeValues = { 80, 70, 60, 50 }; downloadModeUsedCap = new IntListParameter(uploadCapGroup, SpeedLimitMonitor.USED_UPLOAD_CAPACITY_DOWNLOAD_MODE, downloadModeNames, downloadModeValues); //spacer Label cSpacer = new Label(cSection, SWT.NULL); gridData = new GridData(); gridData.horizontalSpan=4; cSpacer.setLayoutData(gridData); ////////////////////////// // DHT Ping Group ////////////////////////// dhtGroup = new Group(cSection, SWT.NULL); Messages.setLanguageText(dhtGroup,"ConfigTransferAutoSpeed.data.update.frequency"); dhtGroup.setLayout(subPanel); gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = 3; dhtGroup.setLayoutData(gridData); // //label column for Vivaldi limits // Label dhtSetting = new Label(dhtGroup, SWT.NULL); // gridData = new GridData(); // gridData.widthHint=80; // //dhtSetting.setText("DHT Ping Settings: "); // Messages.setLanguageText(dhtSetting,"ConfigTransferAutoSpeed.set.dht.ping"); // // Label dSet = new Label(dhtGroup,SWT.NULL); // gridData = new GridData(); // dSet.setLayoutData(gridData); // //dSet.setText("set point (ms)"); // Messages.setLanguageText(dSet,"ConfigTransferAutoSpeed.set.point"); // // Label dTol = new Label(dhtGroup, SWT.NULL); // gridData = new GridData(); // dTol.setLayoutData(gridData); // //dTol.setText("tolerance (ms)"); // Messages.setLanguageText(dTol,"ConfigTransferAutoSpeed.set.tolerance"); // // //good // Label dGoodLbl = new Label(dhtGroup, SWT.NULL); // gridData = new GridData(); // dGoodLbl.setLayoutData(gridData); // //dGoodLbl.setText("Good: "); // Messages.setLanguageText(dGoodLbl,"ConfigTransferAutoSpeed.ping.time.good"); // // // gridData = new GridData(); // gridData.widthHint = 50; // dGood = new IntParameter(dhtGroup, SpeedManagerAlgorithmProviderV2.SETTING_DHT_GOOD_SET_POINT); // dGood.setLayoutData( gridData ); // // gridData = new GridData(); // gridData.widthHint = 50; // dGoodTol = new IntParameter(dhtGroup, SpeedManagerAlgorithmProviderV2.SETTING_DHT_GOOD_TOLERANCE); // dGoodTol.setLayoutData( gridData ); // // //bad // Label dBadLbl = new Label(dhtGroup, SWT.NULL); // gridData = new GridData(); // dBadLbl.setLayoutData(gridData); // //dBadLbl.setText("Bad: "); // Messages.setLanguageText(dBadLbl,"ConfigTransferAutoSpeed.ping.time.bad"); // // // gridData = new GridData(); // gridData.widthHint = 50; // dBad = new IntParameter(dhtGroup, SpeedManagerAlgorithmProviderV2.SETTING_DHT_BAD_SET_POINT); // dBad.setLayoutData( gridData ); // // // gridData = new GridData(); // gridData.widthHint = 50; // dBadTol = new IntParameter(dhtGroup, SpeedManagerAlgorithmProviderV2.SETTING_DHT_BAD_TOLERANCE); // dBadTol.setLayoutData( gridData ); // // //spacer // cSpacer = new Label(cSection, SWT.NULL); // gridData = new GridData(); // gridData.horizontalSpan=1; // cSpacer.setLayoutData(gridData); //how much data to accumulate before making an adjustment. Label iCount = new Label(dhtGroup, SWT.NULL); gridData = new GridData(); gridData.horizontalSpan=2; gridData.horizontalAlignment=GridData.BEGINNING; iCount.setLayoutData(gridData); //iCount.setText("Adjustment interval: "); Messages.setLanguageText(iCount,"ConfigTransferAutoSpeed.adjustment.interval"); adjustmentInterval = new IntParameter(dhtGroup, SpeedManagerAlgorithmProviderV2.SETTING_INTERVALS_BETWEEN_ADJUST); gridData = new GridData(); gridData.widthHint = 50; adjustmentInterval.setLayoutData(gridData); //spacer cSpacer = new Label(cSection, SWT.NULL); gridData = new GridData(); gridData.horizontalSpan=1; cSpacer.setLayoutData(gridData); //how much data to accumulate before making an adjustment. Label skip = new Label(dhtGroup, SWT.NULL); gridData = new GridData(); gridData.horizontalSpan=2; gridData.horizontalAlignment=GridData.BEGINNING; skip.setLayoutData(gridData); //skip.setText("Skip after adjustment: "); Messages.setLanguageText(skip,"ConfigTransferAutoSpeed.skip.after.adjust"); skipAfterAdjustment = new BooleanParameter(dhtGroup, SpeedManagerAlgorithmProviderV2.SETTING_WAIT_AFTER_ADJUST); gridData = new GridData(); gridData.widthHint = 50; skipAfterAdjustment.setLayoutData(gridData); //spacer cSpacer = new Label(cSection, SWT.NULL); gridData = new GridData(); gridData.horizontalSpan=3; cSpacer.setLayoutData(gridData); return cSection; } void enableGroups(String strategyListValue){ if(strategyListValue==null){ return; } //only enable the comment section if the beta is enabled. boolean isBothEnabled = COConfigurationManager.getBooleanParameter( TransferSpeedValidator.AUTO_UPLOAD_ENABLED_CONFIGKEY ); boolean isSeedingEnabled = COConfigurationManager.getBooleanParameter( TransferSpeedValidator.AUTO_UPLOAD_SEEDING_ENABLED_CONFIGKEY ); long version = COConfigurationManager.getLongParameter( SpeedManagerImpl.CONFIG_VERSION ); boolean isV2Enabled = false; if( (isBothEnabled || isSeedingEnabled) && version==2 ){ isV2Enabled = true; } if( commentGroup!=null){ if( isV2Enabled ){ //make this section visible. commentGroup.setEnabled(true); commentGroup.setVisible(true); }else{ //make it invisible. commentGroup.setEnabled(false); commentGroup.setVisible(false); } } }//enableGroups /** * Listen for changes in the drop down, then enable/disable the appropriate * group mode. */ class GroupModeChangeListener implements ParameterChangeListener { /** * Enable/Disable approriate group. * @param p - * @param caused_internally - */ public void parameterChanged(Parameter p, boolean caused_internally) { } public void intParameterChanging(Parameter p, int toValue) { //nothing to do here. } public void booleanParameterChanging(Parameter p, boolean toValue) { //nothing to do here. } public void stringParameterChanging(Parameter p, String toValue) { //nothing to do here. } public void floatParameterChanging(Parameter owner, double toValue) { //nothing to do here. } }//class GroupModeChangeListener class RestoreDefaultsListener implements Listener { public void handleEvent(Event event) { ConfigurationDefaults configDefs = ConfigurationDefaults.getInstance(); try{ long downMax = configDefs.getLongParameter( SpeedManagerAlgorithmProviderV2.SETTING_DOWNLOAD_MAX_LIMIT); String downConf = configDefs.getStringParameter( SpeedLimitMonitor.DOWNLOAD_CONF_LIMIT_SETTING ); long upMax = configDefs.getLongParameter( SpeedManagerAlgorithmProviderV2.SETTING_UPLOAD_MAX_LIMIT ); String upConf = configDefs.getStringParameter( SpeedLimitMonitor.UPLOAD_CONF_LIMIT_SETTING ); COConfigurationManager.setParameter(SpeedManagerAlgorithmProviderV2.SETTING_DOWNLOAD_MAX_LIMIT,downMax); COConfigurationManager.setParameter(SpeedLimitMonitor.DOWNLOAD_CONF_LIMIT_SETTING,downConf); COConfigurationManager.setParameter(SpeedManagerAlgorithmProviderV2.SETTING_UPLOAD_MAX_LIMIT,upMax); COConfigurationManager.setParameter(SpeedLimitMonitor.UPLOAD_CONF_LIMIT_SETTING,upConf); }catch(ConfigurationParameterNotFoundException cpnfe){ //ToDo: log this. } }//handleEvent }//class }