@SuppressWarnings("unchecked")
	@Override
	public ActionContext getActionContext(MouseEvent event) {
		if (currentProgram == null) {
			return null;
		}

		if (controller.getGraphedFunction() == null) {
			return new FunctionGraphEmptyGraphActionContext(this);
		}

		if (event == null) { // keybinding/menu/toolbar (no popup)
			return createKeybindingContext();
		}

		Object source = event.getSource();
		if (source instanceof SatelliteGraphViewer) {
			// we may want to change the actions over the satellite in the future
			return new FunctionGraphSatelliteViewerActionContext(this);
		}
		else if (source instanceof VisualGraphContextMarker) {
			return new FunctionGraphValidGraphActionContext(this, new HashSet<FGVertex>());
		}

		// handle the 'full vertex zoom' case, where only one vertex is in the view (not graph mode)
		if (source instanceof FieldPanel) {
			FGVertex vertex = controller.getFocusedVertex();
			return new FunctionGraphVertexLocationInFullViewModeActionContext(this, vertex);
		}

		if (source instanceof GraphViewer) {
			GraphViewer<FGVertex, FGEdge> viewer = (GraphViewer<FGVertex, FGEdge>) source;

			Set<FGVertex> selectedVertices = getSelectedVertices();
			VertexMouseInfo<FGVertex, FGEdge> vertexMouseInfo =
				GraphViewerUtils.convertMouseEventToVertexMouseEvent(viewer, event);
			if (vertexMouseInfo == null) {
				return new FunctionGraphValidGraphActionContext(this, selectedVertices);
			}

			FGVertex vertexAtPoint = vertexMouseInfo.getVertex();
			VertexActionContextInfo vertexInfo = createContexInfo(vertexAtPoint);
			if (controller.isScaledPastInteractionThreshold() || vertexMouseInfo.isGrabArea()) {
				return new FunctionGraphUneditableVertexLocationActionContext(this, vertexInfo);
			}

			FGVertex vertex = vertexInfo.getActiveVertex();
			if (vertex instanceof GroupedFunctionGraphVertex) {
				return new FunctionGraphUneditableVertexLocationActionContext(this, vertexInfo);
			}

			if (selectedVertices.size() > 1) {
				return new FunctionGraphUneditableVertexLocationActionContext(this, vertexInfo);
			}

			return new FunctionGraphEditableVertexLocationActionContext(this, vertexInfo);
		}

		throw new AssertException(
			"Received mouse event from unexpected source in getActionContext(): " + source);
	}
Gives to the clipboard of this provider the given string.
<p>
This will prime the clipboard such that a copy action will copy the given string.

@param string the string to set
Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/FGProvider.java