# HG changeset patch # User Thomas Wuerthinger # Date 1363633479 -3600 # Node ID d91353f813202f53540c8b28b692c918fc4b3eb3 # Parent 338e4adafa71527d8019215875b0505155fdac5f Do not clone IdealGraphVisualizer editor windows as the default action - reuse existing window. Added explicit "clone" menu item. diff -r 338e4adafa71 -r d91353f81320 src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/GraphNode.java --- a/src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/GraphNode.java Mon Mar 18 00:36:23 2013 +0100 +++ b/src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/GraphNode.java Mon Mar 18 20:04:39 2013 +0100 @@ -23,8 +23,10 @@ */ package com.sun.hotspot.igv.coordinator; +import com.sun.hotspot.igv.coordinator.actions.CloneGraphAction; import com.sun.hotspot.igv.coordinator.actions.DiffGraphAction; import com.sun.hotspot.igv.coordinator.actions.DiffGraphCookie; +import com.sun.hotspot.igv.coordinator.actions.GraphCloneCookie; import com.sun.hotspot.igv.coordinator.actions.GraphOpenCookie; import com.sun.hotspot.igv.coordinator.actions.GraphRemoveCookie; import com.sun.hotspot.igv.data.InputGraph; @@ -72,6 +74,9 @@ // Action for diffing to the current graph content.add(new DiffGraphCookie(graph)); + + // Action for cloning to the current graph + content.add(new GraphCloneCookie(viewer, graph)); } @Override @@ -97,7 +102,7 @@ @Override public Action[] getActions(boolean b) { - return new Action[]{(Action) DiffGraphAction.findObject(DiffGraphAction.class, true), (Action) OpenAction.findObject(OpenAction.class, true)}; + return new Action[]{(Action) DiffGraphAction.findObject(DiffGraphAction.class, true), (Action) CloneGraphAction.findObject(CloneGraphAction.class, true), (Action) OpenAction.findObject(OpenAction.class, true)}; } @Override diff -r 338e4adafa71 -r d91353f81320 src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/actions/CloneGraphAction.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/actions/CloneGraphAction.java Mon Mar 18 20:04:39 2013 +0100 @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package com.sun.hotspot.igv.coordinator.actions; + +import org.openide.nodes.Node; +import org.openide.util.HelpCtx; +import org.openide.util.actions.CookieAction; + +/** + * + * @author Thomas Wuerthinger + */ +public final class CloneGraphAction extends CookieAction { + + @Override + protected void performAction(Node[] activatedNodes) { + GraphCloneCookie c = activatedNodes[0].getCookie(GraphCloneCookie.class); + assert c != null; + c.openClone(); + } + + @Override + protected int mode() { + return CookieAction.MODE_EXACTLY_ONE; + } + + @Override + protected boolean enable(Node[] activatedNodes) { + boolean b = super.enable(activatedNodes); + if (b) { + assert activatedNodes.length == 1; + GraphCloneCookie c = activatedNodes[0].getCookie(GraphCloneCookie.class); + assert c != null; + return true; + } + + return false; + } + + @Override + public String getName() { + return "Open clone"; + } + + @Override + protected Class[] cookieClasses() { + return new Class[]{ + GraphCloneCookie.class + }; + } + + @Override + protected String iconResource() { + return "com/sun/hotspot/igv/coordinator/images/graph.png"; + } + + @Override + public HelpCtx getHelpCtx() { + return HelpCtx.DEFAULT_HELP; + } + + @Override + protected boolean asynchronous() { + return false; + } +} + diff -r 338e4adafa71 -r d91353f81320 src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/actions/DiffGraphCookie.java --- a/src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/actions/DiffGraphCookie.java Mon Mar 18 00:36:23 2013 +0100 +++ b/src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/actions/DiffGraphCookie.java Mon Mar 18 20:04:39 2013 +0100 @@ -60,7 +60,7 @@ final GraphViewer viewer = Lookup.getDefault().lookup(GraphViewer.class); if (viewer != null) { InputGraph diffGraph = Difference.createDiffGraph(other, graph); - viewer.view(diffGraph); + viewer.view(diffGraph, true); } } } diff -r 338e4adafa71 -r d91353f81320 src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/actions/GraphCloneCookie.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/actions/GraphCloneCookie.java Mon Mar 18 20:04:39 2013 +0100 @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ +package com.sun.hotspot.igv.coordinator.actions; + +import com.sun.hotspot.igv.data.InputGraph; +import com.sun.hotspot.igv.data.services.GraphViewer; +import org.openide.nodes.Node; + +public class GraphCloneCookie implements Node.Cookie { + + private final GraphViewer viewer; + private final InputGraph graph; + + public GraphCloneCookie(GraphViewer viewer, InputGraph graph) { + this.viewer = viewer; + this.graph = graph; + } + + public void openClone() { + viewer.view(graph, true); + } +} diff -r 338e4adafa71 -r d91353f81320 src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/actions/GraphOpenCookie.java --- a/src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/actions/GraphOpenCookie.java Mon Mar 18 00:36:23 2013 +0100 +++ b/src/share/tools/IdealGraphVisualizer/Coordinator/src/com/sun/hotspot/igv/coordinator/actions/GraphOpenCookie.java Mon Mar 18 20:04:39 2013 +0100 @@ -39,6 +39,6 @@ @Override public void open() { - viewer.view(graph); + viewer.view(graph, false); } } diff -r 338e4adafa71 -r d91353f81320 src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/services/GraphViewer.java --- a/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/services/GraphViewer.java Mon Mar 18 00:36:23 2013 +0100 +++ b/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/services/GraphViewer.java Mon Mar 18 20:04:39 2013 +0100 @@ -31,5 +31,5 @@ */ public interface GraphViewer { - public void view(InputGraph graph); + public void view(InputGraph graph, boolean clone); } diff -r 338e4adafa71 -r d91353f81320 src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/DiagramViewModel.java --- a/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/DiagramViewModel.java Mon Mar 18 00:36:23 2013 +0100 +++ b/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/DiagramViewModel.java Mon Mar 18 20:04:39 2013 +0100 @@ -70,6 +70,10 @@ result.setData(this); return result; } + + public Group getGroup() { + return group; + } public void setData(DiagramViewModel newModel) { super.setData(newModel); diff -r 338e4adafa71 -r d91353f81320 src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/GraphViewerImplementation.java --- a/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/GraphViewerImplementation.java Mon Mar 18 00:36:23 2013 +0100 +++ b/src/share/tools/IdealGraphVisualizer/View/src/com/sun/hotspot/igv/view/GraphViewerImplementation.java Mon Mar 18 20:04:39 2013 +0100 @@ -27,6 +27,9 @@ import com.sun.hotspot.igv.data.services.GraphViewer; import com.sun.hotspot.igv.graph.Diagram; import com.sun.hotspot.igv.settings.Settings; +import org.openide.windows.Mode; +import org.openide.windows.TopComponent; +import org.openide.windows.WindowManager; /** * @@ -35,7 +38,24 @@ public class GraphViewerImplementation implements GraphViewer { @Override - public void view(InputGraph graph) { + public void view(InputGraph graph, boolean clone) { + + if (!clone) { + WindowManager manager = WindowManager.getDefault(); + for (Mode m : manager.getModes()) { + for (TopComponent t : manager.getOpenedTopComponents(m)) { + if (t instanceof EditorTopComponent) { + EditorTopComponent etc = (EditorTopComponent) t; + if (etc.getModel().getGroup().getGraphs().contains(graph)) { + etc.getModel().selectGraph(graph); + t.requestActive(); + return; + } + } + } + } + } + Diagram diagram = Diagram.createDiagram(graph, Settings.get().get(Settings.NODE_TEXT, Settings.NODE_TEXT_DEFAULT)); EditorTopComponent tc = new EditorTopComponent(diagram); tc.open();