package com.scrivenvar.dialogs;
import com.scrivenvar.Messages;
import com.scrivenvar.controls.BrowseFileButton;
import com.scrivenvar.controls.EscapeTextField;
import com.scrivenvar.service.events.impl.ButtonOrderPane;
import java.nio.file.Path;
import javafx.application.Platform;
import javafx.beans.binding.Bindings;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.scene.control.ButtonBar.ButtonData;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Dialog;
import javafx.scene.control.DialogPane;
import javafx.scene.control.Label;
import javafx.stage.FileChooser.ExtensionFilter;
import javafx.stage.Window;
import org.tbee.javafx.scene.layout.fxml.MigPane;
public class ImageDialog extends Dialog<String> {
private final StringProperty image = new SimpleStringProperty();
public ImageDialog( Window owner, Path basePath ) {
setTitle( Messages.get( "ImageDialog.title" ) );
initOwner( owner );
setResizable( true );
initComponents();
linkBrowseFileButton.setBasePath( basePath );
linkBrowseFileButton.addExtensionFilter( new ExtensionFilter( Messages.get( "ImageDialog.chooser.imagesFilter" ), "*.png", "*.gif", "*.jpg" ) );
linkBrowseFileButton.urlProperty().bindBidirectional( urlField.escapedTextProperty() );
setDialogPane( new ButtonOrderPane() );
final DialogPane dialogPane = getDialogPane();
dialogPane.setContent( pane );
dialogPane.getButtonTypes().addAll( ButtonType.OK, ButtonType.CANCEL );
dialogPane.lookupButton( ButtonType.OK ).disableProperty().bind(
urlField.escapedTextProperty().isEmpty()
.or( textField.escapedTextProperty().isEmpty() ) );
image.bind( Bindings.when( titleField.escapedTextProperty().isNotEmpty() )
.then( Bindings.format( "", textField.escapedTextProperty(), urlField.escapedTextProperty(), titleField.escapedTextProperty() ) )
.otherwise( Bindings.format( "", textField.escapedTextProperty(), urlField.escapedTextProperty() ) ) );
previewField.textProperty().bind( image );
setResultConverter( dialogButton -> {
ButtonData data = (dialogButton != null) ? dialogButton.getButtonData() : null;
return (data == ButtonData.OK_DONE) ? image.get() : null;
} );
Platform.runLater( () -> {
urlField.requestFocus();
if( urlField.getText().startsWith( "http://" ) ) {
urlField.selectRange( "http://".length(), urlField.getLength() );
}
} );
}
private void initComponents() {
pane = new MigPane();
Label urlLabel = new Label();
urlField = new EscapeTextField();
linkBrowseFileButton = new BrowseFileButton();
Label textLabel = new Label();
textField = new EscapeTextField();
Label titleLabel = new Label();
titleField = new EscapeTextField();
Label previewLabel = new Label();
previewField = new Label();
{
pane.setCols( "[shrink 0,fill][300,grow,fill][fill]" );
pane.setRows( "[][][][]" );
urlLabel.setText( Messages.get( "ImageDialog.urlLabel.text" ) );
pane.add( urlLabel, "cell 0 0" );
urlField.setEscapeCharacters( "()" );
urlField.setText( "http://yourlink.com" );
urlField.setPromptText( "http://yourlink.com" );
pane.add( urlField, "cell 1 0" );
pane.add( linkBrowseFileButton, "cell 2 0" );
textLabel.setText( Messages.get( "ImageDialog.textLabel.text" ) );
pane.add( textLabel, "cell 0 1" );
textField.setEscapeCharacters( "[]" );
pane.add( textField, "cell 1 1 2 1" );
titleLabel.setText( Messages.get( "ImageDialog.titleLabel.text" ) );
pane.add( titleLabel, "cell 0 2" );
pane.add( titleField, "cell 1 2 2 1" );
previewLabel.setText( Messages.get( "ImageDialog.previewLabel.text" ) );
pane.add( previewLabel, "cell 0 3" );
pane.add( previewField, "cell 1 3 2 1" );
}
}
private MigPane pane;
private EscapeTextField urlField;
private BrowseFileButton linkBrowseFileButton;
private EscapeTextField textField;
private EscapeTextField titleField;
private Label previewField;
}