From e78904064765a69df5373602e6ea47f7769561bc Mon Sep 17 00:00:00 2001
From: David Inglis <dinglis@qnx.com>
Date: Thu, 13 May 2004 14:22:21 +0000
Subject: [PATCH] small ui fix fo button enablement, show of export label and
 export handling

---
 .../ui/dialogs/cpaths/CPElementFilter.java    | 38 +++++++------------
 .../cpaths/CPElementLabelProvider.java        |  9 ++++-
 .../ui/dialogs/cpaths/CPathFilterPage.java    | 21 ++++++++--
 .../dialogs/cpaths/CPathLibraryEntryPage.java |  1 +
 .../dialogs/cpaths/CPathOutputEntryPage.java  |  1 +
 .../dialogs/cpaths/CPathSourceEntryPage.java  |  1 +
 .../ui/dialogs/cpaths/CPathTabBlock.java      | 30 ++-------------
 7 files changed, 44 insertions(+), 57 deletions(-)

diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPElementFilter.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPElementFilter.java
index 1e5942f55e5..cce0cd96e3d 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPElementFilter.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPElementFilter.java
@@ -11,10 +11,7 @@ package org.eclipse.cdt.internal.ui.dialogs.cpaths;
 import java.util.Arrays;
 import java.util.List;
 
-import org.eclipse.cdt.core.model.ICProject;
 import org.eclipse.cdt.core.model.IPathEntry;
-import org.eclipse.cdt.ui.CUIPlugin;
-import org.eclipse.core.runtime.CoreException;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jface.viewers.ViewerFilter;
 
@@ -24,9 +21,9 @@ import org.eclipse.jface.viewers.ViewerFilter;
  */
 public class CPElementFilter extends ViewerFilter {
 
-	private List fExcludes;
-	private int fKind;
-	private boolean fExportedOnly;
+	protected List fExcludes;
+	protected int fKind;
+	protected boolean fExportedOnly;
 
 	/**
 	 * @param excludedFiles
@@ -34,7 +31,7 @@ public class CPElementFilter extends ViewerFilter {
 	 * @param recusive
 	 *            Folders are only shown if, searched recursivly, contain an archive
 	 */
-	public CPElementFilter(CPElement[] excludedElements, int kind, boolean exportedOnly) {
+	public CPElementFilter(Object[] excludedElements, int kind, boolean exportedOnly) {
 		if (excludedElements != null) {
 			fExcludes = Arrays.asList(excludedElements);
 		}
@@ -51,31 +48,22 @@ public class CPElementFilter extends ViewerFilter {
 	 */
 	public boolean select(Viewer viewer, Object parent, Object element) {
 		if (element instanceof CPElement) {
-			if ( ((CPElement) element).getEntryKind() == fKind) {
-				if (fExcludes != null && !fExcludes.contains(element)) {
-					if (fExportedOnly == true && ! ((CPElement) element).isExported()) {
-						return false;
+			if ( ((CPElement)element).getEntryKind() == fKind) {
+				if (fExcludes == null || !fExcludes.contains(element)) {
+					if (fExportedOnly == true) {
+						return ((CPElement)element).isExported();
 					}
 					return true;
 				}
 			}
-		} else if (element instanceof ICProject) {
-			try {
-				IPathEntry[] entries = ((ICProject) element).getRawPathEntries();
-				for (int i = 0; i < entries.length; i++) {
-					if (select(viewer, parent, CPElement.createFromExisting(entries[i], (ICProject) element))) {
-						return true;
+		} else if (element instanceof IPathEntry) {
+			if ( ((IPathEntry)element).getEntryKind() == fKind) {
+				if (fExcludes == null || !fExcludes.contains(element)) {
+					if (fExportedOnly == true) {
+						return ((IPathEntry)element).isExported();
 					}
 				}
-			} catch (CoreException e) {
-				CUIPlugin.getDefault().log(e.getStatus());
 			}
-		} else if (element instanceof IPathEntry) {
-			boolean bShow = ((IPathEntry) element).getEntryKind() == fKind;
-			if (bShow && fExportedOnly == true) {
-				return ((IPathEntry) element).isExported();
-			}
-			return bShow;
 		}
 		return false;
 	}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPElementLabelProvider.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPElementLabelProvider.java
index 85d492afc03..c2b5c1ac83f 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPElementLabelProvider.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPElementLabelProvider.java
@@ -30,10 +30,14 @@ class CPElementLabelProvider extends LabelProvider {
 	private String fNewLabel, fCreateLabel;
 	private ImageDescriptor fIncludeIcon, fMacroIcon, fLibWSrcIcon, fLibIcon;
 	private ImageDescriptor fFolderImage, fOutputImage, fProjectImage, fContainerImage;
-
+	private boolean bShowExported;
 	private ImageDescriptorRegistry fRegistry;
 
 	public CPElementLabelProvider() {
+		this(true);
+	}
+	
+	public CPElementLabelProvider(boolean showExported) {
 		fNewLabel = CPathEntryMessages.getString("CPElementLabelProvider.new"); //$NON-NLS-1$
 		fCreateLabel = CPathEntryMessages.getString("CPElementLabelProvider.willbecreated"); //$NON-NLS-1$
 		fRegistry = CUIPlugin.getImageDescriptorRegistry();
@@ -49,6 +53,7 @@ class CPElementLabelProvider extends LabelProvider {
 		IWorkbench workbench = CUIPlugin.getDefault().getWorkbench();
 
 		fProjectImage = workbench.getSharedImages().getImageDescriptor(IDE.SharedImages.IMG_OBJ_PROJECT);
+		bShowExported = showExported;
 	}
 
 	public String getText(Object element) {
@@ -177,7 +182,7 @@ class CPElementLabelProvider extends LabelProvider {
 		return CPathEntryMessages.getString("CPElementLabelProvider.unknown_element.label"); //$NON-NLS-1$
 	}
 	private void addExport(CPElement cpentry, StringBuffer str) {
-		if (cpentry.isExported()) {
+		if (bShowExported && cpentry.isExported()) {
 			str.append(' ');
 			str.append(CPathEntryMessages.getString("CPElementLabelProvider.export.label")); //$NON-NLS-1$
 		}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPathFilterPage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPathFilterPage.java
index 1d0f8cc762a..0b0a362e606 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPathFilterPage.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPathFilterPage.java
@@ -8,6 +8,7 @@
  ******************************************************************************/
 package org.eclipse.cdt.internal.ui.dialogs.cpaths;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
@@ -25,6 +26,7 @@ import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.viewers.CheckStateChangedEvent;
 import org.eclipse.jface.viewers.CheckboxTableViewer;
 import org.eclipse.jface.viewers.ICheckStateListener;
+import org.eclipse.jface.viewers.ViewerFilter;
 import org.eclipse.jface.wizard.WizardPage;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
@@ -39,7 +41,10 @@ public class CPathFilterPage extends WizardPage {
 	private CheckboxTableViewer viewer;
 	private IPathEntry fParentEntry;
 	private List fPaths;
-	private ICElement fCElement;
+	private List fExclusions;
+	private ViewerFilter filter;
+	
+	protected ICElement fCElement;
 
 	protected CPathFilterPage(ICElement cElement, int filterType) {
 		super("CPathFilterPage"); //$NON-NLS-1$
@@ -63,14 +68,13 @@ public class CPathFilterPage extends WizardPage {
 		label.setLayoutData(gd);
 		viewer = CheckboxTableViewer.newCheckList(container, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
 		viewer.setContentProvider(new ListContentProvider());
-		viewer.setLabelProvider(new CPElementLabelProvider());
+		viewer.setLabelProvider(new CPElementLabelProvider(false));
 		viewer.addCheckStateListener(new ICheckStateListener() {
 
 			public void checkStateChanged(CheckStateChangedEvent event) {
 				validatePage();
 			}
 		});
-		viewer.addFilter(new CPElementFilter(fFilterType, true));
 		gd = new GridData(GridData.FILL_BOTH);
 		gd.widthHint = 400;
 		gd.heightHint = 300;
@@ -106,6 +110,17 @@ public class CPathFilterPage extends WizardPage {
 			} catch (CModelException e) {
 			}
 		}
+		createExlusions();
+	}
+
+	
+	private void createExlusions() {
+		fExclusions = new ArrayList();
+		if (filter != null) {
+			viewer.removeFilter(filter);
+		}
+		filter = new CPElementFilter(fExclusions.toArray(), fFilterType, true);
+		viewer.addFilter(filter);
 	}
 
 	/**
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPathLibraryEntryPage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPathLibraryEntryPage.java
index 3fc8e72bd30..3a53d74c079 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPathLibraryEntryPage.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPathLibraryEntryPage.java
@@ -98,6 +98,7 @@ public class CPathLibraryEntryPage extends CPathBasePage {
 
 		fLibrariesList.setViewerSorter(new CPElementSorter());
 		fLibrariesList.enableButton(IDX_EDIT, false);
+		fLibrariesList.enableButton(IDX_REMOVE, false);
 		fLibrariesList.enableButton(IDX_EXPORT, false);
 	}
 
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPathOutputEntryPage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPathOutputEntryPage.java
index baff906bbf5..9ca11b2a4c1 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPathOutputEntryPage.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPathOutputEntryPage.java
@@ -90,6 +90,7 @@ public class CPathOutputEntryPage extends CPathBasePage {
 
 		fOutputList.setViewerSorter(new CPElementSorter());
 		fOutputList.enableButton(IDX_EDIT, false);
+		fOutputList.enableButton(IDX_REMOVE, false);
 	}
 	
 	
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPathSourceEntryPage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPathSourceEntryPage.java
index f981972df28..3c9bf8d5999 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPathSourceEntryPage.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPathSourceEntryPage.java
@@ -90,6 +90,7 @@ public class CPathSourceEntryPage extends CPathBasePage {
 
 		fFoldersList.setViewerSorter(new CPElementSorter());
 		fFoldersList.enableButton(IDX_EDIT, false);
+		fFoldersList.enableButton(IDX_REMOVE, false);
 	}
 
 	
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPathTabBlock.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPathTabBlock.java
index 34d0adf865e..d65c36223cc 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPathTabBlock.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPathTabBlock.java
@@ -8,15 +8,14 @@
  ******************************************************************************/
 package org.eclipse.cdt.internal.ui.dialogs.cpaths;
 
-import java.util.ArrayList;
 import java.util.List;
 
 import org.eclipse.cdt.core.model.ICElement;
 import org.eclipse.cdt.core.model.IPathEntry;
 import org.eclipse.cdt.internal.ui.dialogs.IStatusChangeListener;
-import org.eclipse.cdt.internal.ui.wizards.dialogfields.CheckedListDialogField;
 import org.eclipse.cdt.internal.ui.wizards.dialogfields.DialogField;
 import org.eclipse.cdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
+import org.eclipse.cdt.internal.ui.wizards.dialogfields.ListDialogField;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
@@ -25,7 +24,7 @@ public class CPathTabBlock extends AbstractPathOptionBlock {
 
 	private int[] pathTypes = { IPathEntry.CDT_SOURCE, IPathEntry.CDT_PROJECT, IPathEntry.CDT_OUTPUT, IPathEntry.CDT_LIBRARY,
 			IPathEntry.CDT_CONTAINER};
-	private CheckedListDialogField fCPathList;
+	private ListDialogField fCPathList;
 
 	private CPathSourceEntryPage fSourcePage;
 	private CPathProjectsEntryPage fProjectsPage;
@@ -59,14 +58,8 @@ public class CPathTabBlock extends AbstractPathOptionBlock {
 		};
 		BuildPathAdapter adapter = new BuildPathAdapter();
 
-		fCPathList = new CheckedListDialogField(null, buttonLabels, new CPElementLabelProvider());
+		fCPathList = new ListDialogField(null, buttonLabels, null);
 		fCPathList.setDialogFieldListener(adapter);
-		fCPathList.setLabelText(CPathEntryMessages.getString("CPathsBlock.path.label")); //$NON-NLS-1$
-		fCPathList.setUpButtonIndex(0);
-		fCPathList.setDownButtonIndex(1);
-		fCPathList.setCheckAllButtonIndex(3);
-		fCPathList.setUncheckAllButtonIndex(4);
-
 	}
 
 	protected List getCPaths() {
@@ -107,16 +100,7 @@ public class CPathTabBlock extends AbstractPathOptionBlock {
 
 	protected void initialize(ICElement element, List cPaths) {
 
-		List exportedEntries = new ArrayList();
-		for (int i = 0; i < cPaths.size(); i++) {
-			CPElement curr = (CPElement) cPaths.get(i);
-			if (curr.isExported() && curr.getEntryKind() != IPathEntry.CDT_SOURCE) {
-				exportedEntries.add(curr);
-			}
-		}
-
 		fCPathList.setElements(cPaths);
-		fCPathList.setCheckedElements(exportedEntries);
 
 		if (fProjectsPage != null) {
 			fSourcePage.init(getCProject());
@@ -149,14 +133,6 @@ public class CPathTabBlock extends AbstractPathOptionBlock {
 
 		for (int i = elements.size() - 1; i >= 0; i--) {
 			CPElement currElement = (CPElement) elements.get(i);
-			boolean isChecked = fCPathList.isChecked(currElement);
-			if (currElement.getEntryKind() == IPathEntry.CDT_SOURCE) {
-				if (isChecked) {
-					fCPathList.setCheckedWithoutUpdate(currElement, false);
-				}
-			} else {
-				currElement.setExported(isChecked);
-			}
 
 			entries[i] = currElement.getPathEntry();
 			if (currElement.isMissing()) {