private boolean installGroupVertex(FGController controller,
			GroupedFunctionGraphVertex groupVertex, Point2D groupVertexLocation,
			boolean relayoutOverride, boolean animate, boolean isRegroup) {

		boolean doAnimate = animate & isAnimationEnabled(); // never animate when the user has disabled it
		if (groupVertex.getVertices().size() == 0) {
			return false;
		}

		stopAllNonMutativeAnimation();

		//
		// Note: we must set the location here, as the graph may paint before the job below
		//       has a chance to run.  If we don't have a location set, things explode.
		// Also: we don't want this 'transient' location to be saved as a user location in our
		//       database of user settings.  So, disable that feature before setting the value.
		//
		FGData data = controller.getFunctionGraphData();
		FunctionGraph graph = data.getFunctionGraph();
		FGLayout fgLayout = graph.getLayout();
		fgLayout.setLocation(groupVertex, groupVertexLocation, ChangeType.TRANSIENT);

		//
		// Put the new group vertex into the graph
		//
		graph.addVertex(groupVertex);

		Set<FGEdge> ungroupedEdges = groupVertex.getUngroupedEdges();
		createNewGroupedEdges(controller, groupVertex, ungroupedEdges);

		//
		// Create the animator to smooth the process.  The animator will not
		// animate if animation is disabled.
		//
		GroupVertexFunctionGraphJob job;
		if (isRegroup) {
			job = GroupVertexFunctionGraphJob.createRegroupJob(controller, groupVertex,
				groupVertexLocation, relayoutOverride, doAnimate);
		}
		else {
			job = GroupVertexFunctionGraphJob.createNewGroupJob(controller, groupVertex,
				groupVertexLocation, relayoutOverride, doAnimate);
		}
		scheduleViewChangeJob(job);
		return true;
	}
Install the given grouped vertex into the graph, optionally animating the process.

@param controller the controller of the graph to be ungrouped
@param groupVertex The group vertex to be ungrouped
@param groupVertexLocation The default groupVertex location (only used if not
							  performing a relayout).
@param relayoutOverride true signals to always relayout the graph after grouping; false
                        indicates to use the tool's options to decide
@param animate whether to animate
@return true if the given group was added to the graph
Ghidra/Features/FunctionGraph/src/main/java/ghidra/graph/viewer/FGViewUpdater.java