gt: 			Button[] btnZeroNew = {
context: /*
   * File    : ConfigPanelFile.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 java.util.ArrayList;
  
  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.layout.RowLayout;
  import org.eclipse.swt.widgets.*;
  import org.gudy.azureus2.core3.config.COConfigurationManager;
  import org.gudy.azureus2.core3.config.ParameterListener;
  import org.gudy.azureus2.core3.config.impl.ConfigurationDefaults;
  import org.gudy.azureus2.core3.internat.MessageText;
  import org.gudy.azureus2.core3.torrent.TOTorrent;
  import org.gudy.azureus2.core3.util.Constants;
  import org.gudy.azureus2.core3.util.SystemProperties;
  import org.gudy.azureus2.platform.PlatformManager;
  import org.gudy.azureus2.platform.PlatformManagerCapabilities;
  import org.gudy.azureus2.platform.PlatformManagerFactory;
  import org.gudy.azureus2.ui.swt.Messages;
  import org.gudy.azureus2.ui.swt.components.LinkLabel;
  import org.gudy.azureus2.ui.swt.config.*;
  import org.gudy.azureus2.ui.swt.plugins.UISWTConfigSection;
  
  import com.aelitis.azureus.ui.swt.imageloader.ImageLoader;
  
  import org.gudy.azureus2.plugins.ui.config.ConfigSection;
  
  public class ConfigSectionFile
  	implements UISWTConfigSection
  {
  	public String configSectionGetParentSection() {
  		return ConfigSection.SECTION_ROOT;
  	}
  
  	public String configSectionGetName() {
  		return ConfigSection.SECTION_FILES;
  	}
  
  	public void configSectionSave() {
  	}
  
  	public int maxUserMode() {
  		return 2;
  	}
  
  	public void configSectionDelete() {
  		ImageLoader imageLoader = ImageLoader.getInstance();
  		imageLoader.releaseImage("openFolderButton");
  	}
  
  	public Composite configSectionCreate(final Composite parent) {
  		ImageLoader imageLoader = ImageLoader.getInstance();
  		Image imgOpenFolder = imageLoader.getImage("openFolderButton");
  
  		GridData gridData;
  		Label label;
  		String sCurConfigID;
  		final ArrayList allConfigIDs = new ArrayList();
  
  		Composite gFile = new Composite(parent, SWT.NULL);
  
  		GridLayout layout = new GridLayout();
  		layout.numColumns = 2;
  		layout.marginHeight = 0;
  		gFile.setLayout(layout);
  
  		int userMode = COConfigurationManager.getIntParameter("User Mode");
  
  		// Default Dir Section
  		final Group gDefaultDir = new Group(gFile, SWT.NONE);
  		Messages.setLanguageText(gDefaultDir,
  				"ConfigView.section.file.defaultdir.section");
  		layout = new GridLayout();
  		layout.numColumns = 3;
  		layout.marginHeight = 2;
  		gDefaultDir.setLayout(layout);
  		gridData = new GridData(GridData.FILL_HORIZONTAL);
  		gridData.horizontalSpan = 2;
  		gDefaultDir.setLayoutData(gridData);
  
  		// Save Path
  		sCurConfigID = "Default save path";
  		allConfigIDs.add(sCurConfigID);
  		Label lblDefaultDir = new Label(gDefaultDir, SWT.NONE);
  		Messages.setLanguageText(lblDefaultDir,
  				"ConfigView.section.file.defaultdir.ask");
  		lblDefaultDir.setLayoutData(new GridData());
  
  		gridData = new GridData(GridData.FILL_HORIZONTAL);
  		final StringParameter pathParameter = new StringParameter(gDefaultDir,
  				sCurConfigID);
  		pathParameter.setLayoutData(gridData);
  
  		Button browse = new Button(gDefaultDir, SWT.PUSH);
  		browse.setImage(imgOpenFolder);
  		imgOpenFolder.setBackground(browse.getBackground());
  		browse.setToolTipText(MessageText.getString("ConfigView.button.browse"));
  
  		browse.addListener(SWT.Selection, new Listener() {
  			/* (non-Javadoc)
  			 * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
  			 */
  			public void handleEvent(Event event) {
  				DirectoryDialog dialog = new DirectoryDialog(parent.getShell(),
  						SWT.APPLICATION_MODAL);
  				dialog.setFilterPath(pathParameter.getValue());
  				dialog.setMessage(MessageText.getString("ConfigView.dialog.choosedefaultsavepath"));
  				dialog.setText(MessageText.getString("ConfigView.section.file.defaultdir.ask"));
  				String path = dialog.open();
  				if (path != null) {
  					pathParameter.setValue(path);
  				}
  			}
  		});
  
  		// def dir: autoSave
  		sCurConfigID = ConfigurationDefaults.CFG_TORRENTADD_OPENOPTIONS;
  		allConfigIDs.add(sCurConfigID);
  		Composite cOpenOptions = new Composite(gDefaultDir, SWT.NONE);
  		gridData = new GridData(GridData.FILL_HORIZONTAL);
  		gridData.horizontalSpan = 3;
  		cOpenOptions.setLayoutData(gridData);
  		RowLayout rowLayout = new RowLayout();
  		rowLayout.marginBottom = rowLayout.marginLeft = rowLayout.marginRight = rowLayout.marginTop = 0;
  		rowLayout.center = true;
  		cOpenOptions.setLayout(rowLayout);
  		
  		label = new Label(cOpenOptions, SWT.NULL);
  		Messages.setLanguageText(label, "ConfigView.section.file.showopentorrentoptions");
  		String[] openValues = {
  			ConfigurationDefaults.CFG_TORRENTADD_OPENOPTIONS_NEVER,
  			ConfigurationDefaults.CFG_TORRENTADD_OPENOPTIONS_ALWAYS,
  			ConfigurationDefaults.CFG_TORRENTADD_OPENOPTIONS_MANY,
  		};
  		String[] openLabels = {
  			MessageText.getString("OpenTorrentOptions.show.never"),
  			MessageText.getString("OpenTorrentOptions.show.always"),
  			MessageText.getString("OpenTorrentOptions.show.many"),
  		};
  		new StringListParameter(cOpenOptions, sCurConfigID, openLabels, openValues);
  			
  		label = new Label(cOpenOptions, SWT.NULL);
  		label.setText( "    " );
  		sCurConfigID = "ui.addtorrent.openoptions.sep";
  		new BooleanParameter(cOpenOptions,
  				sCurConfigID, "ConfigView.section.file.showopentorrentoptions.sep");
  		
  		
  		
  		if (userMode > 0) {
  			// def dir: autoSave -> auto-rename
  			sCurConfigID = "DefaultDir.AutoSave.AutoRename";
  			allConfigIDs.add(sCurConfigID);
  			BooleanParameter autoSaveAutoRename = new BooleanParameter(gDefaultDir,
  					sCurConfigID, "ConfigView.section.file.defaultdir.autorename");
  			gridData = new GridData(GridData.FILL_HORIZONTAL);
  			gridData.horizontalSpan = 3;
  			autoSaveAutoRename.setLayoutData(gridData);
  			//IAdditionalActionPerformer aapDefaultDirStuff3 = new ChangeSelectionActionPerformer(
  			//		autoSaveAutoRename.getControls(), false);
  
  			// def dir: best guess
  			sCurConfigID = "DefaultDir.BestGuess";
  			allConfigIDs.add(sCurConfigID);
  			final BooleanParameter bestGuess = new BooleanParameter(gDefaultDir,
  					sCurConfigID, "ConfigView.section.file.defaultdir.bestguess");
  			gridData = new GridData(GridData.FILL_HORIZONTAL);
  			gridData.horizontalSpan = 3;
  			bestGuess.setLayoutData(gridData);
  
  				// best guess default dir
  			sCurConfigID = "DefaultDir.BestGuess.Default";
  			allConfigIDs.add(sCurConfigID);
  			final Label lblBestGuessDefaultDir = new Label(gDefaultDir, SWT.NONE);
  			Messages.setLanguageText(lblBestGuessDefaultDir,
  					"ConfigView.section.file.bgdefaultdir.ask");
  			gridData = new GridData();
  			gridData.horizontalIndent=25;
  			lblBestGuessDefaultDir.setLayoutData(gridData);
  
  			gridData = new GridData(GridData.FILL_HORIZONTAL);
  			final StringParameter bestGuessPathParameter = new StringParameter(gDefaultDir,
  					sCurConfigID);
  			bestGuessPathParameter.setLayoutData(gridData);
  
  			final Button bestGuessBrowse = new Button(gDefaultDir, SWT.PUSH);
  			bestGuessBrowse.setImage(imgOpenFolder);
  			bestGuessBrowse.setToolTipText(MessageText.getString("ConfigView.button.browse"));
  
  			bestGuessBrowse.addListener(SWT.Selection, new Listener() {
  				/* (non-Javadoc)
  				 * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
  				 */
  				public void handleEvent(Event event) {
  					DirectoryDialog dialog = new DirectoryDialog(parent.getShell(),
  							SWT.APPLICATION_MODAL);
  					dialog.setFilterPath(pathParameter.getValue());
  					dialog.setMessage(MessageText.getString("ConfigView.dialog.choosedefaultsavepath"));
  					dialog.setText(MessageText.getString("ConfigView.section.file.defaultdir.ask"));
  					String path = dialog.open();
  					if (path != null) {
  						bestGuessPathParameter.setValue(path);
  					}
  				}
  			});
  			
  			//IAdditionalActionPerformer aapDefaultDirStuff = new ChangeSelectionActionPerformer(
  			//		bestGuess.getControls(), true);
  
  			// def dir: auto update
  			sCurConfigID = "DefaultDir.AutoUpdate";
  			allConfigIDs.add(sCurConfigID);
  			BooleanParameter autoUpdateSaveDir = new BooleanParameter(gDefaultDir,
  					sCurConfigID, "ConfigView.section.file.defaultdir.lastused");
  			gridData = new GridData(GridData.FILL_HORIZONTAL);
  			gridData.horizontalSpan = 3;
  			autoUpdateSaveDir.setLayoutData(gridData);
  
  			//IAdditionalActionPerformer aapDefaultDirStuff2 = new ChangeSelectionActionPerformer(
  			//		autoUpdateSaveDir.getControls(), true);
  			
  			COConfigurationManager.addAndFireParameterListener(
  					"Default save path",
  					new ParameterListener() {
  						
  						public void parameterChanged(String parameterName) {
  						
  							if ( gDefaultDir.isDisposed()){
  								
  								COConfigurationManager.removeParameterListener(parameterName, this );
  								
  							}else{
  								
  								String dsp = COConfigurationManager.getStringParameter( parameterName );
  								
  								boolean enable = dsp == null || dsp.trim().length() == 0;
  								
  								bestGuess.setEnabled( enable );
  								lblBestGuessDefaultDir.setEnabled( enable );
  								bestGuessPathParameter.setEnabled( enable );
  								bestGuessBrowse.setEnabled( enable );
  							}
  						}
  					});
  		}
  
  		new Label(gFile, SWT.NONE);
  
  		////////////////////
  
  		sCurConfigID = "XFS Allocation";
  		allConfigIDs.add(sCurConfigID);
  		if (userMode > 0 && !Constants.isWindows) {
  			BooleanParameter xfsAllocation = new BooleanParameter(gFile,
  					sCurConfigID, "ConfigView.label.xfs.allocation");
  			gridData = new GridData();
  			gridData.horizontalSpan = 2;
  			xfsAllocation.setLayoutData(gridData);
  		}
  
  		BooleanParameter zeroNew = null;
  
  		sCurConfigID = "Zero New";
  		allConfigIDs.add(sCurConfigID);
  		if (userMode > 0) {
  			// zero new files
  			zeroNew = new BooleanParameter(gFile, sCurConfigID,
  					"ConfigView.label.zeronewfiles");
  			gridData = new GridData();
  			gridData.horizontalSpan = 2;
  			zeroNew.setLayoutData(gridData);
  		}
  
  		BooleanParameter pieceReorder = null;
  
  		sCurConfigID = "Enable reorder storage mode";
  		allConfigIDs.add(sCurConfigID);
  		if (userMode > 0) {
  
  			pieceReorder = new BooleanParameter(gFile, sCurConfigID,
  					"ConfigView.label.piecereorder");
  			gridData = new GridData();
  			gridData.horizontalSpan = 2;
  			pieceReorder.setLayoutData(gridData);
  
  			//Make the reorder checkbox (button) deselect when zero new is used
  			Button[] btnReorder = {
  				(Button) pieceReorder.getControl()
  			};
  			zeroNew.setAdditionalActionPerformer(new ExclusiveSelectionActionPerformer(
  					btnReorder));
  
  			//Make the zero new checkbox(button) deselct when reorder is used
  			Button[] btnZeroNew = {
  				(Button) zeroNew.getControl()
  			};
  			pieceReorder.setAdditionalActionPerformer(new ExclusiveSelectionActionPerformer(
  					btnZeroNew));
  		}
  
  		sCurConfigID = "Reorder storage mode min MB";
  		allConfigIDs.add(sCurConfigID);
  
  		if (userMode > 0) {
  			Label lblMinMB = new Label(gFile, SWT.NULL);
  			Messages.setLanguageText(lblMinMB, "ConfigView.label.piecereorderminmb");
  			gridData = new GridData();
  			gridData.horizontalIndent = 25;
  			lblMinMB.setLayoutData(gridData);
  
  			IntParameter minMB = new IntParameter(gFile, sCurConfigID);
  			gridData = new GridData();
  			minMB.setLayoutData(gridData);
  
  			pieceReorder.setAdditionalActionPerformer(new ChangeSelectionActionPerformer(
  					lblMinMB));
  			pieceReorder.setAdditionalActionPerformer(new ChangeSelectionActionPerformer(
  					minMB));
  		}
  
  		sCurConfigID = "Enable incremental file creation";
  		allConfigIDs.add(sCurConfigID);
  		if (userMode > 0) {
  			// incremental file creation
  			BooleanParameter incremental = new BooleanParameter(gFile, sCurConfigID,
  					"ConfigView.label.incrementalfile");
  			gridData = new GridData();
  			gridData.horizontalSpan = 2;
  			incremental.setLayoutData(gridData);
  
  			//Make the incremental checkbox (button) deselect when zero new is used
  			Button[] btnIncremental = {
  				(Button) incremental.getControl()
  			};
  			zeroNew.setAdditionalActionPerformer(new ExclusiveSelectionActionPerformer(
  					btnIncremental));
  
  			//Make the zero new checkbox(button) deselct when incremental is used
  