diff options
author | Alain Magloire | 2004-09-05 23:25:28 +0000 |
---|---|---|
committer | Alain Magloire | 2004-09-05 23:25:28 +0000 |
commit | 73e222cdd87c9e8516a1415e7183c3a15eb1976e (patch) | |
tree | 37cc40d643a8115cd058d482be816496dca6faa6 /build | |
parent | 5916669818ace654678b4910cb16fb420c73c599 (diff) | |
download | org.eclipse.cdt-73e222cdd87c9e8516a1415e7183c3a15eb1976e.tar.gz org.eclipse.cdt-73e222cdd87c9e8516a1415e7183c3a15eb1976e.tar.xz org.eclipse.cdt-73e222cdd87c9e8516a1415e7183c3a15eb1976e.zip |
Provide more setting for the makefile editor.
Diffstat (limited to 'build')
8 files changed, 442 insertions, 18 deletions
diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeCorePlugin.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeCorePlugin.java index bcd28f9d09b..cda1cb7fe23 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeCorePlugin.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeCorePlugin.java @@ -10,11 +10,14 @@ ***********************************************************************/ package org.eclipse.cdt.make.core; +import java.io.File; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.StringTokenizer; import org.eclipse.cdt.make.core.makefile.IMakefile; import org.eclipse.cdt.make.core.scannerconfig.IDiscoveredPathManager; @@ -24,6 +27,7 @@ import org.eclipse.cdt.make.core.scannerconfig.IScannerInfoConsoleParser; import org.eclipse.cdt.make.internal.core.BuildInfoFactory; import org.eclipse.cdt.make.internal.core.MakeTargetManager; import org.eclipse.cdt.make.internal.core.makefile.gnu.GNUMakefile; +import org.eclipse.cdt.make.internal.core.makefile.posix.PosixMakefile; import org.eclipse.cdt.make.internal.core.scannerconfig.DiscoveredPathManager; import org.eclipse.cdt.make.internal.core.scannerconfig.ScannerConfigInfoFactory; import org.eclipse.cdt.make.internal.core.scannerconfig.util.TraceUtil; @@ -56,7 +60,11 @@ public class MakeCorePlugin extends Plugin { public static final String GCC_SPECS_CONSOLE_PARSER_ID = MakeCorePlugin.getUniqueIdentifier() + ".GCCSpecsConsoleParser"; //$NON-NLS-1$ public static final String GCC_SCANNER_INFO_CONSOLE_PARSER_ID = MakeCorePlugin.getUniqueIdentifier() + ".GCCScannerInfoConsoleParser"; //$NON-NLS-1$ - + + public static final String MAKEFILE_STYLE = PLUGIN_ID + "editor_makefile_style"; //$NON-NLS-1$ + public static final String MAKEFILE_DIRS = PLUGIN_ID + "editor_makefile_dirs"; //$NON-NLS-1$ + + private MakeTargetManager fTargetManager; private DiscoveredPathManager fDiscoveryPathManager; //The shared instance. @@ -122,22 +130,47 @@ public class MakeCorePlugin extends Plugin { return fTargetManager; } - public IMakefile createMakefile(IFile file) { - GNUMakefile gnu = new GNUMakefile(); - try { - gnu.parse(file.getLocation().toOSString()); - String[] dirs = gnu.getIncludeDirectories(); - String[] includes = new String[dirs.length + 1]; - System.arraycopy(dirs, 0, includes, 0, dirs.length); - String cwd = file.getLocation().removeLastSegments(1).toOSString(); - includes[dirs.length] = cwd; - gnu.setIncludeDirectories(includes); - } catch (IOException e) { + public boolean isMakefileGNUStyle() { + String style = getPluginPreferences().getString(MAKEFILE_STYLE); + return (style != null && style.equalsIgnoreCase("GNU")); //$NON-NLS-1$ + } + + public String[] getMakefileDirs() { + String stringList = getPluginPreferences().getString(MAKEFILE_DIRS); + StringTokenizer st = new StringTokenizer(stringList, File.pathSeparator + "\n\r");//$NON-NLS-1$ + ArrayList v = new ArrayList(); + while (st.hasMoreElements()) { + v.add(st.nextElement()); } - return gnu; + return (String[])v.toArray(new String[v.size()]); + } + + public IMakefile createMakefile(IFile file) { // // base on a preference to chose GNU vs Posix - //return PosixMakefile(file.getLocation); + IMakefile makefile; + if (isMakefileGNUStyle()) { + GNUMakefile gnu = new GNUMakefile(); + ArrayList includeList = new ArrayList(); + includeList.addAll(Arrays.asList(gnu.getIncludeDirectories())); + includeList.addAll(Arrays.asList(getMakefileDirs())); + includeList.add(file.getLocation().removeLastSegments(1).toOSString()); + String[] includes = (String[]) includeList.toArray(new String[includeList.size()]); + gnu.setIncludeDirectories(includes); + try { + gnu.parse(file.getLocation().toOSString()); + } catch (IOException e) { + } + makefile = gnu; + } else { + PosixMakefile posix = new PosixMakefile(); + try { + posix.parse(file.getLocation().toOSString()); + } catch (IOException e) { + } + makefile = posix; + } + return makefile; } public void stop(BundleContext context) throws Exception { diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/PreferenceInitializer.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/PreferenceInitializer.java index 54e31013fb4..9ef6a241faa 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/PreferenceInitializer.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/PreferenceInitializer.java @@ -58,6 +58,9 @@ public class PreferenceInitializer extends AbstractPreferenceInitializer { scInfo.setSIProblemGenerationEnabled(true); } catch (CoreException e) { } + + // Store default for makefile + MakeCorePlugin.getDefault().getPluginPreferences().setDefault(MakeCorePlugin.MAKEFILE_STYLE, "GNU"); //$NON-NLS-1$ } } diff --git a/build/org.eclipse.cdt.make.ui/plugin.properties b/build/org.eclipse.cdt.make.ui/plugin.properties index a2a9827b20c..153298f7c55 100644 --- a/build/org.eclipse.cdt.make.ui/plugin.properties +++ b/build/org.eclipse.cdt.make.ui/plugin.properties @@ -34,7 +34,8 @@ CommandTargetCreate.description=Create a new make build target for the selected PreferenceMakeProject.name=New Make Projects PreferenceMakeTargets.name=Make Targets -PreferenceMakeFileEditor.name=Makefile Editor +PreferenceMakefileEditor.name=Makefile Editor +PreferenceMakefileSettings.name= Settings PropertyMakeProject.name= C/C++ Make Project diff --git a/build/org.eclipse.cdt.make.ui/plugin.xml b/build/org.eclipse.cdt.make.ui/plugin.xml index 16cc427709d..4eeb54489fb 100644 --- a/build/org.eclipse.cdt.make.ui/plugin.xml +++ b/build/org.eclipse.cdt.make.ui/plugin.xml @@ -284,11 +284,17 @@ id="org.eclipse.cdt.make.ui.preferences.MakeTargetsPreferencePage"> </page> <page - name="%PreferenceMakeFileEditor.name" + name="%PreferenceMakefileEditor.name" category="org.eclipse.cdt.ui.preferences.CPluginPreferencePage" class="org.eclipse.cdt.make.internal.ui.preferences.MakefileEditorPreferencePage" id="org.eclipse.cdt.make.ui.preferences.MakeFileEditorPreferencePage"> </page> + <page + name="%PreferenceMakefileSettings.name" + category="org.eclipse.cdt.make.ui.preferences.MakeFileEditorPreferencePage" + class="org.eclipse.cdt.make.internal.ui.preferences.MakefileSettingsPreferencePage" + id="org.eclipse.cdt.make.ui.preferences.MakePreferencePage"> + </page> </extension> <extension point="org.eclipse.ui.propertyPages"> diff --git a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/preferences/MakefileEditorPreferenceConstants.java b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/preferences/MakefileEditorPreferenceConstants.java index 3c6f23ca35d..570be9282f1 100644 --- a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/preferences/MakefileEditorPreferenceConstants.java +++ b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/preferences/MakefileEditorPreferenceConstants.java @@ -54,9 +54,8 @@ public class MakefileEditorPreferenceConstants { public static final String EDITOR_FOLDING_CONDITIONAL = "editor_folding_default_conditional"; //$NON-NLS-1$ - public static final String EDITOR_FOLDING_ENABLED = "editor_folding_enabled"; //$NON-NLS-1$; + public static final String EDITOR_FOLDING_ENABLED = "editor_folding_enabled"; //$NON-NLS-1$ - public static void initializeDefaultValues(IPreferenceStore store) { TextEditorPreferenceConstants.initializeDefaultValues(store); store.setDefault(AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT, true); @@ -65,6 +64,7 @@ public class MakefileEditorPreferenceConstants { store.setDefault(MakefileEditorPreferenceConstants.EDITOR_FOLDING_MACRODEF, false); store.setDefault(MakefileEditorPreferenceConstants.EDITOR_FOLDING_RULE, true); store.setDefault(MakefileEditorPreferenceConstants.EDITOR_FOLDING_CONDITIONAL, true); + } } diff --git a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/preferences/MakefilePreferencesMessages.properties b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/preferences/MakefilePreferencesMessages.properties index 7a84aafa24a..4f00a63d809 100644 --- a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/preferences/MakefilePreferencesMessages.properties +++ b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/preferences/MakefilePreferencesMessages.properties @@ -51,3 +51,7 @@ MakefileEditorPreferencePage.makefile_editor_macro_ref=macro reference MakefileEditorPreferencePage.makefile_editor_function=function MakefileEditorPreferencePage.makefile_editor_keyword=keyword MakefileEditorPreferencePage.makefile_editor_target=target + +MakefileSettingsPreferencePage.style=Style of Makefile +MakefileSettingsPreferencePage.path.label=Makefile include directories +MakefileSettingsPreferencePage.path.browse=directory diff --git a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/preferences/MakefileSettingsPreferencePage.java b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/preferences/MakefileSettingsPreferencePage.java new file mode 100644 index 00000000000..18d36b35f35 --- /dev/null +++ b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/preferences/MakefileSettingsPreferencePage.java @@ -0,0 +1,69 @@ +/********************************************************************** + * Copyright (c) 2002,2003,2004 QNX Software Systems and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * QNX Software Systems - Initial API and implementation + ***********************************************************************/ + +package org.eclipse.cdt.make.internal.ui.preferences; + +import org.eclipse.cdt.make.core.MakeCorePlugin; +import org.eclipse.cdt.make.internal.ui.text.PreferencesAdapter; +import org.eclipse.jface.preference.FieldEditorPreferencePage; +import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.jface.preference.PathEditor; +import org.eclipse.jface.preference.RadioGroupFieldEditor; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchPreferencePage; + +/** + * MakePreferencePage + */ +public class MakefileSettingsPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage { + + private static final String POSIX_MAKE_LABEL = "Posix Make"; //$NON-NLS-1$ + private static final String POSIX_MAKE_VALUE = "POSIX"; //$NON-NLS-1$ + private static final String GNU_MAKE_LABEL = "GNU Make"; //$NON-NLS-1$ + private static final String GNU_MAKE_VALUE = "GNU"; //$NON-NLS-1$ + + public MakefileSettingsPreferencePage() { + super(GRID); + IPreferenceStore store = new PreferencesAdapter(MakeCorePlugin.getDefault().getPluginPreferences()); + setPreferenceStore(store); + } + + /** + * @see FieldEditorPreferencePage#createControl(Composite) + */ + protected void createFieldEditors() { + Composite parent = getFieldEditorParent(); + + String[][] personalities = {{POSIX_MAKE_LABEL, POSIX_MAKE_VALUE}, {GNU_MAKE_LABEL, GNU_MAKE_VALUE}}; + RadioGroupFieldEditor combo = new RadioGroupFieldEditor(MakeCorePlugin.MAKEFILE_STYLE, + MakefilePreferencesMessages.getString("MakefileSettingsPreferencePage.style"),//$NON-NLS-1$ + 2, + personalities, + getFieldEditorParent()); + addField(combo); + + PathEditor pathEditor = new PathEditor(MakeCorePlugin.MAKEFILE_DIRS, + MakefilePreferencesMessages.getString("MakefileSettingsPreferencePage.path.label"), //$NON-NLS-1$ + MakefilePreferencesMessages.getString("MakefileSettingsPreferencePage.path.browse"),//$NON-NLS-1$ + getFieldEditorParent()); + addField(pathEditor); + } + + /** + * Initializes the default values of this page in the preference bundle. + */ + public static void initDefaults(IPreferenceStore prefs) { + } + + public void init(IWorkbench workbench) { + } +}
\ No newline at end of file diff --git a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/text/PreferencesAdapter.java b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/text/PreferencesAdapter.java new file mode 100644 index 00000000000..9bacfd57473 --- /dev/null +++ b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/text/PreferencesAdapter.java @@ -0,0 +1,308 @@ +/********************************************************************** + * Copyright (c) 2002,2003,2004 QNX Software Systems and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * QNX Software Systems - Initial API and implementation + ***********************************************************************/ + +package org.eclipse.cdt.make.internal.ui.text; + +import org.eclipse.core.runtime.Preferences; +import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.jface.util.IPropertyChangeListener; +import org.eclipse.jface.util.ListenerList; +import org.eclipse.jface.util.PropertyChangeEvent; + +/** + * Adapts {@link org.eclipse.core.runtime.Preferences} to + * {@link org.eclipse.jface.preference.IPreferenceStore} + * + * @since 3.0 + */ +public class PreferencesAdapter implements IPreferenceStore { + + /** + * Property change listener. Listens for events of type + * {@link org.eclipse.core.runtime.Preferences.PropertyChangeEvent} and fires + * a {@link org.eclipse.jface.util.PropertyChangeEvent} on the + * adapter with arguments from the received event. + */ + private class PropertyChangeListener implements Preferences.IPropertyChangeListener { + + /* + * @see org.eclipse.core.runtime.Preferences.IPropertyChangeListener#propertyChange(org.eclipse.core.runtime.Preferences.PropertyChangeEvent) + */ + public void propertyChange(Preferences.PropertyChangeEvent event) { + firePropertyChangeEvent(event.getProperty(), event.getOldValue(), event.getNewValue()); + } + } + + /** Listeners on the adapter */ + private ListenerList fListeners= new ListenerList(); + + /** Listener on the adapted Preferences */ + private PropertyChangeListener fListener= new PropertyChangeListener(); + + /** Adapted Preferences */ + private Preferences fPreferences; + + /** True iff no events should be forwarded */ + private boolean fSilent; + + /** + * Initialize with empty Preferences. + */ + public PreferencesAdapter() { + this(new Preferences()); + } + /** + * Initialize with the given Preferences. + * + * @param preferences The preferences to wrap. + */ + public PreferencesAdapter(Preferences preferences) { + fPreferences= preferences; + } + + /** + * {@inheritDoc} + */ + public void addPropertyChangeListener(IPropertyChangeListener listener) { + if (fListeners.size() == 0) + fPreferences.addPropertyChangeListener(fListener); + fListeners.add(listener); + } + + /** + * {@inheritDoc} + */ + public void removePropertyChangeListener(IPropertyChangeListener listener) { + fListeners.remove(listener); + if (fListeners.size() == 0) + fPreferences.removePropertyChangeListener(fListener); + } + + /** + * {@inheritDoc} + */ + public boolean contains(String name) { + return fPreferences.contains(name); + } + + /** + * {@inheritDoc} + */ + public void firePropertyChangeEvent(String name, Object oldValue, Object newValue) { + if (!fSilent) { + PropertyChangeEvent event= new PropertyChangeEvent(this, name, oldValue, newValue); + Object[] listeners= fListeners.getListeners(); + for (int i= 0; i < listeners.length; i++) + ((IPropertyChangeListener) listeners[i]).propertyChange(event); + } + } + + /** + * {@inheritDoc} + */ + public boolean getBoolean(String name) { + return fPreferences.getBoolean(name); + } + + /** + * {@inheritDoc} + */ + public boolean getDefaultBoolean(String name) { + return fPreferences.getDefaultBoolean(name); + } + + /** + * {@inheritDoc} + */ + public double getDefaultDouble(String name) { + return fPreferences.getDefaultDouble(name); + } + + /** + * {@inheritDoc} + */ + public float getDefaultFloat(String name) { + return fPreferences.getDefaultFloat(name); + } + + /** + * {@inheritDoc} + */ + public int getDefaultInt(String name) { + return fPreferences.getDefaultInt(name); + } + + /** + * {@inheritDoc} + */ + public long getDefaultLong(String name) { + return fPreferences.getDefaultLong(name); + } + + /** + * {@inheritDoc} + */ + public String getDefaultString(String name) { + return fPreferences.getDefaultString(name); + } + + /** + * {@inheritDoc} + */ + public double getDouble(String name) { + return fPreferences.getDouble(name); + } + + /** + * {@inheritDoc} + */ + public float getFloat(String name) { + return fPreferences.getFloat(name); + } + + /** + * {@inheritDoc} + */ + public int getInt(String name) { + return fPreferences.getInt(name); + } + + /** + * {@inheritDoc} + */ + public long getLong(String name) { + return fPreferences.getLong(name); + } + + /** + * {@inheritDoc} + */ + public String getString(String name) { + return fPreferences.getString(name); + } + + /** + * {@inheritDoc} + */ + public boolean isDefault(String name) { + return fPreferences.isDefault(name); + } + + /** + * {@inheritDoc} + */ + public boolean needsSaving() { + return fPreferences.needsSaving(); + } + + /** + * {@inheritDoc} + */ + public void putValue(String name, String value) { + try { + fSilent= true; + fPreferences.setValue(name, value); + } finally { + fSilent= false; + } + } + + /** + * {@inheritDoc} + */ + public void setDefault(String name, double value) { + fPreferences.setDefault(name, value); + } + + /** + * {@inheritDoc} + */ + public void setDefault(String name, float value) { + fPreferences.setDefault(name, value); + } + + /** + * {@inheritDoc} + */ + public void setDefault(String name, int value) { + fPreferences.setDefault(name, value); + } + + /** + * {@inheritDoc} + */ + public void setDefault(String name, long value) { + fPreferences.setDefault(name, value); + } + + /** + * {@inheritDoc} + */ + public void setDefault(String name, String defaultObject) { + fPreferences.setDefault(name, defaultObject); + } + + /** + * {@inheritDoc} + */ + public void setDefault(String name, boolean value) { + fPreferences.setDefault(name, value); + } + + /** + * {@inheritDoc} + */ + public void setToDefault(String name) { + fPreferences.setToDefault(name); + } + + /** + * {@inheritDoc} + */ + public void setValue(String name, double value) { + fPreferences.setValue(name, value); + } + + /** + * {@inheritDoc} + */ + public void setValue(String name, float value) { + fPreferences.setValue(name, value); + } + + /** + * {@inheritDoc} + */ + public void setValue(String name, int value) { + fPreferences.setValue(name, value); + } + + /** + * {@inheritDoc} + */ + public void setValue(String name, long value) { + fPreferences.setValue(name, value); + } + + /** + * {@inheritDoc} + */ + public void setValue(String name, String value) { + fPreferences.setValue(name, value); + } + + /** + * {@inheritDoc} + */ + public void setValue(String name, boolean value) { + fPreferences.setValue(name, value); + } +} |