Package org.jgraph

Examples of org.jgraph.JGraph$GraphSelectionRedirector


    }

    private JGraph setupGraph() {
        // Construct Model and Graph
        GraphModel model = new DefaultGraphModel();
        JGraph graph = new JGraph(model);

        // Control-drag should clone selection
        graph.setCloneable(true);

        // Enable edit without final RETURN keystroke
        graph.setInvokesStopCellEditing(true);

        // When over a cell, jump to its default port (we only have one, anyway)
        graph.setJumpToDefaultPort(true);

        return graph;
    }
View Full Code Here


  public static void main(String[] args) {

    // Construct Model and Graph
    GraphModel model = new DefaultGraphModel();
    JGraph graph = new JGraph(model);

    // Control-drag should clone selection
    graph.setCloneable(true);

    // Enable edit without final RETURN keystroke
    graph.setInvokesStopCellEditing(true);

    // When over a cell, jump to its default port (we only have one, anyway)
    graph.setJumpToDefaultPort(true);

    // Insert all three cells in one call, so we need an array to store them
    DefaultGraphCell[] cells = new DefaultGraphCell[3];

    // Create Hello Vertex
    cells[0] = createVertex("Hello", 20, 20, 40, 20, null, false);

    // Create World Vertex
    cells[1] = createVertex("World", 140, 140, 40, 20, Color.ORANGE, true);

    // Create Edge
    DefaultEdge edge = new DefaultEdge();
    // Fetch the ports from the new vertices, and connect them with the edge
    edge.setSource(cells[0].getChildAt(0));
    edge.setTarget(cells[1].getChildAt(0));
    cells[2] = edge;

    // Set Arrow Style for edge
    int arrow = GraphConstants.ARROW_CLASSIC;
    GraphConstants.setLineEnd(edge.getAttributes(), arrow);
    GraphConstants.setEndFill(edge.getAttributes(), true);

    // Insert the cells via the cache, so they get selected
    graph.getGraphLayoutCache().insert(cells);

    // Show in Frame
    JFrame frame = new JFrame();
    frame.getContentPane().add(new JScrollPane(graph));
    //frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
View Full Code Here

    return createTransferable(graph);
  }

  protected Transferable createTransferable(JComponent c) {
    if (c instanceof JGraph) {
      JGraph graph = (JGraph) c;
      if (!graph.isSelectionEmpty()) {
        return createTransferable(graph, graph.getDescendants(graph
            .order(graph.getSelectionCells())));
      }
    }
    return null;
  }
View Full Code Here

    return new GraphTransferable(cells, viewAttributes, bounds, cs, pm);
  }

  protected void exportDone(JComponent comp, Transferable data, int action) {
    if (comp instanceof JGraph && data instanceof GraphTransferable) {
      JGraph graph = (JGraph) comp;
      if (action == TransferHandler.MOVE) {
        Object[] cells = ((GraphTransferable) data).getCells();
        graph.getGraphLayoutCache().remove(cells);
      }
      graph.getUI().updateHandle();
      graph.getUI().setInsertionLocation(null);
    }
  }
View Full Code Here

  // 3. Transfer is passed to importDataImpl for unsupported
  // dataflavors (becaue method may return false, see 1.)
  public boolean importData(JComponent comp, Transferable t) {
    try {
      if (comp instanceof JGraph) {
        JGraph graph = (JGraph) comp;
        GraphModel model = graph.getModel();
        GraphLayoutCache cache = graph.getGraphLayoutCache();
        if (t.isDataFlavorSupported(GraphTransferable.dataFlavor)
            && graph.isEnabled()) {
          // May be null
          Point p = graph.getUI().getInsertionLocation();

          // Get Local Machine Flavor
          Object obj = t
              .getTransferData(GraphTransferable.dataFlavor);
          GraphTransferable gt = (GraphTransferable) obj;

          // Get Transferred Cells
          Object[] cells = gt.getCells();

          // Check if all cells are in the model
          boolean allInModel = true;
          for (int i = 0; i < cells.length && allInModel; i++)
            allInModel = allInModel && model.contains(cells[i]);

          // Count repetitive inserts
          if (in == cells)
            inCount++;
          else
            inCount = (allInModel) ? 1 : 0;
          in = cells;

          // Delegate to handle
          if (p != null && in == out
              && graph.getUI().getHandle() != null) {
            int mod = (graph.getUI().getDropAction() == TransferHandler.COPY) ? InputEvent.CTRL_MASK
                : 0;
            graph.getUI().getHandle().mouseReleased(
                new MouseEvent(comp, 0, 0, mod, p.x, p.y, 1,
                    false));
            return false;
          }

          // Get more Transfer Data
          Rectangle2D bounds = gt.getBounds();
          Map nested = gt.getAttributeMap();
          ConnectionSet cs = gt.getConnectionSet();
          ParentMap pm = gt.getParentMap();

          // Move across models or via clipboard always clones
          if (!allInModel
              || p == null
              || alwaysReceiveAsCopyAction
              || graph.getUI().getDropAction() == TransferHandler.COPY) {

            // Translate cells
            double dx = 0, dy = 0;

            // Cloned via Drag and Drop
            if (nested != null) {
              if (p != null && bounds != null) {
                Point2D insert = graph.fromScreen(graph
                    .snap((Point2D) p.clone()));
                dx = insert.getX() - bounds.getX();
                dy = insert.getY() - bounds.getY();

                // Cloned via Clipboard
              } else {
                dx = inCount * graph.getGridSize();
                dy = inCount * graph.getGridSize();
              }
            }

            handleExternalDrop(graph, cells, nested, cs, pm, dx, dy);

            // Signal sender to remove only if moved between
            // different models
            return (graph.getUI().getDropAction() == TransferHandler.MOVE && !allInModel);
          }

          // We are dealing with a move across multiple views
          // of the same model
          else {

            // Moved via Drag and Drop
            if (p != null) {
              // Scale insertion location
              Point2D insert = graph.fromScreen(graph
                  .snap(new Point(p)));

              // Compute translation vector and translate all
              // attribute maps.
              if (bounds != null && nested != null) {
                double dx = insert.getX() - bounds.getX();
                double dy = insert.getY() - bounds.getY();
                AttributeMap.translate(nested.values(), dx, dy);
              } else if (bounds == null) {

                // Prevents overwriting view-local
                // attributes
                // for known cells. Note: This is because
                // if bounds is null, the caller wants
                // to signal that the bounds were
                // not available, which is typically the
                // case if no graph layout cache
                // is at hand. To avoid overriding the
                // local attributes such as the bounds
                // with the default bounds from the model,
                // we remove all attributes that travel
                // along with the transferable. (Since
                // all cells are already in the model
                // no information is lost by doing this.)
                double gs2 = 2 * graph.getGridSize();
                nested = new Hashtable();
                Map emptyMap = new Hashtable();
                for (int i = 0; i < cells.length; i++) {

                  // This also gives us the chance to
                  // provide useful default location and
                  // resize if there are no useful bounds
                  // that travel along with the cells.
                  if (!model.isEdge(cells[i])
                      && !model.isPort(cells[i])) {

                    // Check if there are useful bounds
                    // defined in the model, otherwise
                    // resize,
                    // because the view does not yet exist.
                    Rectangle2D tmp = graph
                        .getCellBounds(cells[i]);
                    if (tmp == null)
                      tmp = GraphConstants
                          .getBounds(model
                              .getAttributes(cells[i]));

                    // Clone the rectangle to force a
                    // repaint
                    if (tmp != null)
                      tmp = (Rectangle2D) tmp.clone();

                    Hashtable attrs = new Hashtable();
                    Object parent = model
                        .getParent(cells[i]);
                    if (tmp == null) {
                      tmp = new Rectangle2D.Double(p
                          .getX(), p.getY(), gs2 / 2,
                          gs2);
                      GraphConstants.setResize(attrs,
                          true);

                      // Shift
                      p.setLocation(p.getX() + gs2, p
                          .getY()
                          + gs2);
                      graph.snap(p);
                      // If parent processed then childs
                      // are already located
                    } else if (parent == null
                        || !nested
                            .keySet()
                            .contains(
                                model
                                    .getParent(cells[i]))) {
                      CellView view = graph
                          .getGraphLayoutCache()
                          .getMapping(cells[i], false);
                      if (view != null && !view.isLeaf()) {
                        double dx = p.getX()
                            - tmp.getX();
                        double dy = p.getY()
                            - tmp.getY();
                        GraphLayoutCache
                            .translateViews(
                                new CellView[] { view },
                                dx, dy);
                      } else {
                        tmp.setFrame(p.getX(),
                            p.getY(), tmp
                                .getWidth(),
                            tmp.getHeight());
                      }

                      // Shift
                      p.setLocation(p.getX() + gs2, p
                          .getY()
                          + gs2);
                      graph.snap(p);
                    }
                    GraphConstants.setBounds(attrs, tmp);
                    nested.put(cells[i], attrs);
                  } else {
                    nested.put(cells[i], emptyMap);
                  }
                }
              }

              // Edit cells (and make visible)
              cache.edit(nested, null, null, null);
            }

            // Select topmost cells in group-structure
            graph.setSelectionCells(DefaultGraphModel
                .getTopmostCells(model, cells));

            // Don't remove at sender
            return false;
          }
View Full Code Here

    getContentPane().add(createStatusBar(), BorderLayout.SOUTH);
  }

  // Hook for subclassers
  protected JGraph createGraph() {
    JGraph graph = new MyGraph(new MyModel());
    graph.getGraphLayoutCache().setFactory(new DefaultCellViewFactory() {

      // Override Superclass Method to Return Custom EdgeView
      protected EdgeView createEdgeView(Object cell) {

        // Return Custom EdgeView
View Full Code Here

    try {
      if (e != null && marqueeBounds != null) {
        if (!(e.getSource() instanceof JGraph))
          throw new IllegalArgumentException("MarqueeHandler cannot "
              + "handle event from unknown source: " + e);
        JGraph graph = (JGraph) e.getSource();
        Rectangle2D bounds = graph
            .fromScreen((Rectangle2D) marqueeBounds.clone());
        handleMarqueeEvent(e, graph, bounds);
        graph.setCursor(previousCursor);
        Rectangle dirty = new Rectangle((int) marqueeBounds.getX(),
            (int) marqueeBounds.getY(), (int) marqueeBounds
                .getWidth() + 1, (int) marqueeBounds
                .getHeight() + 1);
        dirty.width++;
        dirty.height++;
        graph.repaint(dirty);
      }
    } finally {
      currentPoint = null;
      startPoint = null;
      marqueeBounds = null;
View Full Code Here

    if (startPoint != null) {
      if (!(e.getSource() instanceof JGraph))
        throw new IllegalArgumentException(
            "MarqueeHandler cannot handle event from unknown source: "
                + e);
      JGraph graph = (JGraph) e.getSource();
      Graphics g = graph.getGraphics();

      // Xor the current display
      Color bg = graph.getBackground();
      Color fg = graph.getMarqueeColor();
      g.setColor(fg);
      g.setXORMode(bg);
      overlay(graph, g, true);

      processMouseDraggedEvent(e);
View Full Code Here

    if (e != null) {
      if (!(e.getSource() instanceof JGraph))
        throw new IllegalArgumentException(
            "MarqueeHandler cannot handle event from unknown source: "
                + e);
      JGraph graph = (JGraph) e.getSource();
      if (isMarqueeTriggerEvent(e, graph)) {
        previousCursor = graph.getCursor();
        graph.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
      }
    }
  }
View Full Code Here

TOP

Related Classes of org.jgraph.JGraph$GraphSelectionRedirector

Copyright © 2018 www.massapicom. 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.