package org.lejos.ev3.ldt.preferences; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.Path; import org.eclipse.jdt.core.ClasspathContainerInitializer; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.preference.BooleanFieldEditor; import org.eclipse.jface.preference.DirectoryFieldEditor; import org.eclipse.jface.preference.FieldEditorPreferencePage; import org.eclipse.jface.preference.StringFieldEditor; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.lejos.ev3.ldt.LeJOSEV3Plugin; import org.lejos.ev3.ldt.container.LeJOSEV3LibContainer; import org.lejos.ev3.ldt.util.LeJOSEV3Util; /** * This class represents a preference page that is contributed to the * Preferences dialog. * * @author Matthias Paul Scholz and Lawrie Griffiths */ public class PreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage { public PreferencePage() { super(FLAT); setPreferenceStore(LeJOSEV3Plugin.getDefault().getPreferenceStore()); setDescription("Preferences for leJOS EV3"); } private Composite newParent(Composite g, int cols) { GridData gd = new GridData(); gd.horizontalSpan = cols; Composite p = new Composite(g, SWT.NONE); p.setFont(g.getFont()); p.setLayoutData(gd); return p; } private Composite newParentF(Composite g, int cols) { GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = cols; Composite p = new Composite(g, SWT.NONE); p.setFont(g.getFont()); p.setLayoutData(gd); return p; } public Group createGroup(Composite parent, int cols, String text) { GridLayout gl = new GridLayout(cols, false); gl.horizontalSpacing= convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING); gl.verticalSpacing= convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING); gl.marginWidth= convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN); gl.marginHeight= convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN); GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = 3; Group g = new Group(parent, SWT.NONE); g.setLayoutData(gd); g.setLayout(gl); g.setText(text); return g; } /** * Creates the field editors. Field editors are abstractions of the common * GUI blocks needed to manipulate various types of preferences. Each field * editor knows how to save and restore itself. */ @Override public void createFieldEditors() { Composite parent = getFieldEditorParent(); initializeDialogUnits(parent); // EV3_HOME addField(new DirectoryFieldEditor(PreferenceConstants.KEY_EV3_HOME, "&EV3_HOME:", parent)); Composite p2 = newParent(parent, 3); addField(new BooleanFieldEditor(PreferenceConstants.KEY_SEPARATE_JVM, "&Run Tools in separate JVM", p2)); addField(new BooleanFieldEditor(PreferenceConstants.KEY_SSH_SCP, "&Use ssh and scp", p2)); Group g = createGroup(parent, 2, "Defaults for run configurations:"); // connect to named EV3? addField(new BooleanFieldEditor(PreferenceConstants.KEY_TARGET_CONNECT_BY_NAME, "Connect to &named brick", newParent(g, 1))); addField(new StringFieldEditor(PreferenceConstants.KEY_TARGET_BRICK_NAME, "&Name", newParentF(g, 1))); g = createGroup(parent, 2, "Defaults for run mode"); addField(new BooleanFieldEditor(PreferenceConstants.KEY_NORMAL_RUN_AFTER_UPLOAD, "&Run program after upload", newParent(g, 1))); } @Override public boolean performOk() { boolean b = super.performOk(); ClasspathContainerInitializer init = JavaCore.getClasspathContainerInitializer(LeJOSEV3LibContainer.ID); Path p1 = new Path(LeJOSEV3LibContainer.ID+"/"+LeJOSEV3Util.LIBSUBDIR_EV3); Path p2 = new Path(LeJOSEV3LibContainer.ID+"/"+LeJOSEV3Util.LIBSUBDIR_PC); IWorkspace ws = ResourcesPlugin.getWorkspace(); IWorkspaceRoot wsr = ws.getRoot(); IProject[] projects = wsr.getProjects(); for (IProject p : projects) { try { if (p.isOpen() && p.isNatureEnabled(JavaCore.NATURE_ID)) { IJavaProject jp = JavaCore.create(p); if (JavaCore.getClasspathContainer(p1, jp) != null) init.initialize(p1, jp); if (JavaCore.getClasspathContainer(p2, jp) != null) init.initialize(p2, jp); } } catch (Exception e) { LeJOSEV3Util.log(e); } } return b; } public void init(IWorkbench workbench) { // do nothing } }