private CPElement removePathFromResourceGroups(CPElement element, List<CPElementGroup> groups) { CPElement Inherited = element.getInherited(); CPElementGroup resGroup = element.getParent(); resGroup.removeChild(element); if (Inherited != null) { // applied exclusion to orig. IPath exclude = element.getPath().removeFirstSegments(Inherited.getPath().segmentCount()); IPath[] exclusions = (IPath[]) Inherited.getAttribute(CPElement.EXCLUSION); IPath[] newExlusions = new IPath[exclusions.length + 1]; System.arraycopy(exclusions, 0, newExlusions, 0, exclusions.length); newExlusions[exclusions.length] = exclude; Inherited.setAttribute(CPElement.EXCLUSION, newExlusions); return null; } // remove all inherited for (int i = 0; i < groups.size(); i++) { CPElementGroup group = groups.get(i); CPElement elements[] = group.getChildren(element.getEntryKind()); for (CPElement element2 : elements) { if (element2.getInherited() == element) { group.removeChild(element2); break; } } } return element; }
private boolean moveDown(CPElement element) { boolean rc = false; int kind = element.getEntryKind(); for (CPElementGroup group : fIncludeSymPathsList.getElements()) { CPElement[] children = group.getChildren(kind); for (int k = children.length - 1; k >= 0; --k) { CPElement child = children[k]; if (element.equals(child) || (child.getInherited() != null && child.getInherited().equals(element))) { int prevIndex = k + 1; if (prevIndex < children.length) { // swap the two children[k] = children[prevIndex]; children[prevIndex] = child; rc = true; break; } } } group.setChildren(children); } fIncludeSymPathsList.refresh(); fIncludeSymPathsList.selectElements(new StructuredSelection(element)); fIncludeSymPathsList.setFocus(); return rc; }
private void updatePathOnResourceGroups(CPElement element, List<CPElementGroup> groups) { CPElementGroup parent = element.getParent(); IPath resPath = element.getPath(); IPath[] exclusions = (IPath[]) element.getAttribute(CPElement.EXCLUSION); for (int i = 0; i < groups.size(); i++) { CPElementGroup group = groups.get(i); if (group != parent) { boolean found = false; CPElement[] elements = group.getChildren(element.getEntryKind()); for (CPElement element2 : elements) { if (element2.getInherited() == element) { found = true; if (!CoreModelUtil.isExcludedPath( group.getResource().getFullPath().removeFirstSegments(resPath.segmentCount()), exclusions)) { group.replaceChild( element2, new CPElement(element, group.getPath(), group.getResource())); } else { group.removeChild(element2); } break; } } if (!found) { addPathToResourceGroup(element, parent, group); } } } }
@Override public Image getImage(Object element) { if (element instanceof CPElement) { CPElement cpentry = (CPElement) element; ImageDescriptor imageDescriptor = getCPElementBaseImage(cpentry); if (imageDescriptor != null) { switch (cpentry.getStatus().getSeverity()) { case IStatus.WARNING: imageDescriptor = new CPListImageDescriptor( imageDescriptor, CPListImageDescriptor.WARNING, SMALL_SIZE); break; case IStatus.ERROR: imageDescriptor = new CPListImageDescriptor(imageDescriptor, CPListImageDescriptor.ERROR, SMALL_SIZE); break; } if (cpentry.getInherited() != null) { imageDescriptor = new CPListImageDescriptor( imageDescriptor, CPListImageDescriptor.PATH_INHERIT, SMALL_SIZE); } return fRegistry.get(imageDescriptor); } } else if (element instanceof CPElementAttribute) { String key = ((CPElementAttribute) element).getKey(); if (key.equals(CPElement.SOURCEATTACHMENT)) { return fRegistry.get( CDTSharedImages.getImageDescriptor(CDTSharedImages.IMG_OBJS_SOURCE_ATTACH_ATTRIB)); } else if (key.equals(CPElement.EXCLUSION)) { return CDTSharedImages.getImage(CDTSharedImages.IMG_OBJS_EXCLUSION_FILTER_ATTRIB); } } else if (element instanceof IPathEntry) { return getImage(CPElement.createFromExisting((IPathEntry) element, null)); } else if (element instanceof CPElementGroup) { switch (((CPElementGroup) element).getEntryKind()) { case IPathEntry.CDT_INCLUDE: return CDTSharedImages.getImage(CDTSharedImages.IMG_OBJS_INCLUDES_CONTAINER); case IPathEntry.CDT_MACRO: return fRegistry.get(fMacroIcon); case IPathEntry.CDT_INCLUDE_FILE: case IPathEntry.CDT_MACRO_FILE: return CDTSharedImages.getImage(CDTSharedImages.IMG_OBJS_INCLUDE); case IPathEntry.CDT_LIBRARY: return CDTSharedImages.getImage(CDTSharedImages.IMG_OBJS_LIBRARY); case -1: IResource res = ((CPElementGroup) element).getResource(); IWorkbenchAdapter adapter = (IWorkbenchAdapter) res.getAdapter(IWorkbenchAdapter.class); ImageDescriptor imageDescriptor = adapter.getImageDescriptor(res); if (!res.exists()) { imageDescriptor = new CPListImageDescriptor( imageDescriptor, CPListImageDescriptor.WARNING, SMALL_SIZE); } return fRegistry.get(imageDescriptor); } } return null; }
protected void addNewPathResource() { Class<?>[] acceptedClasses = new Class[] {ICProject.class, ICContainer.class, ITranslationUnit.class}; TypedElementSelectionValidator validator = new TypedElementSelectionValidator(acceptedClasses, false); ViewerFilter filter = new TypedViewerFilter(acceptedClasses); String title = CPathEntryMessages.IncludeSymbolEntryPage_newResource_title; String message = CPathEntryMessages.IncludeSymbolEntryPage_newResource_description; ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog( getShell(), new WorkbenchLabelProvider(), new CElementContentProvider()); dialog.setValidator(validator); dialog.setTitle(title); dialog.setMessage(message); dialog.addFilter(filter); dialog.setInput(fCurrCProject); dialog.setInitialSelection(fCurrCProject); if (dialog.open() == Window.OK) { Object[] elements = dialog.getResult(); IResource resource; if (elements[0] instanceof IResource) { resource = (IResource) elements[0]; } else { resource = ((ICElement) elements[0]).getResource(); } CPElementGroup newGroup = new CPElementGroup(resource); if (!fIncludeSymPathsList.getElements().contains(newGroup)) { List<CPElementGroup> groups = fIncludeSymPathsList.getElements(); for (int i = 0; i < groups.size(); i++) { CPElementGroup group = groups.get(i); if (group.getPath().isPrefixOf(newGroup.getPath())) { CPElement[] cpelements = group.getChildren(); for (CPElement cpelement : cpelements) { if (cpelement.getInherited() == null) { switch (cpelement.getEntryKind()) { case IPathEntry.CDT_INCLUDE: case IPathEntry.CDT_INCLUDE_FILE: case IPathEntry.CDT_MACRO: case IPathEntry.CDT_MACRO_FILE: addPathToResourceGroup(cpelement, null, newGroup); } } } } } fIncludeSymPathsList.addElement(newGroup); } fIncludeSymPathsList.selectElements(new StructuredSelection(newGroup)); fIncludeSymPathsList.expandElement(newGroup, 1); } }
@Override public List<CPElement> getCPaths() { List<CPElement> cPaths = new ArrayList<CPElement>(); List<CPElementGroup> groups = fIncludeSymPathsList.getElements(); for (int i = 0; i < groups.size(); i++) { CPElementGroup group = groups.get(i); CPElement[] elements = group.getChildren(); for (CPElement element : elements) { if (element.getInherited() == null) { cPaths.add(element); } } } return cPaths; }
private boolean canExport(List<?> selected) { if (selected.size() != 1) { return false; } Object elem = selected.get(0); if (elem instanceof CPElement) { CPElement element = (CPElement) selected.get(0); if (element.getParentContainer() == null && element.getInherited() == null) { IPath base_ref = (IPath) element.getAttribute(CPElement.BASE_REF); if (base_ref != null && !base_ref.equals(Path.EMPTY)) return false; return element.getEntryKind() == IPathEntry.CDT_INCLUDE || element.getEntryKind() == IPathEntry.CDT_MACRO; } } return false; }
private boolean canMove(List<?> selected) { if (selected.size() == 0) { return false; } for (int i = 0; i < selected.size(); i++) { Object element = selected.get(i); if (!(element instanceof CPElement)) return false; CPElement elem = (CPElement) element; if (elem.getEntryKind() != IPathEntry.CDT_INCLUDE && elem.getEntryKind() != IPathEntry.CDT_MACRO) { return false; } if (elem.getParentContainer() != null || elem.getInherited() != null) { return false; } } return true; }
private void removeEntry() { List<?> selected = getSelection(); Object elem = selected.get(0); if (elem instanceof CPElement) { CPElement element = (CPElement) elem; CPElementGroup parent = element.getParent(); if (removePathFromResourceGroups(element, fIncludeSymPathsList.getElements()) == null) { updatePathOnResourceGroups(element.getInherited(), fIncludeSymPathsList.getElements()); } fIncludeSymPathsList.refresh(); fIncludeSymPathsList.selectElements(new StructuredSelection(parent)); } else if (elem instanceof CPElementAttribute) { CPElementAttribute attrib = (CPElementAttribute) elem; String key = attrib.getKey(); Object value = key.equals(CPElement.EXCLUSION) ? new Path[0] : null; attrib.getParent().setAttribute(key, value); updatePathOnResourceGroups(attrib.getParent(), fIncludeSymPathsList.getElements()); fIncludeSymPathsList.refresh(); } updateStatus(); }
private boolean canEdit(List<?> selected) { if (selected.size() != 1) { return false; } Object elem = selected.get(0); if (elem instanceof CPElement) { CPElement element = (CPElement) selected.get(0); if (element.getParentContainer() == null && element.getInherited() == null) { IPath path = (IPath) element.getAttribute(CPElement.BASE_REF); if (path != null && !path.equals(Path.EMPTY)) { return false; } return element.getEntryKind() == IPathEntry.CDT_INCLUDE || element.getEntryKind() == IPathEntry.CDT_MACRO || element.getEntryKind() == IPathEntry.CDT_CONTAINER; } } if (elem instanceof CPElementAttribute) { return true; } return false; }