Content of file JavaFXBinder.java.html

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>JavaFXBinder.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">SteelBlue - JavaFX Bindings</a> &gt; <a href="index.source.html" class="el_package">it.tidalwave.role.ui.javafx</a> &gt; <span class="el_source">JavaFXBinder.java</span></div><h1>JavaFXBinder.java</h1><pre class="source lang-java linenums">/*
 * *********************************************************************************************************************
 *
 * SteelBlue: DCI User Interfaces
 * http://tidalwave.it/projects/steelblue
 *
 * Copyright (C) 2015 - 2021 by Tidalwave s.a.s. (http://tidalwave.it)
 *
 * *********************************************************************************************************************
 *
 * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations under the License.
 *
 * *********************************************************************************************************************
 *
 * git clone https://bitbucket.org/tidalwave/steelblue-src
 * git clone https://github.com/tidalwave-it/steelblue-src
 *
 * *********************************************************************************************************************
 */
package it.tidalwave.role.ui.javafx;

import javax.annotation.Nonnull;
import java.util.Optional;
import java.util.Collection;
import java.nio.file.Path;
import javafx.beans.property.Property;
import javafx.scene.Node;
import javafx.scene.control.ButtonBase;
import javafx.scene.control.ComboBox;
import javafx.scene.control.ListView;
import javafx.scene.control.MenuItem;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.ToggleButton;
import javafx.scene.control.TreeView;
import javafx.scene.control.TreeTableView;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;
import javafx.stage.Window;
import it.tidalwave.util.ui.UserNotificationWithFeedback;
import it.tidalwave.role.ui.PresentationModel;
import it.tidalwave.role.ui.BoundProperty;
import it.tidalwave.role.ui.UserAction;

/***********************************************************************************************************************
 *
 * @author  Fabrizio Giudici
 *
 **********************************************************************************************************************/
public interface JavaFXBinder
  {
    /*******************************************************************************************************************
     *
     * Sets the main window. This operation must be performed before any other method is called. This operation is
     * automatically performed by the SteelBlue runtime.
     *
     * @param   window      the main window
     *
     ******************************************************************************************************************/
    public void setMainWindow (@Nonnull Window window);

    /*******************************************************************************************************************
     *
     * Binds a button to a {@link UserAction}. The following roles o the action are used:
     *
     * &lt;ul&gt;
     * &lt;li&gt;Displayable: to set the label of the button&lt;/li&gt;
     * &lt;/ul&gt;
     *
     * The action is used as a callback when the button is pressed; invoked in a thread provided by the binder executor.
     * The {@code enabled} property of the {@code UserAction} is bound, negated, to the {@code disabled} property of the
     * button.
     *
     * @param   button      the button
     * @param   action      the action
     *
     ******************************************************************************************************************/
    public void bind (@Nonnull ButtonBase button, @Nonnull UserAction action);

    /*******************************************************************************************************************
     *
     * Binds a menu item to a {@link UserAction}. The following roles o the action are used:
     *
     * &lt;ul&gt;
     * &lt;li&gt;Displayable: to set the label of the menu item&lt;/li&gt;
     * &lt;/ul&gt;
     *
     * The action is used as a callback when the button is pressed; invoked in a thread provided by the binder executor.
     * The {@code enabled} property of the {@code UserAction} is bound, negated, to the {@code disabled} property of the
     * menu item.
     *
     * @param   menuItem    the menu item
     * @param   action      the action
     *
     ******************************************************************************************************************/
    public void bind (@Nonnull MenuItem menuItem, @Nonnull UserAction action);

    /*******************************************************************************************************************
     *
     * Binds a {@link TableView} to a {@link PresentationModel} and an optional callback.
     *
     * The {@code PresentationModel} is used to populate the table. The following roles are used:
     *
     * &lt;ul&gt;
     * &lt;li&gt;A {@link SimpleComposite} provides children {@code PresentationModel}s for each row.&lt;/li&gt;
     * &lt;li&gt;In each row, an {@link Aggregate&lt;PresentationModel&gt;} is used to provide the {@code PresentationModel}s for
     *     each column.&lt;/li&gt;
     * &lt;li&gt;A {@link Displayable} (optional) is used to provide the text to render for each item.&lt;/li&gt;
     * &lt;li&gt;A {@link CustomGraphicProvider} (optional) is used to provide the graphics to render for each item.&lt;/li&gt;
     * &lt;li&gt;A {@link Styleable} (optional) is used to provide the rendering style for each item.&lt;/li&gt;
     * &lt;li&gt;A {@link UserActionProvider} (optional) is used to provide the actions for creating a context menu;
     *     the default action is also bound to the double click or SPACE gesture.&lt;/li&gt;
     * &lt;/ul&gt;
     *
     * The process of populating data is performed in background threads, so this method quickly returns also in case
     * of large amount of data.
     * The initialization callback is called in the JavaFX thread when data population has been completed.
     *
     * @since   1.0-ALPHA-13
     * @param   tableView       the {@code TablewView}
     * @param   pm              the {@code PresentationModel}
     * @param   initCallback    the callback
     *
     ******************************************************************************************************************/
    public void bind (@Nonnull TableView&lt;PresentationModel&gt; tableView,
                      @Nonnull PresentationModel pm,
                      @Nonnull Optional&lt;Runnable&gt; initCallback);

    /*******************************************************************************************************************
     *
     * Binds a {@link TableView} to a {@link PresentationModel} and a callback.
     * See {@link #bind(javafx.scene.control.TableView, it.tidalwave.role.ui.PresentationModel, java.util.Optional)}.
     *
     * The process of populating data is performed in background threads, so this method quickly returns also in case
     * of large amount of data.
     * The initialization callback is called in the JavaFX thread when data population has been completed.
     *
     * @param   tableView       the {@code TablewView}
     * @param   pm              the {@code PresentationModel}
     * @param   initCallback    the callback
     *
     ******************************************************************************************************************/
    public default void bind (@Nonnull final TableView&lt;PresentationModel&gt; tableView,
                              @Nonnull final PresentationModel pm,
                              @Nonnull final Runnable initCallback)
      {
<span class="nc" id="L154">        bind(tableView, pm, Optional.of(initCallback));</span>
<span class="nc" id="L155">      }</span>

    /*******************************************************************************************************************
     *
     * Binds a {@link TableView} to a {@link PresentationModel}.
     * See {@link #bind(javafx.scene.control.TableView, it.tidalwave.role.ui.PresentationModel, java.util.Optional)}.
     *
     * @since   1.0-ALPHA-13
     * @param   tableView       the {@code TablewView}
     * @param   pm              the {@code PresentationModel}
     *
     ******************************************************************************************************************/
    public default void bind (@Nonnull final TableView&lt;PresentationModel&gt; tableView,
                              @Nonnull final PresentationModel pm)
      {
<span class="nc" id="L170">        bind(tableView, pm, Optional.empty());</span>
<span class="nc" id="L171">      }</span>

    /*******************************************************************************************************************
     *
     * Binds a {@link TreeView} to a {@link PresentationModel} and a callback.
     *
     * The {@code PresentationModel} is used to populate the table. The following roles are used:
     *
     * &lt;ul&gt;
     * &lt;li&gt;A {@link SimpleComposite} provides children {@code PresentationModel}s for each row.&lt;/li&gt;
     * &lt;li&gt;In each row, an {@link Aggregate&lt;PresentationModel&gt;} is used to provide the {@code PresentationModel}s for
     *     each column.&lt;/li&gt;
     * &lt;li&gt;A {@link Displayable} (optional) is used to provide the text to render for each item.&lt;/li&gt;
     * &lt;li&gt;A {@link CustomGraphicProvider} (optional) is used to provide the graphics to render for each item.&lt;/li&gt;
     * &lt;li&gt;A {@link Styleable} (optional) is used to provide the rendering style for each item.&lt;/li&gt;
     * &lt;li&gt;A {@link UserActionProvider} (optional) is used to provide the actions for creating a context menu;
     *     the default action is also bound to the double click or SPACE gesture.&lt;/li&gt;
     * &lt;li&gt;A {@link Visible} (optional) is used to decide whether the root node should be visible or not.&lt;/li&gt;
     * &lt;/ul&gt;
     *
     * The process of populating data is performed in background threads, so this method quickly returns also in case
     * of large amount of data.
     * The initialization callback is called in the JavaFX thread when data population has been completed.
     *
     * @param   treeView        the {@code TreeView}
     * @param   pm              the {@code PresentationModel}
     * @param   initCallback    the callback
     *
     ******************************************************************************************************************/
    public void bind (@Nonnull TreeView&lt;PresentationModel&gt; treeView,
                      @Nonnull PresentationModel pm,
                      @Nonnull Optional&lt;Runnable&gt; initCallback);

    /*******************************************************************************************************************
     *
     * Binds a {@link TableView} to a {@link PresentationModel} and a callback.
     * See {@link #bind(javafx.scene.control.TreeView, it.tidalwave.role.ui.PresentationModel, java.util.Optional)}.
     *
     * @since   1.0-ALPHA-13
     * @param   treeView        the {@code TreeView}
     * @param   pm              the {@code PresentationModel}
     * @param   initCallback    the callback
     *
     ******************************************************************************************************************/
    public default void bind (@Nonnull final TreeView&lt;PresentationModel&gt; treeView,
                              @Nonnull final PresentationModel pm,
                              @Nonnull final Runnable initCallback)
      {
<span class="nc" id="L219">        bind(treeView, pm, Optional.of(initCallback));</span>
<span class="nc" id="L220">      }</span>

    /*******************************************************************************************************************
     *
     * Binds a {@link TableView} to a {@link PresentationModel}.
     * See {@link #bind(javafx.scene.control.TableView, it.tidalwave.role.ui.PresentationModel, java.util.Optional)}
     *
     * @since   1.0-ALPHA-13
     * @param   treeView        the {@code TreeView}
     * @param   pm              the {@code PresentationModel}
     *
     ******************************************************************************************************************/
    public default void bind (@Nonnull final TreeView&lt;PresentationModel&gt; treeView,
                              @Nonnull final PresentationModel pm)
      {
<span class="nc" id="L235">        bind(treeView, pm, Optional.empty());</span>
<span class="nc" id="L236">      }</span>

    /*******************************************************************************************************************
     *
     * Binds a {@link TreeTableView} to a {@link PresentationModel} and a callback.
     *
     * The {@code PresentationModel} is used to populate the table. The following roles are used:
     *
     * &lt;ul&gt;
     * &lt;li&gt;A {@link SimpleComposite} provides children {@code PresentationModel}s for each row.&lt;/li&gt;
     * &lt;li&gt;In each row, an {@link Aggregate&lt;PresentationModel&gt;} is used to provide the {@code PresentationModel}s for
     *     each column.&lt;/li&gt;
     * &lt;li&gt;A {@link Displayable} (optional) is used to provide the text to render for each item.&lt;/li&gt;
     * &lt;li&gt;A {@link CustomGraphicProvider} (optional) is used to provide the graphics to render for each item.&lt;/li&gt;
     * &lt;li&gt;A {@link Styleable} (optional) is used to provide the rendering style for each item.&lt;/li&gt;
     * &lt;li&gt;A {@link UserActionProvider} (optional) is used to provide the actions for creating a context menu;
     *     the default action is also bound to the double click or SPACE gesture.&lt;/li&gt;
     * &lt;li&gt;A {@link Visible} (optional) is used to decide whether the root node should be visible or not.&lt;/li&gt;
     * &lt;/ul&gt;
     *
     * The process of populating data is performed in background threads, so this method quickly returns also in case
     * of large amount of data.
     * The initialization callback is called in the JavaFX thread when data population has been completed.
     *
     * @param   treeTableView   the {@code TreeTableView}
     * @param   pm              the {@code PresentationModel}
     * @param   initCallback    the callback
     *
     ******************************************************************************************************************/
    public void bind (@Nonnull TreeTableView&lt;PresentationModel&gt; treeTableView,
                      @Nonnull PresentationModel pm,
                      @Nonnull Optional&lt;Runnable&gt; initCallback);

    /*******************************************************************************************************************
     *
     * Binds a {@link TreeTableView} to a {@link PresentationModel} and a callback.
     * See {@link #bind(javafx.scene.control.TreeTableView, it.tidalwave.role.ui.PresentationModel, java.util.Optional)}.
     *
     * @since   1.0-ALPHA-13
     * @param   treeTableView   the {@code TreeTableView}
     * @param   pm              the {@code PresentationModel}
     * @param   initCallback    the callback
     *
     ******************************************************************************************************************/
    public default void bind (@Nonnull final TreeTableView&lt;PresentationModel&gt; treeTableView,
                              @Nonnull final PresentationModel pm,
                              @Nonnull final Runnable initCallback)
      {
<span class="nc" id="L284">        bind(treeTableView, pm, Optional.of(initCallback));</span>
<span class="nc" id="L285">      }</span>

    /*******************************************************************************************************************
     *
     * Binds a {@link TreeTableView} to a {@link PresentationModel}.
     * See {@link #bind(javafx.scene.control.TreeTableView, it.tidalwave.role.ui.PresentationModel, java.util.Optional)}.
     *
     * @since   1.0-ALPHA-13
     * @param   treeTableView   the {@code TreeTableView}
     * @param   pm              the {@code PresentationModel}
     *
     ******************************************************************************************************************/
    public default void bind (@Nonnull final TreeTableView&lt;PresentationModel&gt; treeTableView,
                              @Nonnull final PresentationModel pm)
      {
<span class="nc" id="L300">        bind(treeTableView, pm, Optional.empty());</span>
<span class="nc" id="L301">      }</span>

    /*******************************************************************************************************************
     *
     * Binds a {@link ListView} to a {@link PresentationModel} and an optional callback.
     *
     * The {@code PresentationModel} is used to populate the table. The following roles are used:
     *
     * &lt;ul&gt;
     * &lt;li&gt;A {@link SimpleComposite} provides children {@code PresentationModel}s for each row.&lt;/li&gt;
     * &lt;li&gt;In each row, an {@link Aggregate&lt;PresentationModel&gt;} is used to provide the {@code PresentationModel}s for
     *     each column.&lt;/li&gt;
     * &lt;li&gt;A {@link Displayable} (optional) is used to provide the text to render for each item.&lt;/li&gt;
     * &lt;li&gt;A {@link CustomGraphicProvider} (optional) is used to provide the graphics to render for each item.&lt;/li&gt;
     * &lt;li&gt;A {@link Styleable} (optional) is used to provide the rendering style for each item.&lt;/li&gt;
     * &lt;li&gt;A {@link UserActionProvider} (optional) is used to provide the actions for creating a context menu;
     *     the default action is also bound to the double click or SPACE gesture.&lt;/li&gt;
     * &lt;/ul&gt;
     *
     * The process of populating data is performed in background threads, so this method quickly returns also in case
     * of large amount of data.
     * The initialization callback is called in the JavaFX thread when data population has been completed.
     *
     * @param   listView        the {@code ListView}
     * @param   pm              the {@code PresentationModel}
     * @param   initCallback    the callback
     *
     ******************************************************************************************************************/
    public void bind (@Nonnull ListView&lt;PresentationModel&gt; listView,
                      @Nonnull PresentationModel pm,
                      @Nonnull Optional&lt;Runnable&gt; initCallback);

    /*******************************************************************************************************************
     *
     * Binds a {@link ListView} to a {@link PresentationModel} and a callback.
     * See {@link #bind(javafx.scene.control.ListView, it.tidalwave.role.ui.PresentationModel, java.util.Optional)}.
     *
     * @since   1.0-ALPHA-13
     * @param   listView        the {@code ListView}
     * @param   pm              the {@code PresentationModel}
     * @param   initCallback    the callback
     *
     ******************************************************************************************************************/
    public default void bind (@Nonnull final ListView&lt;PresentationModel&gt; listView,
                              @Nonnull final PresentationModel pm,
                              @Nonnull final Runnable initCallback)
      {
<span class="nc" id="L348">        bind(listView, pm, Optional.of(initCallback));</span>
<span class="nc" id="L349">      }</span>

    /*******************************************************************************************************************
     *
     * Binds a {@link ComboBox} to a {@link PresentationModel}.
     * See {@link #bind(javafx.scene.control.ListView, it.tidalwave.role.ui.PresentationModel, java.util.Optional)}.
     *
     * @since   1.0-ALPHA-13
     * @param   listView        the {@code ListView}
     * @param   pm              the {@code PresentationModel}
     *
     ******************************************************************************************************************/
    public default void bind (@Nonnull final ListView&lt;PresentationModel&gt; listView,
                              @Nonnull final PresentationModel pm)
      {
<span class="nc" id="L364">        bind(listView, pm, Optional.empty());</span>
<span class="nc" id="L365">      }</span>

    /*******************************************************************************************************************
     *
     * Binds a {@link ComboBox} to a {@link PresentationModel} and an optional callback.
     *
     * The {@code PresentationModel} is used to populate the table. The following roles are used:
     *
     * &lt;ul&gt;
     * &lt;li&gt;A {@link SimpleComposite} provides children {@code PresentationModel}s for each row.&lt;/li&gt;
     * &lt;li&gt;In each row, an {@link Aggregate&lt;PresentationModel&gt;} is used to provide the {@code PresentationModel}s for
     *     each column.&lt;/li&gt;
     * &lt;li&gt;A {@link Displayable} (optional) is used to provide the text to render for each item.&lt;/li&gt;
     * &lt;li&gt;A {@link CustomGraphicProvider} (optional) is used to provide the graphics to render for each item.&lt;/li&gt;
     * &lt;li&gt;A {@link Styleable} (optional) is used to provide the rendering style for each item.&lt;/li&gt;
     * &lt;li&gt;A {@link UserActionProvider} (optional) is used to provide the actions for creating a context menu;
     *     the default action is also bound to the double click or SPACE gesture.&lt;/li&gt;
     * &lt;/ul&gt;
     *
     * The process of populating data is performed in background threads, so this method quickly returns also in case
     * of large amount of data.
     * The initialization callback is called in the JavaFX thread when data population has been completed.
     *
     * @param   comboBox        the {@code ComboBox}
     * @param   pm              the {@code PresentationModel}
     * @param   initCallback    the callback
     *
     ******************************************************************************************************************/
    public void bind (@Nonnull ComboBox&lt;PresentationModel&gt; comboBox,
                      @Nonnull PresentationModel pm,
                      @Nonnull Optional&lt;Runnable&gt; initCallback);

    /*******************************************************************************************************************
     *
     * Binds a {@link ComboBox} to a {@link PresentationModel} and a callback.
     * See {@link #bind(javafx.scene.control.ComboBox, it.tidalwave.role.ui.PresentationModel, java.util.Optional)}.
     *
     * @since   1.0-ALPHA-13
     * @param   comboBox        the {@code ComboBox}
     * @param   pm              the {@code PresentationModel}
     * @param   initCallback    the callback
     *
     ******************************************************************************************************************/
    public default void bind (@Nonnull final ComboBox&lt;PresentationModel&gt; comboBox,
                              @Nonnull final PresentationModel pm,
                              @Nonnull final Runnable initCallback)
      {
<span class="nc" id="L412">        bind(comboBox, pm, Optional.of(initCallback));</span>
<span class="nc" id="L413">      }</span>

    /*******************************************************************************************************************
     *
     * Binds a {@link ComboBox} to a {@link PresentationModel}.
     * See {@link #bind(javafx.scene.control.ComboBox, it.tidalwave.role.ui.PresentationModel, java.util.Optional)}.
     *
     * @since   1.0-ALPHA-13
     * @param   comboBox        the {@code ComboBox}
     * @param   pm              the {@code PresentationModel}
     *
     ******************************************************************************************************************/
    public default void bind (@Nonnull final ComboBox&lt;PresentationModel&gt; comboBox,
                              @Nonnull final PresentationModel pm)
      {
<span class="nc" id="L428">        bind(comboBox, pm, Optional.empty());</span>
<span class="nc" id="L429">      }</span>

    /*******************************************************************************************************************
     *
     * Given a {@link PresentationModel} that contains a {@link Composite}, populate the pane with
     * {@link ToggleButton}s associated to the elements of the {@link Composite}. Each element is searched for the
     * following roles:
     *
     * &lt;ul&gt;
     * &lt;li&gt;{@link UserActionProvider} (mandatory) to provide a callback for the button&lt;/li&gt;
     * &lt;li&gt;{@link Displayable} to provide a text for the button&lt;/li&gt;
     * &lt;li&gt;{@link Styleable} to provide a CSS style for the button&lt;/li&gt;
     * &lt;/ul&gt;
     *
     * The pane must be pre-populated with at least one button, which will be queried for the CSS style.
     *
     * @param   pane        the {@code Pane}
     * @param   pm          the {@code PresentationModel}
     *
     ******************************************************************************************************************/
    public void bindToggleButtons (@Nonnull Pane pane, @Nonnull PresentationModel pm);

    /*******************************************************************************************************************
     *
     * Deprecated. Merge to bindToggleButtons, passing some arguments for choosing toggle or normal buttons.
     *
     * @deprecated
     *
     ******************************************************************************************************************/
    @Deprecated
    public void bindButtonsInPane (@Nonnull GridPane gridPane, @Nonnull Collection&lt;UserAction&gt; actions);

    /*******************************************************************************************************************
     *
     * Bidirectionally binds two properties.
     *
     * @param   &lt;T&gt;         the property type
     * @param   property1   the former property
     * @param   property2   the latter property
     *
     ******************************************************************************************************************/
    public &lt;T&gt; void bindBidirectionally (@Nonnull Property&lt;T&gt; property1, @Nonnull BoundProperty&lt;T&gt; property2);

    /*******************************************************************************************************************
     *
     *
     *
     ******************************************************************************************************************/
    public &lt;T&gt; void bindBidirectionally (@Nonnull TextField textField,
                                         @Nonnull BoundProperty&lt;String&gt; textProperty,
                                         @Nonnull BoundProperty&lt;Boolean&gt; validProperty);

    /*******************************************************************************************************************
     *
     * Shows a modal dialog with the given content and provides feedback by means of the given notification.
     *
     * @param  node          the dialog content
     * @param  notification  the object notifying whether the operation is confirmed or cancelled
     *
     ******************************************************************************************************************/
    public void showInModalDialog (@Nonnull UserNotificationWithFeedback notification,
                                   @Nonnull Optional&lt;Node&gt; node);

    // FIXME: use a Builder, merge with the above
use a Builder, merge with the above
public default void showInModalDialog (@Nonnull final Node node, @Nonnull final UserNotificationWithFeedback notification, @Nonnull final BoundProperty&lt;Boolean&gt; valid) { <span class="nc" id="L497"> showInModalDialog(notification, Optional.of(node));</span> <span class="nc" id="L498"> }</span> @Deprecated public default void showInModalDialog (@Nonnull final Node node, @Nonnull final UserNotificationWithFeedback notification) { <span class="nc" id="L504"> showInModalDialog(notification, Optional.of(node));</span> <span class="nc" id="L505"> }</span> public default void showInModalDialog (@Nonnull final UserNotificationWithFeedback notification) { <span class="nc" id="L509"> showInModalDialog(notification, Optional.empty());</span> <span class="nc" id="L510"> }</span> /******************************************************************************************************************* * * Opens the FileChooser for selecting a file. The outcome of the operation (confirmed or cancelled) will be * notified to the given notification object. The selected file will be set to the given bound property, which can * be also used to set the default value rendered on the FileChooser. * * @param notification the object notifying whether the operation is confirmed or cancelled * @param selectedFile the property containing the selected file * ******************************************************************************************************************/ public void openFileChooserFor (@Nonnull UserNotificationWithFeedback notification, @Nonnull BoundProperty&lt;Path&gt; selectedFile); /******************************************************************************************************************* * * Opens the FileChooser for selecting a folder. The outcome of the operation (confirmed or cancelled) will be * notified to the given notification object. The selected folder will be set to the given bound property, which can * be also used to set the default value rendered on the FileChooser. * * @param notification the object notifying whether the operation is confirmed or cancelled * @param selectedFolder the property containing the selected folder * ******************************************************************************************************************/ public void openDirectoryChooserFor (@Nonnull UserNotificationWithFeedback notification, @Nonnull BoundProperty&lt;Path&gt; selectedFolder); } </pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.7.202105040129</span></div></body></html>