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 addPathToResourceGroup( CPElement element, CPElementGroup parent, CPElementGroup group) { IPath resPath = element.getPath(); IPath[] exclusions = (IPath[]) element.getAttribute(CPElement.EXCLUSION); if ((group != parent || !group.getResource().equals(element.getResource())) && resPath.isPrefixOf(group.getPath()) && (resPath.equals(group.getPath()) || !CoreModelUtil.isExcludedPath( group.getResource().getFullPath().removeFirstSegments(resPath.segmentCount()), exclusions))) { if (parent != null) { // try to insert at proper place in group... int insertHere = -1; int ndx = parent.indexof(element); if (ndx != -1) { CPElement[] children = parent.getChildren(element.getEntryKind()); for (int i = ndx; i < children.length; i++) { insertHere = group.indexof(new CPElement(children[i], group.getPath(), group.getResource())); if (insertHere != -1) { group.addChild( new CPElement(element, group.getPath(), group.getResource()), insertHere); break; } } } if (insertHere == -1) { group.addChild(new CPElement(element, group.getPath(), group.getResource())); } } else { group.addChild(new CPElement(element, group.getPath(), group.getResource())); } } }
private void updateStatus() { CPElement entryError = null; int nErrorEntries = 0; IStatus status = Status.OK_STATUS; List<CPElement> elements = getCPaths(); for (int i = elements.size() - 1; i >= 0; i--) { CPElement currElement = elements.get(i); if (currElement.getStatus().getSeverity() != IStatus.OK) { nErrorEntries++; if (entryError == null) { entryError = currElement; } } } if (nErrorEntries > 0) { if (nErrorEntries == 1 && entryError != null) { status = entryError.getStatus(); } else { status = new Status( IStatus.WARNING, CUIPlugin.PLUGIN_ID, -1, NLS.bind( CPathEntryMessages.CPElement_status_multiplePathErrors, String.valueOf(nErrorEntries)), null); } } fContext.statusChanged(status); }
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; }
@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 IPathEntry[] getRawPathEntries() { List<CPElement> paths = getCPaths(); IPathEntry[] currEntries = new IPathEntry[paths.size()]; for (int i = 0; i < currEntries.length; i++) { CPElement curr = paths.get(i); currEntries[i] = curr.getPathEntry(); } return currEntries; }
private void editElementEntry(CPElement element) { IPath path = (IPath) element.getAttribute(CPElement.BASE_REF); if (path != null && !path.equals(Path.EMPTY)) { return; } else if (element.getEntryKind() == IPathEntry.CDT_MACRO) { addSymbol(element); } else if (element.getEntryKind() == IPathEntry.CDT_INCLUDE) { path = (IPath) element.getAttribute(CPElement.BASE); if (path != null && !path.equals(Path.EMPTY)) { CPElement[] includes = openWorkspacePathEntryDialog(null); if (includes != null && includes.length > 0) { includes[0].setExported(element.isExported()); } } else { addInclude(element); } } else if (element.getEntryKind() == IPathEntry.CDT_CONTAINER) { CPElement[] res = null; res = openContainerSelectionDialog(element); if (res != null && res.length > 0) { CPElement curr = res[0]; curr.setExported(element.isExported()); fTopGroup.replaceChild(element, curr); fIncludeSymPathsList.refresh(); } } }
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); } }
private void editAttributeEntry(CPElementAttribute elem) { String key = elem.getKey(); if (key.equals(CPElement.EXCLUSION)) { CPElement selElement = elem.getParent(); ExclusionPatternDialog dialog = new ExclusionPatternDialog(getShell(), selElement); if (dialog.open() == Window.OK) { selElement.setAttribute(CPElement.EXCLUSION, dialog.getExclusionPattern()); updatePathOnResourceGroups(selElement, fIncludeSymPathsList.getElements()); fIncludeSymPathsList.refresh(); updateStatus(); } } }
private boolean canMoveUp(List<?> selected) { if (!canMove(selected)) { return false; } CPElement first = (CPElement) selected.get(0); CPElementGroup parent = first.getParent(); CPElement children[] = parent.getChildren(first.getEntryKind()); int indx = Arrays.asList(children).indexOf(first); if (indx <= 0) { return false; } return true; }
private boolean canMoveDown(List<?> selected) { if (!canMove(selected)) { return false; } CPElement last = (CPElement) selected.get(selected.size() - 1); CPElementGroup parent = last.getParent(); CPElement children[] = parent.getChildren(last.getEntryKind()); int indx = Arrays.asList(children).indexOf(last); if (indx >= children.length - 1 || children[indx + 1].getInherited() != null) { return false; } return true; }
protected CPElement[] openContainerSelectionDialog(CPElement existing) { IContainerEntry elem = null; String title; if (existing == null) { title = CPathEntryMessages.IncludeSymbolEntryPage_ContainerDialog_new_title; } else { title = CPathEntryMessages.IncludeSymbolEntryPage_ContainerDialog_edit_title; elem = (IContainerEntry) existing.getPathEntry(); } CPathContainerWizard wizard = new CPathContainerWizard( elem, null, fCurrCProject, getRawPathEntries(), new int[] {IPathEntry.CDT_INCLUDE, IPathEntry.CDT_MACRO}); wizard.setWindowTitle(title); if (CPathContainerWizard.openWizard(getShell(), wizard) == Window.OK) { IPathEntry parent = wizard.getEntriesParent(); IPathEntry[] elements = wizard.getEntries(); if (elements != null) { CPElement[] res = new CPElement[elements.length]; CPElementGroup group = getSelectedGroup(); for (int i = 0; i < res.length; i++) { if (elements[i].getEntryKind() == IPathEntry.CDT_INCLUDE) { res[i] = new CPElement( fCurrCProject, IPathEntry.CDT_INCLUDE, group.getResource().getFullPath(), group.getResource()); res[i].setAttribute(CPElement.INCLUDE, ((IIncludeEntry) elements[i]).getIncludePath()); res[i].setAttribute(CPElement.BASE_REF, parent.getPath()); } else if (elements[i].getEntryKind() == IPathEntry.CDT_MACRO) { res[i] = new CPElement( fCurrCProject, IPathEntry.CDT_MACRO, group.getResource().getFullPath(), group.getResource()); res[i].setAttribute(CPElement.MACRO_NAME, ((IMacroEntry) elements[i]).getMacroName()); res[i].setAttribute(CPElement.BASE_REF, parent.getPath()); } } return res; } return new CPElement[] {CPElement.createFromExisting(parent, fCurrCProject)}; } return null; }
@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; }
protected void addInclude(CPElement existing) { InputDialog dialog; if (existing == null) { dialog = new SelectPathInputDialog( getShell(), CPathEntryMessages.IncludeSymbolEntryPage_addExternal_title, CPathEntryMessages.IncludeSymbolEntryPage_addExternal_message, null, null); } else { dialog = new SelectPathInputDialog( getShell(), CPathEntryMessages.IncludeSymbolEntryPage_editExternal_title, CPathEntryMessages.IncludeSymbolEntryPage_editExternal_message, ((IPath) existing.getAttribute(CPElement.INCLUDE)).toOSString(), null); } String newItem = null; if (dialog.open() == Window.OK) { newItem = dialog.getValue(); if (newItem != null && !newItem.isEmpty()) { if (existing == null) { CPElementGroup group = getSelectedGroup(); CPElement newPath = new CPElement( fCurrCProject, IPathEntry.CDT_INCLUDE, group.getResource().getFullPath(), group.getResource()); newPath.setAttribute(CPElement.INCLUDE, new Path(newItem)); if (!group.contains(newPath)) { addPathToResourceGroups(newPath, group, fIncludeSymPathsList.getElements()); fIncludeSymPathsList.refresh(); fIncludeSymPathsList.selectElements(new StructuredSelection(newPath)); } } else { existing.setAttribute(CPElement.INCLUDE, new Path(newItem)); updatePathOnResourceGroups(existing, fIncludeSymPathsList.getElements()); fIncludeSymPathsList.refresh(); } updateStatus(); } } }
private void updateStatus(List<?> selected) { if (selected.size() != 1) { updateStatus(); return; } CPElement element = null; if (selected.get(0) instanceof CPElement) { element = (CPElement) selected.get(0); } else if (selected.get(0) instanceof CPElementAttribute) { element = ((CPElementAttribute) selected.get(0)).getParent(); } if (element != null && element.getStatus().getSeverity() != IStatus.OK) { fContext.statusChanged(element.getStatus()); } else { updateStatus(); return; } }
protected CPElement[] openWorkspacePathEntryDialog(CPElement existing) { Class<?>[] acceptedClasses = new Class[] {ICProject.class, IProject.class, IContainer.class, ICContainer.class}; TypedElementSelectionValidator validator = new TypedElementSelectionValidator(acceptedClasses, existing == null); ViewerFilter filter = new TypedViewerFilter(acceptedClasses); String title = (existing == null) ? CPathEntryMessages.IncludeSymbolEntryPage_fromWorkspaceDialog_new_title : CPathEntryMessages.IncludeSymbolEntryPage_fromWorkspaceDialog_edit_title; String message = (existing == null) ? CPathEntryMessages.IncludeSymbolEntryPage_fromWorkspaceDialog_new_description : CPathEntryMessages.IncludeSymbolEntryPage_fromWorkspaceDialog_edit_description; ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog( getShell(), new WorkbenchLabelProvider(), new CElementContentProvider()); dialog.setValidator(validator); dialog.setTitle(title); dialog.setMessage(message); dialog.addFilter(filter); dialog.setInput(CoreModel.getDefault().getCModel()); if (existing == null) { dialog.setInitialSelection(fCurrCProject); } else { dialog.setInitialSelection(existing.getCProject()); } if (dialog.open() == Window.OK) { Object[] elements = dialog.getResult(); CPElement[] res = new CPElement[elements.length]; for (int i = 0; i < res.length; i++) { IProject project; IPath includePath; if (elements[i] instanceof IResource) { project = ((IResource) elements[i]).getProject(); includePath = ((IResource) elements[i]).getProjectRelativePath(); } else { project = ((ICElement) elements[i]).getCProject().getProject(); includePath = ((ICElement) elements[i]).getResource().getProjectRelativePath(); } CPElementGroup group = getSelectedGroup(); res[i] = new CPElement( fCurrCProject, IPathEntry.CDT_INCLUDE, group.getResource().getFullPath(), group.getResource()); res[i].setAttribute(CPElement.BASE, project.getFullPath().makeRelative()); res[i].setAttribute(CPElement.INCLUDE, includePath); } return res; } return null; }
/** * @param cpentry * @param str */ private void addParentInfo(CPElement cpentry, StringBuffer str) { if (bShowParentInfo) { CPElement parent = cpentry.getParentContainer(); if (parent != null) { str.append(" ["); // $NON-NLS-1$ try { IPathEntryContainer container = CoreModel.getPathEntryContainer(cpentry.getPath(), cpentry.getCProject()); if (container != null) { str.append(container.getDescription()); } } catch (CModelException e) { str.append(parent.getPath()); } str.append(']'); } } }
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 boolean canRemove(List<?> selected) { if (selected.size() != 1) { return false; } Object elem = selected.get(0); if (elem instanceof CPElement) { CPElement element = (CPElement) elem; if (element.getParentContainer() == null) { return element.getEntryKind() == IPathEntry.CDT_INCLUDE || element.getEntryKind() == IPathEntry.CDT_MACRO; } } else if (elem instanceof CPElementAttribute) { CPElementAttribute attrib = (CPElementAttribute) elem; if (attrib.getKey().equals(CPElement.EXCLUSION)) { if (((IPath[]) attrib.getValue()).length > 0) { return true; } } } return false; }
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 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 String getText(Object element) { if (element instanceof CPElement) { return getCPElementText((CPElement) element); } else if (element instanceof CPElementAttribute) { return getCPElementAttributeText((CPElementAttribute) element); } else if (element instanceof IPathEntry) { return getCPElementText(CPElement.createFromExisting((IPathEntry) element, null)); } else if (element instanceof CPElementGroup) { return (getCPContainerGroupText((CPElementGroup) element)); } return super.getText(element); }
private void addBaseString(IPath endPath, CPElement cpentry, StringBuffer str) { IPath baseRef = (IPath) cpentry.getAttribute(CPElement.BASE_REF); if (!baseRef.isEmpty()) { if (baseRef.isAbsolute()) { // str.append("From project "); IPath path = baseRef; if (endPath != null) { path = path.append(endPath); } str.append(path.makeRelative().toPortableString()); } else { // str.append("From contribution "); IPathEntryContainer container; if (endPath != null) { str.append(endPath.toPortableString()); } str.append(" - ("); // $NON-NLS-1$ try { container = CoreModel.getPathEntryContainer(baseRef, cpentry.getCProject()); if (container != null) { str.append(container.getDescription()); } } catch (CModelException e1) { } str.append(')'); } } else { IPath path = (IPath) cpentry.getAttribute(CPElement.BASE); if (!path.isEmpty()) { if (endPath != null) { path = path.append(endPath); } str.insert(0, path.toPortableString()); } else if (endPath != null) { str.insert(0, endPath.toPortableString()); } } }
private ImageDescriptor getCPElementBaseImage(CPElement cpentry) { switch (cpentry.getEntryKind()) { case IPathEntry.CDT_OUTPUT: if (cpentry.getPath().segmentCount() == 1) { return fProjectImage; } return fOutputImage; case IPathEntry.CDT_SOURCE: if (cpentry.getPath().segmentCount() == 1) { return fProjectImage; } return fFolderImage; case IPathEntry.CDT_LIBRARY: IPath path = (IPath) cpentry.getAttribute(CPElement.SOURCEATTACHMENT); if (path == null || path.isEmpty()) { return fLibIcon; } return fLibWSrcIcon; case IPathEntry.CDT_PROJECT: return fProjectImage; case IPathEntry.CDT_CONTAINER: return fContainerImage; case IPathEntry.CDT_INCLUDE: if (((Boolean) cpentry.getAttribute(CPElement.SYSTEM_INCLUDE)).booleanValue()) return fIncludeIcon; return fQuoteIncludeIcon; case IPathEntry.CDT_INCLUDE_FILE: return fIncludeFileIcon; case IPathEntry.CDT_MACRO: return fMacroIcon; case IPathEntry.CDT_MACRO_FILE: return fMacrosFileIcon; default: return null; } }
/* (non-Javadoc) * @see org.eclipse.cdt.internal.ui.dialogs.cpaths.CPElementFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object) */ @Override public boolean select(Viewer viewer, Object parent, Object element) { IResource res = null; if (element instanceof CPElement) { CPElement cpElem = (CPElement) element; res = cpElem.getResource(); } else if (element instanceof CPElementGroup) { CPElementGroup cpElemGroup = (CPElementGroup) element; res = cpElemGroup.getResource(); } if (res != null && !res.equals(fCurrCElement.getResource())) { IPath currResPath = fCurrCElement.getResource().getFullPath(); IPath resPath = res.getFullPath(); boolean found = false; for (int i = currResPath.segmentCount() - 1; i >= 0; --i) { if (resPath.equals(currResPath.uptoSegment(i))) { found = true; break; } } if (found == false) return false; } return super.select(viewer, parent, element); }
private List<CPElementGroup> createGroups(ICElement element, List<CPElement> cPaths) { // create resource groups List<CPElementGroup> resourceGroups = new ArrayList<CPElementGroup>(5); fTopGroup = new CPElementGroup(element.getResource()); resourceGroups.add(fTopGroup); // add containers first so that they appear at top of list for (int i = 0; i < cPaths.size(); i++) { CPElement cpelement = cPaths.get(i); switch (cpelement.getEntryKind()) { case IPathEntry.CDT_CONTAINER: fTopGroup.addChild(cpelement); break; } } for (int i = 0; i < cPaths.size(); i++) { CPElement cpelement = cPaths.get(i); switch (cpelement.getEntryKind()) { case IPathEntry.CDT_INCLUDE: case IPathEntry.CDT_INCLUDE_FILE: case IPathEntry.CDT_MACRO: case IPathEntry.CDT_MACRO_FILE: CPElementGroup resGroup = new CPElementGroup(cpelement.getResource()); int ndx = resourceGroups.indexOf(resGroup); if (ndx == -1) { resourceGroups.add(resGroup); } else { resGroup = resourceGroups.get(ndx); } resGroup.addChild(cpelement); } } // place each path in its appropriate inherited group (or not if // excluded) for (int i = 0; i < cPaths.size(); i++) { CPElement cpelement = cPaths.get(i); switch (cpelement.getEntryKind()) { case IPathEntry.CDT_INCLUDE: case IPathEntry.CDT_INCLUDE_FILE: case IPathEntry.CDT_MACRO: case IPathEntry.CDT_MACRO_FILE: addPathToResourceGroups(cpelement, null, resourceGroups); } } return resourceGroups; }
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; }
protected void addSymbol(CPElement existing) { // Popup an entry dialog InputDialog dialog; if (existing == null) { dialog = new InputDialog( getShell(), CPathEntryMessages.IncludeSymbolEntryPage_addSymbol_title, CPathEntryMessages.IncludeSymbolEntryPage_addSymbol_message, "", //$NON-NLS-1$ null); } else { StringBuilder initialValue = new StringBuilder(); initialValue.append((String) existing.getAttribute(CPElement.MACRO_NAME)); initialValue.append('='); initialValue.append((String) existing.getAttribute(CPElement.MACRO_VALUE)); dialog = new InputDialog( getShell(), CPathEntryMessages.IncludeSymbolEntryPage_editSymbol_title, CPathEntryMessages.IncludeSymbolEntryPage_editSymbol_message, initialValue.toString(), null); } String symbol = null; if (dialog.open() == Window.OK) { symbol = dialog.getValue(); if (symbol != null && symbol.length() > 0) { CPElementGroup group = getSelectedGroup(); CPElement newPath = new CPElement( fCurrCProject, IPathEntry.CDT_MACRO, group.getResource().getFullPath(), group.getResource()); 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(); } if (existing != null) { existing.setAttribute(CPElement.MACRO_NAME, name); existing.setAttribute(CPElement.MACRO_VALUE, value); updatePathOnResourceGroups(existing, fIncludeSymPathsList.getElements()); fIncludeSymPathsList.refresh(); } else { newPath.setAttribute(CPElement.MACRO_NAME, name); newPath.setAttribute(CPElement.MACRO_VALUE, value); if (!group.contains(newPath)) { addPathToResourceGroups(newPath, group, fIncludeSymPathsList.getElements()); fIncludeSymPathsList.refresh(); fIncludeSymPathsList.selectElements(new StructuredSelection(newPath)); } updateStatus(); } } } }
private void exportEntry() { CPElement element = (CPElement) getSelection().get(0); element.setExported(!element.isExported()); // toggle fIncludeSymPathsList.refresh(element); }