From 6d241cf586cec560af0ab74c137a426d06c3dc79 Mon Sep 17 00:00:00 2001 From: David Inglis Date: Wed, 21 Apr 2004 02:14:21 +0000 Subject: [PATCH] update cpath ui --- .../icons/full/ovr16/path_inherit_co.gif | Bin 0 -> 78 bytes .../cdt/internal/ui/CPluginImages.java | 2 + .../ui/dialogs/cpaths/CPListElement.java | 2 +- .../dialogs/cpaths/CPathSymbolEntryPage.java | 11 +- .../dialogs/cpaths/ExtendedCPathBasePage.java | 100 ++++++++++++++++-- 5 files changed, 107 insertions(+), 8 deletions(-) create mode 100644 core/org.eclipse.cdt.ui/icons/full/ovr16/path_inherit_co.gif diff --git a/core/org.eclipse.cdt.ui/icons/full/ovr16/path_inherit_co.gif b/core/org.eclipse.cdt.ui/icons/full/ovr16/path_inherit_co.gif new file mode 100644 index 0000000000000000000000000000000000000000..c5f5d957549f56142716e655b421a62020417187 GIT binary patch literal 78 zcmZ?wbhEHbWM|-DSj51<(7<57-`+mn{y!K11t382CkrD30}F!=hznB7z%1;sd9`*< UBf|_1iKesJIr55qNlXmZ02nP3YXATM literal 0 HcmV?d00001 diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CPluginImages.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CPluginImages.java index 2f7da3db330..4b53a845a85 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CPluginImages.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CPluginImages.java @@ -135,6 +135,8 @@ public class CPluginImages { public static final ImageDescriptor DESC_OBJS_ORDER= createManaged(T_OBJ, IMG_OBJS_ORDER); public static final ImageDescriptor DESC_OBJS_EXCLUSION_FILTER_ATTRIB = createManaged(T_OBJ, IMG_OBJS_EXCLUDSION_FILTER_ATTRIB); + public static final ImageDescriptor DESC_OVR_PATH_INHERIT= create(T_OVR, "path_inherit_co.gif"); //$NON-NLS-1$ + // Breakpoint image descriptors public static final ImageDescriptor DESC_OBJS_BREAKPOINT = createManaged( T_OBJ, IMG_OBJS_BREAKPOINT ); public static final ImageDescriptor DESC_OBJS_BREAKPOINT_DISABLED = createManaged( T_OBJ, IMG_OBJS_BREAKPOINT_DISABLED ); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPListElement.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPListElement.java index 9563a2b5b31..d0f768138ce 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPListElement.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPListElement.java @@ -134,7 +134,7 @@ public class CPListElement { ((Boolean) getAttribute(SYSTEM_INCLUDE)).booleanValue(), exclusionPattern); case IPathEntry.CDT_MACRO: exclusionPattern = (IPath[]) getAttribute(EXCLUSION); - return CoreModel.newMacroEntry(fPath, (String) getAttribute(MACRO_NAME), (String) getAttribute(MACRO_NAME), exclusionPattern); + return CoreModel.newMacroEntry(fPath, (String) getAttribute(MACRO_NAME), (String) getAttribute(MACRO_VALUE), exclusionPattern); default: return null; } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPathSymbolEntryPage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPathSymbolEntryPage.java index ff6294e79fe..b90eefd3456 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPathSymbolEntryPage.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPathSymbolEntryPage.java @@ -40,7 +40,16 @@ public class CPathSymbolEntryPage extends ExtendedCPathBasePage { List cplist = fPathList.getElements(); CPListElement newPath = newCPElement(((ICElement) getSelection().get(0)).getResource()); - newPath.setAttribute(CPListElement.MACRO_NAME, symbol); + String name, value = ""; //$NON-NLS-1$ + int index = symbol.indexOf("="); //$NON-NLS-1$ + if (index != -1) { + name = symbol.substring(0, index).trim(); + value = symbol.substring(index + 1).trim(); + } else { + name = symbol.trim(); + } + newPath.setAttribute(CPListElement.MACRO_NAME, name); + newPath.setAttribute(CPListElement.MACRO_VALUE, value); if (!cplist.contains(newPath)) { fPathList.addElement(newPath); fCPathList.add(newPath); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/ExtendedCPathBasePage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/ExtendedCPathBasePage.java index b8a5658325d..6ecae933041 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/ExtendedCPathBasePage.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/dialogs/cpaths/ExtendedCPathBasePage.java @@ -20,6 +20,7 @@ import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.model.IPathEntry; import org.eclipse.cdt.core.model.ISourceRoot; +import org.eclipse.cdt.internal.ui.CPluginImages; import org.eclipse.cdt.internal.ui.util.PixelConverter; import org.eclipse.cdt.internal.ui.wizards.NewWizardMessages; import org.eclipse.cdt.internal.ui.wizards.TypedElementSelectionValidator; @@ -36,6 +37,7 @@ import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.jface.resource.CompositeImageDescriptor; import org.eclipse.jface.viewers.IColorProvider; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.IStructuredSelection; @@ -46,6 +48,8 @@ import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.graphics.ImageData; +import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; @@ -103,22 +107,107 @@ public abstract class ExtendedCPathBasePage extends CPathBasePage { private final Color inDirect = new Color(Display.getDefault(), new RGB(170, 170, 170)); + private class CPListImageDescriptor extends CompositeImageDescriptor { + + private Image fBaseImage; + private boolean showInherited; + private Point fSize; + + public CPListImageDescriptor(Image baseImage, boolean inherited) { + fBaseImage = baseImage; + showInherited = inherited; + } + + /** + * @see CompositeImageDescriptor#getSize() + */ + protected Point getSize() { + if (fSize == null) { + ImageData data = fBaseImage.getImageData(); + setSize(new Point(data.width, data.height)); + } + return fSize; + } + + /** + * @see Object#equals(java.lang.Object) + */ + public boolean equals(Object object) { + if (!(object instanceof CPListImageDescriptor)) { + return false; + } + + CPListImageDescriptor other = (CPListImageDescriptor) object; + return (fBaseImage.equals(other.fBaseImage) && showInherited == other.showInherited); + } + + /** + * @see Object#hashCode() + */ + public int hashCode() { + return fBaseImage.hashCode() | (showInherited ? 0x1 : 0); + } + + /** + * @see CompositeImageDescriptor#drawCompositeImage(int, int) + */ + protected void drawCompositeImage(int width, int height) { + ImageData bg = fBaseImage.getImageData(); + if (bg == null) { + bg = DEFAULT_IMAGE_DATA; + } + drawImage(bg, 0, 0); + drawOverlays(); + } + + /** + * Add any overlays to the image as specified in the flags. + */ + protected void drawOverlays() { + ImageData data = null; + if (showInherited) { + data = CPluginImages.DESC_OVR_PATH_INHERIT.getImageData(); + drawImage(data, 0, 0); + } + } + + protected void setSize(Point size) { + fSize = size; + } + + } + + public Image getImage(Object element) { + Image image = super.getImage(element); + if (isPathInherited((CPListElement) element)) { + image = new CPListImageDescriptor(image, true).createImage(); + } + return image; + } + public Color getBackground(Object element) { return null; } public Color getForeground(Object element) { - IPath resPath = ((CPListElement) element).getPath(); + if (isPathInherited((CPListElement) element)) { + return inDirect; + } + return null; + } + + boolean isPathInherited(CPListElement element) { + IPath resPath = element.getPath(); List sel = getSelection(); if (!sel.isEmpty()) { if (sel.get(0) instanceof ICElement) { ICElement celem = (ICElement) sel.get(0); if (!celem.getPath().equals(resPath)) { - return inDirect; + return true; } } } - return null; + return false; } } @@ -180,7 +269,7 @@ public abstract class ExtendedCPathBasePage extends CPathBasePage { protected void removePath(CPListElement element) { ICElement celem = (ICElement) getSelection().get(0); if (!celem.getPath().equals(element.getPath())) { - IPath exclude = element.getPath().removeFirstSegments(element.getPath().segmentCount()).addTrailingSeparator(); + IPath exclude = celem.getPath().removeFirstSegments(element.getPath().segmentCount()).addTrailingSeparator(); IPath[] exclusions = (IPath[]) element.getAttribute(CPListElement.EXCLUSION); IPath[] newExlusions = new IPath[exclusions.length + 1]; System.arraycopy(exclusions, 0, newExlusions, 0, exclusions.length); @@ -255,8 +344,7 @@ public abstract class ExtendedCPathBasePage extends CPathBasePage { while (iter.hasNext()) { CPListElement element = (CPListElement) iter.next(); if (element.getPath().isPrefixOf(resPath) - && (element.getPath().equals(resPath) - || !CoreModelUtil.isExcludedPath(resPath.removeFirstSegments(1), + && (element.getPath().equals(resPath) || !CoreModelUtil.isExcludedPath(resPath.removeFirstSegments(1), (IPath[]) element.getAttribute(CPListElement.EXCLUSION)))) { newList.add(element); }