package net.sourceforge.pmd.eclipse.ui.preferences; import net.sourceforge.pmd.cpd.GUI; import net.sourceforge.pmd.eclipse.runtime.preferences.IPreferences; import net.sourceforge.pmd.eclipse.ui.nls.StringKeys; import net.sourceforge.pmd.eclipse.ui.preferences.br.AbstractPMDPreferencePage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; 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.Spinner; /** * Preference page for CPD properties * * @author ? * @author Philippe Herlin, Brian Remedios * */ public class CPDPreferencePage extends AbstractPMDPreferencePage { private Spinner minTileSizeSpinner; private Label minTileLabel; protected String descriptionId() { return StringKeys.PREF_CPD_TITLE; } /** * Insert the method's description here. * @see PreferencePage#createContents */ protected Control createContents(Composite parent) { // Create parent composite Composite composite = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(1, false); layout.verticalSpacing = 10; composite.setLayout(layout); // Create children Group generalGroup = buildGeneralGroup(composite); // Layout children generalGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); buildCPDLauncherButton(composite); return composite; } public void createControl(Composite parent) { super.createControl(parent); setModified(false); } /** * Build the CPD launcher button * @param parent Composite * @return Button */ private Button buildCPDLauncherButton(Composite parent) { Button button = new Button(parent, SWT.PUSH | SWT.LEFT); button.setText("Launch CPD..."); button.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent event) { new Thread(new Runnable() { public void run() { GUI.main(new String[] { "-noexitonclose" }); } }).start(); } }); return button; } /** * Build the group of general preferences * @param parent the parent composite * @return the group widget */ private Group buildGeneralGroup(final Composite parent) { // build the group Group group = new Group(parent, SWT.SHADOW_IN); group.setText(getMessage(StringKeys.PREF_CPD_GROUP_GENERAL)); group.setLayout(new GridLayout(2, false)); // build the children minTileLabel = new Label(group, SWT.NULL); minTileLabel.setText(getMessage(StringKeys.PREF_CPD_TILESIZE)); minTileSizeSpinner = new Spinner(group, SWT.BORDER); minTileSizeSpinner.setMinimum(preferences.getMinTileSize()); // layout children GridData data = new GridData(GridData.FILL_HORIZONTAL); data.grabExcessHorizontalSpace = true; minTileSizeSpinner.setLayoutData(data); return group; } /** * @see org.eclipse.jface.preference.PreferencePage#performDefaults() */ protected void performDefaults() { minTileSizeSpinner.setMinimum(IPreferences.MIN_TILE_SIZE_DEFAULT); } /** * @see org.eclipse.jface.preference.IPreferencePage#performOk() */ public boolean performOk() { preferences.setMinTileSize(Integer.valueOf(minTileSizeSpinner.getText()).intValue()); return super.performOk(); } }