@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;
 }
 @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);
 }
  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;
  }