Package org.eclipse.php.internal.ui.folding

Source Code of org.eclipse.php.internal.ui.folding.PHPFoldingStructureProviderProxy

/*******************************************************************************
* 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.folding;

import org.eclipse.jface.text.source.projection.IProjectionListener;
import org.eclipse.jface.text.source.projection.ProjectionViewer;
import org.eclipse.php.internal.ui.PHPUiPlugin;

/**
* A proxy IProjectionListener and IStructuredTextFoldingProvider for the PHP
* code folding extentions. This proxy checks the
* PHPFoldingStructureProviderRegistry for the current IProjectionListener and
* IStructuredTextFoldingProvider and propogate the request to them.
*
* @author shalom
*/
public class PHPFoldingStructureProviderProxy implements IProjectionListener,
    IStructuredTextFoldingProvider {

  private IStructuredTextFoldingProvider currentFoldingProvider;

  public PHPFoldingStructureProviderProxy() {
    currentFoldingProvider = PHPUiPlugin.getDefault()
        .getFoldingStructureProviderRegistry()
        .getCurrentFoldingProvider();
  }

  /**
   * Tells this listener that projection has been enabled.
   */
  public void projectionEnabled() {
    IProjectionListener projectionListener = getProjectionListener();
    if (projectionListener != null) {
      projectionListener.projectionEnabled();
    }
  }

  /**
   * Tells this listener that projection has been disabled.
   */
  public void projectionDisabled() {
    IProjectionListener projectionListener = getProjectionListener();
    if (projectionListener != null) {
      projectionListener.projectionDisabled();
    }
  }

  /**
   * Installs this structure provider on the given viewer. Implementations
   * should listen to the projection events generated by <code>viewer</code>
   * and enable / disable generation of projection structure accordingly.
   *
   * @param viewer
   *            the projection viewer that displays the annotations created by
   *            this structure provider
   */
  public void install(ProjectionViewer viewer) {
    IStructuredTextFoldingProvider foldingProvider = getFoldingProvider();
    if (foldingProvider != null) {
      foldingProvider.install(viewer);
    }
  }

  /**
   * Uninstalls this structure provider. Any references to viewers should be
   * cleared.
   */
  public void uninstall() {
    IStructuredTextFoldingProvider foldingProvider = getFoldingProvider();
    if (foldingProvider != null) {
      foldingProvider.uninstall();
    }
  }

  /**
   * Initialize this provider with the correct document. Assumes projection is
   * enabled. (otherwise, only install would have been called)
   */
  public void initialize() {
    IStructuredTextFoldingProvider foldingProvider = getFoldingProvider();
    if (foldingProvider != null) {
      foldingProvider.initialize();
    }
  }

  // Returns the current IStructuredTextFoldingProvider
  private IStructuredTextFoldingProvider getFoldingProvider() {
    return currentFoldingProvider;
  }

  // Returns the current IProjectionListener or null, if the current folding
  // provider is not a projection listener.
  private IProjectionListener getProjectionListener() {
    Object obj = getFoldingProvider();
    if (obj instanceof IProjectionListener) {
      return (IProjectionListener) obj;
    }
    return null;
  }

}
TOP

Related Classes of org.eclipse.php.internal.ui.folding.PHPFoldingStructureProviderProxy

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.