Package org.eclipse.php.internal.ui.actions

Source Code of org.eclipse.php.internal.ui.actions.NewWizardMenu

/*******************************************************************************
* Copyright (c) 2000, 2007 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.php.internal.ui.actions;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.Separator;
import org.eclipse.php.internal.ui.actions.newprojectwizard.NewProjectAction;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.actions.BaseNewWizardMenu;
import org.eclipse.ui.actions.NewExampleAction;
import org.eclipse.ui.activities.WorkbenchActivityHelper;
import org.eclipse.ui.internal.WorkbenchPlugin;
import org.eclipse.ui.internal.actions.NewWizardShortcutAction;
import org.eclipse.ui.internal.dialogs.WorkbenchWizardElement;
import org.eclipse.ui.internal.registry.WizardsRegistryReader;
import org.eclipse.ui.wizards.IWizardCategory;
import org.eclipse.ui.wizards.IWizardDescriptor;

/**
* A <code>NewWizardMenu</code> augments <code>BaseNewWizardMenu</code> with
* IDE-specific actions: New Project... (always shown) and New Example... (shown
* only if there are example wizards installed).
*/
public class NewWizardMenu extends BaseNewWizardMenu {

  private static final List<String> PROJECT_WIZARD_ID = new ArrayList<String>();
  static {
    PROJECT_WIZARD_ID
        .add("org.eclipse.php.ui.wizards.PHPFileCreationWizard"); //$NON-NLS-1$
    PROJECT_WIZARD_ID
        .add("com.zend.php.ui.wizards.phpElementsWizard.NewPHPClassWizard"); //$NON-NLS-1$
    PROJECT_WIZARD_ID
        .add("com.zend.php.ui.wizards.phpElementsWizard.NewPHPInterfaceWizard"); //$NON-NLS-1$
    PROJECT_WIZARD_ID
        .add("com.zend.php.ui.wizards.phpElementsWizard.NewPHPTraitWizard"); //$NON-NLS-1$

    PROJECT_WIZARD_ID
        .add("org.eclipse.php.ui.wizards.UntitledPHPDocumentWizard"); //$NON-NLS-1$
    PROJECT_WIZARD_ID.add("org.eclipse.ui.wizards.new.folder"); //$NON-NLS-1$
    PROJECT_WIZARD_ID.add("org.eclipse.ui.wizards.new.file"); //$NON-NLS-1$
    PROJECT_WIZARD_ID
        .add("org.eclipse.wst.css.ui.internal.wizard.NewCSSWizard"); //$NON-NLS-1$
    PROJECT_WIZARD_ID
        .add("org.eclipse.wst.html.ui.internal.wizard.NewHTMLWizard"); //$NON-NLS-1$
    PROJECT_WIZARD_ID
        .add("org.eclipse.wst.xml.ui.internal.wizards.NewXMLWizard"); //$NON-NLS-1$
    PROJECT_WIZARD_ID
        .add("org.eclipse.ui.editors.wizards.UntitledTextFileWizard"); //$NON-NLS-1$
    PROJECT_WIZARD_ID
        .add("org.zend.php.framework.ui.wizards.NewZendItemWizard"); //$NON-NLS-1$

    PROJECT_WIZARD_ID
        .add("com.zend.php.ui.wizards.wizards.RemoteFolderWizard"); //$NON-NLS-1$
    PROJECT_WIZARD_ID.add("org.eclipse.php.wst.jsdt.ui.NewJSWizard"); //$NON-NLS-1$
    PROJECT_WIZARD_ID
        .add("org.eclipse.mylyn.tasks.ui.wizards.new.repository.task"); //$NON-NLS-1$
    PROJECT_WIZARD_ID.add("com.zend.php.phpunit.wizards.TestCaseWizard"); //$NON-NLS-1$
    PROJECT_WIZARD_ID.add("com.zend.php.phpunit.wizards.TestSuiteWizard"); //$NON-NLS-1$
  }
  private final IAction newExampleAction;
  private final IAction newProjectAction;

  private boolean enabled = true;
  private boolean isProject = true;

  /**
   * Creates a new wizard shortcut menu for the IDE.
   *
   * @param window
   *            the window containing the menu
   * @param isProject
   */
  public NewWizardMenu(IWorkbenchWindow window, boolean isProject) {
    this(window, null, isProject);

  }

  /**
   * Creates a new wizard shortcut menu for the IDE.
   *
   * @param window
   *            the window containing the menu
   * @param id
   *            the identifier for this contribution item
   * @param isProject
   */
  public NewWizardMenu(IWorkbenchWindow window, String id, boolean isProject) {
    super(window, id);
    newExampleAction = new NewExampleAction(window);
    newProjectAction = new NewProjectAction(window);
    this.isProject = isProject;
  }

  /**
   * Removes all listeners from the containing workbench window.
   * <p>
   * This method should only be called if the shortcut menu is created with
   * <code>register = true</code>.
   * </p>
   *
   * @deprecated has no effect
   */
  public void deregisterListeners() {
    // do nothing
  }

  /**
   * Return whether or not any examples are in the current install.
   *
   * @return boolean
   */
  private boolean hasExamples() {
    boolean hasCategory = registryHasCategory(WizardsRegistryReader.FULL_EXAMPLES_WIZARD_CATEGORY);
    if (hasCategory) {
      IWizardCategory exampleCategory = WorkbenchPlugin
          .getDefault()
          .getNewWizardRegistry()
          .findCategory(
              WizardsRegistryReader.FULL_EXAMPLES_WIZARD_CATEGORY);
      return hasWizards(exampleCategory);
    }
    return false;
  }

  private boolean hasWizards(IWizardCategory category) {
    IWizardDescriptor[] wizards = category.getWizards();
    if (wizards.length > 0) {
      for (int i = 0; i < wizards.length; i++) {
        if (!WorkbenchActivityHelper.filterItem(wizards[i])) {
          return true;
        }
      }
    }
    IWizardCategory[] categories = category.getCategories();
    for (int i = 0; i < categories.length; i++) {
      if (hasWizards(categories[i])) {
        return true;
      }
    }
    return false;
  }

  /*
   * (non-Javadoc)
   *
   * @see
   * org.eclipse.ui.actions.BaseNewWizardMenu#addItems(org.eclipse.jface.action
   * .IContributionManager)
   */
  protected void addItems(List list) {
    ArrayList shortCuts = new ArrayList();
    addShortcuts(shortCuts);

    for (Iterator iterator = shortCuts.iterator(); iterator.hasNext();) {
      Object curr = iterator.next();
      if (curr instanceof ActionContributionItem
          && isNewProjectWizardAction(((ActionContributionItem) curr)
              .getAction())) {
        iterator.remove();
        // list.add(curr);
      }
    }
    list.add(new ActionContributionItem(newProjectAction));
    list.add(new Separator());

    shortCuts = sortShortcuts(shortCuts);
    if (!isProject) {
      if (!shortCuts.isEmpty()) {
        list.addAll(shortCuts);
        list.add(new Separator());
      }
    }
    if (hasExamples()) {
      list.add(new ActionContributionItem(newExampleAction));
      list.add(new Separator());
    }
    list.add(new ActionContributionItem(getShowDialogAction()));
  }

  private ArrayList sortShortcuts(ArrayList shortCuts) {
    ArrayList result = new ArrayList();
    for (String id : PROJECT_WIZARD_ID) {
      for (Iterator iterator = shortCuts.iterator(); iterator.hasNext();) {
        Object curr = iterator.next();
        if (curr instanceof ActionContributionItem) {
          ActionContributionItem item = (ActionContributionItem) curr;
          if (item.getAction() instanceof NewWizardShortcutAction) {
            NewWizardShortcutAction action = (NewWizardShortcutAction) item
                .getAction();
            if (id.equals(action.getWizardDescriptor().getId())) {
              result.add(item);
              iterator.remove();
            }
          }
        }
      }
    }
    result.addAll(shortCuts);
    return result;
  }

  private boolean isNewProjectWizardAction(IAction action) {
    if (action instanceof NewWizardShortcutAction) {
      IWizardDescriptor wizardDescriptor = ((NewWizardShortcutAction) action)
          .getWizardDescriptor();
      String[] tags = wizardDescriptor.getTags();
      for (int i = 0; i < tags.length; i++) {
        if (WorkbenchWizardElement.TAG_PROJECT.equals(tags[i])) {
          return true;
        }
      }
    }
    return false;
  }

  /*
   * (non-Javadoc) Method declared on IContributionItem.
   */
  public boolean isEnabled() {
    return enabled;
  }

  /**
   * Sets the enabled state of the receiver.
   *
   * @param enabledValue
   *            if <code>true</code> the menu is enabled; else it is disabled
   */
  public void setEnabled(boolean enabledValue) {
    this.enabled = enabledValue;
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.ui.actions.BaseNewWizardMenu#getContributionItems()
   */
  protected IContributionItem[] getContributionItems() {
    if (isEnabled()) {
      return super.getContributionItems();
    }
    return new IContributionItem[0];
  }
}
TOP

Related Classes of org.eclipse.php.internal.ui.actions.NewWizardMenu

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.