/*
 * Licensed Materials - Property of Perforce Software, Inc. 
 * © Copyright Perforce Software, Inc. 2014, 2021 
 * © Copyright IBM Corp. 2009, 2014
 * © Copyright ILOG 1996, 2009
 * All Rights Reserved.
 *
 * Note to U.S. Government Users Restricted Rights:
 * The Software and Documentation were developed at private expense and
 * are "Commercial Items" as that term is defined at 48 CFR 2.101,
 * consisting of "Commercial Computer Software" and
 * "Commercial Computer Software Documentation", as such terms are
 * used in 48 CFR 12.212 or 48 CFR 227.7202-1 through 227.7202-4,
 * as applicable.
 */

import java.awt.Container;
import java.util.ResourceBundle;

import ilog.views.diagrammer.IlvDiagrammer;
import ilog.views.diagrammer.application.IlvDiagrammerAction;
import ilog.views.diagrammer.application.IlvDiagrammerFrame;
import ilog.views.diagrammer.application.IlvDiagrammerMenuBar;
import ilog.views.diagrammer.application.IlvDiagrammerToolBar;
import ilog.views.sdm.renderer.graphlayout.IlvGraphLayoutRenderer;
import ilog.views.util.IlvProductUtil;

public class GraphLayoutDiagrammerDemo4 extends IlvDiagrammerFrame {
  private ResourceBundle bundle;

  private static final String graphLayoutProject = "data/graphlayout.idpr";

  public static void main(final String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
      Override
      public void run() {
        new GraphLayoutDiagrammerDemo4().init(args);
      }
    });
  }

  public GraphLayoutDiagrammerDemo4() {
    super(new String[] { "-title", "Graph Layout Diagrammer Demo - Link Clipping", "-data", graphLayoutProject });

    // This sample uses JViews Diagrammer features. When deploying an
    // application that includes this code, you need to be in possession
    // of a Perforce JViews Diagrammer Deployment license.
    IlvProductUtil.DeploymentLicenseRequired(IlvProductUtil.JViews_Diagrammer_Deployment);

    bundle = ResourceBundle.getBundle("graphlayout");
  }

  Override
  public void init(Container contentPane) {
    super.init(contentPane);

    getJMenuBar().remove(((IlvDiagrammerMenuBar) getJMenuBar()).getFileMenu());
    getJMenuBar().remove(((IlvDiagrammerMenuBar)getJMenuBar()).getEditMenu());
    getJMenuBar().remove(((IlvDiagrammerMenuBar)getJMenuBar()).getOptionsMenu());

    IlvDiagrammerToolBar toolbar = getEditToolBar();

    toolbar.setActions(null);

    toolbar.addAction(new LinkClippingAction());
  }

  public void setLinkClipping(IlvDiagrammer diagrammer, boolean clip) {
    IlvGraphLayoutRenderer r = diagrammer.getEngine().getNodeLayoutRenderer();
    if (r instanceof LinkClippingRenderer) {
      ((LinkClippingRenderer) r).setClipping(clip);
      diagrammer.getEngine().loadData();
    }
  }

  public boolean isLinkClipping(IlvDiagrammer diagrammer) {
    IlvGraphLayoutRenderer r = diagrammer.getEngine().getNodeLayoutRenderer();
    if (r instanceof LinkClippingRenderer) {
      return ((LinkClippingRenderer) r).isClipping();
    } else {
      return false;
    }
  }

  private class LinkClippingAction extends IlvDiagrammerAction.ToggleAction {
    public LinkClippingAction() {
      super("Action.LinkClipping", bundle);
    }

    Override
    protected boolean isSelected(IlvDiagrammer diagrammer) throws Exception {
      return diagrammer != null && isLinkClipping(diagrammer);
    }

    Override
    protected void setSelected(IlvDiagrammer diagrammer, boolean selected) throws Exception {
      setLinkClipping(diagrammer, selected);
    }

    Override
    protected boolean isEnabled(IlvDiagrammer diagrammer) throws Exception {
      return diagrammer != null;
    }
  }
}