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

public class GraphLayoutDiagrammerDemo2 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 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 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 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;
    }

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

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

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