Package org.eclipse.php.internal.ui.projectoutlineview

Source Code of org.eclipse.php.internal.ui.projectoutlineview.ProjectOutlinePart$ProjectOutlineProblemTreeViewer

/*******************************************************************************
* Copyright (c) 2009 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.projectoutlineview;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.dltk.core.DLTKCore;
import org.eclipse.dltk.core.IModelElement;
import org.eclipse.dltk.core.IScriptProject;
import org.eclipse.dltk.internal.ui.navigator.ScriptExplorerLabelProvider;
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.ModelElementSorter;
import org.eclipse.dltk.ui.PreferenceConstants;
import org.eclipse.dltk.ui.viewsupport.ProblemTreeViewer;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.viewers.TreeSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.php.internal.ui.PHPUIMessages;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IPartListener;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.contexts.IContextService;

/**
* Project Outline for the php perspective, it is based on the
* {@link ScriptExplorerPart} Registration to the page part (editor) is done to
* change the project context
*
* @author Roy, 2008
* @version 2.0 (by NirC, 2008)
*/
public class ProjectOutlinePart extends ScriptExplorerPart implements
    IPartListener {

  @Override
  public ProjectOutlineContentProvider createContentProvider() {
    boolean showCUChildren = DLTKUIPlugin.getDefault().getPreferenceStore()
        .getBoolean(PreferenceConstants.SHOW_SOURCE_MODULE_CHILDREN);

    return new ProjectOutlineContentProvider(showCUChildren) {
      protected IPreferenceStore getPreferenceStore() {
        return DLTKUIPlugin.getDefault().getPreferenceStore();
      }
    };

  }

  @Override
  public String getTitleToolTip() {
    return PHPUIMessages.PHPProjectOutline_title_tooltip;
  }

  @Override
  protected ScriptExplorerLabelProvider createLabelProvider() {
    final IPreferenceStore store = DLTKUIPlugin.getDefault()
        .getPreferenceStore();

    return new ProjectOutlineLabelProvider(getContentProvider(), store);
  }

  @Override
  protected ScriptExplorerActionGroup getActionGroup() {
    return new PHPProjectOutlineActionGroup(this);
  }

  /*
   * (non-Javadoc)
   *
   * @see
   * org.eclipse.dltk.internal.ui.scriptview.ScriptExplorerPart#createPartControl
   * (org.eclipse.swt.widgets.Composite)
   */
  @Override
  public void createPartControl(Composite parent) {
    super.createPartControl(parent);

    // register this view to the page
    getSite().getPage().addPartListener(this);

    selectProject(null);
    activateContext();
  }

  /**
   * Activate a context that this view uses. It will be tied to this view
   * activation events and will be removed when the view is disposed.
   */
  private void activateContext() {
    IContextService contextService = (IContextService) getSite()
        .getService(IContextService.class);
    contextService.activateContext("org.eclipse.php.ui.contexts.window"); //$NON-NLS-1$
  }

  @Override
  protected void setComparator() {
    getTreeViewer().setComparator(new ModelElementSorter());

  }

  private void setInputAsEditor(IScriptProject scriptProject) {
    final TreeViewer treeViewer = getTreeViewer();
    if (null == treeViewer.getInput()
        || !treeViewer.getInput().equals(scriptProject)) {
      treeViewer.setInput(scriptProject);
    }
  }

  private void setInputAsEditor(IEditorPart editor) {
    setInputAsEditor((IScriptProject) getInput(editor));
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.dltk.internal.ui.scriptview.ScriptExplorerPart#dispose()
   */
  @Override
  public void dispose() {
    // unregister to the page
    getSite().getPage().removePartListener(this);

    super.dispose();
  }

  private Object getInput(IEditorPart editor) {

    final IEditorInput editorInput = editor.getEditorInput();
    final IFile file = (IFile) editorInput.getAdapter(IFile.class);
    if (file != null) {
      final IProject project = file.getProject();
      return DLTKCore.create(project);
    }
    return null;
  }

  public void partActivated(IWorkbenchPart part) {
    selectProject(part);

  }

  private void selectProject(IWorkbenchPart part) {
    IEditorPart editor = getSite().getPage().getActiveEditor();

    if (editor != null) {
      setInputAsEditor(editor);
    } else if (part instanceof ScriptExplorerPart) {
      setInputAsExplorerProject(part);
      return;
    }
  }

  private void setInputAsExplorerProject(IWorkbenchPart part) {
    final TreeSelection input = (TreeSelection) ((ScriptExplorerPart) part)
        .getTreeViewer().getSelection();
    IScriptProject scriptProject = null;
    // getting selected project (from ScriptExplorerPart selection.
    if (input.getFirstElement() instanceof IModelElement) {
      scriptProject = (IScriptProject) ((IModelElement) input
          .getFirstElement())
          .getAncestor(IModelElement.SCRIPT_PROJECT);
    }

    if (null == scriptProject) {
      // If no project is selected - choosing the first project
      IProject[] projects = ResourcesPlugin.getWorkspace().getRoot()
          .getProjects();
      if (null != projects && projects.length != 0) {
        scriptProject = DLTKCore.create(projects[0]);
      }
    }

    setInputAsEditor(scriptProject);
    return;

  }

  public void partBroughtToTop(IWorkbenchPart part) {
  }

  public void partClosed(IWorkbenchPart part) {
  }

  public void partDeactivated(IWorkbenchPart part) {
  }

  public void partOpened(IWorkbenchPart part) {
    selectProject(part);
  }

  /**
   * Enable lazy loading for group elements
   */
  protected ProblemTreeViewer createViewer(Composite composite) {
    return new ProjectOutlineProblemTreeViewer(composite, SWT.MULTI
        | SWT.H_SCROLL | SWT.V_SCROLL);
  }

  protected class ProjectOutlineProblemTreeViewer extends
      PackageExplorerProblemTreeViewer {

    public ProjectOutlineProblemTreeViewer(Composite parent, int style) {
      super(parent, style);
    }

    /**
     * Always return true for elements to reduce model queries
     */
    protected boolean evaluateExpandableWithFilters(Object parent) {
      return false;
    }
  }
}
TOP

Related Classes of org.eclipse.php.internal.ui.projectoutlineview.ProjectOutlinePart$ProjectOutlineProblemTreeViewer

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.