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

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

/*******************************************************************************
* Copyright (c) 2009, 2014 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
*     Zend Technologies
*******************************************************************************/
/**
*
*/
package org.eclipse.php.internal.ui.actions;

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

import org.eclipse.dltk.internal.ui.actions.CCPActionGroup;
import org.eclipse.dltk.internal.ui.actions.NewWizardsActionGroup;
import org.eclipse.dltk.internal.ui.actions.refactoring.RefactorActionGroup;
import org.eclipse.dltk.internal.ui.scriptview.LayoutActionGroup;
import org.eclipse.dltk.internal.ui.scriptview.ScriptExplorerActionGroup;
import org.eclipse.dltk.internal.ui.scriptview.ScriptExplorerPart;
import org.eclipse.dltk.ui.DLTKUIPlugin;
import org.eclipse.dltk.ui.PreferenceConstants;
import org.eclipse.dltk.ui.actions.GenerateActionGroup;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.OpenStrategy;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.viewers.*;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.IViewSite;
import org.eclipse.ui.actions.ActionGroup;
import org.eclipse.wst.jsdt.core.IJavaScriptElement;
import org.eclipse.wst.jsdt.ui.actions.OpenAction;

/**
* @author nir.c PHPExplorerActionGroup class extends DLTK's
*         ScriptExplorerActionGroup, His purpose is to add "include path"
*         actions to the popUp menu, similar to "build path" actions.
*
*/
public class PHPExplorerActionGroup extends ScriptExplorerActionGroup {
  private PHPRefactorActionGroup phpRefactorActionGroup;
  private NavigateActionGroup fNavigateActionGroup;
  private ViewActionGroup fViewActionGroup;

  public PHPExplorerActionGroup(ScriptExplorerPart part) {
    super(part);
    removeWrongWorkingSetFilter(part);
  }

  /**
   * bug 329194: Changing working set show blank explorer. Now there are two
   * working set filters,and the second is not updated when change working
   * set.So remove the second one.
   *
   * @param part
   */
  private void removeWrongWorkingSetFilter(ScriptExplorerPart part) {
    ViewerFilter filter = super.getWorkingSetActionGroup().getFilterGroup()
        .getWorkingSetFilter();
    ViewerFilter[] filters = part.getTreeViewer().getFilters();
    List<ViewerFilter> filterList = new ArrayList<ViewerFilter>();
    for (int i = 0; i < filters.length; i++) {
      ViewerFilter viewerFilter = filters[i];
      if (viewerFilter != filter) {
        filterList.add(viewerFilter);
      }
    }
    part.getTreeViewer().setFilters(
        filterList.toArray(new ViewerFilter[filterList.size()]));
  }

  /*
   * (non-Javadoc)
   *
   * @see
   * org.eclipse.dltk.internal.ui.actions.CompositeActionGroup#setGroups(org
   * .eclipse.ui.actions.ActionGroup[])
   */
  @Override
  protected void setGroups(ActionGroup[] groups) {
    // aggregate the PHP Explorer actions
    final ArrayList<ActionGroup> filtered = new ArrayList<ActionGroup>(
        groups.length - 1);
    for (int i = 0; i < groups.length; i++) {
      if (groups[i] instanceof NewWizardsActionGroup) {
        filtered.add(new PHPNewWizardsActionGroup(getPart().getSite()));
      } else if (!(groups[i] instanceof LayoutActionGroup
          || groups[i] instanceof GenerateActionGroup
          || groups[i] instanceof RefactorActionGroup || groups[i] instanceof CCPActionGroup)) {
        // use pdt's NavigateActionGroup instead of dltk's
        if (groups[i] instanceof org.eclipse.dltk.internal.ui.actions.NavigateActionGroup) {
          groups[i].dispose();
          fNavigateActionGroup = new NavigateActionGroup(getPart());
          groups[i] = fNavigateActionGroup;
        }

        IPropertyChangeListener workingSetListener = new IPropertyChangeListener() {
          public void propertyChange(PropertyChangeEvent event) {
            doWorkingSetChanged(event);
          }
        };

        if (groups[i] instanceof org.eclipse.dltk.internal.ui.workingsets.ViewActionGroup) {
          groups[i].dispose();
          fViewActionGroup = new ViewActionGroup(getPart()
              .getRootMode(), workingSetListener, getPart()
              .getSite());

          fViewActionGroup.fillFilters(getPart().getTreeViewer());
          groups[i] = fViewActionGroup;
        }
        filtered.add(groups[i]);
      }
    }
    phpRefactorActionGroup = new PHPRefactorActionGroup(getPart());
    filtered.add(phpRefactorActionGroup);
    filtered.add(new GenerateIncludePathActionGroup(getPart()));
    filtered.add(new LibraryFolderActionGroup(getPart()));
    filtered.add(new NamespaceGroupingActionGroup(getPart().getTreeViewer()));
    filtered.add(new PHPFileOperationActionGroup(getPart()));

    super.setGroups(filtered.toArray(new ActionGroup[filtered.size()]));
  }

  protected void restoreFilterAndSorterState(IMemento memento) {
    super.restoreFilterAndSorterState(memento);
    fViewActionGroup.restoreState(memento);

  }

  protected void saveFilterAndSorterState(IMemento memento) {
    super.saveFilterAndSorterState(memento);
    fViewActionGroup.saveState(memento);
  }

  /*
   * (non-Javadoc)
   *
   * @see
   * org.eclipse.dltk.internal.ui.scriptview.ScriptExplorerActionGroup#handleOpen
   * (org.eclipse.jface.viewers.OpenEvent)
   */
  @Override
  protected void handleOpen(OpenEvent event) {
    // this code dispatches the selection from javascript library to JS open
    // action
    ISelection selection = event.getSelection();
    if (selection instanceof ITreeSelection) {
      ITreeSelection treeSelection = (ITreeSelection) selection;
      Object firstElement = treeSelection.getFirstElement();
      if (firstElement instanceof IJavaScriptElement) {
        // it's JS element, follow opening JS editor
        ScriptExplorerPart part = getPart();
        IViewSite viewSite = part.getViewSite();
        OpenAction openAction = new OpenAction(viewSite);
        if (openAction != null && openAction.isEnabled()) {
          openAction.run();
          return;
        }
      }
    }
    // use our action to do the open operation
    IAction openAction = fNavigateActionGroup.getOpenAction();
    if (openAction != null && openAction.isEnabled()) {
      openAction.run();
      return;
    }

  }

  @Override
  protected void setGlobalActionHandlers(IActionBars actionBars) {
    super.setGlobalActionHandlers(actionBars);
    phpRefactorActionGroup.retargetFileMenuActions(actionBars);
  }

  // ---- Key board and mouse handling
  // ------------------------------------------------------------

  /**
   * this method call ScriptExplorerActionGroup.handleDoubleClick(event) at
   * most cases, except fNavigateActionGroup relative operation
   */
  protected void handleDoubleClick(DoubleClickEvent event) {
    TreeViewer viewer = getPart().getTreeViewer();
    IStructuredSelection selection = (IStructuredSelection) event
        .getSelection();
    Object element = selection.getFirstElement();
    if (viewer.isExpandable(element)) {
      if (doubleClickGoesInto()) {
        super.handleDoubleClick(event);
      } else {
        IAction openAction = fNavigateActionGroup.getOpenAction();
        if (openAction != null
            && openAction.isEnabled()
            && OpenStrategy.getOpenMethod() == OpenStrategy.DOUBLE_CLICK)
          return;
        if (selection instanceof ITreeSelection) {
          TreePath[] paths = ((ITreeSelection) selection)
              .getPathsFor(element);
          for (int i = 0; i < paths.length; i++) {
            viewer.setExpandedState(paths[i],
                !viewer.getExpandedState(paths[i]));
          }
        } else {
          viewer.setExpandedState(element,
              !viewer.getExpandedState(element));
        }
      }
    } else {
      super.handleDoubleClick(event);
    }
  }

  /**
   * copy from ScriptExplorerActionGroup
   *
   * @return
   */
  private boolean doubleClickGoesInto() {
    return PreferenceConstants.DOUBLE_CLICK_GOES_INTO.equals(DLTKUIPlugin
        .getDefault().getPreferenceStore()
        .getString(PreferenceConstants.DOUBLE_CLICK));
  }

  public ViewActionGroup getWorkingSetActionGroup() {
    return fViewActionGroup;
  }

}
TOP

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

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.