@Override
	public void createControl(Composite parent) {

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

		// Project type selection
		SelectionListener projectTypeSelectionListener = new SelectionListener() {
			@Override
			public void widgetSelected(SelectionEvent evt) {
				validate(null);
			}

			@Override
			public void widgetDefaultSelected(SelectionEvent evt) {
				validate(null);
			}
		};
		Group projectTypeGroup = new Group(container, SWT.SHADOW_ETCHED_OUT);
		projectTypeGroup.setLayout(new RowLayout(SWT.HORIZONTAL));
		projectTypeGroup.setText("Project Type");
		pyghidraButton = new Button(projectTypeGroup, SWT.RADIO);
		pyghidraButton.setSelection(PyDevUtils.isSupportedPyGhidraPyDevInstalled());
		pyghidraButton.setText("PyGhidra");
		pyghidraButton.setToolTipText("Enables PyGhidra support using the PyDev " +
			"Eclipse plugin.  Requires PyDev version " + PyDevUtils.MIN_SUPPORTED_VERSION +
			" or later.");
		pyghidraButton.addSelectionListener(projectTypeSelectionListener);
		jythonButton = new Button(projectTypeGroup, SWT.RADIO);
		jythonButton.setSelection(false);
		jythonButton.setText("Jython");
		jythonButton.setToolTipText("Enables Jython support using the PyDev " +
			"Eclipse plugin.  Requires PyDev version " + PyDevUtils.MIN_SUPPORTED_VERSION +
			" - " + PyDevUtils.MAX_JYTHON_SUPPORTED_VERSION);
		jythonButton.addSelectionListener(projectTypeSelectionListener);
		noneButton = new Button(projectTypeGroup, SWT.RADIO);
		noneButton.setSelection(!PyDevUtils.isSupportedPyGhidraPyDevInstalled());
		noneButton.setText("None");
		noneButton.setToolTipText("Disables Python support for the project.");
		noneButton.addSelectionListener(projectTypeSelectionListener);

		Composite interpreterContainer = new Composite(container, SWT.NULL);
		interpreterContainer.setLayout(new GridLayout(3, false));
		interpreterContainer.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

		// PyGhidra interpreter combo box
		Label pyGhidraLabel = new Label(interpreterContainer, SWT.NULL);
		pyGhidraLabel.setText("PyGhidra interpreter:");
		pyghidraCombo = new Combo(interpreterContainer, SWT.DROP_DOWN | SWT.READ_ONLY);
		pyghidraCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
		pyghidraCombo.setToolTipText("The wizard requires a Python interpreter to be " +
			"selected.  Click the + button to add or manage Python interpreters.");
		File savedPyGhidraInterpreter = populatePyGhidraCombo(null);
		pyghidraCombo.addModifyListener(evt -> validate(null));

		// PyGhidra interpreter add button
		addPyGhidraButton = new Button(interpreterContainer, SWT.BUTTON1);
		addPyGhidraButton.setText("+");
		addPyGhidraButton.setToolTipText("Adds/manages PyGhidra interpreters.");
		addPyGhidraButton.addListener(SWT.Selection, evt -> {
			try {
				File ghidraDir = ghidraInstallationPage.getGhidraInstallDir();
				File pyghidraInterpreter = findPyGhidraInterpreter();
				File pypredefDir = new File(ghidraDir, "docs/ghidra_stubs/pypredef");
				if (!pypredefDir.isDirectory()) {
					pypredefDir = null;
				}
				if (EclipseMessageUtils.showQuestionDialog("Python Found",
					"PyGhidra was previously launched with: \"" + pyghidraInterpreter +
						"\". Would you like to use it as your interpreter?")) {
					PyDevUtils.addPyGhidraInterpreter("pyghidra_" + ghidraDir.getName(),
						pyghidraInterpreter, pypredefDir);
					populatePyGhidraCombo(pyghidraInterpreter);
					validate(pyghidraInterpreter);
					return;
				}
			}
			catch (Exception e) {
				// Fall through to show PyDev's Python preference page
			}
			
			PreferenceDialog dialog = PreferencesUtil.createPreferenceDialogOn(null,
				PyDevUtils.getPythonPreferencePageId(), null, null);
			dialog.open();
			populatePyGhidraCombo(savedPyGhidraInterpreter);
			validate(null);
		});

		// Jython interpreter combo box
		Label jythonLabel = new Label(interpreterContainer, SWT.NULL);
		jythonLabel.setText("Jython interpreter:");
		jythonCombo = new Combo(interpreterContainer, SWT.DROP_DOWN | SWT.READ_ONLY);
		jythonCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
		jythonCombo.setToolTipText("The wizard requires a Jython interpreter to be " +
			"selected.  Click the + button to add or manage Jython interpreters.");
		populateJythonCombo();
		jythonCombo.addModifyListener(evt -> validate(null));

		// Jython interpreter add button
		addJythonButton = new Button(interpreterContainer, SWT.BUTTON1);
		addJythonButton.setText("+");
		addJythonButton.setToolTipText("Adds/manages Jython interpreters.");
		addJythonButton.addListener(SWT.Selection, evt -> {
			try {
				if (PyDevUtils.getJythonInterpreterNames().isEmpty()) {
					File ghidraDir = ghidraInstallationPage.getGhidraInstallDir();
					File jythonFile = findJythonInterpreter(ghidraDir);
					File jythonLib = findJythonLibrary(ghidraDir);
					if (jythonFile != null) {
						if (EclipseMessageUtils.showQuestionDialog("Jython Found",
							"A Jython interpreter was found bundled with Ghidra. " +
								"Would you like to use it as your interpreter?")) {
							PyDevUtils.addJythonInterpreter("jython_" + ghidraDir.getName(),
								jythonFile, jythonLib);
							populateJythonCombo();
							validate(null);
							return;
						}
					}
				}
			}
			catch (OperationNotSupportedException e) {
				// Fall through to show PyDev's Jython preference page
			}
			PreferenceDialog dialog = PreferencesUtil.createPreferenceDialogOn(null,
				PyDevUtils.getJythonPreferencePageId(), null, null);
			dialog.open();
			populateJythonCombo();
			validate(null);
		});

		validate(savedPyGhidraInterpreter);
		setControl(container);
	}
Creates a new Python enablement wizard page.

@param ghidraInstallationPage Ghidra installation wizard page.
GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/wizards/pages/EnablePythonWizardPage.java