GP-1981 - Theming - Base Module

This commit is contained in:
dragonmacher 2022-09-28 19:09:05 -04:00 committed by ghidragon
parent dd31ff47a2
commit 0971c0088c
228 changed files with 1848 additions and 1694 deletions

View file

@ -19,7 +19,8 @@ import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.util.*;
import javax.swing.*;
import javax.swing.Icon;
import javax.swing.KeyStroke;
import docking.ActionContext;
import docking.DockingUtils;
@ -29,6 +30,7 @@ import docking.menu.MultiStateDockingAction;
import docking.widgets.EventTrigger;
import docking.widgets.OptionDialog;
import edu.uci.ics.jung.graph.Graph;
import generic.theme.GIcon;
import ghidra.app.events.ProgramSelectionPluginEvent;
import ghidra.app.plugin.core.functiongraph.action.*;
import ghidra.app.plugin.core.functiongraph.graph.FGEdge;
@ -48,8 +50,6 @@ import ghidra.program.util.ProgramLocation;
import ghidra.program.util.ProgramSelection;
import ghidra.util.HelpLocation;
import ghidra.util.SystemUtilities;
import resources.Icons;
import resources.ResourceManager;
class FGActionManager {
private static final String EDGE_HOVER_HIGHLIGHT = "EDGE_HOVER_HIGHLIGHT";
@ -60,10 +60,15 @@ class FGActionManager {
private static final String COMPLEX_LAYOUT_NAME = "COMPLEX_LAYOUT_NAME";
private static final String LAYOUT_CLASS_NAME = "LAYOUT_CLASS_NAME";
private static final ImageIcon EDIT_ICON = ResourceManager.loadImage("images/id.png");
private static final ImageIcon FULL_SCREEN_ICON =
ResourceManager.loadImage("images/fullscreen_view.png");
private static final Icon XREFS_ICON = ResourceManager.loadImage("images/brick_link.png");
//@formatter:off
private static final Icon GROUP_ICON = new GIcon("icon.functiongraph.action.vertex.group");
private static final Icon GROUP_ADD_ICON = new GIcon("icon.functiongraph.action.vertex.group.add");
private static final Icon UNGROUP_ICON = new GIcon("icon.functiongraph.action.vertex.ungroup");
private static final Icon EDIT_ICON = new GIcon("icon.functiongraph.action.vertex.edit.label");
private static final Icon FULL_SCREEN_ICON = new GIcon("icon.functiongraph.action.vertex.full.screen");
private static final Icon XREFS_ICON = new GIcon("icon.functiongraph.action.vertex.full.screen");
//@formatter:off
private PluginTool tool;
private FunctionGraphPlugin plugin;
@ -122,7 +127,7 @@ class FGActionManager {
// subgroup 3, after the refresh and layout actions
chooseFormatsAction.setToolBarData(new ToolBarData(
ResourceManager.loadImage("images/field.header.png"), layoutGroup, "3"));
new GIcon("icon.functiongraph.action.vertex.edit.format"), layoutGroup, "3"));
chooseFormatsAction.setHelpLocation(
new HelpLocation("FunctionGraphPlugin", "Function_Graph_Action_Format"));
@ -139,7 +144,7 @@ class FGActionManager {
}
};
homeAction.setToolBarData(
new ToolBarData(ResourceManager.loadImage("images/house.png"), toolBarGroup1));
new ToolBarData(new GIcon("icon.functiongraph.action.viewer.home"), toolBarGroup1));
homeAction.setHelpLocation(
new HelpLocation("FunctionGraphPlugin", "Function_Graph_Action_Home"));
@ -160,7 +165,8 @@ class FGActionManager {
return controller.hasResults();
}
};
resetGraphAction.setToolBarData(new ToolBarData(Icons.REFRESH_ICON, layoutGroup, "1"));
resetGraphAction.setToolBarData(
new ToolBarData(new GIcon("icon.functiongraph.action.viewer.reset"), layoutGroup, "1"));
resetGraphAction.setDescription("<html>Reloads the graph--All positioning and grouping " +
"information is <b>lost</b>");
resetGraphAction.setHelpLocation(
@ -442,7 +448,7 @@ class FGActionManager {
}
};
menuData = new MenuData(new String[] { "Group Selected Vertices" }, popupMutateGroup2);
menuData.setIcon(FunctionGraphPlugin.GROUP_ICON);
menuData.setIcon(GROUP_ICON);
menuData.setMenuSubGroup(Integer.toString(groupingSubgroupOffset++));
groupSelectedVertices.setPopupMenuData(menuData);
groupSelectedVertices.setHelpLocation(
@ -501,7 +507,7 @@ class FGActionManager {
menuData = new MenuData(new String[] { "Group Selected Vertices - Add to Group" },
popupMutateGroup2);
menuData.setIcon(FunctionGraphPlugin.GROUP_ADD_ICON);
menuData.setIcon(GROUP_ADD_ICON);
menuData.setMenuSubGroup(Integer.toString(groupingSubgroupOffset++));
addSelectedVerticesToGroup.setPopupMenuData(menuData);
addSelectedVerticesToGroup.setHelpLocation(new HelpLocation("FunctionGraphPlugin",
@ -544,7 +550,7 @@ class FGActionManager {
};
menuData = new MenuData(new String[] { "Ungroup Selected Vertices" }, popupMutateGroup2);
menuData.setIcon(FunctionGraphPlugin.UNGROUP_ICON);
menuData.setIcon(UNGROUP_ICON);
menuData.setMenuSubGroup(Integer.toString(groupingSubgroupOffset++));
ungroupSelectedVertices.setPopupMenuData(menuData);
ungroupSelectedVertices.setHelpLocation(
@ -653,7 +659,7 @@ class FGActionManager {
return controller.getGraphedFunction() != null;
}
};
ImageIcon image = ResourceManager.loadImage("images/camera-photo.png");
Icon image = new GIcon("icon.functiongraph.action.viewer.clone");
cloneAction.setToolBarData(new ToolBarData(image, toolbarEndGroup));
cloneAction.setDescription(
"Create a snapshot (disconnected) copy of this Function Graph window ");
@ -883,7 +889,7 @@ class FGActionManager {
// 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.
layoutAction.setDefaultIcon(ResourceManager.loadImage("images/preferences-system.png"));
layoutAction.setDefaultIcon(new GIcon("icon.functiongraph.action.viewer.layout"));
List<ActionState<FGLayoutProvider>> actionStates = loadActionStatesForLayoutProviders();
for (ActionState<FGLayoutProvider> actionState : actionStates) {
@ -936,14 +942,17 @@ class FGActionManager {
}
private void addVertexHoverModeAction(String group) {
Icon pathsToVertexIcon = ResourceManager.loadImage("images/fgin.png");
Icon pathsFromVertexIcon = ResourceManager.loadImage("images/fgout.png");
Icon pathsFromToVertexIcon = ResourceManager.loadImage("images/fginout.png");
Icon cyclesIcon = ResourceManager.loadImage("images/fgloop.png");
Icon pathsIcon = ResourceManager.loadImage("images/fgpaths.png");
Icon forwardScopedIcon = ResourceManager.loadImage("images/fgblock.png");
Icon reverseScopedIcon = ResourceManager.loadImage("images/fgrevblock.png");
Icon nothingIcon = ResourceManager.loadImage("images/hoverOff.gif");
//@formatter:off
Icon pathsToVertexIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.paths.to.vertex");
Icon pathsFromVertexIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.paths.from.vertex");
Icon pathsFromToVertexIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.paths.from.to.vertex");
Icon pathsIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.paths.all");
Icon cyclesIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.cycles");
Icon forwardScopedIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.scoped.flow.forward");
Icon reverseScopedIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.scoped.flow.reverse");
Icon nothingIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.off");
//@formatter:off
HelpLocation pathHelpLocation =
new HelpLocation("FunctionGraphPlugin", "Path_Highlight_Actions");
@ -1011,14 +1020,18 @@ class FGActionManager {
}
private void addVertexSelectedModeAction(String group) {
Icon pathsToVertexIcon = ResourceManager.loadImage("images/fgin.png");
Icon pathsFromVertexIcon = ResourceManager.loadImage("images/fgout.png");
Icon pathsFromToVertexIcon = ResourceManager.loadImage("images/fginout.png");
Icon cyclesIcon = ResourceManager.loadImage("images/fgloop.png");
Icon allCyclesIcon = ResourceManager.loadImage("images/fgloopall.png");
Icon forwardScopedIcon = ResourceManager.loadImage("images/fgblock.png");
Icon reverseScopedIcon = ResourceManager.loadImage("images/fgrevblock.png");
Icon nothingIcon = ResourceManager.loadImage("images/hoverOff.gif");
//@formatter:off
Icon pathsToVertexIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.paths.to.vertex");
Icon pathsFromVertexIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.paths.from.vertex");
Icon pathsFromToVertexIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.paths.from.to.vertex");
Icon cyclesIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.cycles");
Icon allCyclesIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.cycles.all");
Icon forwardScopedIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.scoped.flow.forward");
Icon reverseScopedIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.scoped.flow.reverse");
Icon nothingIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.off");
//@formatter:off
HelpLocation pathHelpLocation =
new HelpLocation("FunctionGraphPlugin", "Path_Highlight_Actions");

View file

@ -22,15 +22,15 @@ import javax.swing.Icon;
import javax.swing.JComponent;
import docking.*;
import generic.theme.GIcon;
import ghidra.app.plugin.core.functiongraph.mvc.FGController;
import ghidra.framework.plugintool.ComponentProviderAdapter;
import ghidra.util.HelpLocation;
import resources.ResourceManager;
public class FGSatelliteUndockedProvider extends ComponentProviderAdapter {
static final String NAME = "Function Graph Satellite";
private static final Icon ICON = ResourceManager.loadImage("images/network-wireless-16.png");
private static final Icon ICON = new GIcon("icon.functiongraph.action.provider.satellite");
private FGController controller;
private JComponent satelliteComponent;

View file

@ -17,11 +17,12 @@ package ghidra.app.plugin.core.functiongraph;
import java.util.*;
import javax.swing.ImageIcon;
import javax.swing.Icon;
import org.jdom.Element;
import docking.tool.ToolConstants;
import generic.theme.GIcon;
import ghidra.GhidraOptions;
import ghidra.app.CorePluginPackage;
import ghidra.app.events.*;
@ -44,7 +45,6 @@ import ghidra.program.model.listing.Program;
import ghidra.program.util.ProgramLocation;
import ghidra.program.util.ProgramSelection;
import ghidra.util.exception.AssertException;
import resources.ResourceManager;
//@formatter:off
@PluginInfo(
@ -61,14 +61,7 @@ public class FunctionGraphPlugin extends ProgramPlugin implements OptionsChangeL
static final String OPTIONS_NAME_PATH =
ToolConstants.GRAPH_OPTIONS + Options.DELIMITER + FUNCTION_GRAPH_NAME;
static final ImageIcon ICON = ResourceManager.loadImage("images/function_graph.png");
public static final ImageIcon GROUP_ICON =
ResourceManager.loadImage("images/shape_handles.png");
public static final ImageIcon GROUP_ADD_ICON =
ResourceManager.loadImage("images/shape_square_add.png");
public static final ImageIcon UNGROUP_ICON =
ResourceManager.loadImage("images/shape_ungroup.png");
static final Icon ICON = new GIcon("icon.functiongraph.action.provider");
private static final String USER_DEFINED_FORMAT_CONFIG_NAME = "USER_DEFINED_FORMAT_MANAGER";

View file

@ -17,11 +17,11 @@ package ghidra.app.plugin.core.functiongraph.graph.layout;
import javax.swing.Icon;
import resources.ResourceManager;
import generic.theme.GIcon;
public abstract class ExperimentalLayoutProvider extends FGLayoutProviderExtensionPoint {
private static final Icon ICON = ResourceManager.loadImage("images/package_development.png");
private static final Icon ICON = new GIcon("icon.functiongraph.layout.experimental");
@Override
public Icon getActionIcon() {

View file

@ -28,6 +28,7 @@ import docking.GenericHeader;
import docking.action.DockingAction;
import docking.action.ToolBarData;
import generic.theme.GColor;
import generic.theme.GIcon;
import ghidra.app.plugin.core.functiongraph.FunctionGraphPlugin;
import ghidra.app.plugin.core.functiongraph.graph.FGEdge;
import ghidra.app.plugin.core.functiongraph.mvc.FGController;
@ -40,7 +41,6 @@ import ghidra.program.util.ProgramSelection;
import ghidra.util.*;
import ghidra.util.exception.AssertException;
import ghidra.util.layout.VerticalLayout;
import resources.ResourceManager;
import util.CollectionUtils;
/**
@ -189,7 +189,7 @@ public class GroupedFunctionGraphComponentPanel extends AbstractGraphComponentPa
}
};
groupAction.setDescription("Combine selected vertices into one vertex");
ImageIcon imageIcon = ResourceManager.loadImage("images/shape_handles.png");
Icon imageIcon = new GIcon("icon.functiongraph.action.vertex.group");
groupAction.setToolBarData(new ToolBarData(imageIcon, secondGroup));
groupAction.setHelpLocation(
new HelpLocation("FunctionGraphPlugin", "Group_Vertex_Action_Group"));
@ -202,7 +202,7 @@ public class GroupedFunctionGraphComponentPanel extends AbstractGraphComponentPa
}
};
regroupAction.setDescription("Restore vertex and siblings back to group form");
imageIcon = ResourceManager.loadImage("images/edit-redo.png");
imageIcon = new GIcon("icon.functiongraph.action.vertex.regroup");
regroupAction.setToolBarData(new ToolBarData(imageIcon, secondGroup));
regroupAction.setHelpLocation(
new HelpLocation("FunctionGraphPlugin", "Vertex_Action_Regroup"));
@ -215,7 +215,7 @@ public class GroupedFunctionGraphComponentPanel extends AbstractGraphComponentPa
}
};
ungroupAction.setDescription("Ungroup selected vertices into individual vertex");
imageIcon = ResourceManager.loadImage("images/shape_ungroup.png");
imageIcon = new GIcon("icon.functiongraph.action.vertex.ungroup");
ungroupAction.setToolBarData(new ToolBarData(imageIcon, secondGroup));
ungroupAction.setHelpLocation(
new HelpLocation("FunctionGraphPlugin", "Vertex_Action_Ungroup"));
@ -243,7 +243,7 @@ public class GroupedFunctionGraphComponentPanel extends AbstractGraphComponentPa
}
};
addToGroupAction.setDescription("Add the selected vertices to this group");
imageIcon = ResourceManager.loadImage("images/shape_square_add.png");
imageIcon = new GIcon("icon.functiongraph.action.vertex.group.add");
addToGroupAction.setToolBarData(new ToolBarData(imageIcon, secondGroup));
addToGroupAction.setHelpLocation(
new HelpLocation("FunctionGraphPlugin", "Vertex_Action_Group_Add"));

View file

@ -38,6 +38,7 @@ import docking.widgets.fieldpanel.field.Field;
import docking.widgets.fieldpanel.support.BackgroundColorModel;
import docking.widgets.label.GDLabel;
import generic.theme.GColor;
import generic.theme.GIcon;
import generic.theme.GThemeDefaults.Colors;
import ghidra.app.plugin.core.codebrowser.hover.ListingHoverService;
import ghidra.app.plugin.core.functiongraph.FunctionGraphPlugin;
@ -60,7 +61,6 @@ import ghidra.program.model.symbol.SymbolTable;
import ghidra.program.util.ProgramLocation;
import ghidra.program.util.ProgramSelection;
import ghidra.util.*;
import resources.ResourceManager;
public class ListingGraphComponentPanel extends AbstractGraphComponentPanel {
@ -311,7 +311,7 @@ public class ListingGraphComponentPanel extends AbstractGraphComponentPanel {
}
};
xrefsAction.setDescription("Jump to a XRef");
ImageIcon imageIcon = ResourceManager.loadImage("images/brick_link.png");
Icon imageIcon = new GIcon("icon.functiongraph.action.vertex.xrefs");
xrefsAction.setToolBarData(new ToolBarData(imageIcon, firstGroup));
xrefsAction.setHelpLocation(new HelpLocation("FunctionGraphPlugin", "Vertex_Action_XRefs"));
@ -325,7 +325,7 @@ public class ListingGraphComponentPanel extends AbstractGraphComponentPanel {
}
};
maximizeViewModeAction.setDescription("Reverts view from graph to fullscreen");
imageIcon = ResourceManager.loadImage("images/fullscreen_view.png");
imageIcon = new GIcon("icon.functiongraph.action.vertex.maximize");
maximizeViewModeAction.setToolBarData(new ToolBarData(imageIcon, firstGroup));
maximizeViewModeAction.setHelpLocation(
new HelpLocation("FunctionGraphPlugin", "Vertex_Action_Full_View"));
@ -340,7 +340,7 @@ public class ListingGraphComponentPanel extends AbstractGraphComponentPanel {
}
};
minimizeViewModeAction.setDescription("Reverts view from fullscreen to graph");
imageIcon = ResourceManager.loadImage("images/graph_view.png");
imageIcon = new GIcon("icon.functiongraph.action.vertex.minimize");
minimizeViewModeAction.setToolBarData(new ToolBarData(imageIcon, firstGroup));
minimizeViewModeAction.setHelpLocation(
new HelpLocation("FunctionGraphPlugin", "Vertex_Action_Full_View"));
@ -352,7 +352,7 @@ public class ListingGraphComponentPanel extends AbstractGraphComponentPanel {
}
};
groupAction.setDescription("Combine selected vertices into one vertex");
imageIcon = ResourceManager.loadImage("images/shape_handles.png");
imageIcon = new GIcon("icon.functiongraph.action.vertex.group");
groupAction.setToolBarData(new ToolBarData(imageIcon, secondGroup));
groupAction.setHelpLocation(new HelpLocation("FunctionGraphPlugin", "Vertex_Action_Group"));
@ -363,7 +363,7 @@ public class ListingGraphComponentPanel extends AbstractGraphComponentPanel {
}
};
regroupAction.setDescription("Restore vertex and siblings back to group form");
imageIcon = ResourceManager.loadImage("images/edit-redo.png");
imageIcon = new GIcon("icon.functiongraph.action.vertex.regroup");
regroupAction.setToolBarData(new ToolBarData(imageIcon, secondGroup));
regroupAction.setHelpLocation(

View file

@ -26,6 +26,7 @@ import docking.action.*;
import docking.menu.MultiActionDockingAction;
import docking.menu.MultipleActionDockingToolbarButton;
import generic.theme.GColor;
import generic.theme.GIcon;
import ghidra.app.plugin.core.functiongraph.FGColorProvider;
import ghidra.app.plugin.core.functiongraph.FunctionGraphPlugin;
import ghidra.app.plugin.core.functiongraph.mvc.FGController;
@ -58,7 +59,7 @@ public class SetVertexMostRecentColorAction extends MultiActionDockingAction {
Icon blankIcon = new EmptyIcon(16, 16);
MultiIcon multiIcon = new MultiIcon(blankIcon);
Icon paintBrushImage = ResourceManager.loadImage("images/paintbrush.png");
Icon paintBrushImage = new GIcon("icon.functiongraph.action.vertex.choose.color");
Icon scaledBrush = ResourceManager.getScaledIcon(paintBrushImage, 16, 16);
Point point = getLowerLeftIconOffset(blankIcon, colorIcon);
@ -99,7 +100,7 @@ public class SetVertexMostRecentColorAction extends MultiActionDockingAction {
colorProvider.setVertexColor(vertex, newColor);
}
};
ImageIcon imageIcon = ResourceManager.loadImage("images/palette.png");
Icon imageIcon = new GIcon("icon.functiongraph.action.vertex.choose.color.palette");
chooseColorAction.setMenuBarData(
new MenuData(new String[] { "Choose New Color" }, imageIcon));
chooseColorAction.setHelpLocation(