Search in sources :

Example 26 with ListView

use of javafx.scene.control.ListView in project jvarkit by lindenb.

the class IndexCovJfx method doWork.

@Override
public int doWork(final Stage primaryStage, final List<String> args) {
    final Rectangle2D screen = Screen.getPrimary().getVisualBounds();
    final Pattern tab = Pattern.compile("[\t]");
    BufferedReader r = null;
    try {
        final File inputFile;
        if (args.isEmpty()) {
            // open gui
            final FileChooser fc = new FileChooser();
            inputFile = fc.showOpenDialog(null);
            if (inputFile == null) {
                return 0;
            }
        } else if (args.size() == 1) {
            inputFile = new File(args.get(0));
        } else {
            LOG.error("Illegal Number of arguments: " + args);
            return -1;
        }
        r = IOUtils.openFileForBufferedReading(inputFile);
        String line = r.readLine();
        if (line == null) {
            new Alert(AlertType.ERROR, "Cannot read first line of " + inputFile, ButtonType.OK).showAndWait();
            return -1;
        }
        String[] tokens = tab.split(line);
        if (tokens.length < 4 || !tokens[0].equals("#chrom") || !tokens[1].equals("start") || !tokens[2].equals("end")) {
            new Alert(AlertType.ERROR, "bad first line " + line + " in " + inputFile, ButtonType.OK).showAndWait();
            return -1;
        }
        this.sampleNames.addAll(Arrays.asList(tokens).subList(3, tokens.length).stream().map(S -> new Sample(S)).collect(Collectors.toList()));
        this.sampleListView = new ListView<>(this.sampleNames);
        final MultipleSelectionModel<Sample> sampleSelectionModel = this.sampleListView.getSelectionModel();
        sampleSelectionModel.setSelectionMode(SelectionMode.MULTIPLE);
        // this.sampleListView.setPrefWidth(200);
        final SmartComparator smartCmp = new SmartComparator();
        this.orignalndexCovRows.addAll(r.lines().filter(L -> !StringUtil.isBlank(L)).map(L -> Arrays.asList(tab.split(L))).map(T -> new IndexCovRow(T)).sorted((A, B) -> {
            int i = smartCmp.compare(A.getContig(), B.getContig());
            if (i != 0)
                return i;
            return A.getStart() - B.getStart();
        }).collect(Collectors.toList()));
        this.visibleIndexCovRows.addAll(orignalndexCovRows);
        String lastContig = null;
        for (final IndexCovRow row : this.visibleIndexCovRows) {
            if (lastContig == null || !lastContig.equals(row.getContig())) {
                this.contig2color.put(row.getContig(), this.contig2color.size() % 2 == 0 ? gray(0.96) : gray(0.98));
                lastContig = row.getContig();
            }
        }
        this.canvas = new Canvas(screen.getWidth() - 400, screen.getHeight() - 200);
        this.canvasSrollPane = new ScrollPane(canvas);
        this.canvasSrollPane.setFitToHeight(true);
        this.canvasSrollPane.setFitToWidth(true);
        this.canvasSrollPane.setHbarPolicy(ScrollBarPolicy.ALWAYS);
        this.canvasSrollPane.setHmin(0);
        // NOT HERE: see adjustScollPane();
        // this.canvasSrollPane.setHmax(this.visibleIndexCovRows.size()*CHUNK_WIDTH);
        // this.canvasSrollPane.setHvalue(0);
        this.canvasSrollPane.hvalueProperty().addListener(E -> repaintCanvas());
        final VBox root = new VBox();
        final MenuBar menuBar = new MenuBar();
        Menu menu = new Menu("Tools");
        MenuItem item = new MenuItem("Goto");
        item.setOnAction(AE -> askGoto());
        item.setAccelerator(new KeyCodeCombination(KeyCode.G, KeyCombination.CONTROL_DOWN));
        menu.getItems().add(item);
        menu.getItems().add(new SeparatorMenuItem());
        // 
        item = new MenuItem("Cleanup: remove data > DEL && data < DUP");
        item.setOnAction(AE -> askCleanup());
        menu.getItems().add(item);
        // 
        item = new MenuItem("Cleanup: remove ALL samples <= DEL or ALL samples >= DUP");
        item.setOnAction(AE -> askEveryWhere());
        menu.getItems().add(item);
        // 
        item = new MenuItem("Cleanup: keep selected samples having <= DEL or ALL samples >= DUP");
        item.setOnAction(AE -> filterForSampleSet(false));
        menu.getItems().add(item);
        // 
        item = new MenuItem("Cleanup: keep selected samples having <= DEL or ALL samples >= DUP and only those samples.");
        item.setOnAction(AE -> filterForSampleSet(true));
        menu.getItems().add(item);
        // 
        item = new MenuItem("Filter: Keep data overlapping BED file");
        item.setOnAction(AE -> filterBed(false));
        menu.getItems().add(item);
        // 
        item = new MenuItem("Filter: Keep data NOT overlapping BED file");
        item.setOnAction(AE -> filterBed(true));
        menu.getItems().add(item);
        // 
        item = new MenuItem("Revert: Restore original data");
        item.setOnAction(AE -> doRestoreOriginalData());
        item.setAccelerator(new KeyCodeCombination(KeyCode.R, KeyCombination.CONTROL_DOWN));
        menu.getItems().add(item);
        menu.getItems().add(new SeparatorMenuItem());
        item = new MenuItem("Next Interesting");
        item.setOnAction(AE -> goToNextInteresting(1));
        item.setAccelerator(new KeyCodeCombination(KeyCode.N, KeyCombination.CONTROL_DOWN));
        menu.getItems().add(item);
        item = new MenuItem("Previous Interesting");
        item.setOnAction(AE -> goToNextInteresting(-1));
        item.setAccelerator(new KeyCodeCombination(KeyCode.P, KeyCombination.CONTROL_DOWN));
        menu.getItems().add(item);
        menu.getItems().add(new SeparatorMenuItem());
        item = new MenuItem("Quit");
        menu.getItems().add(item);
        item.setOnAction(AE -> {
            Platform.exit();
        });
        menuBar.getMenus().add(menu);
        root.getChildren().add(menuBar);
        final HBox toolboxPane = new HBox();
        Label label = new Label("DEL when \u2264 :");
        toolboxPane.getChildren().add(label);
        this.deletionSpinner = new Spinner<>(0.0, 0.9, DEFAULT_deletionTreshold, 0.05);
        label.setLabelFor(this.deletionSpinner);
        this.deletionSpinner.valueProperty().addListener((a, b, c) -> repaintCanvas());
        toolboxPane.getChildren().add(this.deletionSpinner);
        label = new Label("DUP when \u2265 :");
        toolboxPane.getChildren().add(label);
        this.duplicationSpinner = new Spinner<>(1.1, 10.0, DEFAULT_duplicationTreshold, 0.05);
        this.duplicationSpinner.valueProperty().addListener((a, b, c) -> repaintCanvas());
        label.setLabelFor(this.duplicationSpinner);
        toolboxPane.getChildren().add(this.duplicationSpinner);
        label = new Label(" Jump to :");
        toolboxPane.getChildren().add(label);
        final TextField jumpToTextField = new TextField();
        jumpToTextField.setPromptText("chrom:pos");
        jumpToTextField.setPrefColumnCount(15);
        toolboxPane.getChildren().add(jumpToTextField);
        label.setLabelFor(jumpToTextField);
        jumpToTextField.setOnAction(AE -> askGoto(jumpToTextField.getText()));
        final Button goButton = new Button("Go");
        toolboxPane.getChildren().add(goButton);
        goButton.setOnAction(AE -> askGoto(jumpToTextField.getText()));
        root.getChildren().add(toolboxPane);
        // HBox hbox = new HBox(sampleListView,this.canvasSrollPane);
        final GridPane grid = new GridPane();
        grid.setHgap(10);
        grid.setVgap(10);
        grid.setPadding(new Insets(5, 5, 5, 5));
        grid.add(this.sampleListView, 0, 0, 1, 1);
        grid.add(this.canvasSrollPane, 1, 0, 9, 1);
        // final StackPane root = new StackPane();
        root.getChildren().add(grid);
        final Scene scene = new Scene(root);
        primaryStage.setTitle(IndexCovJfx.class.getSimpleName() + " " + this.sampleNames.size() + " Sample(s) " + this.visibleIndexCovRows.size() + " Point(s).");
        primaryStage.setOnShown(E -> {
            adjustScollPane();
            this.canvasSrollPane.requestFocus();
            repaintCanvas();
            if (this.isUnitText()) {
                Platform.exit();
            }
        });
        this.canvasSrollPane.setOnKeyPressed(e -> {
            if (e.getCode() == KeyCode.LEFT) {
                canvasSrollPane.setHvalue(Math.max(canvasSrollPane.getHmin(), canvasSrollPane.getHvalue() - CHUNK_WIDTH));
            }
            if (e.getCode() == KeyCode.RIGHT) {
                canvasSrollPane.setHvalue(Math.min(canvasSrollPane.getHmax(), canvasSrollPane.getHvalue() + CHUNK_WIDTH));
            }
        });
        primaryStage.setScene(scene);
        primaryStage.show();
        /*sampleSelectionModel.selectedItemProperty().addListener(E->{
	        	repaintCanvas();
				});
	        sampleSelectionModel.selectedItemProperty().addListener(E->repaintCanvas());*/
        sampleSelectionModel.getSelectedIndices().addListener(new ListChangeListener<Integer>() {

            @Override
            public void onChanged(Change<? extends Integer> c) {
                repaintCanvas();
            }
        });
    } catch (final Exception err) {
        LOG.error(err);
        new Alert(AlertType.ERROR, "Error " + err, ButtonType.OK).showAndWait();
        return -1;
    } finally {
        CloserUtil.close(r);
    }
    return 0;
}
Also used : Button(javafx.scene.control.Button) Arrays(java.util.Arrays) Program(com.github.lindenb.jvarkit.util.jcommander.Program) AbstractList(java.util.AbstractList) VBox(javafx.scene.layout.VBox) MultipleSelectionModel(javafx.scene.control.MultipleSelectionModel) KeyCombination(javafx.scene.input.KeyCombination) Application(javafx.application.Application) ScrollPane(javafx.scene.control.ScrollPane) StringUtil(htsjdk.samtools.util.StringUtil) ListChangeListener(javafx.collections.ListChangeListener) AlertType(javafx.scene.control.Alert.AlertType) Locale(java.util.Locale) Map(java.util.Map) Hershey(com.github.lindenb.jvarkit.util.Hershey) CloserUtil(htsjdk.samtools.util.CloserUtil) Alert(javafx.scene.control.Alert) HBox(javafx.scene.layout.HBox) Rectangle2D(javafx.geometry.Rectangle2D) TextField(javafx.scene.control.TextField) MenuItem(javafx.scene.control.MenuItem) GraphicsContext(javafx.scene.canvas.GraphicsContext) JfxLauncher(com.github.lindenb.jvarkit.util.jcommander.JfxLauncher) Logger(com.github.lindenb.jvarkit.util.log.Logger) Set(java.util.Set) Canvas(javafx.scene.canvas.Canvas) Spinner(javafx.scene.control.Spinner) Screen(javafx.stage.Screen) Collectors(java.util.stream.Collectors) Platform(javafx.application.Platform) SeparatorMenuItem(javafx.scene.control.SeparatorMenuItem) List(java.util.List) SmartComparator(com.github.lindenb.jvarkit.lang.SmartComparator) ScrollBarPolicy(javafx.scene.control.ScrollPane.ScrollBarPolicy) TextInputDialog(javafx.scene.control.TextInputDialog) Optional(java.util.Optional) Pattern(java.util.regex.Pattern) ObservableList(javafx.collections.ObservableList) IntStream(java.util.stream.IntStream) Scene(javafx.scene.Scene) ListView(javafx.scene.control.ListView) ButtonType(javafx.scene.control.ButtonType) BedLineCodec(com.github.lindenb.jvarkit.util.bio.bed.BedLineCodec) FXCollections(javafx.collections.FXCollections) HashMap(java.util.HashMap) NumberFormat(java.text.NumberFormat) ArrayList(java.util.ArrayList) Interval(htsjdk.samtools.util.Interval) Insets(javafx.geometry.Insets) IOUtils(com.github.lindenb.jvarkit.io.IOUtils) GridPane(javafx.scene.layout.GridPane) Locatable(htsjdk.samtools.util.Locatable) KeyCode(javafx.scene.input.KeyCode) Color(javafx.scene.paint.Color) Label(javafx.scene.control.Label) MenuBar(javafx.scene.control.MenuBar) File(java.io.File) Menu(javafx.scene.control.Menu) KeyCodeCombination(javafx.scene.input.KeyCodeCombination) FileChooser(javafx.stage.FileChooser) SelectionMode(javafx.scene.control.SelectionMode) Stage(javafx.stage.Stage) BufferedReader(java.io.BufferedReader) HBox(javafx.scene.layout.HBox) Insets(javafx.geometry.Insets) Label(javafx.scene.control.Label) MenuBar(javafx.scene.control.MenuBar) Button(javafx.scene.control.Button) FileChooser(javafx.stage.FileChooser) TextField(javafx.scene.control.TextField) Menu(javafx.scene.control.Menu) Pattern(java.util.regex.Pattern) GridPane(javafx.scene.layout.GridPane) Canvas(javafx.scene.canvas.Canvas) Rectangle2D(javafx.geometry.Rectangle2D) MenuItem(javafx.scene.control.MenuItem) SeparatorMenuItem(javafx.scene.control.SeparatorMenuItem) KeyCodeCombination(javafx.scene.input.KeyCodeCombination) SeparatorMenuItem(javafx.scene.control.SeparatorMenuItem) Scene(javafx.scene.Scene) SmartComparator(com.github.lindenb.jvarkit.lang.SmartComparator) ScrollPane(javafx.scene.control.ScrollPane) BufferedReader(java.io.BufferedReader) Alert(javafx.scene.control.Alert) File(java.io.File) VBox(javafx.scene.layout.VBox)

Example 27 with ListView

use of javafx.scene.control.ListView in project dolphin-platform by canoo.

the class ViewSample method start.

@Override
public void start(final Stage primaryStage) throws Exception {
    final ListView<LogMessage> listView = new ListView<>();
    listView.setCellFactory(v -> new LogListCell());
    listView.setItems(LogClientUtil.createObservableListFromLocalCache());
    Executors.newSingleThreadExecutor().execute(() -> {
        while (true) {
            try {
                Thread.sleep(2_000);
            } catch (InterruptedException e) {
            }
            LOG.info(MarkerFactory.getMarker("MyMarker"), "System " + UUID.randomUUID() + " starting");
            LOG.info("Found 3 modules");
            LOG.debug("Starting module 'Base'");
            if (Math.random() > 0.5) {
                LOG.trace("Module 'Base' started in 45 ms");
            } else {
                LOG.trace("Module 'Base' is using default configuration");
                LOG.trace("Module 'Base' started in 67 ms");
            }
            LOG.debug("Starting module 'Platform'");
            if (Math.random() > 0.5) {
                LOG.trace("Module 'Platform' started in 35 ms");
            } else {
                LOG.warn("Module 'Platform' is using default configuration! Please configure it!");
                LOG.trace("Module 'Platform' started in 67 ms");
            }
            LOG.debug("Starting module 'Security'");
            if (Math.random() > 0.5) {
                LOG.trace("Module 'Security' started in 35 ms");
            } else {
                LOG.error("Module 'Security' can not be started!", new RuntimeException("Error in param foo"));
            }
        }
    });
    Executors.newSingleThreadExecutor().execute(() -> {
        while (true) {
            try {
                Thread.sleep(1_500);
            } catch (InterruptedException e) {
            }
            LOG.trace("Will ping server");
            LOG.debug("Server ping returned in 42 ms");
        }
    });
    final LogFilterView filterView = new LogFilterView();
    final VBox main = new VBox(filterView, listView);
    main.setFillWidth(true);
    VBox.setVgrow(filterView, Priority.NEVER);
    VBox.setVgrow(listView, Priority.ALWAYS);
    primaryStage.setScene(new Scene(main));
    primaryStage.show();
}
Also used : LogFilterView(com.canoo.platform.logger.client.widgets.LogFilterView) ListView(javafx.scene.control.ListView) LogMessage(com.canoo.platform.logging.spi.LogMessage) LogListCell(com.canoo.platform.logger.client.widgets.LogListCell) Scene(javafx.scene.Scene) VBox(javafx.scene.layout.VBox)

Example 28 with ListView

use of javafx.scene.control.ListView in project aic-praise by aic-sri-international.

the class QueryController method displayQueryErrors.

private void displayQueryErrors(String query, List<HOGMProblemError> queryErrors, HOGModel parsedModel, long millisecondsToCompute) {
    String title = "Query '" + query + "' encountered " + queryErrors.size() + " error(s) when attempting to compute answer (took " + Util.toHoursMinutesAndSecondsString(millisecondsToCompute) + ")";
    ListView<HOGMProblemError> errors = new ListView<>(FXCollections.observableList(queryErrors));
    // errors.setFixedCellSize(24);
    errors.setPrefHeight(24 * 5);
    errors.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
    errors.getSelectionModel().selectedIndexProperty().addListener((obs, oldValue, newValue) -> {
        if (newValue.intValue() >= 0) {
            HOGMProblemError qError = errors.getItems().get(newValue.intValue());
            if (qError.getContext() == HOGMProblemError.Scope.MODEL) {
                modelPageEditor.highlight(qError.getStartContextIndex(), qError.getEndContextIndex());
            } else if (qError.getContext() == HOGMProblemError.Scope.QUERY) {
                queryComboBox.getEditor().selectAll();
            }
        }
    });
    Node resultContent = null;
    if (PRAiSEController.isInDebugMode()) {
        HOGMCodeArea parsedModelArea = createParsedModelView(parsedModel);
        TabPane resultTabs = new TabPane();
        resultTabs.getTabs().add(new Tab("Errors", errors));
        resultTabs.getTabs().add(new Tab("Parsed As", parsedModelArea));
        resultContent = resultTabs;
    } else {
        resultContent = errors;
    }
    TitledPane resultPane = new TitledPane(title, resultContent);
    FXUtil.setTitledPaneIcon(resultPane, FontAwesomeIcons.TIMES);
    showResultPane(resultPane);
    errors.getSelectionModel().selectFirst();
}
Also used : TitledPane(javafx.scene.control.TitledPane) TabPane(javafx.scene.control.TabPane) HOGMProblemError(com.sri.ai.praise.core.inference.byinputrepresentation.classbased.hogm.parsing.HOGMProblemError) ListView(javafx.scene.control.ListView) HOGMCodeArea(com.sri.ai.praise.other.application.praise.app.editor.HOGMCodeArea) Tab(javafx.scene.control.Tab) Node(javafx.scene.Node)

Aggregations

ListView (javafx.scene.control.ListView)28 Label (javafx.scene.control.Label)15 ListCell (javafx.scene.control.ListCell)13 Button (javafx.scene.control.Button)12 Callback (javafx.util.Callback)10 GridPane (javafx.scene.layout.GridPane)9 ChangeListener (javafx.beans.value.ChangeListener)8 Insets (javafx.geometry.Insets)8 ImageView (javafx.scene.image.ImageView)8 Inject (javax.inject.Inject)8 AutoTooltipLabel (bisq.desktop.components.AutoTooltipLabel)7 AnchorPane (javafx.scene.layout.AnchorPane)7 UserThread (bisq.common.UserThread)6 Tuple2 (bisq.common.util.Tuple2)6 Res (bisq.core.locale.Res)6 FxmlView (bisq.desktop.common.view.FxmlView)6 AutoTooltipButton (bisq.desktop.components.AutoTooltipButton)6 Popup (bisq.desktop.main.overlays.popups.Popup)6 File (java.io.File)6 ObservableList (javafx.collections.ObservableList)6