Package org.springframework.ide.eclipse.config.ui.editors

Source Code of org.springframework.ide.eclipse.config.ui.editors.SpringConfigEditorContributor

/*******************************************************************************
*  Copyright (c) 2012 VMware, Inc.
*  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:
*      VMware, Inc. - initial API and implementation
*******************************************************************************/
package org.springframework.ide.eclipse.config.ui.editors;

import org.eclipse.gef.commands.CommandStack;
import org.eclipse.gef.editparts.ZoomManager;
import org.eclipse.gef.ui.actions.ActionRegistry;
import org.eclipse.jface.action.GroupMarker;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IEditorActionBarContributor;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.part.MultiPageEditorActionBarContributor;
import org.eclipse.ui.texteditor.ITextEditor;
import org.eclipse.ui.texteditor.ITextEditorActionConstants;
import org.eclipse.wst.sse.ui.StructuredTextEditor;
import org.eclipse.wst.sse.ui.internal.ISourceViewerActionBarContributor;
import org.eclipse.wst.xml.ui.internal.tabletree.SourcePageActionContributor;
import org.springframework.ide.eclipse.config.graph.AbstractConfigGraphicalEditor;
import org.springframework.ide.eclipse.config.graph.actions.ExportAction;
import org.springframework.ide.eclipse.config.graph.actions.MultiPageZoomComboContributionItem;
import org.springframework.ide.eclipse.config.graph.actions.ToggleLayoutAction;
import org.springframework.ide.eclipse.config.ui.actions.ToggleMarkOccurrencesAction;

/**
* Manages the installation/deinstallation of global actions for multi-page
* editors. Responsible for the redirection of global actions to the active
* editor. Multi-page contributor replaces the contributors for the individual
* editors in the multi-page editor.
* @author Leo Dos Santos
* @author Christian Dupuis
* @author Terry Denney
*/
@SuppressWarnings("restriction")
public class SpringConfigEditorContributor extends MultiPageEditorActionBarContributor {

  private final String ID_GROUP = "springConfig"; //$NON-NLS-1$

  private AbstractConfigEditor configEditor;

  private IEditorPart activeEditorPart;

  private ToggleMarkOccurrencesAction occurrencesAction;

  private ToggleLayoutAction layoutAction;

  private MultiPageZoomComboContributionItem zoomCombo;

  protected IEditorActionBarContributor sourceViewerActionContributor;

  /**
   * Creates a multi-page contributor.
   */
  public SpringConfigEditorContributor() {
    super();
    sourceViewerActionContributor = new SourcePageActionContributor();
  }

  @Override
  public void contributeToToolBar(IToolBarManager toolBarManager) {
    occurrencesAction = new ToggleMarkOccurrencesAction();
    layoutAction = new ToggleLayoutAction();
    zoomCombo = new MultiPageZoomComboContributionItem(getPage());
    toolBarManager.add(new GroupMarker(ID_GROUP));
    toolBarManager.appendToGroup(ID_GROUP, occurrencesAction);
    toolBarManager.appendToGroup(ID_GROUP, layoutAction);
    toolBarManager.appendToGroup(ID_GROUP, zoomCombo);
    setActionEnablement();
  }

  @Override
  public void dispose() {
    if (sourceViewerActionContributor != null) {
      sourceViewerActionContributor.dispose();
    }
    if (occurrencesAction != null) {
      occurrencesAction.setActiveEditor(null);
    }
    super.dispose();
  }

  /**
   * Returns the action registered with the given text editor.
   * @return IAction or null if editor is null.
   */
  protected IAction getAction(ITextEditor editor, String actionID) {
    return (editor == null ? null : editor.getAction(actionID));
  }

  @Override
  public void init(IActionBars bars) {
    super.init(bars);
    if (bars != null && sourceViewerActionContributor != null) {
      sourceViewerActionContributor.init(bars, getPage());
    }
  }

  private void setActionEnablement() {
    occurrencesAction.setEnabled(activeEditorPart instanceof StructuredTextEditor);
    layoutAction.setEnabled(activeEditorPart instanceof AbstractConfigGraphicalEditor);
  }

  @Override
  public void setActiveEditor(IEditorPart part) {
    if (part instanceof AbstractConfigEditor && part != configEditor) {
      configEditor = (AbstractConfigEditor) part;
      occurrencesAction.setActiveEditor(configEditor);
    }
    updateActionBars();
    super.setActiveEditor(part);
  }

  /*
   * (non-JavaDoc) Method declared in
   * AbstractMultiPageEditorActionBarContributor.
   */
  @Override
  public void setActivePage(IEditorPart part) {
    if (activeEditorPart == part) {
      return;
    }

    if (activeEditorPart instanceof AbstractConfigGraphicalEditor) {
      // If leaving a graph page, clear the GEF command stack. This
      // ensures that graph pages can only undo/redo recent edits that
      // were performed in the page itself. All XML edits should remain
      // undo/redoable from the source and form pages.
      AbstractConfigGraphicalEditor editor = (AbstractConfigGraphicalEditor) activeEditorPart;
      CommandStack stack = (CommandStack) editor.getAdapter(CommandStack.class);
      stack.flush();
    }
    activeEditorPart = part;

    if (part instanceof StructuredTextEditor) {
      sourceViewerActionContributor.setActiveEditor(part);
      ((ISourceViewerActionBarContributor) sourceViewerActionContributor)
          .setViewerSpecificContributionsEnabled(true);
    }
    else {
      sourceViewerActionContributor.setActiveEditor(configEditor);
      ((ISourceViewerActionBarContributor) sourceViewerActionContributor)
          .setViewerSpecificContributionsEnabled(false);
    }
    updateActionBars();

    setActionEnablement();
    if (zoomCombo != null && configEditor != null) {
      zoomCombo.setZoomManager((ZoomManager) configEditor.getAdapter(ZoomManager.class));
    }
  }

  private void updateActionBars() {
    IActionBars actionBars = getActionBars();
    if (actionBars != null && configEditor != null) {
      if (activeEditorPart instanceof AbstractConfigGraphicalEditor) {
        AbstractConfigGraphicalEditor editor = (AbstractConfigGraphicalEditor) activeEditorPart;
        Object obj = editor.getAdapter(ActionRegistry.class);
        if (obj instanceof ActionRegistry) {
          ActionRegistry registry = (ActionRegistry) obj;
          actionBars.setGlobalActionHandler(ActionFactory.UNDO.getId(),
              registry.getAction(ActionFactory.UNDO.getId()));
          actionBars.setGlobalActionHandler(ActionFactory.REDO.getId(),
              registry.getAction(ActionFactory.REDO.getId()));
          actionBars.setGlobalActionHandler(ActionFactory.PRINT.getId(),
              registry.getAction(ActionFactory.PRINT.getId()));
          actionBars
              .setGlobalActionHandler(ActionFactory.EXPORT.getId(), registry.getAction(ExportAction.ID));
        }
      }
      else if (activeEditorPart instanceof SpringConfigGraphPage) {
        SpringConfigGraphPage editor = (SpringConfigGraphPage) activeEditorPart;
        Object obj = editor.getAdapter(ActionRegistry.class);
        if (obj instanceof ActionRegistry) {
          ActionRegistry registry = (ActionRegistry) obj;
          actionBars.setGlobalActionHandler(ActionFactory.UNDO.getId(), null);
          actionBars.setGlobalActionHandler(ActionFactory.REDO.getId(), null);
          actionBars.setGlobalActionHandler(ActionFactory.PRINT.getId(),
              registry.getAction(ActionFactory.PRINT.getId()));
          actionBars
              .setGlobalActionHandler(ActionFactory.EXPORT.getId(), registry.getAction(ExportAction.ID));
        }
      }
      else {
        ITextEditor editor = configEditor.getSourcePage();
        actionBars.setGlobalActionHandler(ActionFactory.UNDO.getId(),
            getAction(editor, ITextEditorActionConstants.UNDO));
        actionBars.setGlobalActionHandler(ActionFactory.REDO.getId(),
            getAction(editor, ITextEditorActionConstants.REDO));
        actionBars.setGlobalActionHandler(ActionFactory.PRINT.getId(), null);
        actionBars.setGlobalActionHandler(ActionFactory.EXPORT.getId(), null);
      }
      actionBars.updateActionBars();
    }
  }

}
TOP

Related Classes of org.springframework.ide.eclipse.config.ui.editors.SpringConfigEditorContributor

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.