mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-05 02:39:44 +02:00
GP-1014 - Function Call Graph - add option to change background color;
consolidated graph options.
This commit is contained in:
parent
6962885c3e
commit
9112a84f63
22 changed files with 301 additions and 247 deletions
|
@ -665,7 +665,7 @@ class FGActionManager {
|
|||
@Override
|
||||
public void actionPerformed(ActionContext context) {
|
||||
OptionsService service = tool.getService(OptionsService.class);
|
||||
service.showOptionsDialog(FunctionGraphPlugin.PLUGIN_OPTIONS_NAME,
|
||||
service.showOptionsDialog(FunctionGraphPlugin.OPTIONS_NAME_PATH,
|
||||
"Function Graph");
|
||||
}
|
||||
|
||||
|
|
|
@ -21,6 +21,7 @@ import javax.swing.ImageIcon;
|
|||
|
||||
import org.jdom.Element;
|
||||
|
||||
import docking.tool.ToolConstants;
|
||||
import ghidra.GhidraOptions;
|
||||
import ghidra.app.CorePluginPackage;
|
||||
import ghidra.app.events.*;
|
||||
|
@ -57,7 +58,8 @@ import resources.ResourceManager;
|
|||
//@formatter:on
|
||||
public class FunctionGraphPlugin extends ProgramPlugin implements OptionsChangeListener {
|
||||
static final String FUNCTION_GRAPH_NAME = "Function Graph";
|
||||
static final String PLUGIN_OPTIONS_NAME = FUNCTION_GRAPH_NAME;
|
||||
static final String OPTIONS_NAME_PATH =
|
||||
ToolConstants.GRAPH_OPTIONS + Options.DELIMITER + FUNCTION_GRAPH_NAME;
|
||||
|
||||
static final ImageIcon ICON = ResourceManager.loadImage("images/function_graph.png");
|
||||
|
||||
|
@ -147,14 +149,20 @@ public class FunctionGraphPlugin extends ProgramPlugin implements OptionsChangeL
|
|||
}
|
||||
|
||||
private void initializeOptions() {
|
||||
ToolOptions options = tool.getOptions(PLUGIN_OPTIONS_NAME);
|
||||
ToolOptions options = tool.getOptions(ToolConstants.GRAPH_OPTIONS);
|
||||
options.addOptionsChangeListener(this);
|
||||
functionGraphOptions.registerOptions(options);
|
||||
functionGraphOptions.loadOptions(options);
|
||||
|
||||
// Graph -> Function Graph
|
||||
Options fgOptions = options.getOptions(FUNCTION_GRAPH_NAME);
|
||||
|
||||
functionGraphOptions.registerOptions(fgOptions);
|
||||
functionGraphOptions.loadOptions(fgOptions);
|
||||
|
||||
for (FGLayoutProvider layoutProvider : layoutProviders) {
|
||||
|
||||
// Graph -> Function Graph -> Layout Name
|
||||
String layoutName = layoutProvider.getLayoutName();
|
||||
Options layoutToolOptions = options.getOptions(layoutName);
|
||||
Options layoutToolOptions = fgOptions.getOptions(layoutName);
|
||||
FGLayoutOptions layoutOptions = layoutProvider.createLayoutOptions(layoutToolOptions);
|
||||
if (layoutOptions == null) {
|
||||
continue; // many layouts do not have options
|
||||
|
@ -170,7 +178,9 @@ public class FunctionGraphPlugin extends ProgramPlugin implements OptionsChangeL
|
|||
public void optionsChanged(ToolOptions options, String optionName, Object oldValue,
|
||||
Object newValue) {
|
||||
|
||||
functionGraphOptions.loadOptions(options);
|
||||
// Graph -> Function Graph
|
||||
Options fgOptions = options.getOptions(FUNCTION_GRAPH_NAME);
|
||||
functionGraphOptions.loadOptions(fgOptions);
|
||||
|
||||
connectedProvider.optionsChanged();
|
||||
|
||||
|
|
|
@ -220,8 +220,8 @@ public class FGComponent extends GraphComponent<FGVertex, FGEdge, FunctionGraph>
|
|||
edgeLabelRenderer.setRotateEdgeLabels(false);
|
||||
renderContext.setEdgeLabelRenderer(edgeLabelRenderer);
|
||||
|
||||
viewer.setGraphOptions(options);
|
||||
Color bgColor = options.getGraphBackgroundColor();
|
||||
viewer.setGraphOptions(vgOptions);
|
||||
Color bgColor = vgOptions.getGraphBackgroundColor();
|
||||
if (bgColor.equals(VisualGraphOptions.DEFAULT_GRAPH_BACKGROUND_COLOR)) {
|
||||
|
||||
// Give user notice when seeing the graph for a non-function (such as an undefined
|
||||
|
@ -259,7 +259,7 @@ public class FGComponent extends GraphComponent<FGVertex, FGEdge, FunctionGraph>
|
|||
renderContext.setVertexFillPaintTransformer(new FGVertexPickableBackgroundPaintTransformer(
|
||||
pickedVertexState, Color.YELLOW, START_COLOR, END_COLOR));
|
||||
|
||||
viewer.setGraphOptions(options);
|
||||
viewer.setGraphOptions(vgOptions);
|
||||
|
||||
return viewer;
|
||||
}
|
||||
|
@ -287,7 +287,7 @@ public class FGComponent extends GraphComponent<FGVertex, FGEdge, FunctionGraph>
|
|||
//==================================================================================================
|
||||
|
||||
public FunctionGraphOptions getFucntionGraphOptions() {
|
||||
return (FunctionGraphOptions) options;
|
||||
return (FunctionGraphOptions) vgOptions;
|
||||
}
|
||||
|
||||
public void ensureCursorVisible(FGVertex vertex) {
|
||||
|
|
|
@ -22,7 +22,8 @@ import java.util.Map.Entry;
|
|||
import ghidra.app.plugin.core.functiongraph.FunctionGraphPlugin;
|
||||
import ghidra.app.plugin.core.functiongraph.graph.layout.FGLayoutOptions;
|
||||
import ghidra.framework.options.Options;
|
||||
import ghidra.graph.viewer.options.*;
|
||||
import ghidra.graph.viewer.options.RelayoutOption;
|
||||
import ghidra.graph.viewer.options.VisualGraphOptions;
|
||||
import ghidra.program.model.symbol.FlowType;
|
||||
import ghidra.util.HelpLocation;
|
||||
|
||||
|
@ -162,7 +163,7 @@ public class FunctionGraphOptions extends VisualGraphOptions {
|
|||
public void registerOptions(Options options) {
|
||||
|
||||
HelpLocation help = new HelpLocation(OWNER, "Options");
|
||||
options.setOptionsHelpLocation(help);
|
||||
super.registerOptions(options, help);
|
||||
|
||||
options.registerOption(RELAYOUT_OPTIONS_KEY, relayoutOption, help,
|
||||
RELAYOUT_OPTIONS_DESCRIPTION);
|
||||
|
@ -170,24 +171,9 @@ public class FunctionGraphOptions extends VisualGraphOptions {
|
|||
options.registerOption(NAVIGATION_HISTORY_KEY, navigationHistoryChoice, help,
|
||||
NAVIGATION_HISTORY_DESCRIPTION);
|
||||
|
||||
options.registerOption(SHOW_ANIMATION_OPTIONS_KEY, useAnimation(), help,
|
||||
SHOW_ANIMATION_DESCRIPTION);
|
||||
|
||||
options.registerOption(USE_MOUSE_RELATIVE_ZOOM_KEY, useMouseRelativeZoom(), help,
|
||||
USE_MOUSE_RELATIVE_ZOOM_DESCRIPTION);
|
||||
|
||||
options.registerOption(USE_CONDENSED_LAYOUT_KEY, useCondensedLayout(),
|
||||
new HelpLocation(OWNER, "Layout_Compressing"), USE_CONDENSED_LAYOUT_DESCRIPTION);
|
||||
|
||||
options.registerOption(VIEW_RESTORE_OPTIONS_KEY, ViewRestoreOption.START_FULLY_ZOOMED_OUT,
|
||||
help, VIEW_RESTORE_OPTIONS_DESCRIPTION);
|
||||
|
||||
options.registerOption(SCROLL_WHEEL_PANS_KEY, getScrollWheelPans(), help,
|
||||
SCROLL_WHEEL_PANS_DESCRIPTION);
|
||||
|
||||
options.registerOption(GRAPH_BACKGROUND_COLOR_KEY, DEFAULT_GRAPH_BACKGROUND_COLOR, help,
|
||||
GRAPH_BACKGROUND_COLOR_DESCRPTION);
|
||||
|
||||
options.registerOption(DEFAULT_VERTEX_BACKGROUND_COLOR_KEY, DEFAULT_VERTEX_BACKGROUND_COLOR,
|
||||
help, DEFAULT_VERTEX_BACKGROUND_COLOR_DESCRPTION);
|
||||
|
||||
|
@ -222,7 +208,11 @@ public class FunctionGraphOptions extends VisualGraphOptions {
|
|||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadOptions(Options options) {
|
||||
|
||||
super.loadOptions(options);
|
||||
|
||||
conditionalJumpEdgeColor =
|
||||
options.getColor(EDGE_COLOR_CONDITIONAL_JUMP_KEY, conditionalJumpEdgeColor);
|
||||
|
||||
|
@ -245,23 +235,8 @@ public class FunctionGraphOptions extends VisualGraphOptions {
|
|||
navigationHistoryChoice =
|
||||
options.getEnum(NAVIGATION_HISTORY_KEY, NavigationHistoryChoices.VERTEX_CHANGES);
|
||||
|
||||
useAnimation = options.getBoolean(SHOW_ANIMATION_OPTIONS_KEY, useAnimation);
|
||||
|
||||
useMouseRelativeZoom =
|
||||
options.getBoolean(USE_MOUSE_RELATIVE_ZOOM_KEY, useMouseRelativeZoom);
|
||||
|
||||
useCondensedLayout = options.getBoolean(USE_CONDENSED_LAYOUT_KEY, useCondensedLayout);
|
||||
|
||||
useFullSizeTooltip = options.getBoolean(USE_FULL_SIZE_TOOLTIP_KEY, useFullSizeTooltip);
|
||||
|
||||
viewRestoreOption =
|
||||
options.getEnum(VIEW_RESTORE_OPTIONS_KEY, ViewRestoreOption.START_FULLY_ZOOMED_OUT);
|
||||
|
||||
scrollWheelPans = options.getBoolean(SCROLL_WHEEL_PANS_KEY, scrollWheelPans);
|
||||
|
||||
graphBackgroundColor =
|
||||
options.getColor(GRAPH_BACKGROUND_COLOR_KEY, DEFAULT_GRAPH_BACKGROUND_COLOR);
|
||||
|
||||
defaultVertexBackgroundColor =
|
||||
options.getColor(DEFAULT_VERTEX_BACKGROUND_COLOR_KEY, DEFAULT_VERTEX_BACKGROUND_COLOR);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue