diff --git a/Ghidra/Features/GraphServices/src/main/help/help/topics/GraphServices/GraphDisplay.htm b/Ghidra/Features/GraphServices/src/main/help/help/topics/GraphServices/GraphDisplay.htm index ae6bf805d0..fc4b513635 100644 --- a/Ghidra/Features/GraphServices/src/main/help/help/topics/GraphServices/GraphDisplay.htm +++ b/Ghidra/Features/GraphServices/src/main/help/help/topics/GraphServices/GraphDisplay.htm @@ -111,64 +111,64 @@
diff --git a/Ghidra/Features/GraphServices/src/main/java/ghidra/graph/visualization/DefaultGraphDisplay.java b/Ghidra/Features/GraphServices/src/main/java/ghidra/graph/visualization/DefaultGraphDisplay.java index de890a5582..3cb3d8c91a 100644 --- a/Ghidra/Features/GraphServices/src/main/java/ghidra/graph/visualization/DefaultGraphDisplay.java +++ b/Ghidra/Features/GraphServices/src/main/java/ghidra/graph/visualization/DefaultGraphDisplay.java @@ -51,7 +51,6 @@ import org.jungrapht.visualization.renderers.Renderer; import org.jungrapht.visualization.renderers.Renderer.VertexLabel; import org.jungrapht.visualization.renderers.Renderer.VertexLabel.Position; import org.jungrapht.visualization.selection.MutableSelectedState; -import org.jungrapht.visualization.selection.VertexEndpointsSelectedEdgeSelectedState; import org.jungrapht.visualization.transform.*; import org.jungrapht.visualization.transform.shape.MagnifyImageLensSupport; import org.jungrapht.visualization.transform.shape.MagnifyShapeTransformer; @@ -755,7 +754,17 @@ public class DefaultGraphDisplay implements GraphDisplay { for (String layoutName : names) { ActionState state = new ActionState<>(layoutName, DefaultDisplayGraphIcons.LAYOUT_ALGORITHM_ICON, layoutName); - state.setHelpLocation(new HelpLocation(ACTION_OWNER, layoutName)); + + // condense hierarchical action help to the top-level help description + String anchor = layoutName; + if (layoutName.contains(LayoutFunction.VERT_MIN_CROSS)) { + anchor = LayoutFunction.VERT_MIN_CROSS; + } + else if (layoutName.contains(LayoutFunction.MIN_CROSS)) { + anchor = LayoutFunction.MIN_CROSS; + } + + state.setHelpLocation(new HelpLocation(ACTION_OWNER, anchor)); actionStates.add(state); } return actionStates; diff --git a/Ghidra/Features/GraphServices/src/main/java/ghidra/graph/visualization/LayoutFunction.java b/Ghidra/Features/GraphServices/src/main/java/ghidra/graph/visualization/LayoutFunction.java index 00690e8436..5c015856bf 100644 --- a/Ghidra/Features/GraphServices/src/main/java/ghidra/graph/visualization/LayoutFunction.java +++ b/Ghidra/Features/GraphServices/src/main/java/ghidra/graph/visualization/LayoutFunction.java @@ -41,18 +41,20 @@ class LayoutFunction static final String CIRCLE = "Circle"; static final String TIDIER_TREE = "Compact Hierarchical"; static final String TIDIER_RADIAL_TREE = "Compact Radial"; + static final String MIN_CROSS = "Hierarchical MinCross"; //not an alg, just a parent category static final String MIN_CROSS_TOP_DOWN = "Hierarchical MinCross Top Down"; static final String MIN_CROSS_LONGEST_PATH = "Hierarchical MinCross Longest Path"; static final String MIN_CROSS_NETWORK_SIMPLEX = "Hierarchical MinCross Network Simplex"; static final String MIN_CROSS_COFFMAN_GRAHAM = "Hierarchical MinCross Coffman Graham"; - static final String EXP_MIN_CROSS_TOP_DOWN = "Experimental Hierarchical MinCross Top Down"; - static final String EXP_MIN_CROSS_LONGEST_PATH = "Experimental Hierarchical MinCross Longest Path"; - static final String EXP_MIN_CROSS_NETWORK_SIMPLEX = "Experimental Hierarchical MinCross Network Simplex"; - static final String EXP_MIN_CROSS_COFFMAN_GRAHAM = "Experimental Hierarchical MinCross Coffman Graham"; + static final String VERT_MIN_CROSS = "Vertical Hierarchical MinCross"; //not an alg, just a parent category + static final String VERT_MIN_CROSS_TOP_DOWN = "Vertical Hierarchical MinCross Top Down"; + static final String VERT_MIN_CROSS_LONGEST_PATH = "Vertical Hierarchical MinCross Longest Path"; + static final String VERT_MIN_CROSS_NETWORK_SIMPLEX = "Vertical Hierarchical MinCross Network Simplex"; + static final String VERT_MIN_CROSS_COFFMAN_GRAHAM = "Vertical Hierarchical MinCross Coffman Graham"; static final String TREE = "Hierarchical"; static final String RADIAL = "Radial"; static final String BALLOON = "Balloon"; - static final String GEM = "Gem (Graph Embedder)"; + static final String GEM = "GEM"; Predicate favoredEdgePredicate; Comparator edgeTypeComparator; @@ -66,10 +68,10 @@ class LayoutFunction return new String[] { TIDIER_TREE, TREE, TIDIER_RADIAL_TREE, MIN_CROSS_TOP_DOWN, MIN_CROSS_LONGEST_PATH, MIN_CROSS_NETWORK_SIMPLEX, MIN_CROSS_COFFMAN_GRAHAM, CIRCLE, - EXP_MIN_CROSS_TOP_DOWN, - EXP_MIN_CROSS_LONGEST_PATH, - EXP_MIN_CROSS_NETWORK_SIMPLEX, - EXP_MIN_CROSS_COFFMAN_GRAHAM, + VERT_MIN_CROSS_TOP_DOWN, + VERT_MIN_CROSS_LONGEST_PATH, + VERT_MIN_CROSS_NETWORK_SIMPLEX, + VERT_MIN_CROSS_COFFMAN_GRAHAM, KAMADA_KAWAI, FRUCTERMAN_REINGOLD, RADIAL, BALLOON, GEM }; } @@ -112,25 +114,25 @@ class LayoutFunction . edgeAwareBuilder() .edgeComparator(edgeTypeComparator) .layering(Layering.COFFMAN_GRAHAM); - case EXP_MIN_CROSS_TOP_DOWN: + case VERT_MIN_CROSS_TOP_DOWN: return EiglspergerLayoutAlgorithm . edgeAwareBuilder() .edgeComparator(edgeTypeComparator) .favoredEdgePredicate(favoredEdgePredicate) .layering(Layering.TOP_DOWN); - case EXP_MIN_CROSS_LONGEST_PATH: + case VERT_MIN_CROSS_LONGEST_PATH: return EiglspergerLayoutAlgorithm . edgeAwareBuilder() .edgeComparator(edgeTypeComparator) .favoredEdgePredicate(favoredEdgePredicate) .layering(Layering.LONGEST_PATH); - case EXP_MIN_CROSS_NETWORK_SIMPLEX: + case VERT_MIN_CROSS_NETWORK_SIMPLEX: return EiglspergerLayoutAlgorithm . edgeAwareBuilder() .edgeComparator(edgeTypeComparator) .favoredEdgePredicate(favoredEdgePredicate) .layering(Layering.NETWORK_SIMPLEX); - case EXP_MIN_CROSS_COFFMAN_GRAHAM: + case VERT_MIN_CROSS_COFFMAN_GRAHAM: return EiglspergerLayoutAlgorithm . edgeAwareBuilder() .edgeComparator(edgeTypeComparator)