private void createPopupActions() {
		new ActionBuilder("Select Vertex", ACTION_OWNER).popupMenuPath("Select Vertex")
				.popupMenuGroup("selection", "1")
				.withContext(VertexGraphActionContext.class)
				.enabledWhen(c -> !isSelected(c.getClickedVertex()))
				.onAction(c -> viewer.getSelectedVertexState().select(c.getClickedVertex()))
				.buildAndInstallLocal(componentProvider);

		new ActionBuilder("Deselect Vertex", ACTION_OWNER).popupMenuPath("Deselect Vertex")
				.popupMenuGroup("selection", "2")
				.withContext(VertexGraphActionContext.class)
				.enabledWhen(c -> isSelected(c.getClickedVertex()))
				.onAction(c -> viewer.getSelectedVertexState().deselect(c.getClickedVertex()))
				.buildAndInstallLocal(componentProvider);

		new ActionBuilder("Select Edge", ACTION_OWNER).popupMenuPath("Select Edge")
				.popupMenuGroup("selection", "1")
				.withContext(EdgeGraphActionContext.class)
				.enabledWhen(c -> !isSelected(c.getClickedEdge()))
				.onAction(c -> selectEdge(c.getClickedEdge()))
				.buildAndInstallLocal(componentProvider);

		new ActionBuilder("Deselect Edge", ACTION_OWNER).popupMenuPath("Deselect Edge")
				.popupMenuGroup("selection", "2")
				.withContext(EdgeGraphActionContext.class)
				.enabledWhen(c -> isSelected(c.getClickedEdge()))
				.onAction(c -> deselectEdge(c.getClickedEdge()))
				.buildAndInstallLocal(componentProvider);

		new ActionBuilder("Edge Source", ACTION_OWNER).popupMenuPath("Go To Edge Source")
				.popupMenuGroup("Go To")
				.withContext(EdgeGraphActionContext.class)
				.onAction(c -> {
					selectEdge(c.getClickedEdge());
					setFocusedVertex(graph.getEdgeSource(c.getClickedEdge()));
				})
				.buildAndInstallLocal(componentProvider);

		new ActionBuilder("Edge Target", ACTION_OWNER).popupMenuPath("Go To Edge Target")
				.popupMenuGroup("Go To")
				.withContext(EdgeGraphActionContext.class)
				.onAction(c -> {
					selectEdge(c.getClickedEdge());
					setFocusedVertex(graph.getEdgeTarget(c.getClickedEdge()));
				})
				.buildAndInstallLocal(componentProvider);

		hideSelectedAction =
			new ToggleActionBuilder("Hide Selected", ACTION_OWNER).popupMenuPath("Hide Selected")
					.popupMenuGroup("z", "1")
					.description("Toggles whether or not to show selected vertices and edges")
					.onAction(c -> manageVertexDisplay())
					.buildAndInstallLocal(componentProvider);

		hideUnselectedAction = new ToggleActionBuilder("Hide Unselected", ACTION_OWNER)
				.popupMenuPath("Hide Unselected")
				.popupMenuGroup("z", "2")
				.description("Toggles whether or not to show selected vertices and edges")
				.onAction(c -> manageVertexDisplay())
				.buildAndInstallLocal(componentProvider);

		new ActionBuilder("Invert Selection", ACTION_OWNER).popupMenuPath("Invert Selection")
				.popupMenuGroup("z", "3")
				.description("Inverts the current selection")
				.onAction(c -> invertSelection())
				.buildAndInstallLocal(componentProvider);

		new ActionBuilder("Grow Selection To Targets", ACTION_OWNER)
				.popupMenuPath("Grow Selection To Targets")
				.popupMenuGroup("z", "4")
				.description("Extends the current selection by including the target vertex " +
					"of all edges whose source is selected")
				.keyBinding("ctrl O")
				.enabledWhen(c -> !isAllSelected(getTargetVerticesFromSelected()))
				.onAction(c -> growSelection(getTargetVerticesFromSelected()))
				.buildAndInstallLocal(componentProvider);

		new ActionBuilder("Grow Selection From Sources", ACTION_OWNER)
				.popupMenuPath("Grow Selection From Sources")
				.popupMenuGroup("z", "4")
				.description("Extends the current selection by including the target vertex " +
					"of all edges whose source is selected")
				.keyBinding("ctrl I")
				.enabledWhen(c -> !isAllSelected(getSourceVerticesFromSelected()))
				.onAction(c -> growSelection(getSourceVerticesFromSelected()))
				.buildAndInstallLocal(componentProvider);

		new ActionBuilder("Grow Selection To Entire Component", ACTION_OWNER)
				.popupMenuPath("Grow Selection To Entire Component")
				.popupMenuGroup("z", "4")
				.description(
					"Extends the current selection by including the target/source vertices " +
						"of all edges whose source/target is selected")
				.keyBinding("ctrl C")
				.enabledWhen(c -> !isAllSelected(getSourceVerticesFromSelected()) ||
					!isAllSelected(getTargetVerticesFromSelected()))
				.onAction(c -> growSelection(getAllComponentVerticesFromSelected()))
				.buildAndInstallLocal(componentProvider);

		new ActionBuilder("Clear Selection", ACTION_OWNER).popupMenuPath("Clear Selection")
				.popupMenuGroup("z", "5")
				.keyBinding("escape")
				.enabledWhen(c -> hasSelection())
				.onAction(c -> clearSelection(true))
				.buildAndInstallLocal(componentProvider);

		new ActionBuilder("Create Subgraph", ACTION_OWNER)
				.popupMenuPath("Display Selected as New Graph")
				.popupMenuGroup("zz", "5")
				.description("Creates a subgraph from the selected nodes")
				.enabledWhen(c -> !viewer.getSelectedVertices().isEmpty())
				.onAction(c -> createAndDisplaySubGraph())
				.buildAndInstallLocal(componentProvider);

		new ActionBuilder("Collapse Selected", ACTION_OWNER)
				.popupMenuPath("Collapse Selected Vertices")
				.popupMenuGroup("zz", "6")
				.description("Collapses the selected vertices into one collapsed vertex")
				.onAction(c -> groupSelectedVertices())
				.buildAndInstallLocal(componentProvider);

		new ActionBuilder("Expand Selected", ACTION_OWNER).popupMenuPath("Expand Selected Vertices")
				.popupMenuGroup("zz", "6")
				.description("Expands all selected collapsed vertices into their previous form")
				.onAction(c -> ungroupSelectedVertices())
				.buildAndInstallLocal(componentProvider);

		new ActionBuilder("Graph Type Display Options", ACTION_OWNER)
				.popupMenuPath("Graph Type Options ...")
				.popupMenuGroup("zzz")
				.menuPath("Graph Type Options ...")
				.description("Brings up option editor for configuring vertex and edge types.")
				.onAction(c -> editGraphDisplayOptions())
				.buildAndInstallLocal(componentProvider);

		togglePopupsAction = new ToggleActionBuilder("Display Popup Windows", ACTION_OWNER)
				.popupMenuPath("Display Popup Windows")
				.popupMenuGroup("zz", "1")
				.description("Toggles whether or not to show popup windows, such as tool tips")
				.selected(true)
				.onAction(c -> popupRegulator.setPopupsVisible(togglePopupsAction.isSelected()))
				.buildAndInstallLocal(componentProvider);
		popupRegulator.setPopupsVisible(togglePopupsAction.isSelected());

	}
create the action icon buttons on the upper-right of the graph display window
Ghidra/Features/GraphServices/src/main/java/ghidra/graph/visualization/DefaultGraphDisplay.java