InteractiveOrganicDemo.java |
1 /**************************************************************************** 2 * This demo file is part of yFiles for Java 2.14. 3 * Copyright (c) 2000-2017 by yWorks GmbH, Vor dem Kreuzberg 28, 4 * 72070 Tuebingen, Germany. All rights reserved. 5 * 6 * yFiles demo files exhibit yFiles for Java functionalities. Any redistribution 7 * of demo files in source code or binary form, with or without 8 * modification, is not permitted. 9 * 10 * Owners of a valid software license for a yFiles for Java version that this 11 * demo is shipped with are allowed to use the demo source code as basis 12 * for their own yFiles for Java powered applications. Use of such programs is 13 * governed by the rights and conditions as set out in the yFiles for Java 14 * license agreement. 15 * 16 * THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESS OR IMPLIED 17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN 19 * NO EVENT SHALL yWorks BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 21 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 22 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 23 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 24 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 * 27 ***************************************************************************/ 28 package demo.layout.organic; 29 30 import demo.view.DemoBase; 31 import y.layout.CopiedLayoutGraph; 32 import y.layout.LayoutTool; 33 import y.layout.organic.InteractiveOrganicLayouter; 34 import y.view.EditMode; 35 36 import javax.swing.JButton; 37 import javax.swing.JToolBar; 38 import javax.swing.Timer; 39 40 import java.awt.EventQueue; 41 import java.awt.event.ActionEvent; 42 import java.awt.event.ActionListener; 43 import java.io.IOException; 44 import java.util.Locale; 45 46 /** 47 * This demo shows the very basic usage of the 48 * {@link y.layout.organic.InteractiveOrganicLayouter}. 49 * The layouter is started within a thread. A swing timer is used to update the 50 * positions of the nodes. 51 * 52 * @see <a href="http://docs.yworks.com/yfiles/doc/api/index.html#/dguide/interactive_organic_layouter#interactive_organic_layouter" target="_blank">Section Interactive Organic Layout</a> in the yFiles for Java Developer's Guide 53 */ 54 public class InteractiveOrganicDemo extends DemoBase { 55 private InteractiveOrganicLayouter layouter; 56 57 protected void initialize() { 58 layouter = new InteractiveOrganicLayouter(); 59 layouter.setAutomaticStructureUpdateEnabled(true); 60 layouter.enableOnlyCore(); 61 62 loadGraph("resource/peopleNav.graphml"); 63 //Reset the paths and the locations of the nodes. 64 LayoutTool.initDiagram(view.getGraph2D()); 65 66 view.setPaintDetailThreshold(0.0); 67 view.fitContent(); 68 69 } 70 71 /** 72 * Callback used by {@link #registerViewModes()} to create the default EditMode 73 * @return an instance of {@link y.view.EditMode} with showNodeTips enabled 74 */ 75 protected EditMode createEditMode() { 76 EditMode editMode = super.createEditMode(); 77 editMode.allowBendCreation(false); 78 editMode.allowNodeCreation(false); 79 editMode.allowResizeNodes(false); 80 editMode.allowEdgeCreation(false); 81 82 //This view mode offers support for "touching the graph" 83 editMode.setMoveSelectionMode(new InteractiveMoveSelectionMode(layouter)); 84 85 return editMode; 86 } 87 88 protected JToolBar createToolBar() { 89 final JButton startButton = new JButton("Start", SHARED_LAYOUT_ICON); 90 startButton.addActionListener(new ActionListener() { 91 public void actionPerformed(ActionEvent e) { 92 //Disable the button 93 startButton.setEnabled(false); 94 95 //Start the layout thread 96 layouter.startLayout(new CopiedLayoutGraph(view.getGraph2D())); 97 98 //Update timer 99 Timer timer = new Timer(21, new ActionListener() { 100 //This listener is notified about 24 times a second. 101 public void actionPerformed(ActionEvent e) { 102 //Write the calculated positions back to the realizers 103 if (layouter.commitPositionsSmoothly(50, 0.15) > 0) { 104 //... and update the view, if something has changed 105 view.updateView(); 106 } 107 } 108 }); 109 timer.setInitialDelay(500); 110 timer.start(); 111 } 112 }); 113 114 JToolBar toolBar = super.createToolBar(); 115 toolBar.addSeparator(); 116 toolBar.add(startButton); 117 return toolBar; 118 } 119 120 /** 121 * Overwritten to disable undo/redo because this is not an editable demo. 122 */ 123 protected boolean isUndoRedoEnabled() { 124 return false; 125 } 126 127 /** 128 * Overwritten to disable clipboard because this is not an editable demo. 129 */ 130 protected boolean isClipboardEnabled() { 131 return false; 132 } 133 134 public static void main(String[] args) throws IOException { 135 EventQueue.invokeLater(new Runnable() { 136 public void run() { 137 Locale.setDefault(Locale.ENGLISH); 138 initLnF(); 139 InteractiveOrganicDemo demo = new InteractiveOrganicDemo(); 140 demo.start(); 141 } 142 }); 143 144 } 145 } 146