@SuppressWarnings({"rawtypes", "unchecked"})
	private void configureGenerator() {
		// Create the configuration card.
		Card card = new Card();
		card.maxWidthProperty().bind(widthProperty().multiply(0.70));
		card.maxHeightProperty().bind(heightProperty().divide(2));

		// Populate it based on available items in the current name provider's config.
		ConfigContainer container = nameGeneratorProviders.getProviders().get(currentProvider.get());
		if (container != null && !container.getValues().isEmpty()) {
			boolean isThirdPartyConfig = ConfigGroups.EXTERNAL.equals(container.getGroup());
			GridPane grid = createGrid();
			container.getValues().forEach((id, value) -> {
				int row = grid.getRowCount();
				String key = container.getScopedId(value);
				if (isThirdPartyConfig) {
					grid.add(new Label(value.getId()), 0, row);
				} else {
					grid.add(new BoundLabel(getBinding(key)), 0, row);
				}
				ConfigComponentFactory factory = componentManager.getFactory(container, value);
				Node node = factory.create(container, value);
				grid.add(node, 1, row);
			});
			card.setBody(grid);
		} else {
			BoundLabel label = new BoundLabel(getBinding("mapgen.configure.nothing"));
			label.setMaxHeight(Integer.MAX_VALUE);
			label.setMaxWidth(Integer.MAX_VALUE);
			label.setTextAlignment(TextAlignment.CENTER);
			label.setAlignment(Pos.CENTER);
			card.setBody(label);
		}

		// Show the configuration card.
		modal.show(card);
	}
Pane for configurable mapping generation.

@author Matt Coley
recaf-ui/src/main/java/software/coley/recaf/ui/pane/MappingGeneratorPane.java