diff --git a/build/org.eclipse.cdt.managedbuilder.core/schema/buildDefinitions.exsd b/build/org.eclipse.cdt.managedbuilder.core/schema/buildDefinitions.exsd
index c2ea8df08a3..a761e12a1fd 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
+
+
+
+ An optional value that specifies a comma-separated string of file-extension filters for the underlying file browse-dialog. For filters with multiple extensions, use semicolon as a separator - eg. "*.lib;*.a;*.cmd,*.*". This attribute only applies when user chooses to browse the file-system, and only when browseType is 'file'.
+
+
+
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 31c6d4a94f2..2476b725348 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
@@ -75,6 +75,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_EXTENSIONS = "browseFilterExtensions"; //$NON-NLS-1$
public static final String CATEGORY = "category"; //$NON-NLS-1$
public static final String COMMAND = "command"; //$NON-NLS-1$
public static final String COMMAND_FALSE = "commandFalse"; //$NON-NLS-1$
@@ -173,6 +175,20 @@ public interface IOption extends IBuildObject {
*/
public void setBrowseType(int type);
+ /**
+ * @return the setting of the browseFilterExtensions attribute. For options of {@link #BROWSE_FILE} type.
+ * @since 7.0
+ */
+ public String[] getBrowseFilterExtensions();
+
+ /**
+ * Sets the browseFilterExtensions attribute. For options of {@link #BROWSE_FILE} type.
+ * @param extensions - file extensions to show in browse files dialog
+ *
+ * @since 7.0
+ */
+ public void setBrowseFilterExtensions(String[] extensions);
+
/**
* Returns the setting of the resourceFilter attribute
*
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 b3cad1158ef..b697811638b 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
@@ -56,6 +56,7 @@ public class Option extends BuildObject implements IOption, IBuildPropertiesRest
// Managed Build model attributes
private String unusedChildren;
private Integer browseType;
+ private String[] browseFilterExtensions;
private List builtIns;
private IOptionCategory category;
private String categoryId;
@@ -202,6 +203,9 @@ public class Option extends BuildObject implements IOption, IBuildPropertiesRest
if (option.browseType != null) {
browseType = new Integer(option.browseType.intValue());
}
+ if (option.browseFilterExtensions != null) {
+ browseFilterExtensions = option.browseFilterExtensions.clone();
+ }
if (option.resourceFilter != null) {
resourceFilter = new Integer(option.resourceFilter.intValue());
}
@@ -356,6 +360,12 @@ public class Option extends BuildObject implements IOption, IBuildPropertiesRest
browseType = new Integer(BROWSE_DIR);
}
+ // Get the browseFilterExtensions attribute
+ String browseFilterExtensionsStr = element.getAttribute(BROWSE_FILTER_EXTENSIONS);
+ if (browseFilterExtensionsStr != null) {
+ this.browseFilterExtensions = browseFilterExtensionsStr.split("\\s*,\\s*"); //$NON-NLS-1$
+ }
+
categoryId = element.getAttribute(CATEGORY);
// Get the resourceFilter attribute
@@ -588,6 +598,14 @@ public class Option extends BuildObject implements IOption, IBuildPropertiesRest
}
}
+ // Get the browseFilterExtensions attribute
+ if (element.getAttribute(BROWSE_FILTER_EXTENSIONS) != null) {
+ String browseFilterExtensionsStr = element.getAttribute(BROWSE_FILTER_EXTENSIONS);
+ if (browseFilterExtensionsStr != null) {
+ this.browseFilterExtensions = browseFilterExtensionsStr.split("\\s*,\\s*"); //$NON-NLS-1$
+ }
+ }
+
if (element.getAttribute(CATEGORY) != null) {
categoryId = element.getAttribute(CATEGORY);
if (categoryId != null) {
@@ -861,6 +879,15 @@ public class Option extends BuildObject implements IOption, IBuildPropertiesRest
element.setAttribute(BROWSE_TYPE, str);
}
+ // browse filter extensions
+ if (browseFilterExtensions != null) {
+ StringBuilder sb = new StringBuilder();
+ for(String ext : browseFilterExtensions) {
+ sb.append(ext + ',');
+ }
+ element.setAttribute(BROWSE_FILTER_EXTENSIONS, sb.toString());
+ }
+
if (categoryId != null) {
element.setAttribute(CATEGORY, categoryId);
}
@@ -985,6 +1012,20 @@ public class Option extends BuildObject implements IOption, IBuildPropertiesRest
return browseType.intValue();
}
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.managedbuilder.core.IOption#getBrowseFilterExtensions()
+ */
+ public String[] getBrowseFilterExtensions() {
+ if (browseFilterExtensions == null) {
+ if (superClass != null) {
+ return superClass.getBrowseFilterExtensions();
+ } else {
+ return null;
+ }
+ }
+ return browseFilterExtensions.clone();
+ }
+
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IOption#getResourceFilter()
*/
@@ -1674,6 +1715,19 @@ public class Option extends BuildObject implements IOption, IBuildPropertiesRest
}
}
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.managedbuilder.core.IOption#setBrowseFilterExtensions(java.lang.String[])
+ */
+ public void setBrowseFilterExtensions(String[] extensions) {
+ if (browseFilterExtensions == null || !(browseFilterExtensions.equals(extensions))) {
+ browseFilterExtensions = extensions;
+ if(!isExtensionElement()) {
+ isDirty = true;
+ rebuildState = true;
+ }
+ }
+ }
+
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IOption#setValue(boolean)
*/
@@ -1901,6 +1955,7 @@ public class Option extends BuildObject implements IOption, IBuildPropertiesRest
if (superClass != null &&
unusedChildren == null &&
browseType == null &&
+ browseFilterExtensions == null &&
(builtIns == null || builtIns.size() == 0) &&
category == null &&
categoryId == null &&
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 84a0da761d2..c55bdf24e67 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
@@ -476,6 +476,13 @@ public class OptionReference implements IOption {
return option.getBrowseType();
}
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.managedbuilder.core.IOption#getBrowseFilterExtensions()
+ */
+ public String[] getBrowseFilterExtensions() {
+ return option.getBrowseFilterExtensions();
+ }
+
private List getBuiltInList() {
if (builtIns == null) {
builtIns = new ArrayList();
@@ -786,6 +793,12 @@ public class OptionReference implements IOption {
public void setBrowseType(int type) {
}
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.managedbuilder.core.IOption#setBrowseFilterExtensions(java.lang.String[])
+ */
+ public void setBrowseFilterExtensions(String[] extensions) {
+ }
+
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IOption#setCategory(org.eclipse.cdt.core.build.managed.IOptionCategory)
*/
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 360b400c402..7e3d934dc5c 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
@@ -226,6 +226,7 @@ public class BuildOptionSettingsUI extends AbstractToolSettingUI {
return true;
}
};
+ ((FileFieldEditor)stringField).setFileExtensions(opt.getBrowseFilterExtensions());
} break;
case IOption.BROWSE_NONE: {
@@ -325,6 +326,8 @@ public class BuildOptionSettingsUI extends AbstractToolSettingUI {
String tooltipHoverStr = displayFixedTip ? null : tipStr;
fieldEditor = new FileListControlFieldEditor(optId, nameStr,
tooltipHoverStr, contextId, fieldEditorParent, opt.getBrowseType());
+ ((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 d64ae9ff5b1..6e66029da09 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
@@ -142,6 +142,16 @@ public class FileListControlFieldEditor extends FieldEditor {
// this.values = parseString(value);
}
+ /**
+ * Sets the filter-extensions for the underlying Browse dialog. Only applies when browseType is 'file'.
+ * @param filterExtensions
+ *
+ * @since 7.0
+ */
+ public void setFilterExtensions(String[] filterExtensions) {
+ list.setFilterExtensions(filterExtensions);
+ }
+
/**
* Fills this field editor's basic controls into the given parent.
*/
diff --git a/core/org.eclipse.cdt.ui/utils.ui/org/eclipse/cdt/utils/ui/controls/FileListControl.java b/core/org.eclipse.cdt.ui/utils.ui/org/eclipse/cdt/utils/ui/controls/FileListControl.java
index 4fa827fb3e2..62a2883b51f 100644
--- a/core/org.eclipse.cdt.ui/utils.ui/org/eclipse/cdt/utils/ui/controls/FileListControl.java
+++ b/core/org.eclipse.cdt.ui/utils.ui/org/eclipse/cdt/utils/ui/controls/FileListControl.java
@@ -319,6 +319,9 @@ public class FileListControl {
if (currentName != null && currentName.trim().length() != 0) {
browseDialog.setFilterPath(currentName);
}
+ if (FileListControl.this.filterExtensions != null) {
+ browseDialog.setFilterExtensions(FileListControl.this.filterExtensions);
+ }
result = browseDialog.open();
if (result != null) {
fSetByBrowseDialog = true;
@@ -465,6 +468,7 @@ public class FileListControl {
// The type of browse support that is required
private int browseType;
+ private String[] filterExtensions;
/** The base path that should be used when adding new resources */
private IPath path = new Path(""); //$NON-NLS-1$
@@ -955,6 +959,16 @@ public class FileListControl {
promptForDelete = type == BROWSE_FILE || type == BROWSE_DIR;
}
+ /**
+ * Sets the filter-extensions for the underlying Browse dialog. Only applies when browseType is 'file'.
+ * @param filterExtensions
+ *
+ * @since 5.2
+ */
+ public void setFilterExtensions(String[] filterExtensions) {
+ this.filterExtensions = filterExtensions;
+ }
+
/**
* Enable/Disable workspace support. If enabled, the workspace browse button
* will be visible in the SelectPathInputDialog.