/* * 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. */ package pebbles; import ilog.views.diagrammer.IlvDiagrammer; import ilog.views.graphlayout.IlvGraphLayoutException; import ilog.views.graphlayout.hierarchical.IlvHierarchicalLayout; import ilog.views.sdm.IlvSDMModel; import ilog.views.sdm.model.IlvDefaultSDMModel; import ilog.views.swing.IlvJManagerViewControlBar; import ilog.views.util.IlvProductUtil; import ilog.views.util.swing.IlvSwingUtil; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.SystemColor; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Iterator; import javax.swing.Box; import javax.swing.JApplet; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.border.LineBorder; /** * A diagrammer demo that shows how to manage a diagram without CSS. * @since JViews 8.5 */ public class DiagrammerGUI extends JApplet { private final static int NODE_COUNT = 15; /** * Entry point. * @param args */ // entry point public static void main(final String[] args) { // be sure to be in EDT thread javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { // A Swing Frame to display final JFrame frame = new JFrame("Random Diagram"); new DiagrammerGUI().init(frame.getContentPane()); // and show it. frame.setSize(450, 450); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }); } /** * The initialization method of the applet. */ public void init() { try { init(getContentPane()); if (getContentPane() instanceof JPanel) { // nicer with a border ((JPanel)getContentPane()).setBorder(LineBorder.createBlackLineBorder()); } } catch (Exception e) { e.printStackTrace(System.err); } } public void init(Container container) { // 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); // Create the diagrammer component final IlvDiagrammer diagrammer = new IlvDiagrammer(); // Customize diagrammer behavior. diagrammer.setSelectMode(true); diagrammer.setScrollable(false); diagrammer.setEditingAllowed(false); diagrammer.getView().setBackground(Color.white); diagrammer.getView().setForeground(SystemColor.windowText); // populate diagrammer model diagrammer.getEngine().setModel(createModel(), false); // add our custom renderer diagrammer.getEngine().setRenderer(new SimpleDiagrammerRenderer()); // apply a node layout IlvHierarchicalLayout layout = new IlvHierarchicalLayout(); layout.setBacktrackCrossingReductionEnabled(true); layout.setGlobalLinkStyle(IlvHierarchicalLayout.ORTHOGONAL_STYLE); layout.attach(diagrammer.getEngine().getGrapher()); try { layout.performLayout(); } catch (IlvGraphLayoutException e1) { e1.printStackTrace(); } // fit to content when view is ready diagrammer.getView().fitTransformerToContent(true); // select first object Object node1 = diagrammer.getObject("pebble1"); diagrammer.setSelected(node1, true); // Create a control bar IlvJManagerViewControlBar controlBar = new IlvJManagerViewControlBar(); controlBar.setView(diagrammer.getView()); // as we configured diagrammer selectInteractor, be sure it's the same in the toolbar. controlBar.setSelectInteractor(diagrammer.getSelectInteractor()); container.add(controlBar, BorderLayout.NORTH); // Put the manager view inside the Swing Frame container.add(diagrammer, BorderLayout.CENTER); // add the texfield below to change node color Box box = Box.createHorizontalBox(); box.add(new JLabel("Enter color for selected node(s): ")); final JTextField colorTextField = new JTextField("orange"); box.add(colorTextField); container.add(box, BorderLayout.SOUTH); // add textfield callback that modifies the model colorTextField.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // get current text String text = colorTextField.getText(); // set new color name to all selected objects Iterator<?> it = diagrammer.getSelectedObjects(); while (it.hasNext()) { diagrammer.getEngine().getModel().setObjectProperty(it.next(), "color", text); } } }); } /** * Called when the applet is destroyed. */ public void destroy() { // This method is intended to work around memory management issues // in the Sun JRE. Please refer to the method documentation for more // details and a description of the known issues. IlvSwingUtil.cleanupApplet(); } /** * Creates a random model. */ private IlvSDMModel createModel() { IlvDefaultSDMModel result = new IlvDefaultSDMModel(); // let's create plenty of objects float pos = new Float(100); Object[] array = new Object[NODE_COUNT]; for (int i = 0; i<array.length; i++ ) { Object n = result.createNode("pebble"); result.setObjectProperty(n, "x", pos); result.setObjectProperty(n, "y", pos); result.setObjectProperty(n, "color", makeRandomColor()); result.addObject(n,null,null); array[i] = n; } // set an ID for the first object result.setID(array[0], "pebble1"); // now some random links for (int i = 0; i<array.length*1.5; i++ ) { Object link = result.createLink("distance"); result.setFrom(link, array[(int)(array.length*Math.random())]); result.setTo(link, array[(int)(array.length*Math.random())]); result.addObject(link, null, null); } return result; } /** * Returns a random color string. * */ private String makeRandomColor() { final String[] colorTable = {"tan", "peachpuff", "lightcoral", "lavender", "lightseagreen", "powderblue", "plum", "lightpink", "lightsteelblue", "lightgoldenrodyellow"}; return colorTable[(int)(Math.random()*colorTable.length)]; } }