private FlavorSelector()

in application/org.openjdk.jmc.flightrecorder.ui/src/main/java/org/openjdk/jmc/flightrecorder/ui/common/FlavorSelector.java [232:341]


	private FlavorSelector(Form form, IItemFilter filter, List<IAttribute<?>> attributes, IItemCollection items,
			IPageContainer pageContainer, SelectionWithThreadAndRangeConsumer onSelectWithThreads,
			Optional<Consumer<Boolean>> onShow, FlavorSelectorState flavorSelectorState) {
		this.filter = filter;
		this.attributes = attributes;
		this.items = items;
		this.pageContainer = pageContainer;
		this.onSelectWithThreads = onSelectWithThreads;
		flavorSelectorState = flavorSelectorState != null ? flavorSelectorState : new FlavorSelectorState();
		this.flavorSelectorState = flavorSelectorState;

		container = new Composite(form.getHead(), SWT.NONE);
		container.setLayout(GridLayoutFactory.fillDefaults().margins(0, 0).spacing(2, 2).create());

		Composite selectorRow = new Composite(container, SWT.NONE);
		selectorRow
				.setLayoutData(GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).create());
		selectorRow.setLayout(GridLayoutFactory.swtDefaults().numColumns(9).create());

//		useSelectionButton = new Button(selectorRow, SWT.CHECK);
//		useSelectionButton.setLayoutData(GridDataFactory.swtDefaults().create());
//		useSelectionButton.setText("Filter on:");
//		useSelectionButton.setEnabled(pageContainer.getSelectionStore().getSelections().count() > 0);
//		useSelectionButton.setSelection(pageContainer.getSelectionStore().isCurrentActive());
//		useSelectionButton.addSelectionListener(new SelectionCheckboxSelectionListener());

		selectionCombo = new ComboViewer(selectorRow);
		selectionCombo.getCombo().setLayoutData(GridDataFactory.swtDefaults().hint(200, SWT.DEFAULT)
				.minSize(100, SWT.DEFAULT).grab(false, false).create());
		selectionCombo.setContentProvider(new SelectionComboContentProvider());
		selectionCombo.setLabelProvider(new SelectionComboLabelProvider());
		selectionCombo.addSelectionChangedListener(new SelectionComboSelectionListener());
//		selectionCombo.getControl().setEnabled(pageContainer.getSelectionStore().isCurrentActive());

		Label flavorLabel = new Label(selectorRow, SWT.NONE);
		flavorLabel.setLayoutData(GridDataFactory.swtDefaults().create());
		flavorLabel.setText(Messages.FlavorSelector_LABEL_ASPECT);

		flavorCombo = new ComboViewer(selectorRow);
		flavorCombo.getCombo().setLayoutData(GridDataFactory.swtDefaults().hint(300, SWT.DEFAULT)
				.minSize(100, SWT.DEFAULT).grab(true, false).create());
		flavorCombo.setContentProvider(new FlavorComboContentProvider());
		flavorCombo.setLabelProvider(new FlavorComboLabelProvider());
		flavorCombo.addSelectionChangedListener(new FlavorComboSelectionListener());
//		flavorCombo.getControl().setEnabled(pageContainer.getSelectionStore().isCurrentActive());

		showConcurrentButton = new Button(selectorRow, SWT.CHECK);
		showConcurrentButton.setLayoutData(GridDataFactory.swtDefaults().create());
		showConcurrentButton.setText(Messages.FlavorSelector_BUTTON_SHOW_CONCURRENT);
		showConcurrentButton.setToolTipText(Messages.FlavorSelector_BUTTON_SHOW_CONCURRENT_TOOLTIP);
		showConcurrentButton.setSelection(this.flavorSelectorState.showConcurrent);
		showConcurrentButton.addSelectionListener(new ShowConcurrentSelectionListener());

		// FIXME: Instead use radio buttons with images?
		rangeStyleButton = new Button(selectorRow, SWT.CHECK);
		rangeStyleButton.setLayoutData(GridDataFactory.swtDefaults().create());
		rangeStyleButton.setText(Messages.FlavorSelector_BUTTON_CONTAINED);
		rangeStyleButton.setToolTipText(Messages.FlavorSelector_BUTTON_CONTAINED_TOOLTIP);
		rangeStyleButton.setEnabled(showConcurrentButton.getSelection());
		rangeStyleButton.setSelection(flavorSelectorState.concurrentContained);
		rangeStyleButton.addSelectionListener(new RangeStyleSelectionListener());

		// FIXME: Instead use radio buttons with images?
		sameThreadsButton = new Button(selectorRow, SWT.CHECK);
		sameThreadsButton.setLayoutData(GridDataFactory.swtDefaults().create());
		sameThreadsButton.setText(Messages.FlavorSelector_BUTTON_SAME_THREADS);
		sameThreadsButton.setToolTipText(Messages.FlavorSelector_BUTTON_SAME_THREADS_TOOLTIP);
		sameThreadsButton.setEnabled(showConcurrentButton.getSelection());
		sameThreadsButton.setSelection(flavorSelectorState.sameThreads);
		sameThreadsButton.addSelectionListener(new SameThreadsSelectionListener());

		// FIXME: Persist state for above checkboxes?

		onShow.ifPresent(on -> {
			Label rangeLabel = new Label(selectorRow, SWT.NONE);
			rangeLabel.setLayoutData(GridDataFactory.swtDefaults().create());
			rangeLabel.setText(Messages.FlavorSelector_LABEL_TIMERANGE);
			showButton = new Button(selectorRow, SWT.PUSH);
			showButton.setText(Messages.FlavorSelector_BUTTON_TIMERANGE_SET);
			showButton.setToolTipText(Messages.FlavorSelector_BUTTON_TIMERANGE_SET_TOOLTIP);
			showButton.setLayoutData(GridDataFactory.swtDefaults().create());
			resetButton = new Button(selectorRow, SWT.PUSH);
			resetButton.setText(Messages.FlavorSelector_BUTTON_TIMERANGE_CLEAR);
			resetButton.setToolTipText(Messages.FlavorSelector_BUTTON_TIMERANGE_CLEAR_TOOLTIP);
			resetButton.addListener(SWT.Selection, e -> on.accept(false));
			resetButton.setLayoutData(GridDataFactory.swtDefaults().create());
			showButton.addListener(SWT.Selection, e -> on.accept(true));
		});

		canvas = new Canvas(container, SWT.NO_BACKGROUND);
		canvas.setLayoutData(GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).hint(SWT.DEFAULT, 7)
				.grab(true, false).create());
		painter = new RangePainter(canvas, pageContainer.getRecordingRange());

		selectionCombo.setInput(pageContainer.getSelectionStore());
		selectionCombo.setSelection(getCurrentSelection());
		callbackActive = true;

		enableSelection();

		IItemStreamFlavor currentFlavor = null;
		if (pageContainer.getSelectionStore().isCurrentActive()) {
			currentFlavor = getSelectedFlavor();
		}
		useFlavor(currentFlavor);

		pageContainer.getSelectionStore().setListener(this);

		form.setHeadClient(container);
	}