1 /* 2 * File : ConfigPanel*.java 3 * Created : 11 mar. 2004 4 * By : TuxPaper 5 * 6 * Copyright (C) Azureus Software, Inc, All Rights Reserved. 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation; either version 2 of the License, or 11 * (at your option) any later version. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details ( see the LICENSE file ). 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program; if not, write to the Free Software 20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 21 */ 22 23 package org.gudy.azureus2.ui.swt.views.configsections; 24 25 import org.eclipse.swt.SWT; 26 import org.eclipse.swt.graphics.Image; 27 import org.eclipse.swt.layout.GridData; 28 import org.eclipse.swt.layout.GridLayout; 29 import org.eclipse.swt.widgets.Composite; 30 import org.eclipse.swt.widgets.Control; 31 import org.eclipse.swt.widgets.Event; 32 import org.eclipse.swt.widgets.Group; 33 import org.eclipse.swt.widgets.Label; 34 import org.eclipse.swt.widgets.Listener; 35 36 import org.gudy.azureus2.plugins.ui.config.ConfigSection; 37 import org.gudy.azureus2.ui.swt.components.LinkLabel; 38 import org.gudy.azureus2.ui.swt.config.*; 39 import org.gudy.azureus2.ui.swt.plugins.UISWTConfigSection; 40 import org.gudy.azureus2.ui.swt.shells.CoreWaiterSWT; 41 import org.gudy.azureus2.ui.swt.Messages; 42 import org.gudy.azureus2.ui.swt.Utils; 43 import org.gudy.azureus2.core3.config.COConfigurationManager; 44 import org.gudy.azureus2.core3.config.impl.TransferSpeedValidator; 45 import org.gudy.azureus2.core3.internat.MessageText; 46 47 import com.aelitis.azureus.core.AzureusCore; 48 import com.aelitis.azureus.core.AzureusCoreRunningListener; 49 import com.aelitis.azureus.ui.swt.imageloader.ImageLoader; 50 51 public class ConfigSectionTransfer implements UISWTConfigSection { 52 ConfigSectionTransfer()53 public ConfigSectionTransfer() { 54 } 55 configSectionGetParentSection()56 public String configSectionGetParentSection() { 57 return ConfigSection.SECTION_ROOT; 58 } 59 configSectionGetName()60 public String configSectionGetName() { 61 return ConfigSection.SECTION_TRANSFER; 62 } 63 configSectionSave()64 public void configSectionSave() { 65 } 66 configSectionDelete()67 public void configSectionDelete() { 68 ImageLoader imageLoader = ImageLoader.getInstance(); 69 imageLoader.releaseImage("subitem"); 70 } 71 maxUserMode()72 public int maxUserMode() { 73 return 2; 74 } 75 76 configSectionCreate(final Composite parent)77 public Composite configSectionCreate(final Composite parent) { 78 GridData gridData; 79 GridLayout layout; 80 Label label; 81 82 Composite cSection = new Composite(parent, SWT.NULL); 83 gridData = new GridData(GridData.VERTICAL_ALIGN_FILL 84 | GridData.HORIZONTAL_ALIGN_FILL); 85 Utils.setLayoutData(cSection, gridData); 86 layout = new GridLayout(); 87 layout.numColumns = 2; 88 layout.marginHeight = 0; 89 cSection.setLayout(layout); 90 91 int userMode = COConfigurationManager.getIntParameter("User Mode"); 92 93 // store the initial d/l speed so we can do something sensible later 94 final int[] manual_max_download_speed = { COConfigurationManager 95 .getIntParameter("Max Download Speed KBs") }; 96 97 // max upload speed 98 gridData = new GridData(); 99 label = new Label(cSection, SWT.NULL); 100 Utils.setLayoutData(label, gridData); 101 Messages.setLanguageText(label, "ConfigView.label.maxuploadspeed"); 102 103 gridData = new GridData(); 104 final IntParameter paramMaxUploadSpeed = new IntParameter(cSection, 105 "Max Upload Speed KBs", 0, Integer.MAX_VALUE ); 106 paramMaxUploadSpeed.setLayoutData(gridData); 107 108 // max upload speed when seeding 109 final Composite cMaxUploadSpeedOptionsArea = new Composite(cSection, SWT.NULL); 110 layout = new GridLayout(); 111 layout.numColumns = 3; 112 layout.marginWidth = 0; 113 layout.marginHeight = 0; 114 cMaxUploadSpeedOptionsArea.setLayout(layout); 115 gridData = new GridData(); 116 gridData.horizontalIndent = 15; 117 gridData.horizontalSpan = 2; 118 Utils.setLayoutData(cMaxUploadSpeedOptionsArea, gridData); 119 120 ImageLoader imageLoader = ImageLoader.getInstance(); 121 Image img = imageLoader.getImage("subitem"); 122 123 label = new Label(cMaxUploadSpeedOptionsArea, SWT.NULL); 124 img.setBackground(label.getBackground()); 125 gridData = new GridData(GridData.VERTICAL_ALIGN_BEGINNING); 126 Utils.setLayoutData(label, gridData); 127 label.setImage(img); 128 129 gridData = new GridData(); 130 final BooleanParameter enable_seeding_rate = new BooleanParameter( 131 cMaxUploadSpeedOptionsArea, "enable.seedingonly.upload.rate", 132 "ConfigView.label.maxuploadspeedseeding"); 133 enable_seeding_rate.setLayoutData(gridData); 134 135 gridData = new GridData(); 136 final IntParameter paramMaxUploadSpeedSeeding = new IntParameter( 137 cMaxUploadSpeedOptionsArea, "Max Upload Speed Seeding KBs", 0, Integer.MAX_VALUE ); 138 paramMaxUploadSpeedSeeding.setLayoutData(gridData); 139 enable_seeding_rate 140 .setAdditionalActionPerformer(new ChangeSelectionActionPerformer( 141 paramMaxUploadSpeedSeeding.getControl())); 142 143 if (userMode < 2) { 144 // wiki link 145 146 Composite cWiki = new Composite(cSection, SWT.COLOR_GRAY); 147 gridData = new GridData(GridData.VERTICAL_ALIGN_FILL 148 | GridData.HORIZONTAL_ALIGN_FILL); 149 gridData.horizontalSpan = 2; 150 Utils.setLayoutData(cWiki, gridData); 151 layout = new GridLayout(); 152 layout.numColumns = 4; 153 layout.marginHeight = 0; 154 cWiki.setLayout(layout); 155 156 gridData = new GridData(); 157 gridData.horizontalIndent = 6; 158 gridData.horizontalSpan = 2; 159 label = new Label(cWiki, SWT.NULL); 160 Utils.setLayoutData(label, gridData); 161 label.setText(MessageText.getString("Utils.link.visit") + ":"); 162 163 gridData = new GridData(); 164 gridData.horizontalIndent = 10; 165 gridData.horizontalSpan = 2; 166 new LinkLabel(cWiki, gridData, "ConfigView.section.transfer.speeds.wiki", 167 "http://wiki.vuze.com/w/Good_settings"); 168 } 169 170 if ( userMode > 1 ){ 171 172 gridData = new GridData(); 173 label = new Label(cSection, SWT.NULL); 174 Utils.setLayoutData(label, gridData); 175 Messages.setLanguageText(label, "ConfigView.label.maxuploadswhenbusymin" ); 176 177 gridData = new GridData(); 178 new IntParameter(cSection, "max.uploads.when.busy.inc.min.secs", 0, Integer.MAX_VALUE ).setLayoutData(gridData); 179 } 180 181 // max download speed 182 gridData = new GridData(); 183 label = new Label(cSection, SWT.NULL); 184 Utils.setLayoutData(label, gridData); 185 Messages.setLanguageText(label, "ConfigView.label.maxdownloadspeed"); 186 187 gridData = new GridData(); 188 final IntParameter paramMaxDownSpeed = new IntParameter(cSection, 189 "Max Download Speed KBs", 0, Integer.MAX_VALUE ); 190 paramMaxDownSpeed.setLayoutData(gridData); 191 192 // max upload/download limit dependencies 193 194 Listener l = new Listener() { 195 196 public void handleEvent(Event event) { 197 boolean disableAuto = false; 198 boolean disableAutoSeeding = false; 199 200 if(enable_seeding_rate.isSelected()) 201 { 202 disableAutoSeeding = event.widget == paramMaxUploadSpeedSeeding.getControl(); 203 disableAuto = event.widget == paramMaxDownSpeed.getControl() || event.widget == paramMaxUploadSpeed.getControl(); 204 } else 205 { 206 disableAuto = true; 207 disableAutoSeeding = true; 208 } 209 210 211 if(disableAuto) 212 COConfigurationManager.setParameter(TransferSpeedValidator.AUTO_UPLOAD_ENABLED_CONFIGKEY, false); 213 if(disableAutoSeeding) 214 COConfigurationManager.setParameter(TransferSpeedValidator.AUTO_UPLOAD_SEEDING_ENABLED_CONFIGKEY, false); 215 } 216 }; 217 218 paramMaxDownSpeed.getControl().addListener(SWT.Selection, l); 219 paramMaxUploadSpeed.getControl().addListener(SWT.Selection, l); 220 paramMaxUploadSpeedSeeding.getControl().addListener(SWT.Selection, l); 221 222 223 paramMaxUploadSpeed.addChangeListener(new ParameterChangeAdapter() { 224 ParameterChangeAdapter me = this; 225 226 public void parameterChanged(Parameter p, boolean internal) { 227 CoreWaiterSWT.waitForCoreRunning(new AzureusCoreRunningListener() { 228 229 public void azureusCoreRunning(AzureusCore core) { 230 if (paramMaxUploadSpeed.isDisposed()) { 231 paramMaxUploadSpeed.removeChangeListener(me); 232 return; 233 } 234 235 // we don't want to police these limits when auto-speed is running as 236 // they screw things up bigtime 237 238 if (TransferSpeedValidator.isAutoSpeedActive(core.getGlobalManager())) { 239 240 return; 241 } 242 243 int up_val = paramMaxUploadSpeed.getValue(); 244 int down_val = paramMaxDownSpeed.getValue(); 245 246 if (up_val != 0 247 && up_val < COConfigurationManager.CONFIG_DEFAULT_MIN_MAX_UPLOAD_SPEED) { 248 249 if ((down_val == 0) || down_val > (up_val * 2)) { 250 251 paramMaxDownSpeed.setValue(up_val * 2); 252 } 253 } else { 254 255 if (down_val != manual_max_download_speed[0]) { 256 257 paramMaxDownSpeed.setValue(manual_max_download_speed[0]); 258 } 259 } 260 } 261 262 }); 263 }; 264 }); 265 266 paramMaxDownSpeed.addChangeListener(new ParameterChangeAdapter() { 267 ParameterChangeAdapter me = this; 268 269 public void parameterChanged(Parameter p, boolean internal) { 270 CoreWaiterSWT.waitForCoreRunning(new AzureusCoreRunningListener() { 271 272 public void azureusCoreRunning(AzureusCore core) { 273 if (paramMaxDownSpeed.isDisposed()) { 274 paramMaxDownSpeed.removeChangeListener(me); 275 return; 276 } 277 278 // we don't want to police these limits when auto-speed is running as 279 // they screw things up bigtime 280 281 if (TransferSpeedValidator.isAutoSpeedActive(core.getGlobalManager())) { 282 283 return; 284 } 285 286 int up_val = paramMaxUploadSpeed.getValue(); 287 int down_val = paramMaxDownSpeed.getValue(); 288 289 manual_max_download_speed[0] = down_val; 290 291 if (up_val < COConfigurationManager.CONFIG_DEFAULT_MIN_MAX_UPLOAD_SPEED) { 292 293 if (up_val != 0 && up_val < (down_val * 2)) { 294 295 paramMaxUploadSpeed.setValue((down_val + 1) / 2); 296 297 } else if (down_val == 0) { 298 299 paramMaxUploadSpeed.setValue(0); 300 } 301 } 302 } 303 }); 304 } 305 }); 306 307 if (userMode > 0) { 308 309 // bias upload to incomplete 310 311 BooleanParameter bias_upload = new BooleanParameter( 312 cSection, 313 "Bias Upload Enable", 314 "ConfigView.label.xfer.bias_up" ); 315 gridData = new GridData(); 316 gridData.horizontalSpan = 2; 317 bias_upload.setLayoutData(gridData); 318 319 320 final Composite bias_slack_area = new Composite(cSection, SWT.NULL); 321 layout = new GridLayout(); 322 layout.numColumns = 3; 323 layout.marginWidth = 0; 324 layout.marginHeight = 0; 325 bias_slack_area.setLayout(layout); 326 gridData = new GridData(); 327 gridData.horizontalIndent = 15; 328 gridData.horizontalSpan = 2; 329 Utils.setLayoutData(bias_slack_area, gridData); 330 331 label = new Label(bias_slack_area, SWT.NULL); 332 gridData = new GridData(GridData.VERTICAL_ALIGN_BEGINNING); 333 Utils.setLayoutData(label, gridData); 334 label.setImage(img); 335 336 label = new Label(bias_slack_area, SWT.NULL); 337 Messages.setLanguageText(label, "ConfigView.label.xfer.bias_slack"); 338 339 IntParameter bias_slack = new IntParameter( 340 bias_slack_area, "Bias Upload Slack KBs", 1, Integer.MAX_VALUE ); 341 342 343 final Composite bias_unlimited_area = new Composite(cSection, SWT.NULL); 344 layout = new GridLayout(); 345 layout.numColumns = 2; 346 layout.marginWidth = 0; 347 layout.marginHeight = 0; 348 bias_unlimited_area.setLayout(layout); 349 gridData = new GridData(); 350 gridData.horizontalIndent = 15; 351 gridData.horizontalSpan = 2; 352 Utils.setLayoutData(bias_unlimited_area, gridData); 353 354 label = new Label(bias_unlimited_area, SWT.NULL); 355 gridData = new GridData(GridData.VERTICAL_ALIGN_BEGINNING); 356 Utils.setLayoutData(label, gridData); 357 label.setImage(img); 358 359 360 BooleanParameter bias_no_limit = new BooleanParameter( 361 bias_unlimited_area, 362 "Bias Upload Handle No Limit", 363 "ConfigView.label.xfer.bias_no_limit" ); 364 365 bias_upload.setAdditionalActionPerformer( 366 new ChangeSelectionActionPerformer( 367 new Parameter[]{ bias_slack, bias_no_limit} )); 368 } 369 370 if (userMode > 0) { 371 372 // AUTO GROUP 373 374 Group auto_group = new Group(cSection, SWT.NULL); 375 376 Messages.setLanguageText(auto_group, "group.auto"); 377 378 GridLayout auto_layout = new GridLayout(); 379 380 auto_layout.numColumns = 2; 381 382 auto_group.setLayout(auto_layout); 383 384 gridData = new GridData(GridData.FILL_HORIZONTAL); 385 gridData.horizontalSpan = 2; 386 Utils.setLayoutData(auto_group, gridData); 387 388 BooleanParameter auto_adjust = new BooleanParameter( 389 auto_group, 390 "Auto Adjust Transfer Defaults", 391 "ConfigView.label.autoadjust" ); 392 393 gridData = new GridData(); 394 gridData.horizontalSpan = 2; 395 396 auto_adjust.setLayoutData( gridData ); 397 398 // max uploads 399 gridData = new GridData(); 400 label = new Label(auto_group, SWT.NULL); 401 Utils.setLayoutData(label, gridData); 402 Messages.setLanguageText(label, "ConfigView.label.maxuploads"); 403 404 gridData = new GridData(); 405 IntParameter paramMaxUploads = new IntParameter(auto_group, "Max Uploads", 406 2, Integer.MAX_VALUE ); 407 paramMaxUploads.setLayoutData(gridData); 408 409 // max uploads when seeding 410 411 final Composite cMaxUploadsOptionsArea = new Composite(auto_group, SWT.NULL); 412 layout = new GridLayout(); 413 layout.numColumns = 3; 414 layout.marginWidth = 0; 415 layout.marginHeight = 0; 416 cMaxUploadsOptionsArea.setLayout(layout); 417 gridData = new GridData(); 418 gridData.horizontalIndent = 15; 419 gridData.horizontalSpan = 2; 420 Utils.setLayoutData(cMaxUploadsOptionsArea, gridData); 421 label = new Label(cMaxUploadsOptionsArea, SWT.NULL); 422 img.setBackground(label.getBackground()); 423 gridData = new GridData(GridData.VERTICAL_ALIGN_BEGINNING); 424 Utils.setLayoutData(label, gridData); 425 label.setImage(img); 426 427 gridData = new GridData(); 428 BooleanParameter enable_seeding_uploads = new BooleanParameter( 429 cMaxUploadsOptionsArea, "enable.seedingonly.maxuploads", 430 "ConfigView.label.maxuploadsseeding"); 431 enable_seeding_uploads.setLayoutData(gridData); 432 433 gridData = new GridData(); 434 final IntParameter paramMaxUploadsSeeding = new IntParameter( 435 cMaxUploadsOptionsArea, "Max Uploads Seeding", 2, Integer.MAX_VALUE ); 436 paramMaxUploadsSeeding.setLayoutData(gridData); 437 438 439 440 //// 441 442 gridData = new GridData(); 443 label = new Label(auto_group, SWT.NULL); 444 Utils.setLayoutData(label, gridData); 445 Messages.setLanguageText(label, "ConfigView.label.max_peers_per_torrent"); 446 447 gridData = new GridData(); 448 IntParameter paramMaxClients = new IntParameter(auto_group, 449 "Max.Peer.Connections.Per.Torrent"); 450 paramMaxClients.setLayoutData(gridData); 451 452 453 ///// 454 455 // max peers when seeding 456 457 final Composite cMaxPeersOptionsArea = new Composite(auto_group, SWT.NULL); 458 layout = new GridLayout(); 459 layout.numColumns = 3; 460 layout.marginWidth = 0; 461 layout.marginHeight = 0; 462 cMaxPeersOptionsArea.setLayout(layout); 463 gridData = new GridData(); 464 gridData.horizontalIndent = 15; 465 gridData.horizontalSpan = 2; 466 Utils.setLayoutData(cMaxPeersOptionsArea, gridData); 467 label = new Label(cMaxPeersOptionsArea, SWT.NULL); 468 img.setBackground(label.getBackground()); 469 gridData = new GridData(GridData.VERTICAL_ALIGN_BEGINNING); 470 Utils.setLayoutData(label, gridData); 471 label.setImage(img); 472 473 gridData = new GridData(); 474 BooleanParameter enable_max_peers_seeding = new BooleanParameter( 475 cMaxPeersOptionsArea, "Max.Peer.Connections.Per.Torrent.When.Seeding.Enable", 476 "ConfigView.label.maxuploadsseeding"); 477 enable_max_peers_seeding.setLayoutData(gridData); 478 479 gridData = new GridData(); 480 final IntParameter paramMaxPeersSeeding = new IntParameter( 481 cMaxPeersOptionsArea, "Max.Peer.Connections.Per.Torrent.When.Seeding", 0, Integer.MAX_VALUE ); 482 paramMaxPeersSeeding.setLayoutData(gridData); 483 484 ///// 485 486 gridData = new GridData(); 487 label = new Label(auto_group, SWT.NULL); 488 Utils.setLayoutData(label, gridData); 489 Messages.setLanguageText(label, "ConfigView.label.max_peers_total"); 490 491 gridData = new GridData(); 492 IntParameter paramMaxClientsTotal = new IntParameter(auto_group, 493 "Max.Peer.Connections.Total"); 494 paramMaxClientsTotal.setLayoutData(gridData); 495 496 gridData = new GridData(); 497 label = new Label(auto_group, SWT.NULL); 498 Utils.setLayoutData(label, gridData); 499 Messages.setLanguageText(label, "ConfigView.label.maxseedspertorrent"); 500 501 gridData = new GridData(); 502 IntParameter max_seeds_per_torrent = new IntParameter(auto_group,"Max Seeds Per Torrent"); 503 max_seeds_per_torrent.setLayoutData(gridData); 504 505 final Parameter[] parameters = { 506 paramMaxUploads, enable_seeding_uploads, paramMaxUploadsSeeding, 507 paramMaxClients, enable_max_peers_seeding, paramMaxPeersSeeding, 508 paramMaxClientsTotal, max_seeds_per_torrent, 509 }; 510 511 IAdditionalActionPerformer f_enabler = 512 new GenericActionPerformer( new Control[0]) 513 { 514 public void 515 performAction() 516 { 517 boolean auto = COConfigurationManager.getBooleanParameter( "Auto Adjust Transfer Defaults" ); 518 519 for ( Parameter p: parameters ){ 520 521 Control[] c = p.getControls(); 522 523 for ( Control x: c ){ 524 525 x.setEnabled( !auto ); 526 } 527 } 528 529 if ( !auto ){ 530 531 paramMaxUploadsSeeding.getControl().setEnabled( COConfigurationManager.getBooleanParameter( "enable.seedingonly.maxuploads" )); 532 533 paramMaxPeersSeeding.getControl().setEnabled( COConfigurationManager.getBooleanParameter( "Max.Peer.Connections.Per.Torrent.When.Seeding.Enable" )); 534 } 535 } 536 }; 537 538 f_enabler.performAction(); 539 540 enable_seeding_uploads.setAdditionalActionPerformer( f_enabler ); 541 enable_max_peers_seeding.setAdditionalActionPerformer( f_enabler ); 542 auto_adjust.setAdditionalActionPerformer( f_enabler ); 543 544 545 // NON PUBLIC PEERS GROUP 546 547 Group npp_group = new Group(cSection, SWT.NULL); 548 549 Messages.setLanguageText(npp_group, "label.non.public.peers"); 550 551 GridLayout npp_layout = new GridLayout(); 552 553 npp_layout.numColumns = 2; 554 555 npp_group.setLayout(npp_layout); 556 557 gridData = new GridData(GridData.FILL_HORIZONTAL); 558 gridData.horizontalSpan = 2; 559 Utils.setLayoutData(npp_group, gridData); 560 561 label = new Label(npp_group, SWT.NULL); 562 Messages.setLanguageText(label, "ConfigView.label.npp.slots"); 563 564 IntParameter npp_upload_slots = new IntParameter(npp_group,"Non-Public Peer Extra Slots Per Torrent",0,Integer.MAX_VALUE); 565 566 label = new Label(npp_group, SWT.NULL); 567 Messages.setLanguageText(label, "ConfigView.label.npp.connections"); 568 569 IntParameter npp_connections = new IntParameter(npp_group,"Non-Public Peer Extra Connections Per Torrent",0,Integer.MAX_VALUE); 570 571 // END NON PUBLIC PEERS GROUP 572 573 gridData = new GridData(); 574 gridData.horizontalSpan = 2; 575 BooleanParameter useReqLimiting = new BooleanParameter(cSection, "Use Request Limiting", 576 "ConfigView.label.userequestlimiting"); 577 useReqLimiting.setLayoutData(gridData); 578 579 gridData = new GridData(); 580 gridData.horizontalSpan = 2; 581 BooleanParameter useReqLimitingPrios = new BooleanParameter(cSection, "Use Request Limiting Priorities", 582 "ConfigView.label.userequestlimitingpriorities"); 583 useReqLimitingPrios.setLayoutData(gridData); 584 useReqLimiting.setAdditionalActionPerformer(new ChangeSelectionActionPerformer( 585 useReqLimitingPrios.getControl())); 586 587 // up limits include protocol 588 589 gridData = new GridData(); 590 gridData.horizontalSpan = 2; 591 BooleanParameter upIncludesProt = new BooleanParameter(cSection, 592 "Up Rate Limits Include Protocol", "ConfigView.label.up.includes.prot"); 593 upIncludesProt.setLayoutData(gridData); 594 595 // down limits include protocol 596 597 gridData = new GridData(); 598 gridData.horizontalSpan = 2; 599 BooleanParameter downIncludesProt = new BooleanParameter(cSection, 600 "Down Rate Limits Include Protocol", "ConfigView.label.down.includes.prot"); 601 downIncludesProt.setLayoutData(gridData); 602 603 // same IP 604 605 gridData = new GridData(); 606 gridData.horizontalSpan = 2; 607 BooleanParameter allowSameIP = new BooleanParameter(cSection, 608 "Allow Same IP Peers", "ConfigView.label.allowsameip"); 609 allowSameIP.setLayoutData(gridData); 610 611 // lazy bit field 612 gridData = new GridData(); 613 gridData.horizontalSpan = 2; 614 BooleanParameter lazybf = new BooleanParameter(cSection, 615 "Use Lazy Bitfield", "ConfigView.label.lazybitfield"); 616 lazybf.setLayoutData(gridData); 617 618 // don't declare completion 619 620 if (userMode > 1) { 621 gridData = new GridData(); 622 gridData.horizontalSpan = 2; 623 BooleanParameter hap = new BooleanParameter(cSection, 624 "peercontrol.hide.piece", "ConfigView.label.hap"); 625 hap.setLayoutData(gridData); 626 627 gridData = new GridData(); 628 gridData.horizontalSpan = 2; 629 BooleanParameter hapds = new BooleanParameter(cSection, 630 "peercontrol.hide.piece.ds", "ConfigView.label.hapds"); 631 hapds.setLayoutData(gridData); 632 633 hap.setAdditionalActionPerformer(new ChangeSelectionActionPerformer( 634 hapds.getControl())); 635 636 } 637 638 // prioritise first/last pieces 639 gridData = new GridData(); 640 gridData.horizontalSpan = 2; 641 BooleanParameter firstPiece = new BooleanParameter(cSection, 642 "Prioritize First Piece", 643 "ConfigView.label.prioritizefirstpiece"); 644 firstPiece.setLayoutData(gridData); 645 646 // Further prioritize High priority files according to % complete and size of file 647 gridData = new GridData(); 648 gridData.horizontalSpan = 2; 649 BooleanParameter mostCompletedFiles = new BooleanParameter(cSection, 650 "Prioritize Most Completed Files", 651 "ConfigView.label.prioritizemostcompletedfiles"); 652 mostCompletedFiles.setLayoutData(gridData); 653 654 // ignore ports 655 656 Composite cMiniArea = new Composite(cSection, SWT.NULL); 657 layout = new GridLayout(); 658 layout.numColumns = 2; 659 layout.marginHeight = 0; 660 layout.marginWidth = 0; 661 cMiniArea.setLayout(layout); 662 gridData = new GridData(GridData.FILL_HORIZONTAL); 663 gridData.horizontalSpan = 2; 664 Utils.setLayoutData(cMiniArea, gridData); 665 666 gridData = new GridData(); 667 label = new Label(cMiniArea, SWT.NULL); 668 Utils.setLayoutData(label, gridData); 669 Messages.setLanguageText(label, 670 "ConfigView.label.transfer.ignorepeerports"); 671 672 gridData = new GridData(); 673 gridData.widthHint = 125; 674 StringParameter ignore_ports = new StringParameter(cMiniArea, 675 "Ignore.peer.ports", "0"); 676 ignore_ports.setLayoutData(gridData); 677 } 678 679 return cSection; 680 } 681 } 682