001package conexp.fx.gui.util;
002
003/*
004 * #%L
005 * Concept Explorer FX
006 * %%
007 * Copyright (C) 2010 - 2023 Francesco Kriegel
008 * %%
009 * This program is free software: you can redistribute it and/or modify
010 * it under the terms of the GNU General Public License as
011 * published by the Free Software Foundation, either version 3 of the
012 * License, or (at your option) any later version.
013 * 
014 * This program is distributed in the hope that it will be useful,
015 * but WITHOUT ANY WARRANTY; without even the implied warranty of
016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
017 * GNU General Public License for more details.
018 * 
019 * You should have received a copy of the GNU General Public
020 * License along with this program.  If not, see
021 * <http://www.gnu.org/licenses/gpl-3.0.html>.
022 * #L%
023 */
024
025
026import java.util.Arrays;
027import java.util.List;
028
029import conexp.fx.gui.ConExpFX;
030import javafx.beans.binding.StringBinding;
031import javafx.collections.FXCollections;
032import javafx.event.ActionEvent;
033import javafx.event.EventHandler;
034import javafx.scene.control.ChoiceBox;
035import javafx.scene.control.ChoiceBoxBuilder;
036import javafx.scene.control.MenuItem;
037import javafx.scene.control.MenuItemBuilder;
038import javafx.scene.image.Image;
039import javafx.scene.image.ImageView;
040import javafx.scene.text.Text;
041import jfxtras.scene.control.ListSpinner;
042
043public final class FXControls
044{
045  public static final ImageView newImageView(final String image)
046  {
047    return new ImageView(new Image(ConExpFX.class.getResourceAsStream(image)));
048  }
049
050  public static final MenuItem newMenuItem(
051      final String text,
052      final String image,
053      final EventHandler<ActionEvent> onAction)
054  {
055    return MenuItemBuilder.create().text(text).graphic(newImageView(image)).onAction(onAction).build();
056  }
057
058  public static final MenuItem newMenuItem(
059      final String text,
060      final String image,
061      final boolean disable,
062      final EventHandler<ActionEvent> onAction)
063  {
064    return MenuItemBuilder.create().text(text).graphic(newImageView(image)).disable(disable).onAction(onAction).build();
065  }
066
067  public static final Text newText(final StringBinding textBinding)
068  {
069    final Text text = new Text();
070    text.textProperty().bind(textBinding);
071    return text;
072  }
073
074  public static final <E> ListSpinner<E> newListSpinner(final E initial, final List<E> values)
075  {
076    return new ListSpinner<E>(FXCollections.observableList(values), initial);
077  }
078
079  @SuppressWarnings("unchecked")
080  public static final <E> ListSpinner<E> newListSpinner(final E initial, final E... values)
081  {
082    return newListSpinner(initial, Arrays.asList(values));
083  }
084
085  public static final <E> ChoiceBox<E> newChoiceBox(final E initial, final List<E> values)
086  {
087    return ChoiceBoxBuilder
088        .<E> create()
089        .items(FXCollections.observableList(values))
090        .value(initial)
091        .minWidth(150)
092        .maxWidth(150)
093        .build();
094  }
095
096  @SuppressWarnings("unchecked")
097  public static final <E> ChoiceBox<E> newChoiceBox(final E initial, final E... values)
098  {
099    return newChoiceBox(initial, Arrays.asList(values));
100  }
101}