Package com.intellij.openapi.graph.builder.util

Source Code of com.intellij.openapi.graph.builder.util.GraphViewUtil

/*
* Copyright (c) 2000-2006 JetBrains s.r.o. All Rights Reserved.
*/

package com.intellij.openapi.graph.builder.util;

import com.intellij.ide.DataManager;
import com.intellij.ide.structureView.StructureView;
import com.intellij.ide.structureView.StructureViewBuilder;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.fileEditor.FileEditor;
import com.intellij.openapi.graph.GraphManager;
import com.intellij.openapi.graph.base.Edge;
import com.intellij.openapi.graph.base.Node;
import com.intellij.openapi.graph.builder.actions.*;
import com.intellij.openapi.graph.builder.actions.export.ExportToFileAction;
import com.intellij.openapi.graph.builder.actions.layout.ApplyCurrentLayoutAction;
import com.intellij.openapi.graph.builder.actions.printing.PrintGraphAction;
import com.intellij.openapi.graph.builder.actions.printing.PrintPreviewAction;
import com.intellij.openapi.graph.view.*;
import com.intellij.openapi.graph.view.hierarchy.GroupNodeRealizer;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Condition;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import javax.swing.*;
import java.awt.*;
import java.util.List;
import java.util.Map;

public class GraphViewUtil {

  @NonNls public static String GRAPH_KEY = "GRAPH_KEY";

  @Nullable
  public static Object getData(final Graph2DView view, final String data) {
    DataProvider dataProvider = (DataProvider)view.getJComponent().getClientProperty(DataManager.CLIENT_PROPERTY_DATA_PROVIDER);
    if (dataProvider == null) return null;
    return dataProvider.getData(data);
  }

  public static Graph2DView createView(final DataProvider dataProvider) {
    final Graph2DView graph2DView = GraphManager.getGraphManager().createGraph2DView();

    addDataProvider(graph2DView, dataProvider);

    return graph2DView;
  }

  public static void addDataProvider(final Graph2DView graph2DView, @NotNull final DataProvider dataProvider) {
    DataProvider oldDataProvider = (DataProvider)graph2DView.getJComponent().getClientProperty(DataManager.CLIENT_PROPERTY_DATA_PROVIDER);
    CompositeDataProvider compositeDataProvider;
    if (oldDataProvider == null) {
      compositeDataProvider = new CompositeDataProvider();
      compositeDataProvider.add(createDefaultGraphDataProvider(graph2DView));
    } else if (oldDataProvider instanceof CompositeDataProvider) {
      compositeDataProvider = (CompositeDataProvider)oldDataProvider;
    } else {
      compositeDataProvider = new CompositeDataProvider();
      compositeDataProvider.add(oldDataProvider);
    }

    compositeDataProvider.add(dataProvider);

    graph2DView.getJComponent().putClientProperty(DataManager.CLIENT_PROPERTY_DATA_PROVIDER, compositeDataProvider);
  }

  private static DataProvider createDefaultGraphDataProvider(final Graph2DView graph2DView) {
    return new DataProvider() {
      @Nullable
      public Object getData(@NonNls String dataId) {
        if (GRAPH_KEY.equals(dataId)) return graph2DView.getGraph2D();

        return null;
      }
    };
  }

  public static List<Node> getSelectedNodes(final Graph2D graph) {
    return ContainerUtil.findAll(graph.getNodeArray(), new Condition<Node>() {
      public boolean value(final Node node) {
        return graph.getRealizer(node).isSelected();
      }
    });
  }

  public static List<Edge> getSelectedEdges(final Graph2D graph) {
    return ContainerUtil.findAll(graph.getEdgeArray(), new Condition<Edge>() {
      public boolean value(final Edge edge) {
        return graph.getRealizer(edge).isSelected();
      }
    });
  }

  public static NodeRealizer createNodeRealizer(@NonNls final String configuration, final NodeCellRenderer nodeCellRenderer) {
    final GenericNodeRealizer nodeRealizer = GraphManager.getGraphManager().createGenericNodeRealizer();

    GenericNodeRealizer.Factory factory = GenericNodeRealizer.Statics.getFactory();

    Map map = factory.createDefaultConfigurationMap();
    map.put(GenericNodeRealizer.Painter.class,
            GraphManager.getGraphManager().createNodeCellRendererPainter(nodeCellRenderer, NodeCellRendererPainter.USER_DATA_MAP));

    factory.addConfiguration(configuration, map);

    nodeRealizer.setConfiguration(configuration);

    nodeRealizer.setUserData(nodeCellRenderer);

    return nodeRealizer;
  }

  public static void setRenderedNodeSizes(final Graph2D graph, final Graph2DView view, final Node node) {
    NodeRealizer nodeRealizer = graph.getRealizer(node);

    if (nodeRealizer instanceof GenericNodeRealizer) {
      GenericNodeRealizer realizer = (GenericNodeRealizer)nodeRealizer;
      final Object o = realizer.getUserData();

      if (o instanceof NodeCellRenderer) {
        final Dimension size = ((NodeCellRenderer)o).getNodeCellRendererComponent(view, nodeRealizer, null, false).getPreferredSize();

        graph.setSize(nodeRealizer.getNode(), GraphManager.getGraphManager().createYDimension(size.width, size.height));
      }
    }

    if (nodeRealizer instanceof GroupNodeRealizer) {
      final GroupNodeRealizer groupNodeRealizer = (GroupNodeRealizer)nodeRealizer;
      if (groupNodeRealizer.isGroupClosed()) {
        final NodeLabel nodeLabel = groupNodeRealizer.getLabel();
        if (nodeLabel != null) {
          graph.setSize(node, nodeLabel.getWidth(), groupNodeRealizer.getHeight());
        }
      }
    }
  }

  public static JComponent createCommonToolbarPane(Graph2D graph) {
    DefaultActionGroup actions = getBasicToolbar(graph);

    final ActionToolbar actionToolbar = ActionManager.getInstance().createActionToolbar(ActionPlaces.UNKNOWN, actions, true);

    return actionToolbar.getComponent();
  }

  public static DefaultActionGroup getBasicToolbar(final Graph2D graph) {
    DefaultActionGroup actions = new DefaultActionGroup();

    actions.add(new ShowHideGridAction(graph));
    actions.add(new SnapToGridAction(graph));
    actions.addSeparator();

    actions.add(new ZoomInAction(graph));
    actions.add(new ZoomOutAction(graph));

    actions.add(new ActualZoomAction(graph));

    actions.add(new FitContentAction(graph));
    actions.addSeparator();

    actions.add(new ApplyCurrentLayoutAction(graph));
    actions.addSeparator();
    actions.add(new ExportToFileAction(graph));
    actions.add(new PrintGraphAction(graph));
    actions.add(new PrintPreviewAction(graph));
    actions.addSeparator();
    actions.add(new DeleteSelectionAction());

    return actions;
  }

  public static AnAction getCommonPopupActions() {
    return ActionManager.getInstance().getAction("Graph.DefaultGraphPopup");
  }

  public static void updateWorldRect(Graph2DView view) {
    Rectangle rectangle = getActualSize(view);

    final int x = (int)rectangle.getX() - 20;
    final int y = (int)rectangle.getY() - 20;
    final int width = (int)rectangle.getWidth() + 40;
    final int hight = (int)rectangle.getHeight() + 40;

    view.setWorldRect(x, y, width, hight);
  }

  public static Rectangle getActualSize(Graph2DView view) {
    return view.getGraph2D().getBoundingBox();
  }

  public static StructureViewBuilder createStructureViewBuilder(final Overview overview) {
    return new StructureViewBuilder() {

      @NotNull
      public StructureView createStructureView(final FileEditor fileEditor, Project project) {
        return new StructureView() {

          public FileEditor getFileEditor() {
            return fileEditor;
          }

          public boolean navigateToSelectedElement(boolean requestFocus) {
            return false;
          }

          public JComponent getComponent() {
            return overview.getJComponent();
          }

          public void dispose() {
          }

          public void centerSelectedRow() {
          }

          public void restoreState() {
          }

          public void storeState() {
          }
        };
      }
    };
  }
}
TOP

Related Classes of com.intellij.openapi.graph.builder.util.GraphViewUtil

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.