/*
 * 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.IlvDirection;
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.graphlayout.hierarchical.IlvHierarchicalLayout;
import ilog.views.util.IlvProductUtil;

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

public class GraphLayoutDiagrammerDemo2 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 GraphLayoutDiagrammerDemo2().init(args);
        
      }
    });
  }

  public GraphLayoutDiagrammerDemo2()
  {
    super(new String[]{
      "-title", "Graph Layout Diagrammer Demo - Changing Parameters",
      "-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 LayoutDirectionAction("Right", IlvDirection.Right));
    toolbar.addAction(new LayoutDirectionAction("Left", IlvDirection.Left));
    toolbar.addAction(new LayoutDirectionAction("Bottom", IlvDirection.Bottom));
    toolbar.addAction(new LayoutDirectionAction("Top", IlvDirection.Top));
  }

  public void setLayoutDirection(IlvDiagrammer diagrammer, int direction)
  {
    IlvHierarchicalLayout layout =
            (IlvHierarchicalLayout) diagrammer.getEngine().
            getNodeLayoutRenderer().
            getGraphLayout();
    layout.setFlowDirection(direction);
    diagrammer.layoutAllNodes();
  }
  
  public int getLayoutDirection(IlvDiagrammer diagrammer)
  {
    IlvHierarchicalLayout layout =
            (IlvHierarchicalLayout) diagrammer.getEngine().
            getNodeLayoutRenderer().
            getGraphLayout();
    return layout.getFlowDirection();
  }
  
  private class LayoutDirectionAction extends IlvDiagrammerAction.ToggleAction
  {
    private int direction;
    
    public LayoutDirectionAction(String prefix, int direction)
    {
      super("Action."+prefix, GraphLayoutDiagrammerDemo2.this.bundle);
      this.direction = direction;
    }

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

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