package com.scrivenvar.dialogs;
import com.scrivenvar.controls.EscapeTextField;
import com.scrivenvar.editors.markdown.HyperlinkModel;
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.DialogPane;
import javafx.scene.control.Label;
import javafx.stage.Window;
import org.tbee.javafx.scene.layout.fxml.MigPane;
import static com.scrivenvar.Messages.get;
import static javafx.scene.control.ButtonType.OK;
public class LinkDialog extends AbstractDialog<String> {
private final StringProperty link = new SimpleStringProperty();
public LinkDialog(
final Window owner, final HyperlinkModel hyperlink ) {
super( owner, "Dialog.link.title" );
final DialogPane dialogPane = getDialogPane();
dialogPane.setContent( pane );
dialogPane.lookupButton( OK ).disableProperty().bind(
urlField.escapedTextProperty().isEmpty() );
textField.setText( hyperlink.getText() );
urlField.setText( hyperlink.getUrl() );
titleField.setText( hyperlink.getTitle() );
link.bind( Bindings.when( titleField.escapedTextProperty().isNotEmpty() )
.then( Bindings.format( "[%s](%s \"%s\")", textField.escapedTextProperty(), urlField.escapedTextProperty(), titleField.escapedTextProperty() ) )
.otherwise( Bindings.when( textField.escapedTextProperty().isNotEmpty() )
.then( Bindings.format( "[%s](%s)", textField.escapedTextProperty(), urlField.escapedTextProperty() ) )
.otherwise( urlField.escapedTextProperty() ) ) );
setResultConverter( dialogButton -> {
ButtonData data = (dialogButton != null) ? dialogButton.getButtonData() : null;
return (data == ButtonData.OK_DONE) ? link.get() : null;
} );
Platform.runLater( () -> {
urlField.requestFocus();
urlField.selectRange( 0, urlField.getLength() );
} );
}
@Override
protected void initComponents() {
pane = new MigPane();
Label urlLabel = new Label();
urlField = new EscapeTextField();
Label textLabel = new Label();
textField = new EscapeTextField();
Label titleLabel = new Label();
titleField = new EscapeTextField();
{
pane.setCols( "[shrink 0,fill][300,grow,fill][fill][fill]" );
pane.setRows( "[][][][]" );
urlLabel.setText( get( "Dialog.link.urlLabel.text" ) );
pane.add( urlLabel, "cell 0 0" );
urlField.setEscapeCharacters( "()" );
pane.add( urlField, "cell 1 0" );
textLabel.setText( get( "Dialog.link.textLabel.text" ) );
pane.add( textLabel, "cell 0 1" );
textField.setEscapeCharacters( "[]" );
pane.add( textField, "cell 1 1 3 1" );
titleLabel.setText( get( "Dialog.link.titleLabel.text" ) );
pane.add( titleLabel, "cell 0 2" );
pane.add( titleField, "cell 1 2 3 1" );
}
}
private MigPane pane;
private EscapeTextField urlField;
private EscapeTextField textField;
private EscapeTextField titleField;
}