use of javafx.scene.control.MenuItem in project MiscellaneousStudy by mikoto2000.
the class ContextMenuSampleController method showContextMenu.
@FXML
public void showContextMenu(MouseEvent event) {
ContextMenu cm = new ContextMenu();
List<MenuItem> items = cm.getItems();
MenuItem item1 = new MenuItem("Context Menu Item 1(instant)");
item1.setOnAction((ActionEvent e) -> System.out.println("Clicked Context Menu Item 1"));
items.add(item1);
MenuItem item2 = new MenuItem("Context Menu Item 2(instant)");
item2.setOnAction((ActionEvent e) -> System.out.println("Clicked Context Menu Item 2"));
items.add(item2);
MenuItem item3 = new MenuItem("Context Menu Item 3(instant)");
item3.setOnAction((ActionEvent e) -> System.out.println("Clicked Context Menu Item 3"));
items.add(item3);
if (currentCm != null) {
currentCm.hide();
}
currentCm = cm;
cm.show(hbox, event.getScreenX(), event.getScreenY());
}
use of javafx.scene.control.MenuItem in project jvarkit by lindenb.
the class IgvReview method start.
@Override
public void start(final Stage stage) throws Exception {
stage.setTitle(getClass().getSimpleName());
Predicate<VariantContext> ctxFilter;
Map<String, String> params = super.getParameters().getNamed();
if (params.containsKey("--filter")) {
ctxFilter = JexlVariantPredicate.create(params.get("--filter"));
} else {
ctxFilter = V -> true;
}
final List<String> args = super.getParameters().getUnnamed();
final File configFile;
if (args.isEmpty()) {
final FileChooser fc = new FileChooser();
final String lastDirStr = preferences.get(LAST_USED_DIR_KEY, null);
if (lastDirStr != null && !lastDirStr.isEmpty()) {
fc.setInitialDirectory(new File(lastDirStr));
}
fc.getExtensionFilters().addAll(Collections.singletonList(new FileChooser.ExtensionFilter("Config file", "*.config", "*.cfg", "*.list")));
configFile = fc.showOpenDialog(stage);
} else if (args.size() == 1) {
configFile = new File(args.get(0));
} else {
configFile = null;
}
if (configFile == null || !configFile.exists()) {
JfxUtils.dialog().cause("Illegal number of arguments or file doesn't exists.").show(stage);
Platform.exit();
return;
}
if (configFile.isFile() && configFile.getParentFile() != null) {
this.preferences.put(LAST_USED_DIR_KEY, configFile.getParentFile().getPath());
}
final List<String> configLines = Files.readAllLines(configFile.toPath());
final Predicate<String> ignoreComment = (S) -> !S.startsWith("#");
final Predicate<String> predVcf = S -> S.endsWith(".vcf") || S.endsWith(".vcf.gz");
if (configLines.stream().filter(ignoreComment).filter(predVcf).count() != 1) {
JfxUtils.dialog().cause("Found more than one vcf file in " + configFile).show(stage);
Platform.exit();
return;
}
final File vcfFile = configLines.stream().filter(ignoreComment).filter(predVcf).map(S -> new File(S)).findFirst().get();
LOG.info("Opening vcf file and loading in memory");
VCFFileReader vfr = null;
CloseableIterator<VariantContext> iter = null;
final Set<String> sampleNames;
try {
this.variants.clear();
vfr = new VCFFileReader(vcfFile, false);
this.vcfHeader = vfr.getFileHeader();
sampleNames = new HashSet<>(this.vcfHeader.getSampleNamesInOrder());
if (sampleNames.isEmpty()) {
JfxUtils.dialog().cause("No Genotypes in " + vcfFile).show(stage);
Platform.exit();
return;
}
iter = vfr.iterator();
this.variants.addAll(iter.stream().filter(ctxFilter).filter(CTX -> CTX.isVariant()).collect(Collectors.toList()));
} catch (final Exception err) {
JfxUtils.dialog().cause(err).show(stage);
Platform.exit();
return;
} finally {
CloserUtil.close(iter);
CloserUtil.close(vfr);
}
if (this.variants.isEmpty()) {
JfxUtils.dialog().cause("No Variants").show(stage);
Platform.exit();
return;
}
final SAMSequenceDictionary dict = this.vcfHeader.getSequenceDictionary();
if (dict == null || dict.isEmpty()) {
JfxUtils.dialog().cause(JvarkitException.VcfDictionaryMissing.getMessage(vcfFile.getPath())).show(stage);
Platform.exit();
return;
}
final SamReaderFactory srf = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.LENIENT);
configLines.stream().filter(ignoreComment).filter(S -> S.endsWith(".bam")).map(S -> new File(S)).forEach(F -> {
final SamReader samIn = srf.open(F);
final SAMFileHeader header = samIn.getFileHeader();
CloserUtil.close(samIn);
String sample = null;
for (final SAMReadGroupRecord rg : header.getReadGroups()) {
String s = rg.getSample();
if (s == null)
continue;
if (sample == null) {
sample = s;
} else if (!sample.equals(s)) {
JfxUtils.dialog().cause("Two samples in " + F).show(stage);
Platform.exit();
return;
}
}
if (sample == null) {
JfxUtils.dialog().cause("No sample in " + F + ". Ignoring").show(stage);
return;
}
if (!sampleNames.contains(sample)) {
JfxUtils.dialog().cause("Not in VCF header " + sample + " / " + F + ". Ignoring").show(stage);
return;
}
this.sample2bamFile.put(sample, F);
});
if (this.sample2bamFile.isEmpty()) {
JfxUtils.dialog().cause("No valid bam file in " + configFile).show(stage);
return;
}
sampleNames.retainAll(this.sample2bamFile.keySet());
if (sampleNames.isEmpty()) {
JfxUtils.dialog().cause("No Sample associated to bam").show(stage);
return;
}
ObservableList<VariantAndGenotype> genotypes = FXCollections.observableArrayList(this.variants.stream().flatMap(CTX -> CTX.getGenotypes().stream().filter(G -> sampleNames.contains(G.getSampleName())).map(G -> new VariantAndGenotype(CTX, G))).collect(Collectors.toList()));
if (genotypes.isEmpty()) {
JfxUtils.dialog().cause("No Genotype to show").show(stage);
return;
}
Menu menu = new Menu("File");
MenuItem menuItem = new MenuItem("Save as...");
menuItem.setOnAction(AE -> {
saveVariantsAs(stage);
});
menu.getItems().add(menuItem);
menuItem = new MenuItem("Save");
menuItem.setOnAction(AE -> {
if (this.saveAsFile != null) {
saveVariants(stage, this.saveAsFile);
} else {
saveVariantsAs(stage);
}
});
menu.getItems().add(menuItem);
menu.getItems().add(new SeparatorMenuItem());
menuItem = new MenuItem("Quit");
menuItem.setOnAction(AE -> {
Platform.exit();
});
menu.getItems().add(menuItem);
MenuBar bar = new MenuBar(menu);
this.genotypeTable = new TableView<>(genotypes);
this.genotypeTable.getColumns().add(makeColumn("CHROM", G -> G.ctx.getContig()));
this.genotypeTable.getColumns().add(makeColumn("POS", G -> G.ctx.getStart()));
this.genotypeTable.getColumns().add(makeColumn("ID", G -> G.ctx.getID()));
this.genotypeTable.getColumns().add(makeColumn("REF", G -> G.ctx.getReference().getDisplayString()));
this.genotypeTable.getColumns().add(makeColumn("ALT", G -> G.ctx.getAlternateAlleles().stream().map(A -> A.getDisplayString()).collect(Collectors.joining(","))));
this.genotypeTable.getColumns().add(makeColumn("Sample", G -> G.g.getSampleName()));
this.genotypeTable.getColumns().add(makeColumn("Type", G -> G.g.getType().name()));
this.genotypeTable.getColumns().add(makeColumn("Alleles", G -> G.g.getAlleles().stream().map(A -> A.getDisplayString()).collect(Collectors.joining(","))));
TableColumn<VariantAndGenotype, String> reviewCol = new TableColumn<>("Review");
reviewCol.setCellValueFactory(C -> C.getValue().getReviewProperty());
reviewCol.setCellFactory(TextFieldTableCell.forTableColumn());
reviewCol.setOnEditCommit((E) -> {
int y = E.getTablePosition().getRow();
this.genotypeTable.getItems().get(y).setReview(E.getNewValue());
});
reviewCol.setEditable(true);
this.genotypeTable.getColumns().add(reviewCol);
this.genotypeTable.getSelectionModel().cellSelectionEnabledProperty().set(true);
this.genotypeTable.setEditable(true);
final ContextMenu cm = new ContextMenu();
MenuItem mi1 = new MenuItem("Menu 1");
cm.getItems().add(mi1);
MenuItem mi2 = new MenuItem("Menu 2");
cm.getItems().add(mi2);
this.genotypeTable.setOnMousePressed(event -> {
if (event.isPrimaryButtonDown() && (event.getClickCount() == 3 || event.isShiftDown())) {
moveIgvTo(stage, genotypeTable.getSelectionModel().getSelectedItem());
} else if (event.isSecondaryButtonDown()) {
cm.show(genotypeTable, event.getScreenX(), event.getScreenY());
}
});
final BorderPane pane2 = new BorderPane(this.genotypeTable);
pane2.setPadding(new Insets(10, 10, 10, 10));
VBox vbox1 = new VBox(bar, pane2);
final Scene scene = new Scene(vbox1, 500, 300);
stage.setScene(scene);
stage.show();
}
use of javafx.scene.control.MenuItem in project jvarkit by lindenb.
the class JfxNgs method createCommonMenuItems.
List<MenuItem> createCommonMenuItems(final Stage stage) {
final List<MenuItem> L = new ArrayList<>();
L.add(createMenuItem("About...", () -> doMenuAbout(stage)));
L.add(createMenuItem("Preferences...", () -> showPreferencesDialog(stage)));
L.add(createMenuItem("Open in Microsoft Excel...", () -> doMenuOpenInExcel(stage)));
L.add(new SeparatorMenuItem());
L.add(createMenuItem("Open VCF/BAM File...", () -> openNgsFile(stage)));
L.add(createMenuItem("Open Remote BAM...", () -> openBamUrl(stage)));
L.add(createMenuItem("Open Remote VCF...", () -> openVcfUrl(stage)));
L.add(new SeparatorMenuItem());
L.add(createMenuItem("Tool: index BAM file...", () -> doMenuIndexBam(stage)));
L.add(createMenuItem("Tool: index VCF file...", () -> doMenuIndexVcf(stage)));
L.add(new SeparatorMenuItem());
L.add(createMenuItem("Close", () -> stage.hide()));
return L;
}
use of javafx.scene.control.MenuItem in project jvarkit by lindenb.
the class JfxNgs method start.
/*
private void showPreferenceDialoge(Window parentStage)
{
Stage dialog = new Stage();
dialog.setTitle("Preferences");
dialog.initOwner(parentStage);
dialog.initModality(Modality.APPLICATION_MODAL);
dialog.showAndWait();
}*/
@Override
public void start(final Stage primaryStage) throws Exception {
final Parameters params = this.getParameters();
primaryStage.setTitle(getClass().getSimpleName());
Menu menu = new Menu("File");
menu.getItems().addAll(createCommonMenuItems(primaryStage));
menu.getItems().add(new SeparatorMenuItem());
MenuItem menuItem = new MenuItem("Quit...");
menuItem.setOnAction(AE -> doMenuQuit());
menu.getItems().add(menuItem);
MenuBar bar = new MenuBar(menu);
FlowPane flow = new FlowPane(5, 5);
flow.setPadding(new Insets(10));
flow.getChildren().add(new Label("Set Location of all frames to:"));
final TextField textField = new TextField();
textField.setPrefColumnCount(25);
textField.setPromptText("Location. e:g '2:1234-5678'");
flow.getChildren().add(textField);
Button button = new Button("Go");
flow.getChildren().add(button);
textField.setTooltip(new Tooltip("set genomic location can be: empty, 'contig', 'contig:pos', 'contig:start-end' and (\"unmapped\" for bam)"));
final EventHandler<ActionEvent> handler = new EventHandler<ActionEvent>() {
@Override
public void handle(final ActionEvent event) {
final String loc = textField.getText().trim();
LOG.info("moveTo all to " + loc);
for (final NgsStage<?, ?> sc : all_opened_stages) {
LOG.info("moveTo " + sc.getTitle() + " to " + loc);
sc.moveTo(loc);
}
}
};
button.setOnAction(handler);
button.setTooltip(new Tooltip("Go the specified genomic location."));
textField.setOnAction(handler);
BorderPane pane = new BorderPane();
pane.setPadding(new Insets(5));
pane.setBottom(new Label("Author: Pierre Lindenbaum PhD."));
VBox vbox1 = new VBox(bar, flow, pane);
final Scene scene = new Scene(vbox1, 500, 300);
primaryStage.setScene(scene);
Exception lastException = null;
primaryStage.addEventHandler(WindowEvent.WINDOW_SHOWING, new EventHandler<WindowEvent>() {
@Override
public void handle(final WindowEvent event) {
final List<String> unnamedParams = new ArrayList<>(params.getUnnamed());
String startPos = "";
int optind = 0;
while (optind + 1 < unnamedParams.size()) {
if (unnamedParams.get(optind).equals("-h") || unnamedParams.get(optind).equals("--help")) {
unnamedParams.remove(optind);
System.out.println("JfxNgs : Pierre Lindenbaum PhD 2017");
System.out.println("Options:");
System.out.println(" -h|--help this screen.");
System.out.println(" -p|--position (string) the starting position");
Platform.exit();
} else if (unnamedParams.get(optind).equals("-p") || unnamedParams.get(optind).equals("--position")) {
startPos = unnamedParams.get(optind + 1);
unnamedParams.remove(optind + 1);
unnamedParams.remove(optind);
} else {
optind++;
}
}
for (final String arg : unnamedParams) {
VcfFile vcfin = null;
BamFile bamin = null;
try {
if (IOUtil.isUrl(arg)) {
if (arg.endsWith(".bam")) {
bamin = BamFile.newInstance(arg);
} else if (arg.endsWith(".vcf.gz")) {
vcfin = VcfFile.newInstance(arg);
}
} else {
final File f = new File(arg);
if (fileMatchExtensionFilter(f.getName(), BamStage.EXTENSION_FILTERS)) {
bamin = BamFile.newInstance(f);
} else if (fileMatchExtensionFilter(f.getName(), VcfStage.EXTENSION_FILTERS)) {
vcfin = VcfFile.newInstance(f);
} else {
JfxNgs.showExceptionDialog(primaryStage, "Cannot open " + f);
}
}
if (vcfin != null) {
new VcfStage(JfxNgs.this, vcfin).setLocationOnOpen(startPos).show();
} else if (bamin != null) {
new BamStage(JfxNgs.this, bamin).show();
}
} catch (Exception e) {
CloserUtil.close(vcfin);
CloserUtil.close(bamin);
showExceptionDialog(primaryStage, e);
}
}
}
});
primaryStage.show();
}
use of javafx.scene.control.MenuItem in project jvarkit by lindenb.
the class NgsStage method createJavascriptSnippetMenu.
/**
* generate the javascript Menu, containing the snippets.
* the snippet are stored as a xml file in the jar file
* @return
*/
protected Menu createJavascriptSnippetMenu() {
final Menu menu = new Menu("Snippets");
loadSnippets().stream().filter(C -> C.isFilterScope()).forEach(C -> {
final MenuItem item = new MenuItem(C.label + (C.function ? "[Function]" : ""));
item.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
if (!C.function) {
NgsStage.this.javascriptArea.setText(C.code);
} else {
final int caret = NgsStage.this.javascriptArea.getCaretPosition();
NgsStage.this.javascriptArea.insertText(caret, C.code);
}
}
});
menu.getItems().add(item);
});
return menu;
}
Aggregations