diff options
author | Andrew Gvozdev | 2010-03-26 17:45:42 +0000 |
---|---|---|
committer | Andrew Gvozdev | 2010-03-26 17:45:42 +0000 |
commit | 55d9c949682dec727b84773fdf315a66ab6c1195 (patch) | |
tree | 66f504d4e3b6912147b69104ec5846098a15d023 /build | |
parent | 9f723276c73c5227d4c4290fd68c17028bb845b1 (diff) | |
download | org.eclipse.cdt-55d9c949682dec727b84773fdf315a66ab6c1195.tar.gz org.eclipse.cdt-55d9c949682dec727b84773fdf315a66ab6c1195.tar.xz org.eclipse.cdt-55d9c949682dec727b84773fdf315a66ab6c1195.zip |
bug 300539: Add ability to specify filter-path to build-options that support browsing
Patch from Baltasar Belyavsky
Diffstat (limited to 'build')
6 files changed, 147 insertions, 1 deletions
diff --git a/build/org.eclipse.cdt.managedbuilder.core/schema/buildDefinitions.exsd b/build/org.eclipse.cdt.managedbuilder.core/schema/buildDefinitions.exsd index a761e12a1fd..fecae0db712 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/schema/buildDefinitions.exsd +++ b/build/org.eclipse.cdt.managedbuilder.core/schema/buildDefinitions.exsd @@ -1306,6 +1306,13 @@ Additional special types exist to flag options of special relevance to the build </restriction> </simpleType> </attribute> + <attribute name="browseFilterPath" type="string"> + <annotation> + <documentation> + An optional value that specifies the default filter-path for the underlying file or directory browse-dialog. Macros in the value will be expanded. This attribute only applies when user chooses to browse the file-system. + </documentation> + </annotation> + </attribute> <attribute name="browseFilterExtensions" type="string"> <annotation> <documentation> diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IOption.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IOption.java index b608c6e25a7..e8eeb8ade19 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IOption.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IOption.java @@ -12,6 +12,8 @@ *******************************************************************************/ package org.eclipse.cdt.managedbuilder.core; +import org.eclipse.cdt.managedbuilder.macros.IOptionContextData; + /** * Basic Tool / Toolchain Option type. * @@ -76,6 +78,8 @@ public interface IOption extends IBuildObject { // Schema attribute names for option elements public static final String BROWSE_TYPE = "browseType"; //$NON-NLS-1$ /** @since 7.0 */ + public static final String BROWSE_FILTER_PATH = "browseFilterPath"; //$NON-NLS-1$ + /** @since 7.0 */ public static final String BROWSE_FILTER_EXTENSIONS = "browseFilterExtensions"; //$NON-NLS-1$ public static final String CATEGORY = "category"; //$NON-NLS-1$ public static final String COMMAND = "command"; //$NON-NLS-1$ @@ -140,6 +144,14 @@ public interface IOption extends IBuildObject { public IOption getSuperClass(); /** + * @param holder - the actual option-holder for the context-data. This holder + * is usually a subclass of this option's {@link #getOptionHolder() holder}. + * @return the option context-data to be used for macro resolution. + * @since 7.0 + */ + public IOptionContextData getOptionContextData(IHoldsOptions holder); + + /** * @return If this option is defined as an enumeration, this function returns * the list of possible values for that enum. * @@ -166,6 +178,19 @@ public interface IOption extends IBuildObject { public void setBrowseType(int type); /** + * @return the setting of the browseFilterPath attribute. For options of {@link #BROWSE_FILE} and {@link #BROWSE_DIR} types. + * @since 7.0 + */ + public String getBrowseFilterPath(); + + /** + * Sets the browseFilterPath attribute. For options of {@link #BROWSE_FILE} and {@link #BROWSE_DIR} types. + * @param path - default filter-path for the underlying browse dialog + * @since 7.0 + */ + public void setBrowseFilterPath(String path); + + /** * @return the setting of the browseFilterExtensions attribute. For options of {@link #BROWSE_FILE} type. * @since 7.0 */ diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Option.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Option.java index 821f8a4f015..5b5a35a6409 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Option.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Option.java @@ -36,6 +36,8 @@ import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin; import org.eclipse.cdt.managedbuilder.core.ManagedOptionValueHandler; import org.eclipse.cdt.managedbuilder.core.OptionStringValue; import org.eclipse.cdt.managedbuilder.internal.enablement.OptionEnablementExpression; +import org.eclipse.cdt.managedbuilder.internal.macros.OptionContextData; +import org.eclipse.cdt.managedbuilder.macros.IOptionContextData; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.PluginVersionIdentifier; @@ -54,6 +56,7 @@ public class Option extends BuildObject implements IOption, IBuildPropertiesRest // Managed Build model attributes private String unusedChildren; private Integer browseType; + private String browseFilterPath; private String[] browseFilterExtensions; private List<OptionStringValue> builtIns; private IOptionCategory category; @@ -201,6 +204,9 @@ public class Option extends BuildObject implements IOption, IBuildPropertiesRest if (option.browseType != null) { browseType = new Integer(option.browseType.intValue()); } + if (option.browseFilterPath != null) { + browseFilterPath = option.browseFilterPath; + } if (option.browseFilterExtensions != null) { browseFilterExtensions = option.browseFilterExtensions.clone(); } @@ -360,6 +366,9 @@ public class Option extends BuildObject implements IOption, IBuildPropertiesRest browseType = new Integer(BROWSE_DIR); } + // Get the browseFilterPath attribute + this.browseFilterPath = element.getAttribute(BROWSE_FILTER_PATH); + // Get the browseFilterExtensions attribute String browseFilterExtensionsStr = element.getAttribute(BROWSE_FILTER_EXTENSIONS); if (browseFilterExtensionsStr != null) { @@ -599,6 +608,11 @@ public class Option extends BuildObject implements IOption, IBuildPropertiesRest } } + // Get the browseFilterPath attribute + if (element.getAttribute(BROWSE_FILTER_PATH) != null) { + this.browseFilterPath = element.getAttribute(BROWSE_FILTER_PATH); + } + // Get the browseFilterExtensions attribute if (element.getAttribute(BROWSE_FILTER_EXTENSIONS) != null) { String browseFilterExtensionsStr = element.getAttribute(BROWSE_FILTER_EXTENSIONS); @@ -877,6 +891,11 @@ public class Option extends BuildObject implements IOption, IBuildPropertiesRest element.setAttribute(BROWSE_TYPE, str); } + // browse filter path + if (browseFilterPath != null) { + element.setAttribute(BROWSE_FILTER_PATH, browseFilterPath); + } + // browse filter extensions if (browseFilterExtensions != null) { StringBuilder sb = new StringBuilder(); @@ -930,6 +949,13 @@ public class Option extends BuildObject implements IOption, IBuildPropertiesRest isDirty = false; } + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IOption#getOptionContextData(org.eclipse.cdt.managedbuilder.core.IHoldsOptions) + */ + public IOptionContextData getOptionContextData(IHoldsOptions holder) { + return new OptionContextData(this, holder); + } + /* * P A R E N T A N D C H I L D H A N D L I N G */ @@ -1012,6 +1038,20 @@ public class Option extends BuildObject implements IOption, IBuildPropertiesRest } /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IOption#getBrowseFilterPath() + */ + public String getBrowseFilterPath() { + if (browseFilterPath == null) { + if (superClass != null) { + return superClass.getBrowseFilterPath(); + } else { + return null; + } + } + return browseFilterPath; + } + + /* (non-Javadoc) * @see org.eclipse.cdt.managedbuilder.core.IOption#getBrowseFilterExtensions() */ public String[] getBrowseFilterExtensions() { @@ -1744,6 +1784,19 @@ public class Option extends BuildObject implements IOption, IBuildPropertiesRest } /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IOption#setBrowseFilterPath(java.lang.String) + */ + public void setBrowseFilterPath(String path) { + if (browseFilterPath == null || !(browseFilterPath.equals(path))) { + browseFilterPath = path; + if(!isExtensionElement()) { + isDirty = true; + rebuildState = true; + } + } + } + + /* (non-Javadoc) * @see org.eclipse.cdt.managedbuilder.core.IOption#setBrowseFilterExtensions(java.lang.String[]) */ public void setBrowseFilterExtensions(String[] extensions) { diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/OptionReference.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/OptionReference.java index 82c507c1d5a..21e9f58d2f0 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/OptionReference.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/OptionReference.java @@ -24,6 +24,7 @@ import org.eclipse.cdt.managedbuilder.core.IOptionApplicability; import org.eclipse.cdt.managedbuilder.core.IOptionCategory; import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; import org.eclipse.cdt.managedbuilder.core.OptionStringValue; +import org.eclipse.cdt.managedbuilder.macros.IOptionContextData; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.PluginVersionIdentifier; import org.w3c.dom.Document; @@ -294,6 +295,13 @@ public class OptionReference implements IOption { } /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IOption#getOptionContextData(org.eclipse.cdt.managedbuilder.core.IHoldsOptions) + */ + public IOptionContextData getOptionContextData(IHoldsOptions holder) { + return option.getOptionContextData(holder); + } + + /* (non-Javadoc) * @see org.eclipse.cdt.core.build.managed.IOption#getApplicableValues() */ public String[] getApplicableValues() { @@ -490,6 +498,13 @@ public class OptionReference implements IOption { } /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IOption#getBrowseFilterPath() + */ + public String getBrowseFilterPath() { + return option.getBrowseFilterPath(); + } + + /* (non-Javadoc) * @see org.eclipse.cdt.managedbuilder.core.IOption#getBrowseFilterExtensions() */ public String[] getBrowseFilterExtensions() { @@ -804,6 +819,12 @@ public class OptionReference implements IOption { } /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IOption#setBrowseFilterPath(java.lang.String) + */ + public void setBrowseFilterPath(String path) { + } + + /* (non-Javadoc) * @see org.eclipse.cdt.managedbuilder.core.IOption#setBrowseFilterExtensions(java.lang.String[]) */ public void setBrowseFilterExtensions(String[] extensions) { diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildOptionSettingsUI.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildOptionSettingsUI.java index 84554a879e4..73e2d994547 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildOptionSettingsUI.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildOptionSettingsUI.java @@ -12,6 +12,7 @@ *******************************************************************************/ package org.eclipse.cdt.managedbuilder.ui.properties; +import java.io.File; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -33,6 +34,8 @@ import org.eclipse.cdt.managedbuilder.core.ITool; import org.eclipse.cdt.managedbuilder.core.IToolChain; import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; import org.eclipse.cdt.managedbuilder.internal.core.MultiResourceInfo; +import org.eclipse.cdt.managedbuilder.macros.BuildMacroException; +import org.eclipse.cdt.managedbuilder.macros.IBuildMacroProvider; import org.eclipse.cdt.ui.newui.AbstractPage; import org.eclipse.jface.preference.BooleanFieldEditor; import org.eclipse.jface.preference.DirectoryFieldEditor; @@ -222,6 +225,15 @@ public class BuildOptionSettingsUI extends AbstractToolSettingUI { switch (opt.getBrowseType()) { case IOption.BROWSE_DIR: { stringField = new DirectoryFieldEditor(optId, nameStr, fieldEditorParent); + if(opt.getBrowseFilterPath() != null) { + try { + String filterPath = ManagedBuildManager.getBuildMacroProvider().resolveValue(opt.getBrowseFilterPath(), + null, null, IBuildMacroProvider.CONTEXT_OPTION, opt.getOptionContextData(holder)); + ((DirectoryFieldEditor)stringField).setFilterPath(new File(filterPath)); + } catch(BuildMacroException bmx) { + ManagedBuilderUIPlugin.log(bmx); + } + } } break; case IOption.BROWSE_FILE: { @@ -236,6 +248,15 @@ public class BuildOptionSettingsUI extends AbstractToolSettingUI { return true; } }; + if(opt.getBrowseFilterPath() != null) { + try { + String filterPath = ManagedBuildManager.getBuildMacroProvider().resolveValue(opt.getBrowseFilterPath(), + null, null, IBuildMacroProvider.CONTEXT_OPTION, opt.getOptionContextData(holder)); + ((FileFieldEditor)stringField).setFilterPath(new File(filterPath)); + } catch(BuildMacroException bmx) { + ManagedBuilderUIPlugin.log(bmx); + } + } ((FileFieldEditor)stringField).setFileExtensions(opt.getBrowseFilterExtensions()); } break; @@ -336,8 +357,17 @@ public class BuildOptionSettingsUI extends AbstractToolSettingUI { String tooltipHoverStr = displayFixedTip ? null : tipStr; fieldEditor = new FileListControlFieldEditor(optId, nameStr, tooltipHoverStr, contextId, fieldEditorParent, opt.getBrowseType()); + if(opt.getBrowseFilterPath() != null) { + try { + String filterPath = ManagedBuildManager.getBuildMacroProvider().resolveValue(opt.getBrowseFilterPath(), + null, null, IBuildMacroProvider.CONTEXT_OPTION, opt.getOptionContextData(holder)); + ((FileListControlFieldEditor)fieldEditor).setFilterPath(filterPath); + } catch(BuildMacroException bmx) { + ManagedBuilderUIPlugin.log(bmx); + } + } ((FileListControlFieldEditor)fieldEditor).setFilterExtensions(opt.getBrowseFilterExtensions()); - + if (pageHasToolTipBox) { Label label = fieldEditor.getLabelControl(fieldEditorParent); label.setData(new TipInfo(nameStr,tipStr)); diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/FileListControlFieldEditor.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/FileListControlFieldEditor.java index 6e66029da09..a0042a1a784 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/FileListControlFieldEditor.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/FileListControlFieldEditor.java @@ -143,6 +143,16 @@ public class FileListControlFieldEditor extends FieldEditor { } /** + * Sets the filter-path for the underlying Browse dialog. Only applies when browseType is 'file' or 'dir'. + * @param filterPath + * + * @since 7.0 + */ + public void setFilterPath(String filterPath) { + list.setFilterPath(filterPath); + } + + /** * Sets the filter-extensions for the underlying Browse dialog. Only applies when browseType is 'file'. * @param filterExtensions * |