@Override
	public void createControl(Composite parent) {

		Composite container = new Composite(parent, SWT.NULL);
		container.setLayout(new GridLayout(3, false));
		
		// Source folder
		Label sourceFolderLabel = new Label(container, SWT.NULL);
		sourceFolderLabel.setText("Script folder:");
		scriptFolderText = new Text(container, SWT.BORDER | SWT.SINGLE);
		scriptFolderText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
		scriptFolderText.setEditable(false);
		scriptFolderText.setText(selecttion != null ? selecttion.getPath().toString() : "");
		scriptFolderText.addModifyListener(evt -> validate());
		scriptFolderButton = new Button(container, SWT.BUTTON1);
		scriptFolderButton.setText("...");
		scriptFolderButton.addListener(SWT.Selection, evt -> {
			PackageFragmentRootSelectionDialog selectionDialog =
				new PackageFragmentRootSelectionDialog(getShell(), "Script Folder Selection",
					"Choose a script folder:", "Select script folder");
			if (selectionDialog.open() == Window.OK) {
				IFolder scriptFolder = ResourcesPlugin.getWorkspace().getRoot().getFolder(
					selectionDialog.getPackageFragmentRoot().getPath());
				if (scriptFolder != null) {
					scriptFolderText.setText(scriptFolder.getFullPath().toString());
				}
			}
		});
		
		// Script name
		Label scriptNameLabel = new Label(container, SWT.NULL);
		scriptNameLabel.setText("Script name:");
		scriptNameText = new Text(container, SWT.BORDER | SWT.SINGLE);
		scriptNameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
		scriptNameText.addModifyListener(evt -> validate());
		new Label(container, SWT.NONE).setText(""); // empty grid cell

		// Script type
		Label scriptTypeLabel = new Label(container, SWT.NULL);
		scriptTypeLabel.setText("Script type:");
		Group scriptTypeGroup = new Group(container, SWT.SHADOW_ETCHED_OUT);
		scriptTypeGroup.setLayout(new RowLayout(SWT.HORIZONTAL));
		javaRadioButton = new Button(scriptTypeGroup, SWT.RADIO);
		javaRadioButton.setSelection(true);
		javaRadioButton.setText("Java");
		pythonRadioButton = new Button(scriptTypeGroup, SWT.RADIO);
		pythonRadioButton.setSelection(false);
		pythonRadioButton.setText("Python");
		new Label(container, SWT.NONE).setText(""); // empty grid cell

		// Script author
		Label scriptAuthorLabel = new Label(container, SWT.NULL);
		scriptAuthorLabel.setText("Script author:");
		scriptAuthorText = new Text(container, SWT.BORDER | SWT.SINGLE);
		scriptAuthorText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
		scriptAuthorText.addModifyListener(evt -> validate());
		new Label(container, SWT.NONE).setText(""); // empty grid cell

		// Script category
		Label scriptCategoryLabel = new Label(container, SWT.NULL);
		scriptCategoryLabel.setText("Script category:");
		scriptCategoryText = new Text(container, SWT.BORDER | SWT.SINGLE);
		scriptCategoryText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
		scriptCategoryText.addModifyListener(evt -> validate());
		new Label(container, SWT.NONE).setText(""); // empty grid cell

		// Script description
		Label scriptDescriptionLabel = new Label(container, SWT.NULL);
		scriptDescriptionLabel.setText("Script description:");
		scriptDescriptionText =
			new Text(container, SWT.MULTI | SWT.WRAP | SWT.V_SCROLL | SWT.BORDER);
		scriptDescriptionText.setLayoutData(new GridData(GridData.FILL_BOTH));
		scriptDescriptionText.addModifyListener(evt -> validate());
		new Label(container, SWT.NONE).setText(""); // empty grid cell

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

@param selectedPackageFragmentRoot The current selection in the project explorer.
  Could be null if nothing is selected.
GhidraBuild/EclipsePlugins/GhidraDev/GhidraDevPlugin/src/main/java/ghidradev/ghidraprojectcreator/wizards/pages/CreateGhidraScriptWizardPage.java