/******************************************************************************* * Copyright (c) 2005, 2012 eBay Inc. * 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 * *******************************************************************************/ /** * */ package org.eclipse.vjet.eclipse.internal.ui.preferences; import java.util.ArrayList; import java.util.List; import org.eclipse.vjet.eclipse.ui.VjetPreferenceConstants; import org.eclipse.dltk.mod.ui.preferences.AbstractConfigurationBlock; import org.eclipse.dltk.mod.ui.preferences.OverlayPreferenceStore; import org.eclipse.dltk.mod.ui.preferences.OverlayPreferenceStore.OverlayKey; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; 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.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; /** * * */ class VJOBuildPathConfigurationBlock extends AbstractConfigurationBlock { private Button fFoldersAsSourceFolder; private Button fProjectAsSourceFolder; private Label fSrcFolderNameLabel; private Text fSrcFolderNameText; private SelectionListener fSelectionListener; private ModifyListener fModifyListener; private static final String SRCBIN_FOLDERS_IN_NEWPROJ = VjetPreferenceConstants.SRCBIN_FOLDERS_IN_NEWPROJ; private static final String SRCBIN_SRCNAME = VjetPreferenceConstants.SRC_SRCNAME; public VJOBuildPathConfigurationBlock(OverlayPreferenceStore store) { super(store); store.addKeys(this.createOverlayStoreKeys()); this.fSelectionListener = new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) {} public void widgetSelected(SelectionEvent e) { if (e.getSource() == fProjectAsSourceFolder) { fSrcFolderNameLabel.setEnabled(false); fSrcFolderNameText.setEnabled(false); } else { fSrcFolderNameLabel.setEnabled(true); fSrcFolderNameText.setEnabled(true); } } }; this.fModifyListener = new ModifyListener() { public void modifyText(ModifyEvent e) { //TODO: validate source folder name } }; } private OverlayKey[] createOverlayStoreKeys() { List<OverlayKey> overlayKeys = new ArrayList<OverlayKey>(); overlayKeys.add(new OverlayKey(OverlayPreferenceStore.BOOLEAN, VjetPreferenceConstants.SRCBIN_FOLDERS_IN_NEWPROJ)); overlayKeys.add(new OverlayKey(OverlayPreferenceStore.STRING, VjetPreferenceConstants.SRC_SRCNAME)); return overlayKeys.toArray(new OverlayKey[overlayKeys.size()]); } /* (non-Javadoc) * @see org.eclipse.dltk.mod.ui.preferences.IPreferenceConfigurationBlock#createControl(org.eclipse.swt.widgets.Composite) */ public Control createControl(Composite parent) { initializeDialogUnits(parent); Composite composite= new Composite(parent, SWT.NONE); composite.setLayout(new GridLayout()); Group sourceFolderGroup= new Group(composite, SWT.NONE); sourceFolderGroup.setLayout(new GridLayout(2, false)); sourceFolderGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); sourceFolderGroup.setText(VjetPreferenceMessages.NewVJOProjectPreferencePage_sourcefolder_label); this.fProjectAsSourceFolder = addRadioButton(sourceFolderGroup, VjetPreferenceMessages.NewVJOProjectPreferencePage_sourcefolder_project, SRCBIN_FOLDERS_IN_NEWPROJ, IPreferenceStore.FALSE, 0); this.fProjectAsSourceFolder.addSelectionListener(this.fSelectionListener); this.fFoldersAsSourceFolder = addRadioButton(sourceFolderGroup, VjetPreferenceMessages.NewVJOProjectPreferencePage_sourcefolder_folder, SRCBIN_FOLDERS_IN_NEWPROJ, IPreferenceStore.TRUE, 0); this.fFoldersAsSourceFolder.addSelectionListener(this.fSelectionListener); this.fSrcFolderNameLabel = new Label(sourceFolderGroup, SWT.NONE); GridData gridData = new GridData(); gridData.horizontalSpan = 1; gridData.horizontalIndent = 10; this.fSrcFolderNameLabel.setLayoutData(gridData); this.fSrcFolderNameLabel.setText(VjetPreferenceMessages.NewVJOProjectPreferencePage_folders_src); this.fSrcFolderNameText = addTextControl(sourceFolderGroup, this.fSrcFolderNameLabel, SRCBIN_SRCNAME, 10); this.fSrcFolderNameText.addModifyListener(this.fModifyListener); return composite; } private Button addRadioButton(Composite parent, String label, String key, String value, int indent) { GridData gd= new GridData(GridData.HORIZONTAL_ALIGN_FILL); gd.horizontalSpan= 2; gd.horizontalIndent= indent; Button button= new Button(parent, SWT.RADIO); button.setText(label); button.setLayoutData(gd); button.setSelection(value.equals(getPreferenceStore().getString(key))); return button; } private Text addTextControl(Composite parent, Label labelControl, String key, int indent) { GridData gd= new GridData(); gd.horizontalIndent= indent; labelControl.setLayoutData(gd); gd= new GridData(GridData.FILL_HORIZONTAL); gd.widthHint= convertWidthInCharsToPixels(30); Text text= new Text(parent, SWT.SINGLE | SWT.BORDER); text.setText(getPreferenceStore().getString(key)); text.setLayoutData(gd); return text; } /* (non-Javadoc) * @see org.eclipse.dltk.mod.ui.preferences.AbstractConfigurationBlock#performDefaults() */ public void performDefaults() { boolean folderAsSrc = this.getPreferenceStore().getDefaultBoolean(VjetPreferenceConstants.SRCBIN_FOLDERS_IN_NEWPROJ); if (folderAsSrc) { this.fFoldersAsSourceFolder.setSelection(true); this.fProjectAsSourceFolder.setSelection(false); String srcFolderName = this.getPreferenceStore().getDefaultString(VjetPreferenceConstants.SRC_SRCNAME); this.fSrcFolderNameText.setText(srcFolderName); } else { this.fFoldersAsSourceFolder.setSelection(false); this.fProjectAsSourceFolder.setSelection(true); this.fSrcFolderNameText.setText(""); } } /* (non-Javadoc) * @see org.eclipse.dltk.mod.ui.preferences.AbstractConfigurationBlock#performOk() */ public void performOk() { if (this.fFoldersAsSourceFolder.getSelection()) { this.getPreferenceStore().setValue(VjetPreferenceConstants.SRCBIN_FOLDERS_IN_NEWPROJ, IPreferenceStore.TRUE); this.getPreferenceStore().setValue(VjetPreferenceConstants.SRC_SRCNAME, this.fSrcFolderNameText.getText().trim()); } else { this.getPreferenceStore().setValue(VjetPreferenceConstants.SRCBIN_FOLDERS_IN_NEWPROJ, IPreferenceStore.FALSE); this.getPreferenceStore().setValue(VjetPreferenceConstants.SRC_SRCNAME, ""); } } }