GP-1014 - Function Call Graph - add option to change background color;

consolidated graph options.
This commit is contained in:
dragonmacher 2021-06-30 16:48:51 -04:00
parent 6962885c3e
commit 9112a84f63
22 changed files with 301 additions and 247 deletions

View file

@ -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");
}

View file

@ -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();

View file

@ -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) {

View file

@ -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);