/*
 * Licensed Materials - Property of Rogue Wave Software, Inc. 
 * © Copyright Rogue Wave Software, Inc. 2014, 2015 
 * © 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 ilog.views.diagrammer.IlvDiagrammer;
import ilog.views.diagrammer.application.IlvDiagrammerAction;
import ilog.views.diagrammer.application.IlvDiagrammerApplication;
import ilog.views.diagrammer.application.IlvDiagrammerToolBar;
import ilog.views.sdm.renderer.graphlayout.IlvGraphLayoutRenderer;
import ilog.views.util.IlvProductUtil;

import java.awt.*;
import java.util.ResourceBundle;

public class GraphLayoutDiagrammerDemo4 extends IlvDiagrammerApplication
{
  private ResourceBundle bundle;
  
  private static final String graphLayoutProject = "data/graphlayout.idpr"; 
  
  public static void main(final String[] args)
  {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
      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 Rogue Wave JViews Diagrammer Deployment license.
    IlvProductUtil.DeploymentLicenseRequired(
        IlvProductUtil.JViews_Diagrammer_Deployment);

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

  public void init(Container contentPane)
  {
    super.init(contentPane);
    
    getMenuBar().remove(getMenuBar().getFileMenu());
    getMenuBar().remove(getMenuBar().getEditMenu());
    getMenuBar().remove(getMenuBar().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);
    }

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

    protected void setSelected(IlvDiagrammer diagrammer, boolean selected) throws Exception
    {
      setLinkClipping(diagrammer, selected);
    }
    
    protected boolean isEnabled(IlvDiagrammer diagrammer) throws Exception
    {
      return diagrammer != null;
    }
  }
}