private void projectPageCustomButtonPressed(DialogField field, int index) {
    CPListElement[] entries = null;
    switch (index) {
      case IDX_ADDPROJECT: /* add project */
        entries = openProjectDialog(null);
        break;
      case IDX_EDIT: /* edit */
        editEntry();
        return;
      case IDX_REMOVE: /* remove */
        removeEntry();
        return;
    }
    if (entries != null) {
      int nElementsChosen = entries.length;
      // remove duplicates
      List cplist = fProjectsList.getElements();
      List elementsToAdd = new ArrayList(nElementsChosen);
      for (int i = 0; i < nElementsChosen; i++) {
        CPListElement curr = entries[i];
        if (!cplist.contains(curr) && !elementsToAdd.contains(curr)) {
          elementsToAdd.add(curr);
        }
      }

      fProjectsList.addElements(elementsToAdd);
      if (index == IDX_ADDPROJECT) {
        fProjectsList.refresh();
      }
      fProjectsList.postSetSelection(new StructuredSelection(entries));
    }
  }
  private CPListElement[] openProjectDialog(CPListElement elem) {

    try {
      ArrayList selectable = new ArrayList();
      selectable.addAll(Arrays.asList(fCurrJProject.getJavaScriptModel().getJavaScriptProjects()));
      selectable.remove(fCurrJProject);

      List elements = fProjectsList.getElements();
      for (int i = 0; i < elements.size(); i++) {
        CPListElement curr = (CPListElement) elements.get(0);
        IJavaScriptProject proj = (IJavaScriptProject) JavaScriptCore.create(curr.getResource());
        selectable.remove(proj);
      }
      Object[] selectArr = selectable.toArray();
      new JavaScriptElementComparator().sort(null, selectArr);

      ListSelectionDialog dialog =
          new ListSelectionDialog(
              getShell(),
              Arrays.asList(selectArr),
              new ArrayContentProvider(),
              new JavaUILabelProvider(),
              NewWizardMessages.ProjectsWorkbookPage_chooseProjects_message);
      dialog.setTitle(NewWizardMessages.ProjectsWorkbookPage_chooseProjects_title);
      dialog.setHelpAvailable(false);
      if (dialog.open() == Window.OK) {
        Object[] result = dialog.getResult();
        CPListElement[] cpElements = new CPListElement[result.length];
        for (int i = 0; i < result.length; i++) {
          IJavaScriptProject curr = (IJavaScriptProject) result[i];
          cpElements[i] =
              new CPListElement(
                  fCurrJProject, IIncludePathEntry.CPE_PROJECT, curr.getPath(), curr.getResource());
        }
        return cpElements;
      }
    } catch (JavaScriptModelException e) {
      return null;
    }
    return null;
  }
  private void updateClasspathList() {
    List projelements = fProjectsList.getElements();

    boolean remove = false;
    List cpelements = fClassPathList.getElements();
    // backwards, as entries will be deleted
    for (int i = cpelements.size() - 1; i >= 0; i--) {
      CPListElement cpe = (CPListElement) cpelements.get(i);
      if (isEntryKind(cpe.getEntryKind())) {
        if (!projelements.remove(cpe)) {
          cpelements.remove(i);
          remove = true;
        }
      }
    }
    for (int i = 0; i < projelements.size(); i++) {
      cpelements.add(projelements.get(i));
    }
    if (remove || (projelements.size() > 0)) {
      fClassPathList.setElements(cpelements);
    }
  }