protected AbstractVirtualCasePane(T node, Scene scene, GseContext context) {
this.node = Objects.requireNonNull(node);
Objects.requireNonNull(scene);
Objects.requireNonNull(context);
Project project = node.getProject();
nameTextField = NameTextField.create(node);
caseSelectionPane = new ProjectNodeSelectionPane<>(project, RESOURCE_BUNDLE.getString("Case"), true, scene.getWindow(),
context, ProjectFile.class, ProjectCase.class);
scriptSelectionPane = new ProjectNodeSelectionPane<>(project, RESOURCE_BUNDLE.getString("ModificationScript"), true,
scene.getWindow(), context, ModificationScript.class);
setVgap(5);
setHgap(5);
ColumnConstraints column0 = new ColumnConstraints();
ColumnConstraints column1 = new ColumnConstraints();
column1.setHgrow(Priority.ALWAYS);
getColumnConstraints().addAll(column0, column1);
add(nameTextField.getNameLabel(), 0, 0);
add(nameTextField.getInputField(), 1, 0, 2, 1);
Platform.runLater(nameTextField.getInputField()::requestFocus);
add(caseSelectionPane.getLabel(), 0, 1);
add(caseSelectionPane.getTextField(), 1, 1);
add(caseSelectionPane.getButton(), 2, 1);
add(scriptSelectionPane.getLabel(), 0, 2);
add(scriptSelectionPane.getTextField(), 1, 2);
add(scriptSelectionPane.getButton(), 2, 2);
add(NewScriptButton.create(node, scriptSelectionPane.nodeProperty(), context), 3, 2);
add(nameTextField.getFileAlreadyExistsLabel(), 0, 3, 4, 1);
}