@Override
	public void createControl(Composite parent) {

		Composite container = new Composite(parent, SWT.NULL);
		container.setLayout(new GridLayout(4, false));

		SelectionListener selectionListener = new SelectionListener() {
			@Override
			public void widgetSelected(SelectionEvent evt) {
				validate();
			}

			@Override
			public void widgetDefaultSelected(SelectionEvent evt) {
				validate();
			}
		};

		// Local Gradle
		String gradleLocalTooltip = "Use a local installation of Gradle.  For best results, " +
			"ensure that the version of this local Gradle matches the version specified on this wizard page's description.";
		gradleLocalChoiceButton = new Button(container, SWT.RADIO);
		gradleLocalChoiceButton.addSelectionListener(selectionListener);
		gradleLocalChoiceButton.setToolTipText(gradleLocalTooltip);
		Label gradleLocalDirLabel = new Label(container, SWT.NULL);
		gradleLocalDirLabel.setText("Local installation directory:");
		gradleLocalDirText = new Text(container, SWT.BORDER | SWT.SINGLE);
		gradleLocalDirText.setToolTipText(gradleLocalTooltip);
		gradleLocalDirText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
		gradleLocalDirText.addModifyListener(evt -> validate());
		gradlLocalDirButton = new Button(container, SWT.BUTTON1);
		gradlLocalDirButton.setText("...");
		gradlLocalDirButton.addListener(SWT.Selection, evt -> {
			DirectoryDialog dialog = new DirectoryDialog(container.getShell());
			String path = dialog.open();
			if (path != null) {
				gradleLocalDirText.setText(path);
			}
			validate();
		});

		// Gradle Wrapper
		String gradleWrapperTooltip = "Use the Gradle Wrapper, which will automatically download " +
			"the correct version of Gradle to use from the Internet.";
		gradleWrapperChoiceButton = new Button(container, SWT.RADIO);
		gradleWrapperChoiceButton.addSelectionListener(selectionListener);
		gradleWrapperChoiceButton.setToolTipText(gradleWrapperTooltip);
		Label gradleWrapperDirLabel = new Label(container, SWT.NULL);
		gradleWrapperDirLabel.setText("Gradle Wrapper");
		Label internetLabel = new Label(container, SWT.NONE);
		internetLabel.setText("INTERNET CONNECTION REQUIRED");
		internetLabel.setForeground(parent.getDisplay().getSystemColor(SWT.COLOR_RED));
		internetLabel.setToolTipText(gradleWrapperTooltip);
		new Label(container, SWT.NONE).setText(""); // empty grid cell

		// Set default value from preferences
		GradleDistribution lastGradleDistribution =
			GhidraProjectCreatorPreferences.getGhidraLastGradleDistribution();
		if (lastGradleDistribution instanceof LocalGradleDistribution) {
			gradleLocalChoiceButton.setSelection(true);
			LocalGradleDistribution localGradleDistribution =
				(LocalGradleDistribution) lastGradleDistribution;
			if (localGradleDistribution.getLocation() != null) {
				gradleLocalDirText.setText(localGradleDistribution.getLocation().getAbsolutePath());
			}
		}
		else if (lastGradleDistribution instanceof WrapperGradleDistribution ||
			lastGradleDistribution instanceof FixedVersionGradleDistribution) {
			gradleWrapperChoiceButton.setSelection(true);
		}
		else {
			gradleLocalChoiceButton.setSelection(true);
		}

		validate();
		setControl(container);
	}
Creates a new Gradle configuration wizard page.

@param projectPage A {@link ChooseGhidraModuleProjectWizardPage} to get the project from.
GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/wizards/pages/ConfigureGradleWizardPage.java