@Override
	public void createControl(Composite parent) {

		Composite container = new Composite(parent, SWT.NULL);
		container.setLayout(new GridLayout(3, false));
		
		// Project name
		Label projectNameLabel = new Label(container, SWT.NULL);
		projectNameLabel.setText("Project name:");
		projectNameText = new Text(container, SWT.BORDER | SWT.SINGLE);
		projectNameText.setText(suggestedProjectName);
		projectNameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
		projectNameText.addModifyListener(evt -> validate());
		new Label(container, SWT.NONE).setText(""); // empty grid cell

		// Project directory
		if (showProjectDir) {
			Label projectDirLabel = new Label(container, SWT.NULL);
			String projectDirToolTip = "The directory where this project will be created.";
			projectDirLabel.setText("Project root directory:");
			projectDirLabel.setToolTipText(projectDirToolTip);
			projectRootDirText = new Text(container, SWT.BORDER | SWT.SINGLE);
			projectRootDirText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
			projectRootDirText
					.setText(GhidraProjectCreatorPreferences.getGhidraLastProjectRootPath());
			projectRootDirText.addModifyListener(evt -> validate());
			projectRootDirText.setToolTipText(projectDirToolTip);
			projectDirButton = new Button(container, SWT.BUTTON1);
			projectDirButton.setText("...");
			projectDirButton.setToolTipText("Browse to select project root directory");
			projectDirButton.addListener(SWT.Selection, evt -> {
				DirectoryDialog dialog = new DirectoryDialog(container.getShell());
				String path = dialog.open();
				if (path != null) {
					projectRootDirText.setText(path);
				}
			});
		}

		// Create run configuration checkbox
		createRunConfigCheckboxButton = new Button(container, SWT.CHECK);
		createRunConfigCheckboxButton.setText("Create run configuration");
		createRunConfigCheckboxButton.setToolTipText("Automatically create a Ghidra run " +
			"configuration that can be used to launch and debug this project in Ghidra.  Run " +
			"configurations can be created later and modified in the \"Run --> Run " +
			"Configurations\" menu.");
		createRunConfigCheckboxButton.setSelection(true);
		createRunConfigCheckboxButton.addSelectionListener(new SelectionListener() {
			@Override
			public void widgetSelected(SelectionEvent evt) {
				validate();
			}

			@Override
			public void widgetDefaultSelected(SelectionEvent evt) {
				validate();
			}
		});
		new Label(container, SWT.NONE).setText(""); // empty grid cell
		new Label(container, SWT.NONE).setText(""); // empty grid cell

		// Run configuration memory
		Label runConfigMemoryLabel = new Label(container, SWT.NULL);
		String runConfigMemoryToolTip = "The maximum Java heap size (-Xmx) Ghidra will use when " +
			"launched with the created run configuration (ex: 4G, 1500m, etc).  If left blank, " +
			"Java's default heap size will be used, which is determined by your system's memory " +
			"capacity.";
		runConfigMemoryLabel.setText("Run configuration memory:");
		runConfigMemoryLabel.setToolTipText(runConfigMemoryToolTip);
		runConfigMemoryText = new Text(container, SWT.BORDER | SWT.SINGLE);
		runConfigMemoryText.addModifyListener(evt -> validate());
		runConfigMemoryText.setToolTipText(runConfigMemoryToolTip);
		new Label(container, SWT.NONE).setText(""); // empty grid cell

		validate();
		setControl(container);
	}
Creates a Ghidra new project wizard page.

@param showProjectDir True to show a component for selecting the root project directory;
  otherwise, false
GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/wizards/pages/CreateGhidraProjectWizardPage.java