/*
* Licensed Materials - Property of Rogue Wave Software, Inc.
* © Copyright Rogue Wave Software, Inc. 2014, 2017
* © 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.
*/
// the JViews Graphic Framework
// the Java AWT package
import java.awt.Color;
// the Java Swing package
import javax.swing.JFrame;
import ilog.views.IlvGrapher;
import ilog.views.IlvLinkImage;
import ilog.views.IlvManagerView;
import ilog.views.IlvPoint;
import ilog.views.IlvRect;
import ilog.views.graphic.IlvReliefRectangle;
import ilog.views.graphic.IlvZoomableLabel;
// the JViews Label Layout Framework
import ilog.views.graphlayout.labellayout.IlvLabelLayoutReport;
// the JViews Annealing Label Layout
import ilog.views.graphlayout.labellayout.annealing.IlvAnnealingLabelLayout;
import ilog.views.graphlayout.labellayout.annealing.IlvAnnealingPolylineLabelDescriptor;
import ilog.views.util.IlvProductUtil;
/**
* A very simple example for the use of a Label Layout Algorithm.
*/
public class Sample2 {
public static final void main(String[] arg) {
// This sample uses JViews Diagrammer features. When deploying an
// application that includes this code, you need to be in possession
// of a JViews Diagrammer Deployment license.
IlvProductUtil.DeploymentLicenseRequired(IlvProductUtil.JViews_Diagrammer_Deployment);
// Create the manager instance (subclass of IlvManager). Since we want
// to place link labels, we use a grapher in this example.
IlvGrapher grapher = new IlvGrapher();
// Create the manager view instance
IlvManagerView view = new IlvManagerView(grapher);
view.setBackground(Color.white);
// A Swing Frame to display
JFrame frame = new JFrame("Label Layout Sample");
// EXIT_ON_CLOSE is not defined in jdk1.2, hence this way:
frame.setDefaultCloseOperation(3 /* EXIT_ON_CLOSE, >= jdk1.2.2 */);
// Put the manager view inside an Swing Frame and show it
frame.getContentPane().add(view);
frame.setSize(400, 400);
frame.setVisible(true);
// Fill the grapher with nodes and links
IlvReliefRectangle node1 = new IlvReliefRectangle(new IlvRect(0, 0, 50, 50));
IlvReliefRectangle node2 = new IlvReliefRectangle(new IlvRect(200, 0, 50, 50));
IlvReliefRectangle node3 = new IlvReliefRectangle(new IlvRect(0, 200, 50, 50));
IlvReliefRectangle node4 = new IlvReliefRectangle(new IlvRect(200, 200, 50, 50));
grapher.addNode(node1, false);
grapher.addNode(node2, false);
grapher.addNode(node3, false);
grapher.addNode(node4, false);
// set some nice colors
setNodeColors(node1, node2, node3, node4);
IlvLinkImage link1 = new IlvLinkImage(node1, node2, true);
IlvLinkImage link2 = new IlvLinkImage(node1, node3, true);
IlvLinkImage link3 = new IlvLinkImage(node2, node4, true);
IlvLinkImage link4 = new IlvLinkImage(node4, node3, true);
IlvLinkImage link5 = new IlvLinkImage(node1, node4, true);
grapher.addLink(link1, false);
grapher.addLink(link2, false);
grapher.addLink(link3, false);
grapher.addLink(link4, false);
grapher.addLink(link5, false);
// set some nice colors
setLinkColors(link1, link2, link3, link4, link5);
// Add labels. Labels are neither "nodes" nor "links", hence add them as
// objects. Since we perform layout later, the initial position doesn't
// play a role.
IlvPoint p = new IlvPoint(0, 0);
IlvZoomableLabel label1 = new IlvZoomableLabel(p, "Label1");
IlvZoomableLabel label2 = new IlvZoomableLabel(p, "Label2");
IlvZoomableLabel label3 = new IlvZoomableLabel(p, "Label3");
IlvZoomableLabel label4 = new IlvZoomableLabel(p, "Label4");
IlvZoomableLabel label5 = new IlvZoomableLabel(p, "Start Label");
IlvZoomableLabel label6 = new IlvZoomableLabel(p, "End Label");
grapher.addObject(label1, false);
grapher.addObject(label2, false);
grapher.addObject(label3, false);
grapher.addObject(label4, false);
grapher.addObject(label5, false);
grapher.addObject(label6, false);
// Declare a handle for the layout instance
IlvAnnealingLabelLayout layout = new IlvAnnealingLabelLayout();
// Declare a handle for the layout report
IlvLabelLayoutReport layoutReport = null;
// Attach the manager to the layout instance
layout.attach(grapher);
// For each label, set a label descriptor that specifies: label1 belongs
// to link1, label2 belongs to link2, and so on. link5 has 2 labels.
layout.setLabelDescriptor(label1,
new IlvAnnealingPolylineLabelDescriptor(label1, link1, IlvAnnealingPolylineLabelDescriptor.CENTER));
layout.setLabelDescriptor(label2,
new IlvAnnealingPolylineLabelDescriptor(label2, link2, IlvAnnealingPolylineLabelDescriptor.CENTER));
layout.setLabelDescriptor(label3,
new IlvAnnealingPolylineLabelDescriptor(label3, link3, IlvAnnealingPolylineLabelDescriptor.CENTER));
layout.setLabelDescriptor(label4,
new IlvAnnealingPolylineLabelDescriptor(label4, link4, IlvAnnealingPolylineLabelDescriptor.CENTER));
layout.setLabelDescriptor(label5,
new IlvAnnealingPolylineLabelDescriptor(label5, link5, IlvAnnealingPolylineLabelDescriptor.START));
layout.setLabelDescriptor(label6,
new IlvAnnealingPolylineLabelDescriptor(label6, link5, IlvAnnealingPolylineLabelDescriptor.END));
// Modify the layout parameters, if needed
layout.setLabelOffset(10);
layout.setObstacleOffset(5);
// Perform the layout and get the layout report
layoutReport = layout.performLayout();
// Print information from the layout report (optional)
System.out
.println("layout done in " + layoutReport.getLayoutTime() + " millisec., code = " + layoutReport.getCode());
// Fit the graph in the window
view.fitTransformerToContent();
// Redraw the grapher
grapher.reDraw();
// Detach the grapher from the layout instance
layout.detach();
}
/**
* Auxiliary to set nice node colors and parameters.
*/
private static void setNodeColors(IlvReliefRectangle n1, IlvReliefRectangle n2, IlvReliefRectangle n3,
IlvReliefRectangle n4) {
n1.setBackground(Color.cyan);
n2.setBackground(Color.cyan);
n3.setBackground(Color.cyan);
n4.setBackground(Color.cyan);
n1.setThickness(8);
n2.setThickness(8);
n3.setThickness(8);
n4.setThickness(8);
}
/**
* Auxiliary to set nice link colors and parameters.
*/
private static void setLinkColors(IlvLinkImage l1, IlvLinkImage l2, IlvLinkImage l3, IlvLinkImage l4,
IlvLinkImage l5) {
l1.setForeground(Color.red);
l2.setForeground(Color.red);
l3.setForeground(Color.red);
l4.setForeground(Color.red);
l5.setForeground(Color.red);
l1.setLineWidth(4);
l2.setLineWidth(4);
l3.setLineWidth(4);
l4.setLineWidth(4);
l5.setLineWidth(4);
}
}