content: /*******************************************************************************
   * Copyright (c) 2000, 2008 IBM Corporation and others.
   * All rights reserved. This program and the accompanying materials
   * are made available under the terms of the Eclipse Public License v1.0
   * which accompanies this distribution, and is available at
   * http://www.eclipse.org/legal/epl-v10.html
   *
   * Contributors:
   *     IBM Corporation - initial API and implementation
   *******************************************************************************/
  package org.eclipse.wst.jsdt.internal.ui.preferences;
  
  import java.util.ArrayList;
  import java.util.List;
  
  import org.eclipse.jface.dialogs.IDialogConstants;
  import org.eclipse.jface.preference.IPreferenceStore;
  import org.eclipse.jface.preference.PreferencePage;
  import org.eclipse.swt.SWT;
  import org.eclipse.swt.layout.GridData;
  import org.eclipse.swt.layout.GridLayout;
  import org.eclipse.swt.widgets.Button;
  import org.eclipse.swt.widgets.Composite;
  import org.eclipse.swt.widgets.Control;
  import org.eclipse.swt.widgets.Label;
  import org.eclipse.swt.widgets.Text;
  import org.eclipse.ui.IWorkbench;
  import org.eclipse.ui.IWorkbenchPreferencePage;
  import org.eclipse.ui.PlatformUI;
  import org.eclipse.wst.jsdt.internal.ui.JavaScriptPlugin;
  
  /**
   * Preference page for work in progress.
   */
  public class WorkInProgressPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
  
  	private List fCheckBoxes;
  	private List fRadioButtons;
  	private List fTextControls;
  	
  	/**
  	 * creates a new preference page.
  	 */
  	public WorkInProgressPreferencePage() {
  		setPreferenceStore(getPreferenceStore());
  		fRadioButtons= new ArrayList();
  		fCheckBoxes= new ArrayList();
  		fTextControls= new ArrayList();
  	}
  
  	Button addCheckBox(Composite parent, String label, String key) { 
  		GridData gd= new GridData(GridData.HORIZONTAL_ALIGN_FILL);
  		
  		Button button= new Button(parent, SWT.CHECK);
  		button.setText(label);
  		button.setData(key);
  		button.setLayoutData(gd);
  
  		button.setSelection(getPreferenceStore().getBoolean(key));
  		
  		fCheckBoxes.add(button);
  		return button;
  	}
  	
  	/*
  	 * @see PreferencePage#createControl(Composite)
  	 */
  	public void createControl(Composite parent) {
  		super.createControl(parent);
  		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), "WORK_IN_PROGRESS_PREFERENCE_PAGE"); //$NON-NLS-1$
  	}
  
  	protected Control createContents(Composite parent) {
  		initializeDialogUnits(parent);
  		
  		Composite result= new Composite(parent, SWT.NONE);
  		GridLayout layout= new GridLayout();
  		layout.marginHeight= convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
  		layout.marginWidth= 0;
  		layout.verticalSpacing= convertVerticalDLUsToPixels(10);
  		layout.horizontalSpacing= convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
  		result.setLayout(layout);
  
  		// Add your controls here
  
  		applyDialogFont(result);
  		return result;
  	}
  	
   
  	/*
  	 * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
  	 */
  	public void init(IWorkbench workbench) {
  	}
  
  	protected void createSpacer(Composite composite, int columnSpan) {
  		Label label= new Label(composite, SWT.NONE);
  		GridData gd= new GridData();
  		gd.horizontalSpan= columnSpan;
  		label.setLayoutData(gd);
  	}
  
  	/*
  	 * @see org.eclipse.jface.preference.PreferencePage#doGetPreferenceStore()
  	 */
  	protected IPreferenceStore doGetPreferenceStore() {
  		return JavaScriptPlugin.getDefault().getPreferenceStore();
  	}
  
  	/*
  	 * @see PreferencePage#performDefaults()
  	 */
  	protected void performDefaults() {
  		IPreferenceStore store= getPreferenceStore();
  		for (int i= 0; i < fCheckBoxes.size(); i++) {
  			Button button= (Button) fCheckBoxes.get(i);
  			String key= (String) button.getData();
  			button.setSelection(store.getDefaultBoolean(key));
  		}
  		for (int i= 0; i < fRadioButtons.size(); i++) {
  			Button button= (Button) fRadioButtons.get(i);
  			String[] info= (String[]) button.getData();
  			button.setSelection(info[1].equals(store.getDefaultString(info[0])));
  		}
  		for (int i= 0; i < fTextControls.size(); i++) {
  			Text text= (Text) fTextControls.get(i);
  			String key= (String) text.getData();
  			text.setText(store.getDefaultString(key));
  		}
  		
  		super.performDefaults();
  	}
  
  	/*
  	 * @see IPreferencePage#performOk()
  	 */
  	public boolean performOk() {
  		IPreferenceStore store= getPreferenceStore();
  		for (int i= 0; i < fCheckBoxes.size(); i++) {
  			Button button= (Button) fCheckBoxes.get(i);
  			String key= (String) button.getData();
  			store.setValue(key, button.getSelection());
  		}
  		for (int i= 0; i < fRadioButtons.size(); i++) {
  			Button button= (Button) fRadioButtons.get(i);
  			if (button.getSelection()) {
  				String[] info= (String[]) button.getData();
  				store.setValue(info[0], info[1]);
  			}
  		}
  		for (int i= 0; i < fTextControls.size(); i++) {
  			Text text= (Text) fTextControls.get(i);
  			String key= (String) text.getData();
  			store.setValue(key, text.getText());
  		}
  		
  		JavaScriptPlugin.getDefault().savePluginPreferences();
  		return super.performOk();
  	}
  
  	public static void initDefaults(IPreferenceStore store) {
  		// Initialize your defaults here
  	}
  }
  