Merge remote-tracking branch 'origin/GP-2848-dragonmacher-theme-fixups'

This commit is contained in:
Ryan Kurtz 2023-02-16 12:50:44 -05:00
commit b252544c15
16 changed files with 219 additions and 250 deletions

View file

@ -1,79 +1,65 @@
[Defaults] [Defaults]
color.bg.functiongraph = color.bg color.bg.plugin.functiongraph = color.bg
color.fg.label.picked = color.fg color.fg.plugin.functiongraph.label.picked = color.fg
color.fg.label.non.picked = color.fg.disabled color.fg.plugin.functiongraph.label.non.picked = color.fg.disabled
color.bg.functiongraph.vertex.group = rgb(226, 255, 155) color.bg.plugin.functiongraph.vertex.group = rgb(226, 255, 155)
color.bg.functiongraph.vertex.entry = color.palette.lightgreen color.bg.plugin.functiongraph.vertex.entry = color.palette.lightgreen
color.bg.functiongraph.vertex.exit = color.palette.lightred color.bg.plugin.functiongraph.vertex.exit = color.palette.lightred
color.bg.functiongraph.vertex.picked = color.palette.yellow color.bg.plugin.functiongraph.vertex.picked = color.palette.yellow
color.bg.functiongraph.edge.fall.through = color.flowtype.fall.through color.bg.plugin.functiongraph.edge.fall.through = color.flowtype.fall.through
color.bg.functiongraph.edge.fall.through.highlight = rgb(255, 127, 127) color.bg.plugin.functiongraph.edge.fall.through.highlight = rgb(255, 127, 127)
color.bg.functiongraph.edge.jump.conditional = color.flowtype.jump.conditional color.bg.plugin.functiongraph.edge.jump.conditional = color.flowtype.jump.conditional
color.bg.functiongraph.edge.jump.conditional.highlight = lime color.bg.plugin.functiongraph.edge.jump.conditional.highlight = lime
color.bg.functiongraph.edge.jump.unconditional = color.flowtype.jump.unconditional color.bg.plugin.functiongraph.edge.jump.unconditional = color.flowtype.jump.unconditional
color.bg.functiongraph.edge.jump.unconditional.highlight = rgb(127, 127, 255) color.bg.plugin.functiongraph.edge.jump.unconditional.highlight = rgb(127, 127, 255)
color.bg.functiongraph.paint.icon = rgb(189, 221, 252) // gentle pale blue color.bg.plugin.functiongraph.paint.icon = rgb(189, 221, 252) // gentle pale blue
icon.functiongraph.layout.experimental = package_development.png icon.plugin.functiongraph.layout.experimental = package_development.png
icon.functiongraph.action.vertex.xrefs = brick_link.png icon.plugin.functiongraph.action.vertex.xrefs = brick_link.png
icon.functiongraph.action.vertex.maximize = fullscreen_view.png icon.plugin.functiongraph.action.vertex.maximize = fullscreen_view.png
icon.functiongraph.action.vertex.minimize = graph_view.png icon.plugin.functiongraph.action.vertex.minimize = graph_view.png
icon.functiongraph.action.vertex.group = shape_handles.png icon.plugin.functiongraph.action.vertex.group = shape_handles.png
icon.functiongraph.action.vertex.group.add = shape_square_add.png icon.plugin.functiongraph.action.vertex.group.add = shape_square_add.png
icon.functiongraph.action.vertex.regroup = edit-redo.png icon.plugin.functiongraph.action.vertex.regroup = edit-redo.png
icon.functiongraph.action.vertex.ungroup = shape_ungroup.png icon.plugin.functiongraph.action.vertex.ungroup = shape_ungroup.png
icon.functiongraph.action.vertex.choose.color = paintbrush.png icon.plugin.functiongraph.action.vertex.choose.color = paintbrush.png
icon.functiongraph.action.vertex.choose.color.palette = palette.png icon.plugin.functiongraph.action.vertex.choose.color.palette = palette.png
icon.functiongraph.action.vertex.edit.label = id.png icon.plugin.functiongraph.action.vertex.edit.label = id.png
icon.functiongraph.action.vertex.full.screen = fullscreen_view.png icon.plugin.functiongraph.action.vertex.full.screen = fullscreen_view.png
icon.functiongraph.action.vertex.edit.format = field.header.png icon.plugin.functiongraph.action.vertex.edit.format = field.header.png
icon.functiongraph.action.viewer.clone = icon.provider.clone icon.plugin.functiongraph.action.viewer.clone = icon.provider.clone
icon.functiongraph.action.viewer.layout = preferences-system.png icon.plugin.functiongraph.action.viewer.layout = preferences-system.png
icon.functiongraph.action.viewer.vertex.hover.paths.to.vertex = fgin.png icon.plugin.functiongraph.action.viewer.vertex.hover.paths.to.vertex = fgin.png
icon.functiongraph.action.viewer.vertex.hover.paths.from.vertex = fgout.png icon.plugin.functiongraph.action.viewer.vertex.hover.paths.from.vertex = fgout.png
icon.functiongraph.action.viewer.vertex.hover.paths.from.to.vertex = fginout.png icon.plugin.functiongraph.action.viewer.vertex.hover.paths.from.to.vertex = fginout.png
icon.functiongraph.action.viewer.vertex.hover.paths.all = fgpaths.png icon.plugin.functiongraph.action.viewer.vertex.hover.paths.all = fgpaths.png
icon.functiongraph.action.viewer.vertex.hover.cycles = fgloop.png icon.plugin.functiongraph.action.viewer.vertex.hover.cycles = fgloop.png
icon.functiongraph.action.viewer.vertex.hover.cycles.all = fgloopall.png icon.plugin.functiongraph.action.viewer.vertex.hover.cycles.all = fgloopall.png
icon.functiongraph.action.viewer.vertex.hover.scoped.flow.forward = fgblock.png icon.plugin.functiongraph.action.viewer.vertex.hover.scoped.flow.forward = fgblock.png
icon.functiongraph.action.viewer.vertex.hover.scoped.flow.reverse = fgrevblock.png icon.plugin.functiongraph.action.viewer.vertex.hover.scoped.flow.reverse = fgrevblock.png
icon.functiongraph.action.viewer.vertex.hover.off = hoverOff.gif icon.plugin.functiongraph.action.viewer.vertex.hover.off = hoverOff.gif
icon.functiongraph.action.viewer.home = house.png icon.plugin.functiongraph.action.viewer.home = house.png
icon.functiongraph.action.viewer.reset = icon.refresh icon.plugin.functiongraph.action.viewer.reset = icon.refresh
icon.functiongraph.action.provider = function_graph.png icon.plugin.functiongraph.action.provider = function_graph.png
icon.functiongraph.action.provider.satellite = network-wireless-16.png icon.plugin.functiongraph.action.provider.satellite = network-wireless-16.png
[Dark Defaults] [Dark Defaults]
// color.bg.functiongraph = color.bg color.bg.plugin.functiongraph.vertex.group = rgb(226, 222, 179) // TODO confirm value
// color.fg.label.picked = color.fg color.bg.plugin.functiongraph.edge.fall.through.highlight = rgb(165, 76, 80)
// color.fg.label.non.picked = color.fg.disabled color.bg.plugin.functiongraph.edge.jump.conditional.highlight = rgb(95, 160, 196)
color.bg.plugin.functiongraph.edge.jump.unconditional.highlight = rgb(140, 162, 88)
color.bg.functiongraph.vertex.group = rgb(226, 222, 179) // TODO confirm value
// color.bg.functiongraph.vertex.entry = color.palette.lightgreen
// color.bg.functiongraph.vertex.exit = color.palette.lightred
// color.bg.functiongraph.vertex.picked = color.palette.yellow
// color.bg.functiongraph.edge.fall.through = color.flowtype.fall.through
color.bg.functiongraph.edge.fall.through.highlight = rgb(165, 76, 80)
// color.bg.functiongraph.edge.jump.conditional = color.flowtype.jump.conditional
color.bg.functiongraph.edge.jump.conditional.highlight = rgb(95, 160, 196)
// color.bg.functiongraph.edge.jump.unconditional = color.flowtype.jump.unconditional
color.bg.functiongraph.edge.jump.unconditional.highlight = rgb(140, 162, 88)
// TODO dark version color.bg.functiongraph.paint.icon = // TODO

View file

@ -61,13 +61,13 @@ class FGActionManager {
private static final String LAYOUT_CLASS_NAME = "LAYOUT_CLASS_NAME"; private static final String LAYOUT_CLASS_NAME = "LAYOUT_CLASS_NAME";
//@formatter:off //@formatter:off
private static final Icon GROUP_ICON = new GIcon("icon.functiongraph.action.vertex.group"); private static final Icon GROUP_ICON = new GIcon("icon.plugin.functiongraph.action.vertex.group");
private static final Icon GROUP_ADD_ICON = new GIcon("icon.functiongraph.action.vertex.group.add"); private static final Icon GROUP_ADD_ICON = new GIcon("icon.plugin.functiongraph.action.vertex.group.add");
private static final Icon UNGROUP_ICON = new GIcon("icon.functiongraph.action.vertex.ungroup"); private static final Icon UNGROUP_ICON = new GIcon("icon.plugin.functiongraph.action.vertex.ungroup");
private static final Icon EDIT_ICON = new GIcon("icon.functiongraph.action.vertex.edit.label"); private static final Icon EDIT_ICON = new GIcon("icon.plugin.functiongraph.action.vertex.edit.label");
private static final Icon FULL_SCREEN_ICON = new GIcon("icon.functiongraph.action.vertex.full.screen"); private static final Icon FULL_SCREEN_ICON = new GIcon("icon.plugin.functiongraph.action.vertex.full.screen");
private static final Icon XREFS_ICON = new GIcon("icon.functiongraph.action.vertex.full.screen"); private static final Icon XREFS_ICON = new GIcon("icon.plugin.functiongraph.action.vertex.full.screen");
//@formatter:off //@formatter:off
private PluginTool tool; private PluginTool tool;
@ -127,7 +127,7 @@ class FGActionManager {
// subgroup 3, after the refresh and layout actions // subgroup 3, after the refresh and layout actions
chooseFormatsAction.setToolBarData(new ToolBarData( chooseFormatsAction.setToolBarData(new ToolBarData(
new GIcon("icon.functiongraph.action.vertex.edit.format"), layoutGroup, "3")); new GIcon("icon.plugin.functiongraph.action.vertex.edit.format"), layoutGroup, "3"));
chooseFormatsAction.setHelpLocation( chooseFormatsAction.setHelpLocation(
new HelpLocation("FunctionGraphPlugin", "Function_Graph_Action_Format")); new HelpLocation("FunctionGraphPlugin", "Function_Graph_Action_Format"));
@ -144,7 +144,7 @@ class FGActionManager {
} }
}; };
homeAction.setToolBarData( homeAction.setToolBarData(
new ToolBarData(new GIcon("icon.functiongraph.action.viewer.home"), toolBarGroup1)); new ToolBarData(new GIcon("icon.plugin.functiongraph.action.viewer.home"), toolBarGroup1));
homeAction.setHelpLocation( homeAction.setHelpLocation(
new HelpLocation("FunctionGraphPlugin", "Function_Graph_Action_Home")); new HelpLocation("FunctionGraphPlugin", "Function_Graph_Action_Home"));
@ -166,7 +166,7 @@ class FGActionManager {
} }
}; };
resetGraphAction.setToolBarData( resetGraphAction.setToolBarData(
new ToolBarData(new GIcon("icon.functiongraph.action.viewer.reset"), layoutGroup, "1")); new ToolBarData(new GIcon("icon.plugin.functiongraph.action.viewer.reset"), layoutGroup, "1"));
resetGraphAction.setDescription("<html>Reloads the graph--All positioning and grouping " + resetGraphAction.setDescription("<html>Reloads the graph--All positioning and grouping " +
"information is <b>lost</b>"); "information is <b>lost</b>");
resetGraphAction.setHelpLocation( resetGraphAction.setHelpLocation(
@ -659,7 +659,7 @@ class FGActionManager {
return controller.getGraphedFunction() != null; return controller.getGraphedFunction() != null;
} }
}; };
Icon image = new GIcon("icon.functiongraph.action.viewer.clone"); Icon image = new GIcon("icon.plugin.functiongraph.action.viewer.clone");
cloneAction.setToolBarData(new ToolBarData(image, toolbarEndGroup)); cloneAction.setToolBarData(new ToolBarData(image, toolbarEndGroup));
cloneAction.setDescription( cloneAction.setDescription(
"Create a snapshot (disconnected) copy of this Function Graph window "); "Create a snapshot (disconnected) copy of this Function Graph window ");
@ -889,7 +889,7 @@ class FGActionManager {
// This icon will display when the action has no icon. This allows actions with no good // This icon will display when the action has no icon. This allows actions with no good
// icon to be blank in the menu, but to use this icon on the toolbar. // icon to be blank in the menu, but to use this icon on the toolbar.
layoutAction.setDefaultIcon(new GIcon("icon.functiongraph.action.viewer.layout")); layoutAction.setDefaultIcon(new GIcon("icon.plugin.functiongraph.action.viewer.layout"));
List<ActionState<FGLayoutProvider>> actionStates = loadActionStatesForLayoutProviders(); List<ActionState<FGLayoutProvider>> actionStates = loadActionStatesForLayoutProviders();
for (ActionState<FGLayoutProvider> actionState : actionStates) { for (ActionState<FGLayoutProvider> actionState : actionStates) {
@ -944,14 +944,14 @@ class FGActionManager {
private void addVertexHoverModeAction(String group) { private void addVertexHoverModeAction(String group) {
//@formatter:off //@formatter:off
Icon pathsToVertexIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.paths.to.vertex"); Icon pathsToVertexIcon = new GIcon("icon.plugin.functiongraph.action.viewer.vertex.hover.paths.to.vertex");
Icon pathsFromVertexIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.paths.from.vertex"); Icon pathsFromVertexIcon = new GIcon("icon.plugin.functiongraph.action.viewer.vertex.hover.paths.from.vertex");
Icon pathsFromToVertexIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.paths.from.to.vertex"); Icon pathsFromToVertexIcon = new GIcon("icon.plugin.functiongraph.action.viewer.vertex.hover.paths.from.to.vertex");
Icon pathsIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.paths.all"); Icon pathsIcon = new GIcon("icon.plugin.functiongraph.action.viewer.vertex.hover.paths.all");
Icon cyclesIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.cycles"); Icon cyclesIcon = new GIcon("icon.plugin.functiongraph.action.viewer.vertex.hover.cycles");
Icon forwardScopedIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.scoped.flow.forward"); Icon forwardScopedIcon = new GIcon("icon.plugin.functiongraph.action.viewer.vertex.hover.scoped.flow.forward");
Icon reverseScopedIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.scoped.flow.reverse"); Icon reverseScopedIcon = new GIcon("icon.plugin.functiongraph.action.viewer.vertex.hover.scoped.flow.reverse");
Icon nothingIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.off"); Icon nothingIcon = new GIcon("icon.plugin.functiongraph.action.viewer.vertex.hover.off");
//@formatter:off //@formatter:off
HelpLocation pathHelpLocation = HelpLocation pathHelpLocation =
@ -1020,16 +1020,16 @@ class FGActionManager {
} }
private void addVertexSelectedModeAction(String group) { private void addVertexSelectedModeAction(String group) {
//@formatter:off //@formatter:off
Icon pathsToVertexIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.paths.to.vertex"); Icon pathsToVertexIcon = new GIcon("icon.plugin.functiongraph.action.viewer.vertex.hover.paths.to.vertex");
Icon pathsFromVertexIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.paths.from.vertex"); Icon pathsFromVertexIcon = new GIcon("icon.plugin.functiongraph.action.viewer.vertex.hover.paths.from.vertex");
Icon pathsFromToVertexIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.paths.from.to.vertex"); Icon pathsFromToVertexIcon = new GIcon("icon.plugin.functiongraph.action.viewer.vertex.hover.paths.from.to.vertex");
Icon cyclesIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.cycles"); Icon cyclesIcon = new GIcon("icon.plugin.functiongraph.action.viewer.vertex.hover.cycles");
Icon allCyclesIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.cycles.all"); Icon allCyclesIcon = new GIcon("icon.plugin.functiongraph.action.viewer.vertex.hover.cycles.all");
Icon forwardScopedIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.scoped.flow.forward"); Icon forwardScopedIcon = new GIcon("icon.plugin.functiongraph.action.viewer.vertex.hover.scoped.flow.forward");
Icon reverseScopedIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.scoped.flow.reverse"); Icon reverseScopedIcon = new GIcon("icon.plugin.functiongraph.action.viewer.vertex.hover.scoped.flow.reverse");
Icon nothingIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.off"); Icon nothingIcon = new GIcon("icon.plugin.functiongraph.action.viewer.vertex.hover.off");
//@formatter:off //@formatter:off

View file

@ -30,7 +30,8 @@ import ghidra.util.HelpLocation;
public class FGSatelliteUndockedProvider extends ComponentProviderAdapter { public class FGSatelliteUndockedProvider extends ComponentProviderAdapter {
static final String NAME = "Function Graph Satellite"; static final String NAME = "Function Graph Satellite";
private static final Icon ICON = new GIcon("icon.functiongraph.action.provider.satellite"); private static final Icon ICON =
new GIcon("icon.plugin.functiongraph.action.provider.satellite");
private FGController controller; private FGController controller;
private JComponent satelliteComponent; private JComponent satelliteComponent;

View file

@ -61,7 +61,7 @@ public class FunctionGraphPlugin extends ProgramPlugin implements OptionsChangeL
static final String OPTIONS_NAME_PATH = static final String OPTIONS_NAME_PATH =
ToolConstants.GRAPH_OPTIONS + Options.DELIMITER + FUNCTION_GRAPH_NAME; ToolConstants.GRAPH_OPTIONS + Options.DELIMITER + FUNCTION_GRAPH_NAME;
static final Icon ICON = new GIcon("icon.functiongraph.action.provider"); static final Icon ICON = new GIcon("icon.plugin.functiongraph.action.provider");
private static final String USER_DEFINED_FORMAT_CONFIG_NAME = "USER_DEFINED_FORMAT_MANAGER"; private static final String USER_DEFINED_FORMAT_CONFIG_NAME = "USER_DEFINED_FORMAT_MANAGER";

View file

@ -46,9 +46,9 @@ import ghidra.util.UndefinedFunction;
public class FGComponent extends GraphComponent<FGVertex, FGEdge, FunctionGraph> { public class FGComponent extends GraphComponent<FGVertex, FGEdge, FunctionGraph> {
//@formatter:off //@formatter:off
private static final Color PICKED_COLOR = new GColor("color.bg.functiongraph.vertex.picked"); private static final Color PICKED_COLOR = new GColor("color.bg.plugin.functiongraph.vertex.picked");
private static final Color START_COLOR = new GColor("color.bg.functiongraph.vertex.entry"); private static final Color START_COLOR = new GColor("color.bg.plugin.functiongraph.vertex.entry");
private static final Color END_COLOR = new GColor("color.bg.functiongraph.vertex.exit"); private static final Color END_COLOR = new GColor("color.bg.plugin.functiongraph.vertex.exit");
private static final Color UNDEFINED_FUNCTION_COLOR = new GColor("color.bg.undefined"); private static final Color UNDEFINED_FUNCTION_COLOR = new GColor("color.bg.undefined");
//@formatter:on //@formatter:on
@ -65,7 +65,7 @@ public class FGComponent extends GraphComponent<FGVertex, FGEdge, FunctionGraph>
public FGComponent(FGView functionGraphView, FGData data, public FGComponent(FGView functionGraphView, FGData data,
LayoutProvider<FGVertex, FGEdge, FunctionGraph> layoutProvider) { LayoutProvider<FGVertex, FGEdge, FunctionGraph> layoutProvider) {
// Note: we cannot call super here, as we need to set our variables below before // Note: we cannot call super here, as we need to set our variables below before
// the base class builds. // the base class builds.
// super(data.getFunctionGraph()); // super(data.getFunctionGraph());
@ -84,8 +84,8 @@ public class FGComponent extends GraphComponent<FGVertex, FGEdge, FunctionGraph>
setStatusMessage(message); setStatusMessage(message);
} }
// Note: can't do this here due to timing...restoring the groups may trigger // Note: can't do this here due to timing...restoring the groups may trigger
// callbacks into the view code, which at the point of this constructor has // callbacks into the view code, which at the point of this constructor has
// not yet been initialized // not yet been initialized
// //
// restoreSettings(); // restoreSettings();
@ -217,11 +217,12 @@ public class FGComponent extends GraphComponent<FGVertex, FGEdge, FunctionGraph>
com.google.common.base.Function<FGEdge, String> edgeLabelTransformer = e -> e.getLabel(); com.google.common.base.Function<FGEdge, String> edgeLabelTransformer = e -> e.getLabel();
renderContext.setEdgeLabelTransformer(edgeLabelTransformer); renderContext.setEdgeLabelTransformer(edgeLabelTransformer);
// note: this label renderer is the stamp for the label; we use another edge label // note: this label renderer is the stamp for the label; we use another edge label
// renderer inside of the VisualGraphRenderer // renderer inside of the VisualGraphRenderer
VisualGraphEdgeLabelRenderer edgeLabelRenderer = VisualGraphEdgeLabelRenderer edgeLabelRenderer = new VisualGraphEdgeLabelRenderer(
new VisualGraphEdgeLabelRenderer(new GColor("color.fg.label.picked")); new GColor("color.fg.plugin.functiongraph.label.picked"));
edgeLabelRenderer.setNonPickedForegroundColor(new GColor("color.fg.label.non.picked")); edgeLabelRenderer.setNonPickedForegroundColor(
new GColor("color.fg.plugin.functiongraph.label.non.picked"));
edgeLabelRenderer.setRotateEdgeLabels(false); edgeLabelRenderer.setRotateEdgeLabels(false);
renderContext.setEdgeLabelRenderer(edgeLabelRenderer); renderContext.setEdgeLabelRenderer(edgeLabelRenderer);
@ -229,16 +230,16 @@ public class FGComponent extends GraphComponent<FGVertex, FGEdge, FunctionGraph>
Color bgColor = vgOptions.getGraphBackgroundColor(); Color bgColor = vgOptions.getGraphBackgroundColor();
if (vgOptions.isDefaultBackgroundColor(bgColor)) { if (vgOptions.isDefaultBackgroundColor(bgColor)) {
// Give user notice when seeing the graph for a non-function (such as an undefined // Give user notice when seeing the graph for a non-function (such as an undefined
// function), as this is typical for Ghidra UI widgets. // function), as this is typical for Ghidra UI widgets.
// Don't do this if the user has manually set the background color (this would require // Don't do this if the user has manually set the background color (this would require
// another option). // another option).
Function function = functionGraphData.getFunction(); Function function = functionGraphData.getFunction();
if (function instanceof UndefinedFunction) { if (function instanceof UndefinedFunction) {
viewer.setBackground(UNDEFINED_FUNCTION_COLOR); viewer.setBackground(UNDEFINED_FUNCTION_COLOR);
} }
else { else {
viewer.setBackground(new GColor("color.bg.functiongraph")); viewer.setBackground(new GColor("color.bg.plugin.functiongraph"));
} }
} }
@ -274,11 +275,11 @@ public class FGComponent extends GraphComponent<FGVertex, FGEdge, FunctionGraph>
//================================================================================================== //==================================================================================================
// Accessor Methods // Accessor Methods
//================================================================================================== //==================================================================================================
@Override @Override
public void dispose() { public void dispose() {
// big assumption - the components below will be disposed by the controller, so we don't // big assumption - the components below will be disposed by the controller, so we don't
// dispose them, as they may be cached // dispose them, as they may be cached
functionGraph = null; functionGraph = null;
functionGraphData = null; functionGraphData = null;
@ -314,17 +315,17 @@ public class FGComponent extends GraphComponent<FGVertex, FGEdge, FunctionGraph>
public void setVertexFocused(FGVertex v, ProgramLocation location) { public void setVertexFocused(FGVertex v, ProgramLocation location) {
// //
// NOTE: we must focus the vertex before we set the program location, as focusing the // NOTE: we must focus the vertex before we set the program location, as focusing the
// vertex will turn on the cursor, which allows the cursor to be properly set when we // vertex will turn on the cursor, which allows the cursor to be properly set when we
// set the location. Reversing these two calls will not allow the cursor to be set // set the location. Reversing these two calls will not allow the cursor to be set
// properly. // properly.
// //
boolean wasFocused = v.isFocused(); boolean wasFocused = v.isFocused();
// As per the note above, the vertex must think it is focused to update its cursor, so // As per the note above, the vertex must think it is focused to update its cursor, so
// focus it, but DO NOT send out the event. The 'pick to sync' will not trigger an // focus it, but DO NOT send out the event. The 'pick to sync' will not trigger an
// API-wide notification of the focused vertex. // API-wide notification of the focused vertex.
gPickedState.pickToSync(v); gPickedState.pickToSync(v);
v.setProgramLocation(location); v.setProgramLocation(location);

View file

@ -21,7 +21,7 @@ import generic.theme.GIcon;
public abstract class ExperimentalLayoutProvider extends FGLayoutProviderExtensionPoint { public abstract class ExperimentalLayoutProvider extends FGLayoutProviderExtensionPoint {
private static final Icon ICON = new GIcon("icon.functiongraph.layout.experimental"); private static final Icon ICON = new GIcon("icon.plugin.functiongraph.layout.experimental");
@Override @Override
public Icon getActionIcon() { public Icon getActionIcon() {

View file

@ -44,7 +44,7 @@ import ghidra.util.layout.VerticalLayout;
import util.CollectionUtils; import util.CollectionUtils;
/** /**
* This panel looks similar in appearance to the LisGraphComponentPanel, with a header, actions * This panel looks similar in appearance to the LisGraphComponentPanel, with a header, actions
* and a body. * and a body.
*/ */
public class GroupedFunctionGraphComponentPanel extends AbstractGraphComponentPanel { public class GroupedFunctionGraphComponentPanel extends AbstractGraphComponentPanel {
@ -139,10 +139,8 @@ public class GroupedFunctionGraphComponentPanel extends AbstractGraphComponentPa
add(genericHeader, BorderLayout.NORTH); add(genericHeader, BorderLayout.NORTH);
add(contentPanel, BorderLayout.CENTER); add(contentPanel, BorderLayout.CENTER);
Border beveledBorder = Border beveledBorder = BorderFactory.createBevelBorder(BevelBorder.RAISED,
BorderFactory.createBevelBorder(BevelBorder.RAISED, new GColor("color.border.bevel.highlight"), new GColor("color.border.bevel.shadow"));
new GColor("color.border.bevel.highlight"),
new GColor("color.border.bevel.shadow"));
setBorder(beveledBorder); setBorder(beveledBorder);
@ -156,7 +154,7 @@ public class GroupedFunctionGraphComponentPanel extends AbstractGraphComponentPa
} }
/** /**
* A bit of a hack that triggers the text area to update its preferred height now before we * A bit of a hack that triggers the text area to update its preferred height now before we
* render so that it doesn't change later. * render so that it doesn't change later.
*/ */
private void updateTextAreaSizeToForceTextLayout() { private void updateTextAreaSizeToForceTextLayout() {
@ -189,7 +187,7 @@ public class GroupedFunctionGraphComponentPanel extends AbstractGraphComponentPa
} }
}; };
groupAction.setDescription("Combine selected vertices into one vertex"); groupAction.setDescription("Combine selected vertices into one vertex");
Icon imageIcon = new GIcon("icon.functiongraph.action.vertex.group"); Icon imageIcon = new GIcon("icon.plugin.functiongraph.action.vertex.group");
groupAction.setToolBarData(new ToolBarData(imageIcon, secondGroup)); groupAction.setToolBarData(new ToolBarData(imageIcon, secondGroup));
groupAction.setHelpLocation( groupAction.setHelpLocation(
new HelpLocation("FunctionGraphPlugin", "Group_Vertex_Action_Group")); new HelpLocation("FunctionGraphPlugin", "Group_Vertex_Action_Group"));
@ -202,10 +200,10 @@ public class GroupedFunctionGraphComponentPanel extends AbstractGraphComponentPa
} }
}; };
regroupAction.setDescription("Restore vertex and siblings back to group form"); regroupAction.setDescription("Restore vertex and siblings back to group form");
imageIcon = new GIcon("icon.functiongraph.action.vertex.regroup"); imageIcon = new GIcon("icon.plugin.functiongraph.action.vertex.regroup");
regroupAction.setToolBarData(new ToolBarData(imageIcon, secondGroup)); regroupAction.setToolBarData(new ToolBarData(imageIcon, secondGroup));
regroupAction.setHelpLocation( regroupAction
new HelpLocation("FunctionGraphPlugin", "Vertex_Action_Regroup")); .setHelpLocation(new HelpLocation("FunctionGraphPlugin", "Vertex_Action_Regroup"));
// ungroup // ungroup
ungroupAction = new DockingAction("Ungroup Vertices", FunctionGraphPlugin.class.getName()) { ungroupAction = new DockingAction("Ungroup Vertices", FunctionGraphPlugin.class.getName()) {
@ -215,10 +213,10 @@ public class GroupedFunctionGraphComponentPanel extends AbstractGraphComponentPa
} }
}; };
ungroupAction.setDescription("Ungroup selected vertices into individual vertex"); ungroupAction.setDescription("Ungroup selected vertices into individual vertex");
imageIcon = new GIcon("icon.functiongraph.action.vertex.ungroup"); imageIcon = new GIcon("icon.plugin.functiongraph.action.vertex.ungroup");
ungroupAction.setToolBarData(new ToolBarData(imageIcon, secondGroup)); ungroupAction.setToolBarData(new ToolBarData(imageIcon, secondGroup));
ungroupAction.setHelpLocation( ungroupAction
new HelpLocation("FunctionGraphPlugin", "Vertex_Action_Ungroup")); .setHelpLocation(new HelpLocation("FunctionGraphPlugin", "Vertex_Action_Ungroup"));
// add to group // add to group
addToGroupAction = new DockingAction("Add to Group", FunctionGraphPlugin.class.getName()) { addToGroupAction = new DockingAction("Add to Group", FunctionGraphPlugin.class.getName()) {
@ -243,12 +241,12 @@ public class GroupedFunctionGraphComponentPanel extends AbstractGraphComponentPa
} }
}; };
addToGroupAction.setDescription("Add the selected vertices to this group"); addToGroupAction.setDescription("Add the selected vertices to this group");
imageIcon = new GIcon("icon.functiongraph.action.vertex.group.add"); imageIcon = new GIcon("icon.plugin.functiongraph.action.vertex.group.add");
addToGroupAction.setToolBarData(new ToolBarData(imageIcon, secondGroup)); addToGroupAction.setToolBarData(new ToolBarData(imageIcon, secondGroup));
addToGroupAction.setHelpLocation( addToGroupAction.setHelpLocation(
new HelpLocation("FunctionGraphPlugin", "Vertex_Action_Group_Add")); new HelpLocation("FunctionGraphPlugin", "Vertex_Action_Group_Add"));
// color // color
setVertexMostRecentAction = new SetVertexMostRecentColorAction(controller, vertex); setVertexMostRecentAction = new SetVertexMostRecentColorAction(controller, vertex);
setVertexMostRecentAction.setHelpLocation( setVertexMostRecentAction.setHelpLocation(
new HelpLocation("FunctionGraphPlugin", "Group_Vertex_Action_Color")); new HelpLocation("FunctionGraphPlugin", "Group_Vertex_Action_Color"));
@ -614,7 +612,7 @@ public class GroupedFunctionGraphComponentPanel extends AbstractGraphComponentPa
@Override @Override
Component getMaximizedViewComponent() { Component getMaximizedViewComponent() {
// 7937:3 - this will need to change if we want to support showing only the vertices inside of // 7937:3 - this will need to change if we want to support showing only the vertices inside of
// this group vertex. To make this happen we probably need to be able to have the // this group vertex. To make this happen we probably need to be able to have the
// group vertex contain its own graph that we can set on the viewer if the user hits // group vertex contain its own graph that we can set on the viewer if the user hits
// the full display button. // the full display button.

View file

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
/** /**
* *
*/ */
package ghidra.app.plugin.core.functiongraph.graph.vertex; package ghidra.app.plugin.core.functiongraph.graph.vertex;
@ -115,10 +115,10 @@ public class ListingGraphComponentPanel extends AbstractGraphComponentPanel {
setLayout(new BorderLayout()); setLayout(new BorderLayout());
listingPanel = new FGVertexListingPanel(controller, controller.getMinimalFormatManager(), listingPanel = new FGVertexListingPanel(controller, controller.getMinimalFormatManager(),
program, addressSet); program, addressSet);
listingPanel.addButtonPressedListener( listingPanel
new FieldNavigator(tool, controller.getNavigatable())); .addButtonPressedListener(new FieldNavigator(tool, controller.getNavigatable()));
listingPanel.addButtonPressedListener( listingPanel
controller.getSharedHighlighterButtonPressedListener()); .addButtonPressedListener(controller.getSharedHighlighterButtonPressedListener());
listingPanel.setStringSelectionListener(controller.getSharedStringSelectionListener()); listingPanel.setStringSelectionListener(controller.getSharedStringSelectionListener());
fieldPanel = listingPanel.getFieldPanel(); fieldPanel = listingPanel.getFieldPanel();
@ -135,10 +135,8 @@ public class ListingGraphComponentPanel extends AbstractGraphComponentPanel {
add(listingPanel, BorderLayout.CENTER); add(listingPanel, BorderLayout.CENTER);
Border beveledBorder = Border beveledBorder = BorderFactory.createBevelBorder(BevelBorder.RAISED,
BorderFactory.createBevelBorder(BevelBorder.RAISED, new GColor("color.border.bevel.highlight"), new GColor("color.border.bevel.shadow"));
new GColor("color.border.bevel.highlight"),
new GColor("color.border.bevel.shadow"));
setBorder(beveledBorder); setBorder(beveledBorder);
addKeyListener(new FieldPanelKeyListener()); addKeyListener(new FieldPanelKeyListener());
@ -168,7 +166,7 @@ public class ListingGraphComponentPanel extends AbstractGraphComponentPanel {
createActions(); createActions();
// Sets the initial view of the graph to NOT be full-screen, and show // Sets the initial view of the graph to NOT be full-screen, and show
// the full function graph. // the full function graph.
setFormat(false); setFormat(false);
@ -234,7 +232,7 @@ public class ListingGraphComponentPanel extends AbstractGraphComponentPanel {
} }
/** /**
* Signals to rebuild this component's data model. This call should not do any real work * Signals to rebuild this component's data model. This call should not do any real work
* if the model is not 'dirty'. * if the model is not 'dirty'.
*/ */
@Override @Override
@ -298,11 +296,11 @@ public class ListingGraphComponentPanel extends AbstractGraphComponentPanel {
String secondGroup = "group2"; String secondGroup = "group2";
setVertexMostRecentAction = new SetVertexMostRecentColorAction(controller, vertex); setVertexMostRecentAction = new SetVertexMostRecentColorAction(controller, vertex);
setVertexMostRecentAction.setHelpLocation( setVertexMostRecentAction
new HelpLocation("FunctionGraphPlugin", "Vertex_Action_Color")); .setHelpLocation(new HelpLocation("FunctionGraphPlugin", "Vertex_Action_Color"));
ToolBarData toolBarData = setVertexMostRecentAction.getToolBarData(); ToolBarData toolBarData = setVertexMostRecentAction.getToolBarData();
setVertexMostRecentAction.setToolBarData( setVertexMostRecentAction
new ToolBarData(toolBarData.getIcon(), firstGroup)); .setToolBarData(new ToolBarData(toolBarData.getIcon(), firstGroup));
xrefsAction = new DockingAction("Jump To XRef", FunctionGraphPlugin.class.getName()) { xrefsAction = new DockingAction("Jump To XRef", FunctionGraphPlugin.class.getName()) {
@Override @Override
@ -311,7 +309,7 @@ public class ListingGraphComponentPanel extends AbstractGraphComponentPanel {
} }
}; };
xrefsAction.setDescription("Jump to a XRef"); xrefsAction.setDescription("Jump to a XRef");
Icon imageIcon = new GIcon("icon.functiongraph.action.vertex.xrefs"); Icon imageIcon = new GIcon("icon.plugin.functiongraph.action.vertex.xrefs");
xrefsAction.setToolBarData(new ToolBarData(imageIcon, firstGroup)); xrefsAction.setToolBarData(new ToolBarData(imageIcon, firstGroup));
xrefsAction.setHelpLocation(new HelpLocation("FunctionGraphPlugin", "Vertex_Action_XRefs")); xrefsAction.setHelpLocation(new HelpLocation("FunctionGraphPlugin", "Vertex_Action_XRefs"));
@ -325,7 +323,7 @@ public class ListingGraphComponentPanel extends AbstractGraphComponentPanel {
} }
}; };
maximizeViewModeAction.setDescription("Reverts view from graph to fullscreen"); maximizeViewModeAction.setDescription("Reverts view from graph to fullscreen");
imageIcon = new GIcon("icon.functiongraph.action.vertex.maximize"); imageIcon = new GIcon("icon.plugin.functiongraph.action.vertex.maximize");
maximizeViewModeAction.setToolBarData(new ToolBarData(imageIcon, firstGroup)); maximizeViewModeAction.setToolBarData(new ToolBarData(imageIcon, firstGroup));
maximizeViewModeAction.setHelpLocation( maximizeViewModeAction.setHelpLocation(
new HelpLocation("FunctionGraphPlugin", "Vertex_Action_Full_View")); new HelpLocation("FunctionGraphPlugin", "Vertex_Action_Full_View"));
@ -340,7 +338,7 @@ public class ListingGraphComponentPanel extends AbstractGraphComponentPanel {
} }
}; };
minimizeViewModeAction.setDescription("Reverts view from fullscreen to graph"); minimizeViewModeAction.setDescription("Reverts view from fullscreen to graph");
imageIcon = new GIcon("icon.functiongraph.action.vertex.minimize"); imageIcon = new GIcon("icon.plugin.functiongraph.action.vertex.minimize");
minimizeViewModeAction.setToolBarData(new ToolBarData(imageIcon, firstGroup)); minimizeViewModeAction.setToolBarData(new ToolBarData(imageIcon, firstGroup));
minimizeViewModeAction.setHelpLocation( minimizeViewModeAction.setHelpLocation(
new HelpLocation("FunctionGraphPlugin", "Vertex_Action_Full_View")); new HelpLocation("FunctionGraphPlugin", "Vertex_Action_Full_View"));
@ -352,7 +350,7 @@ public class ListingGraphComponentPanel extends AbstractGraphComponentPanel {
} }
}; };
groupAction.setDescription("Combine selected vertices into one vertex"); groupAction.setDescription("Combine selected vertices into one vertex");
imageIcon = new GIcon("icon.functiongraph.action.vertex.group"); imageIcon = new GIcon("icon.plugin.functiongraph.action.vertex.group");
groupAction.setToolBarData(new ToolBarData(imageIcon, secondGroup)); groupAction.setToolBarData(new ToolBarData(imageIcon, secondGroup));
groupAction.setHelpLocation(new HelpLocation("FunctionGraphPlugin", "Vertex_Action_Group")); groupAction.setHelpLocation(new HelpLocation("FunctionGraphPlugin", "Vertex_Action_Group"));
@ -363,11 +361,11 @@ public class ListingGraphComponentPanel extends AbstractGraphComponentPanel {
} }
}; };
regroupAction.setDescription("Restore vertex and siblings back to group form"); regroupAction.setDescription("Restore vertex and siblings back to group form");
imageIcon = new GIcon("icon.functiongraph.action.vertex.regroup"); imageIcon = new GIcon("icon.plugin.functiongraph.action.vertex.regroup");
regroupAction.setToolBarData(new ToolBarData(imageIcon, secondGroup)); regroupAction.setToolBarData(new ToolBarData(imageIcon, secondGroup));
regroupAction.setHelpLocation( regroupAction
new HelpLocation("FunctionGraphPlugin", "Vertex_Action_Regroup")); .setHelpLocation(new HelpLocation("FunctionGraphPlugin", "Vertex_Action_Regroup"));
genericHeader.actionAdded(setVertexMostRecentAction); genericHeader.actionAdded(setVertexMostRecentAction);
@ -673,7 +671,7 @@ public class ListingGraphComponentPanel extends AbstractGraphComponentPanel {
void dispose() { void dispose() {
// //
// Let's go a bit overboard and help the garbage collector cleanup by nulling out // Let's go a bit overboard and help the garbage collector cleanup by nulling out
// references and removing the data from Jung's graph // references and removing the data from Jung's graph
// //
@ -709,11 +707,10 @@ public class ListingGraphComponentPanel extends AbstractGraphComponentPanel {
//================================================================================================== //==================================================================================================
// Inner-inner classes // Inner-inner classes
//================================================================================================== //==================================================================================================
private class ListingHoverAdapter extends ListingHoverProvider { private class ListingHoverAdapter extends ListingHoverProvider {
public ListingHoverAdapter() { public ListingHoverAdapter() {
super();
} }
@Override @Override

View file

@ -49,17 +49,18 @@ public class SetVertexMostRecentColorAction extends MultiActionDockingAction {
this.controller = controller; this.controller = controller;
this.vertex = vertex; this.vertex = vertex;
setDescription("Set this block's background color"); setDescription("Set this block's background color");
colorIcon = new ColorIcon3D(new GColor("color.bg.functiongraph.paint.icon"), 12, 12) { colorIcon =
@Override new ColorIcon3D(new GColor("color.bg.plugin.functiongraph.paint.icon"), 12, 12) {
public Color getColor() { @Override
return controller.getMostRecentColor(); public Color getColor() {
} return controller.getMostRecentColor();
}; }
};
Icon blankIcon = new EmptyIcon(16, 16); Icon blankIcon = new EmptyIcon(16, 16);
MultiIcon multiIcon = new MultiIcon(blankIcon); MultiIcon multiIcon = new MultiIcon(blankIcon);
Icon paintBrushImage = new GIcon("icon.functiongraph.action.vertex.choose.color"); Icon paintBrushImage = new GIcon("icon.plugin.functiongraph.action.vertex.choose.color");
Icon scaledBrush = ResourceManager.getScaledIcon(paintBrushImage, 16, 16); Icon scaledBrush = ResourceManager.getScaledIcon(paintBrushImage, 16, 16);
Point point = getLowerLeftIconOffset(blankIcon, colorIcon); Point point = getLowerLeftIconOffset(blankIcon, colorIcon);
@ -100,11 +101,11 @@ public class SetVertexMostRecentColorAction extends MultiActionDockingAction {
colorProvider.setVertexColor(vertex, newColor); colorProvider.setVertexColor(vertex, newColor);
} }
}; };
Icon imageIcon = new GIcon("icon.functiongraph.action.vertex.choose.color.palette"); Icon imageIcon = new GIcon("icon.plugin.functiongraph.action.vertex.choose.color.palette");
chooseColorAction.setMenuBarData( chooseColorAction
new MenuData(new String[] { "Choose New Color" }, imageIcon)); .setMenuBarData(new MenuData(new String[] { "Choose New Color" }, imageIcon));
chooseColorAction.setHelpLocation( chooseColorAction
new HelpLocation("FunctionGraphPlugin", "Vertex_Action_Color")); .setHelpLocation(new HelpLocation("FunctionGraphPlugin", "Vertex_Action_Color"));
clearColorAction = clearColorAction =
new DockingAction("Clear Vertex Color", FunctionGraphPlugin.class.getName()) { new DockingAction("Clear Vertex Color", FunctionGraphPlugin.class.getName()) {
@ -115,8 +116,8 @@ public class SetVertexMostRecentColorAction extends MultiActionDockingAction {
} }
}; };
clearColorAction.setMenuBarData(new MenuData(new String[] { "Clear Background Color" })); clearColorAction.setMenuBarData(new MenuData(new String[] { "Clear Background Color" }));
clearColorAction.setHelpLocation( clearColorAction
new HelpLocation("FunctionGraphPlugin", "Vertex_Action_Color")); .setHelpLocation(new HelpLocation("FunctionGraphPlugin", "Vertex_Action_Color"));
} }
@Override @Override
@ -174,7 +175,7 @@ public class SetVertexMostRecentColorAction extends MultiActionDockingAction {
@Override @Override
/** /**
* This is used by our button above to show a popup. We need to override the * This is used by our button above to show a popup. We need to override the
* value here, since * value here, since
*/ */
public Point getLocationOnScreen() { public Point getLocationOnScreen() {
if (vertex.isFullScreenMode()) { if (vertex.isFullScreenMode()) {
@ -210,7 +211,7 @@ public class SetVertexMostRecentColorAction extends MultiActionDockingAction {
JComponent vertexComponentPanel = vertex.getComponent(); JComponent vertexComponentPanel = vertex.getComponent();
// Start with our (this button) coordinates and add those to our container's // Start with our (this button) coordinates and add those to our container's
// value recursively until we reach our vertex panel. We have to stop there, // value recursively until we reach our vertex panel. We have to stop there,
// since the vertex panel // since the vertex panel
int x = getX(); int x = getX();
int y = getY(); int y = getY();

View file

@ -90,17 +90,17 @@ public class FunctionGraphOptions extends VisualGraphOptions {
private boolean updateGroupColorsAutomatically = true; private boolean updateGroupColorsAutomatically = true;
//@formatter:off //@formatter:off
public static final Color DEFAULT_GROUP_BACKGROUND_COLOR = new GColor("color.bg.functiongraph.vertex.group"); public static final Color DEFAULT_GROUP_BACKGROUND_COLOR = new GColor("color.bg.plugin.functiongraph.vertex.group");
private GColor defaultVertexBackgroundColor = new GColor("color.bg.functiongraph"); private GColor defaultVertexBackgroundColor = new GColor("color.bg.plugin.functiongraph");
private GColor defaultGroupBackgroundColor = new GColor("color.bg.functiongraph.vertex.group"); private GColor defaultGroupBackgroundColor = new GColor("color.bg.plugin.functiongraph.vertex.group");
private GColor fallthroughEdgeColor = new GColor("color.bg.functiongraph.edge.fall.through"); private GColor fallthroughEdgeColor = new GColor("color.bg.plugin.functiongraph.edge.fall.through");
private GColor conditionalJumpEdgeColor = new GColor("color.bg.functiongraph.edge.jump.conditional"); private GColor conditionalJumpEdgeColor = new GColor("color.bg.plugin.functiongraph.edge.jump.conditional");
private GColor unconditionalJumpEdgeColor = new GColor("color.bg.functiongraph.edge.jump.unconditional"); private GColor unconditionalJumpEdgeColor = new GColor("color.bg.plugin.functiongraph.edge.jump.unconditional");
private GColor fallthroughEdgeHighlightColor = new GColor("color.bg.functiongraph.edge.fall.through.highlight"); private GColor fallthroughEdgeHighlightColor = new GColor("color.bg.plugin.functiongraph.edge.fall.through.highlight");
private GColor conditionalJumpEdgeHighlightColor = new GColor("color.bg.functiongraph.edge.jump.conditional.highlight"); private GColor conditionalJumpEdgeHighlightColor = new GColor("color.bg.plugin.functiongraph.edge.jump.conditional.highlight");
private GColor unconditionalJumpEdgeHighlightColor = new GColor("color.bg.functiongraph.edge.jump.unconditional.highlight"); private GColor unconditionalJumpEdgeHighlightColor = new GColor("color.bg.plugin.functiongraph.edge.jump.unconditional.highlight");
//@formatter:on //@formatter:on
private boolean useFullSizeTooltip = false; private boolean useFullSizeTooltip = false;
@ -174,12 +174,10 @@ public class FunctionGraphOptions extends VisualGraphOptions {
new HelpLocation(OWNER, "Layout_Compressing"), USE_CONDENSED_LAYOUT_DESCRIPTION); new HelpLocation(OWNER, "Layout_Compressing"), USE_CONDENSED_LAYOUT_DESCRIPTION);
options.registerThemeColorBinding(DEFAULT_VERTEX_BACKGROUND_COLOR_KEY, options.registerThemeColorBinding(DEFAULT_VERTEX_BACKGROUND_COLOR_KEY,
defaultVertexBackgroundColor.getId(), defaultVertexBackgroundColor.getId(), help, DEFAULT_VERTEX_BACKGROUND_COLOR_DESCRPTION);
help, DEFAULT_VERTEX_BACKGROUND_COLOR_DESCRPTION);
options.registerThemeColorBinding(DEFAULT_GROUP_BACKGROUND_COLOR_KEY, options.registerThemeColorBinding(DEFAULT_GROUP_BACKGROUND_COLOR_KEY,
defaultGroupBackgroundColor.getId(), defaultGroupBackgroundColor.getId(), help, DEFAULT_GROUP_BACKGROUND_COLOR_DESCRPTION);
help, DEFAULT_GROUP_BACKGROUND_COLOR_DESCRPTION);
options.registerOption(UPDATE_GROUP_AND_UNGROUP_COLORS, updateGroupColorsAutomatically, options.registerOption(UPDATE_GROUP_AND_UNGROUP_COLORS, updateGroupColorsAutomatically,
help, UPDATE_GROUP_AND_UNGROUP_COLORS_DESCRIPTION); help, UPDATE_GROUP_AND_UNGROUP_COLORS_DESCRIPTION);
@ -191,12 +189,10 @@ public class FunctionGraphOptions extends VisualGraphOptions {
conditionalJumpEdgeColor.getId(), help, "Conditional jump edge color"); conditionalJumpEdgeColor.getId(), help, "Conditional jump edge color");
options.registerThemeColorBinding(EDGE_UNCONDITIONAL_JUMP_COLOR_KEY, options.registerThemeColorBinding(EDGE_UNCONDITIONAL_JUMP_COLOR_KEY,
unconditionalJumpEdgeColor.getId(), help, unconditionalJumpEdgeColor.getId(), help, "Unconditional jump edge color");
"Unconditional jump edge color");
options.registerThemeColorBinding(EDGE_FALLTHROUGH_COLOR_KEY, fallthroughEdgeColor.getId(), options.registerThemeColorBinding(EDGE_FALLTHROUGH_COLOR_KEY, fallthroughEdgeColor.getId(),
help, help, "Fallthrough edge color");
"Fallthrough edge color");
options.registerThemeColorBinding(EDGE_CONDITIONAL_JUMP_HIGHLIGHT_COLOR_KEY, options.registerThemeColorBinding(EDGE_CONDITIONAL_JUMP_HIGHLIGHT_COLOR_KEY,
conditionalJumpEdgeHighlightColor.getId(), help, conditionalJumpEdgeHighlightColor.getId(), help,
@ -207,8 +203,8 @@ public class FunctionGraphOptions extends VisualGraphOptions {
"Unconditional jump edge color when highlighting the reachablity of a vertex"); "Unconditional jump edge color when highlighting the reachablity of a vertex");
options.registerThemeColorBinding(EDGE_FALLTHROUGH_HIGHLIGHT_COLOR_KEY, options.registerThemeColorBinding(EDGE_FALLTHROUGH_HIGHLIGHT_COLOR_KEY,
fallthroughEdgeHighlightColor.getId(), fallthroughEdgeHighlightColor.getId(), help,
help, "Fallthrough edge color when highlighting the reachablity of a vertex"); "Fallthrough edge color when highlighting the reachablity of a vertex");
} }

View file

@ -1,7 +1,7 @@
[Defaults] [Defaults]
icon.functiongraph.layout.nested.code = function_graph_code_flow.png icon.plugin.functiongraph.layout.nested.code = function_graph_code_flow.png
[Dark Defaults] [Dark Defaults]

View file

@ -24,7 +24,7 @@ import ghidra.util.task.TaskMonitor;
public class DecompilerNestedLayoutProvider extends FGLayoutProviderExtensionPoint { public class DecompilerNestedLayoutProvider extends FGLayoutProviderExtensionPoint {
private static final Icon ICON = new GIcon("icon.functiongraph.layout.nested.code"); private static final Icon ICON = new GIcon("icon.plugin.functiongraph.layout.nested.code");
static final String LAYOUT_NAME = "Nested Code Layout"; static final String LAYOUT_NAME = "Nested Code Layout";
@Override @Override

View file

@ -1,29 +1,21 @@
[Defaults] [Defaults]
color.bg.fcg.vertex.default = rgb(110, 197, 174) // chill green color.bg.plugin.fcg.vertex.default = rgb(110, 197, 174) // chill green
color.bg.fcg.vertex.toobig = color.palette.lightgray color.bg.plugin.fcg.vertex.toobig = color.palette.lightgray
color.bg.fcg.edge.primary.direct = rgb(143, 197, 143) // light pale green color.bg.plugin.fcg.edge.primary.direct = rgb(143, 197, 143) // light pale green
color.bg.fcg.edge.primary.direct.selected = rgb(68, 171, 96) // lighter green color.bg.plugin.fcg.edge.primary.direct.selected = rgb(68, 171, 96) // lighter green
color.bg.fcg.edge.primary.indirect = rgb(233, 233, 233) // lightGray color.bg.plugin.fcg.edge.primary.indirect = rgb(233, 233, 233) // lightGray
color.bg.fcg.edge.primary.indirect.selected = rgb(201, 195, 195) color.bg.plugin.fcg.edge.primary.indirect.selected = rgb(201, 195, 195)
// the satellite gets too cluttered, so wash out the edges // the satellite gets too cluttered, so wash out the edges
color.bg.fcg.edge.satellite.direct = rgba(0,0,0,0.1) // 'washed out black' color.bg.plugin.fcg.edge.satellite.direct = rgba(0,0,0,0.1) // 'washed out black'
color.bg.fcg.edge.satellite.indirect = rgba(125, 125, 125, 25) // 'washed out gray' color.bg.plugin.fcg.edge.satellite.indirect = rgba(125, 125, 125, 25) // 'washed out gray'
icon.fcg.layout.bow.tie = color_swatch.png icon.plugin.fcg.layout.bow.tie = color_swatch.png
[Dark Defaults] [Dark Defaults]
// TODO dark colors color.bg.plugin.fcg.edge.satellite.direct = rgba(143, 197, 143, 100) // light pale green
// TODO color.bg.fcg.vertex.default = rgb(110, 197, 174) // chill green color.bg.plugin.fcg.edge.satellite.indirect = rgba(233, 233, 233, 100) // lightGray
// TODO color.bg.fcg.vertex.toobig = color.palette.lightGray
// TODO color.bg.fcg.edge.primary.direct = rgb(143, 197, 143) // lightGreen
// TODO color.bg.fcg.edge.primary.indirect = rgb(233, 233, 233) // lightGray
// the satellite gets too cluttered, so wash out the edges
// TODO color.bg.fcg.edge.satellite.direct = rgba(0,0,0,0.1) // 'washed out black'
// TODO color.bg.fcg.edge.satellite.indirect = rgba(125, 125, 125, 25) // 'washed out gray'

View file

@ -45,8 +45,8 @@ import resources.ResourceManager;
public class FcgVertex extends AbstractVisualVertex implements VertexShapeProvider { public class FcgVertex extends AbstractVisualVertex implements VertexShapeProvider {
//@formatter:off //@formatter:off
public static final Color DEFAULT_VERTEX_SHAPE_COLOR = new GColor("color.bg.fcg.vertex.default"); public static final Color DEFAULT_VERTEX_SHAPE_COLOR = new GColor("color.bg.plugin.fcg.vertex.default");
private static final Color TOO_BIG_VERTEX_SHAPE_COLOR = new GColor("color.bg.fcg.vertex.toobig"); private static final Color TOO_BIG_VERTEX_SHAPE_COLOR = new GColor("color.bg.plugin.fcg.vertex.toobig");
//@formatter:on //@formatter:on
public static final Icon NOT_ALLOWED_ICON = Icons.ERROR_ICON; public static final Icon NOT_ALLOWED_ICON = Icons.ERROR_ICON;
@ -55,7 +55,7 @@ public class FcgVertex extends AbstractVisualVertex implements VertexShapeProvid
private static final Icon COLLAPSE_ICON = private static final Icon COLLAPSE_ICON =
ResourceManager.getScaledIcon(Icons.COLLAPSE_ALL_ICON, 10, 10); ResourceManager.getScaledIcon(Icons.COLLAPSE_ALL_ICON, 10, 10);
// higher numbered layers go on top // higher numbered layers go on top
private static final Integer VERTEX_SHAPE_LAYER = 100; private static final Integer VERTEX_SHAPE_LAYER = 100;
private static final Integer TOGGLE_BUTTON_LAYER = 200; private static final Integer TOGGLE_BUTTON_LAYER = 200;
private static final Integer LABEL_LAYER = 300; private static final Integer LABEL_LAYER = 300;
@ -64,7 +64,7 @@ public class FcgVertex extends AbstractVisualVertex implements VertexShapeProvid
private static final int VERTEX_SHAPE_SIZE = 50; private static final int VERTEX_SHAPE_SIZE = 50;
// TODO to be made an option in an upcoming ticket // TODO to be made an option in an upcoming ticket
// based upon the default function name, plus some extra // based upon the default function name, plus some extra
private static final int MAX_NAME_LENGTH = 30; private static final int MAX_NAME_LENGTH = 30;
private Function function; private Function function;
@ -97,7 +97,7 @@ public class FcgVertex extends AbstractVisualVertex implements VertexShapeProvid
/** /**
* Constructor * Constructor
* *
* @param function the function represented by this vertex * @param function the function represented by this vertex
* @param level the level of this vertex * @param level the level of this vertex
* @param expansionListener the listener for expanding connections to this vertex * @param expansionListener the listener for expanding connections to this vertex
@ -139,7 +139,7 @@ public class FcgVertex extends AbstractVisualVertex implements VertexShapeProvid
int start = 0; int start = 0;
int end = half + offset; int end = half + offset;
// paint top-down: dark to light for incoming; light to dark for outgoing // paint top-down: dark to light for incoming; light to dark for outgoing
inPaint = new LinearGradientPaint(new Point(0, start), new Point(0, end), inPaint = new LinearGradientPaint(new Point(0, start), new Point(0, end),
new float[] { .0f, .2f, 1f }, new Color[] { darkestColor, darkColor, lightColor }); new float[] { .0f, .2f, 1f }, new Color[] { darkestColor, darkColor, lightColor });
@ -190,7 +190,7 @@ public class FcgVertex extends AbstractVisualVertex implements VertexShapeProvid
parent.add(v); parent.add(v);
parent.add(name); parent.add(name);
// for now, the buttons only appear on hover, but if we want to avoid clipping when // for now, the buttons only appear on hover, but if we want to avoid clipping when
// painting, we need to account for them in the shape's overall bounds // painting, we need to account for them in the shape's overall bounds
Area in = new Area(toggleInsButton.getBounds()); Area in = new Area(toggleInsButton.getBounds());
Area out = new Area(toggleOutsButton.getBounds()); Area out = new Area(toggleOutsButton.getBounds());
@ -291,8 +291,8 @@ public class FcgVertex extends AbstractVisualVertex implements VertexShapeProvid
vertexImageLabel.setBounds(x, y, size.width, size.height); vertexImageLabel.setBounds(x, y, size.width, size.height);
Dimension shapeSize = vertexShape.getBounds().getSize(); Dimension shapeSize = vertexShape.getBounds().getSize();
// setFrame() will make sure the shape's x,y values are where they need to be // setFrame() will make sure the shape's x,y values are where they need to be
// for the later 'full shape' creation // for the later 'full shape' creation
vertexShape.setFrame(x, y, shapeSize.width, shapeSize.height); vertexShape.setFrame(x, y, shapeSize.width, shapeSize.height);
layeredPane.add(vertexImageLabel, VERTEX_SHAPE_LAYER); layeredPane.add(vertexImageLabel, VERTEX_SHAPE_LAYER);
} }
@ -370,7 +370,7 @@ public class FcgVertex extends AbstractVisualVertex implements VertexShapeProvid
/** /**
* Sets to true if this vertex is showing all edges in the incoming direction * Sets to true if this vertex is showing all edges in the incoming direction
* *
* @param setExpanded true if this vertex is showing all edges in the incoming direction * @param setExpanded true if this vertex is showing all edges in the incoming direction
*/ */
public void setIncomingExpanded(boolean setExpanded) { public void setIncomingExpanded(boolean setExpanded) {
@ -414,7 +414,7 @@ public class FcgVertex extends AbstractVisualVertex implements VertexShapeProvid
/** /**
* Returns true if this vertex is showing all edges in the incoming direction * Returns true if this vertex is showing all edges in the incoming direction
* *
* @return true if this vertex is showing all edges in the incoming direction * @return true if this vertex is showing all edges in the incoming direction
*/ */
public boolean isIncomingExpanded() { public boolean isIncomingExpanded() {
@ -423,7 +423,7 @@ public class FcgVertex extends AbstractVisualVertex implements VertexShapeProvid
/** /**
* Sets to true if this vertex is showing all edges in the outgoing direction * Sets to true if this vertex is showing all edges in the outgoing direction
* *
* @param setExpanded true if this vertex is showing all edges in the outgoing direction * @param setExpanded true if this vertex is showing all edges in the outgoing direction
*/ */
public void setOutgoingExpanded(boolean setExpanded) { public void setOutgoingExpanded(boolean setExpanded) {
@ -438,7 +438,7 @@ public class FcgVertex extends AbstractVisualVertex implements VertexShapeProvid
/** /**
* Returns true if this vertex is showing all edges in the outgoing direction * Returns true if this vertex is showing all edges in the outgoing direction
* *
* @return true if this vertex is showing all edges in the outgoing direction * @return true if this vertex is showing all edges in the outgoing direction
*/ */
public boolean isOutgoingExpanded() { public boolean isOutgoingExpanded() {
@ -447,7 +447,7 @@ public class FcgVertex extends AbstractVisualVertex implements VertexShapeProvid
/** /**
* Returns whether this vertex is fully expanded in its current direction * Returns whether this vertex is fully expanded in its current direction
* *
* @return whether this vertex is fully expanded in its current direction * @return whether this vertex is fully expanded in its current direction
*/ */
public boolean isExpanded() { public boolean isExpanded() {
@ -462,10 +462,10 @@ public class FcgVertex extends AbstractVisualVertex implements VertexShapeProvid
} }
/** /**
* Sets whether this vertex has too many incoming references, where too many is subjectively * Sets whether this vertex has too many incoming references, where too many is subjectively
* defined by this class. Too many nodes in the display would ruin rendering and general * defined by this class. Too many nodes in the display would ruin rendering and general
* usability. * usability.
* *
* @param tooMany if there are too many references * @param tooMany if there are too many references
*/ */
public void setTooManyIncomingReferences(boolean tooMany) { public void setTooManyIncomingReferences(boolean tooMany) {
@ -476,10 +476,10 @@ public class FcgVertex extends AbstractVisualVertex implements VertexShapeProvid
} }
/** /**
* Sets whether this vertex has too many outgoing references, where too many is subjectively * Sets whether this vertex has too many outgoing references, where too many is subjectively
* defined by this class. Too many nodes in the display would ruin rendering and general * defined by this class. Too many nodes in the display would ruin rendering and general
* usability. * usability.
* *
* @param tooMany if there are too many references * @param tooMany if there are too many references
*/ */
public void setTooManyOutgoingReferences(boolean tooMany) { public void setTooManyOutgoingReferences(boolean tooMany) {
@ -490,10 +490,10 @@ public class FcgVertex extends AbstractVisualVertex implements VertexShapeProvid
} }
/** /**
* Returns whether this vertex has too many incoming references, where too many is subjectively * Returns whether this vertex has too many incoming references, where too many is subjectively
* defined by this class. Too many nodes in the display would ruin rendering and general * defined by this class. Too many nodes in the display would ruin rendering and general
* usability. * usability.
* *
* @return true if there are too many references * @return true if there are too many references
*/ */
public boolean hasTooManyIncomingReferences() { public boolean hasTooManyIncomingReferences() {
@ -501,10 +501,10 @@ public class FcgVertex extends AbstractVisualVertex implements VertexShapeProvid
} }
/** /**
* Returns whether this vertex has too many outgoing references, where too many is subjectively * Returns whether this vertex has too many outgoing references, where too many is subjectively
* defined by this class. Too many nodes in the display would ruin rendering and general * defined by this class. Too many nodes in the display would ruin rendering and general
* usability. * usability.
* *
* @return true if there are too many references * @return true if there are too many references
*/ */
public boolean hasTooManyOutgoingReferences() { public boolean hasTooManyOutgoingReferences() {
@ -512,9 +512,9 @@ public class FcgVertex extends AbstractVisualVertex implements VertexShapeProvid
} }
/** /**
* Returns true if this vertex can expand itself in its current direction, or in either * Returns true if this vertex can expand itself in its current direction, or in either
* direction if this is a source vertex * direction if this is a source vertex
* *
* @return true if this vertex can be expanded * @return true if this vertex can be expanded
*/ */
public boolean canExpand() { public boolean canExpand() {
@ -540,7 +540,7 @@ public class FcgVertex extends AbstractVisualVertex implements VertexShapeProvid
/** /**
* Sets whether this vertex has any incoming references * Sets whether this vertex has any incoming references
* *
* @param hasIncoming true if this vertex has any incoming references * @param hasIncoming true if this vertex has any incoming references
*/ */
public void setHasIncomingReferences(boolean hasIncoming) { public void setHasIncomingReferences(boolean hasIncoming) {
@ -549,7 +549,7 @@ public class FcgVertex extends AbstractVisualVertex implements VertexShapeProvid
/** /**
* Sets whether this vertex has any outgoing references * Sets whether this vertex has any outgoing references
* *
* @param hasOutgoing true if this vertex has any outgoing references * @param hasOutgoing true if this vertex has any outgoing references
*/ */
@ -597,10 +597,7 @@ public class FcgVertex extends AbstractVisualVertex implements VertexShapeProvid
@Override @Override
public int hashCode() { public int hashCode() {
final int prime = 31; return Objects.hash(function);
int result = 1;
result = prime * result + ((function == null) ? 0 : function.hashCode());
return result;
} }
@Override @Override

View file

@ -32,7 +32,7 @@ public class BowTieLayoutProvider
public static final String NAME = "Bow Tie Layout"; public static final String NAME = "Bow Tie Layout";
private static final Icon DEFAULT_ICON = new GIcon("icon.fcg.layout.bow.tie"); private static final Icon DEFAULT_ICON = new GIcon("icon.plugin.fcg.layout.bow.tie");
@Override @Override
public VisualGraphLayout<FcgVertex, FcgEdge> getLayout(FunctionCallGraph graph, public VisualGraphLayout<FcgVertex, FcgEdge> getLayout(FunctionCallGraph graph,

View file

@ -39,14 +39,14 @@ public class FcgComponent extends GraphComponent<FcgVertex, FcgEdge, FunctionCal
new FcgVertexPaintTransformer(FcgVertex.DEFAULT_VERTEX_SHAPE_COLOR); new FcgVertexPaintTransformer(FcgVertex.DEFAULT_VERTEX_SHAPE_COLOR);
private FcgEdgePaintTransformer edgePaintTransformer = private FcgEdgePaintTransformer edgePaintTransformer =
new FcgEdgePaintTransformer(new GColor("color.bg.fcg.edge.primary.direct"), new FcgEdgePaintTransformer(new GColor("color.bg.plugin.fcg.edge.primary.direct"),
new GColor("color.bg.fcg.edge.primary.indirect")); new GColor("color.bg.plugin.fcg.edge.primary.indirect"));
private FcgEdgePaintTransformer selectedEdgePaintTransformer = private FcgEdgePaintTransformer selectedEdgePaintTransformer =
new FcgEdgePaintTransformer(new GColor("color.bg.fcg.edge.primary.direct.selected"), new FcgEdgePaintTransformer(new GColor("color.bg.plugin.fcg.edge.primary.direct.selected"),
new GColor("color.bg.fcg.edge.primary.indirect.selected")); new GColor("color.bg.plugin.fcg.edge.primary.indirect.selected"));
private FcgEdgePaintTransformer satelliteEdgePaintTransformer = private FcgEdgePaintTransformer satelliteEdgePaintTransformer =
new FcgEdgePaintTransformer(new GColor("color.bg.fcg.edge.satellite.direct"), new FcgEdgePaintTransformer(new GColor("color.bg.plugin.fcg.edge.satellite.direct"),
new GColor("color.bg.fcg.edge.satellite.indirect")); new GColor("color.bg.plugin.fcg.edge.satellite.indirect"));
FcgComponent(FunctionCallGraph g) { FcgComponent(FunctionCallGraph g) {
setGraph(g); setGraph(g);