Package org.mj.eclipse.reporting.classpath

Source Code of org.mj.eclipse.reporting.classpath.Editor

/**
* Copyright (c) 2008, Mounir Jarraï
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*    1. Redistributions of source code must retain the above copyright
*       notice, this list of conditions and the following disclaimer.
*    2. Redistributions in binary form must reproduce the above copyright
*       notice, this list of conditions and the following disclaimer in the
*       documentation and/or other materials provided with the distribution.
*    3. All advertising materials mentioning features or use of this software
*       must display the following acknowledgement:
*      This product includes software developed by Mounir Jarraï
*        and its contributors.
*    4. Neither the name Mounir Jarraï nor the names of its contributors may
*       be used to endorse or promote products derived from this software
*       without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY MOUNIR JARRAÏ ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL MOUNIR JARRAÏ BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
package org.mj.eclipse.reporting.classpath;

import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.gef.ContextMenuProvider;
import org.eclipse.gef.DefaultEditDomain;
import org.eclipse.gef.GraphicalViewer;
import org.eclipse.gef.MouseWheelHandler;
import org.eclipse.gef.MouseWheelZoomHandler;
import org.eclipse.gef.SnapToGeometry;
import org.eclipse.gef.SnapToGrid;
import org.eclipse.gef.editparts.ScalableFreeformRootEditPart;
import org.eclipse.gef.editparts.ZoomManager;
import org.eclipse.gef.palette.MarqueeToolEntry;
import org.eclipse.gef.palette.PaletteGroup;
import org.eclipse.gef.palette.PaletteRoot;
import org.eclipse.gef.palette.PaletteStack;
import org.eclipse.gef.palette.SelectionToolEntry;
import org.eclipse.gef.ui.actions.GEFActionConstants;
import org.eclipse.gef.ui.actions.ZoomInAction;
import org.eclipse.gef.ui.actions.ZoomOutAction;
import org.eclipse.gef.ui.parts.GraphicalEditorWithFlyoutPalette;
import org.eclipse.gef.ui.parts.ScrollingGraphicalViewer;
import org.eclipse.gef.ui.rulers.RulerComposite;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.actions.ActionFactory;
import org.mj.eclipse.reporting.classpath.actions.layout.LayoutActions;
import org.mj.eclipse.reporting.classpath.mvc.controllers.DiagramPartFactory;
import org.mj.eclipse.reporting.classpath.mvc.models.IDiagramElementsFactory;

/**
* @author Mounir Jarraï
*
*/
public final class Editor extends GraphicalEditorWithFlyoutPalette {

  public final static String ID = "org.mj.eclipse.reporting.classpath.Editor";

  private final static Logger logger = Logger.getLogger(Editor.class.getName());

  private RulerComposite rulerComposite;

  public Editor() {
    setEditDomain(new DefaultEditDomain(this));
    if (logger.isLoggable(Level.FINE)) {
      //$ANALYSIS-IGNORE
      logger.fine("Created");
    }
  }

  /**
   * @see org.eclipse.gef.ui.parts.GraphicalEditorWithFlyoutPalette#getGraphicalControl()
   */
  protected Control getGraphicalControl() {
    return rulerComposite;
  }

  /**
   * @see org.eclipse.gef.ui.parts.GraphicalEditor#createGraphicalViewer(org.eclipse.swt.widgets.Composite)
   */
  @Override
  protected void createGraphicalViewer(Composite parent) {
    rulerComposite = new RulerComposite(parent, SWT.NONE);
    super.createGraphicalViewer(rulerComposite);

    ScrollingGraphicalViewer graphicalViewer = (ScrollingGraphicalViewer) getGraphicalViewer();
    rulerComposite.setGraphicalViewer(graphicalViewer);
  }

  /**
   * @see org.eclipse.gef.ui.parts.GraphicalEditor#configureGraphicalViewer()
   */
  @Override
  protected void configureGraphicalViewer() {
    super.configureGraphicalViewer();

    getGraphicalViewer().setProperty(SnapToGrid.PROPERTY_GRID_VISIBLE, Boolean.FALSE);
    getGraphicalViewer().setProperty(SnapToGrid.PROPERTY_GRID_ENABLED, Boolean.FALSE);
    getGraphicalViewer().setProperty(SnapToGeometry.PROPERTY_SNAP_ENABLED, Boolean.FALSE);
    getGraphicalViewer().setProperty(MouseWheelHandler.KeyGenerator.getKey(SWT.MOD1), MouseWheelZoomHandler.SINGLETON);

    // Root editpart: for Zooming and negative positions
    ScalableFreeformRootEditPart root = new ScalableFreeformRootEditPart();

    List<String> zoomLevels = new ArrayList<String>(3);

    zoomLevels.add(ZoomManager.FIT_ALL);
    zoomLevels.add(ZoomManager.FIT_WIDTH);
    zoomLevels.add(ZoomManager.FIT_HEIGHT);
    root.getZoomManager().setZoomLevelContributions(zoomLevels);

    double[] accessibleZoomLevels = new double[100];
    double start = .02;
    for (int i = 0; i < accessibleZoomLevels.length; i++) {
      accessibleZoomLevels[i] = start;
      start += (start < 1 ) ? .02 : (start < 3) ?.1: .25;
    }
    root.getZoomManager().setZoomLevels(accessibleZoomLevels);

    IAction zoomIn = new ZoomInAction(root.getZoomManager());
    IAction zoomOut = new ZoomOutAction(root.getZoomManager());
    getActionRegistry().registerAction(zoomIn);
    getActionRegistry().registerAction(zoomOut);
    getSite().getKeyBindingService().registerAction(zoomIn);
    getSite().getKeyBindingService().registerAction(zoomOut);

    getGraphicalViewer().setRootEditPart(root);

    if (logger.isLoggable(Level.FINE)) {
      //$ANALYSIS-IGNORE
      logger.fine("GraphicalViewer configured");
    }
  }

  /**
   * @see org.eclipse.gef.ui.parts.GraphicalEditor#initializeGraphicalViewer()
   */
  @Override
  protected void initializeGraphicalViewer() {
    super.initializeGraphicalViewer();
    //Sets the model
    GraphicalViewer graphicalViewer = getGraphicalViewer();
    graphicalViewer.setEditPartFactory(new DiagramPartFactory());
    graphicalViewer.setContents(getModel());

    setPartName(getModel().getRootProject().getName());
   
    // Add contextuel Menu
    LayoutActions layoutActions = new LayoutActions(this);
    ContextMenuProvider contextMenuProvider = new ContextMenuProvider(getGraphicalViewer()) {
      /**
       * @see org.eclipse.gef.ContextMenuProvider#buildContextMenu(org.eclipse.jface.action.IMenuManager)
       */
      @Override
      public void buildContextMenu(IMenuManager menuManager) {
        GEFActionConstants.addStandardActionGroups(menuManager);

        if (menuManager.isEnabled()) {

          // Undo, Redo action
          menuManager.appendToGroup(GEFActionConstants.GROUP_UNDO, getActionRegistry().getAction(ActionFactory.UNDO.getId()));
          menuManager.appendToGroup(GEFActionConstants.GROUP_UNDO, getActionRegistry().getAction(ActionFactory.REDO.getId()));

          // Layout actions
          menuManager.appendToGroup(GEFActionConstants.GROUP_REST, getActionRegistry().getAction(
              LayoutActions.DIRECTED_GRAPH_LAYOUT_ACTION_ID));
          menuManager.appendToGroup(GEFActionConstants.GROUP_REST, getActionRegistry().getAction(
              LayoutActions.GRID_LAYOUT_ACTION_ID));
          menuManager.appendToGroup(GEFActionConstants.GROUP_REST, getActionRegistry().getAction(
              LayoutActions.HORIZONTAL_LAYOUT_ACTION_ID));
          menuManager.appendToGroup(GEFActionConstants.GROUP_REST, getActionRegistry().getAction(
              LayoutActions.HORIZONTAL_SHIFT_LAYOUT_ACTION_ID));
          menuManager.appendToGroup(GEFActionConstants.GROUP_REST, getActionRegistry().getAction(
              LayoutActions.HORIZONTAL_TREE_LAYOUT_ACTION_ID));
          menuManager.appendToGroup(GEFActionConstants.GROUP_REST, getActionRegistry().getAction(
              LayoutActions.RADIAL_LAYOUT_ACTION_ID));
          menuManager.appendToGroup(GEFActionConstants.GROUP_REST, getActionRegistry().getAction(
              LayoutActions.SPRING_LAYOUT_ACTION_ID));
          menuManager.appendToGroup(GEFActionConstants.GROUP_REST, getActionRegistry().getAction(
              LayoutActions.TREE_LAYOUT_ACTION_ID));
          menuManager.appendToGroup(GEFActionConstants.GROUP_REST, getActionRegistry().getAction(
              LayoutActions.VERTICAL_LAYOUT_ACTION_ID));
        }
      }

    };
    getGraphicalViewer().setContextMenu(contextMenuProvider);
    layoutActions.applyDefaultLayout();

    if (logger.isLoggable(Level.FINE)) {
      //$ANALYSIS-IGNORE
      logger.fine("GraphicalViewer initialized");
    }
  }

  private IDiagramElementsFactory getModel() {
    IEditorInput input = getEditorInput();
    if (input instanceof OnMemoryEditorInput) {
      return ((OnMemoryEditorInput) input).getModel();
    }
    return null;
  }

  @Override
  public void doSave(IProgressMonitor monitor) {

  }

  /**
   * @see org.eclipse.gef.ui.parts.GraphicalEditor#isDirty()
   */
  @Override
  public boolean isDirty() {
    return super.isDirty();
  }

  /**
   * @see org.eclipse.gef.ui.parts.GraphicalEditor#isSaveAsAllowed()
   */
  @Override
  public boolean isSaveAsAllowed() {
    return false;
  }

  /**
   * @see org.eclipse.ui.part.EditorPart#isSaveOnCloseNeeded()
   */
  @Override
  public boolean isSaveOnCloseNeeded() {
    return false;
  }

  @Override
  protected PaletteRoot getPaletteRoot() {
    PaletteStack stackPalette = new PaletteStack("Palette Stack", "no desc !", null);
    stackPalette.add(new SelectionToolEntry());
    stackPalette.add(new MarqueeToolEntry());
    if (logger.isLoggable(Level.FINE)) {
      //$ANALYSIS-IGNORE
      logger.fine("Root palette created");
    }
    PaletteGroup group = new PaletteGroup("creation tools");
    group.add(stackPalette);
    PaletteRoot rootPalette = new PaletteRoot();
    rootPalette.add(group);
    return rootPalette;
  }

}
TOP

Related Classes of org.mj.eclipse.reporting.classpath.Editor

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.