| Author | Karl Tauber <email> |
|---|---|
| Date | 2015-08-05 10:12:47 GMT+0200 |
| Commit | d6442627e677a80e81ac44e2786936661c51886b |
| Parent | 45669c4 |
| Delta | 168 lines added, 0 lines removed, 168-line increase |
| public class Utils | ||
| { | ||
| + public static boolean isNullOrEmpty(String s) { | ||
| + return s == null || s.isEmpty(); | ||
| + } | ||
| + | ||
| public static String ltrim(String s) { | ||
| int i = 0; |
| +JFDML JFormDesigner: "9.9.9.9.9999" Java: "1.8.0_51" encoding: "UTF-8" | ||
| + | ||
| +new FormModel { | ||
| + contentType: "form/javafx" | ||
| + root: new FormRoot { | ||
| + add( new FormContainer( "org.tbee.javafx.scene.layout.fxml.MigPane", new FormLayoutManager( class org.tbee.javafx.scene.layout.fxml.MigPane ) { | ||
| + "$layoutConstraints": "" | ||
| + "$columnConstraints": "[shrink 0,fill][300,grow,fill][fill][fill]" | ||
| + "$rowConstraints": "[][][][]" | ||
| + } ) { | ||
| + name: "pane" | ||
| + add( new FormComponent( "javafx.scene.control.Label" ) { | ||
| + name: "urlLabel" | ||
| + "text": "Link URL:" | ||
| + auxiliary() { | ||
| + "JavaCodeGenerator.variableLocal": true | ||
| + } | ||
| + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { | ||
| + "value": "cell 0 0" | ||
| + } ) | ||
| + add( new FormComponent( "org.markdownwriterfx.controls.EscapeTextField" ) { | ||
| + name: "urlField" | ||
| + "escapeCharacters": "()" | ||
| + "text": "http://yourlink.com" | ||
| + "promptText": "http://yourlink.com" | ||
| + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { | ||
| + "value": "cell 1 0" | ||
| + } ) | ||
| + add( new FormComponent( "org.markdownwriterfx.controls.BrowseDirectoryButton" ) { | ||
| + name: "linkBrowseDirectoyButton" | ||
| + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { | ||
| + "value": "cell 2 0" | ||
| + } ) | ||
| + add( new FormComponent( "org.markdownwriterfx.controls.BrowseFileButton" ) { | ||
| + name: "linkBrowseFileButton" | ||
| + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { | ||
| + "value": "cell 3 0" | ||
| + } ) | ||
| + add( new FormComponent( "javafx.scene.control.Label" ) { | ||
| + name: "textLabel" | ||
| + "text": "Link Text:" | ||
| + auxiliary() { | ||
| + "JavaCodeGenerator.variableLocal": true | ||
| + } | ||
| + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { | ||
| + "value": "cell 0 1" | ||
| + } ) | ||
| + add( new FormComponent( "org.markdownwriterfx.controls.EscapeTextField" ) { | ||
| + name: "textField" | ||
| + "escapeCharacters": "[]" | ||
| + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { | ||
| + "value": "cell 1 1 3 1" | ||
| + } ) | ||
| + add( new FormComponent( "javafx.scene.control.Label" ) { | ||
| + name: "titleLabel" | ||
| + "text": "Title (tooltip):" | ||
| + auxiliary() { | ||
| + "JavaCodeGenerator.variableLocal": true | ||
| + } | ||
| + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { | ||
| + "value": "cell 0 2" | ||
| + } ) | ||
| + add( new FormComponent( "org.markdownwriterfx.controls.EscapeTextField" ) { | ||
| + name: "titleField" | ||
| + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { | ||
| + "value": "cell 1 2 3 1" | ||
| + } ) | ||
| + add( new FormComponent( "javafx.scene.control.Label" ) { | ||
| + name: "previewLabel" | ||
| + "text": "Markdown Preview:" | ||
| + auxiliary() { | ||
| + "JavaCodeGenerator.variableLocal": true | ||
| + } | ||
| + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { | ||
| + "value": "cell 0 3" | ||
| + } ) | ||
| + add( new FormComponent( "javafx.scene.control.Label" ) { | ||
| + name: "previewField" | ||
| + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { | ||
| + "value": "cell 1 3 3 1" | ||
| + } ) | ||
| + }, new FormLayoutConstraints( null ) { | ||
| + "location": new javafx.geometry.Point2D( 0.0, 0.0 ) | ||
| + "size": new javafx.geometry.Dimension2D( 500.0, 300.0 ) | ||
| + } ) | ||
| + } | ||
| +} | ||
| +/* | ||
| + * Copyright (c) 2015 Karl Tauber <karl at jformdesigner dot com> | ||
| + * All rights reserved. | ||
| + * | ||
| + * Redistribution and use in source and binary forms, with or without | ||
| + * modification, are permitted provided that the following conditions are met: | ||
| + * | ||
| + * o Redistributions of source code must retain the above copyright | ||
| + * notice, this list of conditions and the following disclaimer. | ||
| + * | ||
| + * o Redistributions in binary form must reproduce the above copyright | ||
| + * notice, this list of conditions and the following disclaimer in the | ||
| + * documentation and/or other materials provided with the distribution. | ||
| + * | ||
| + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
| + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
| + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
| + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||
| + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
| + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||
| + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||
| + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||
| + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
| + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||
| + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
| + */ | ||
| + | ||
| +package org.markdownwriterfx.controls; | ||
| + | ||
| +import javafx.beans.property.SimpleStringProperty; | ||
| +import javafx.beans.property.StringProperty; | ||
| +import javafx.scene.control.TextField; | ||
| +import javafx.util.StringConverter; | ||
| +import org.markdownwriterfx.util.Utils; | ||
| + | ||
| +/** | ||
| + * TextField that can escape/unescape characters for markdown. | ||
| + * | ||
| + * @author Karl Tauber | ||
| + */ | ||
| +public class EscapeTextField | ||
| + extends TextField | ||
| +{ | ||
| + public EscapeTextField() { | ||
| + escapedText.bindBidirectional(textProperty(), new StringConverter<String>() { | ||
| + @Override public String toString(String object) { return escape(object); } | ||
| + @Override public String fromString(String string) { return unescape(string); } | ||
| + }); | ||
| + escapeCharacters.addListener(e -> escapedText.set(escape(textProperty().get()))); | ||
| + } | ||
| + | ||
| + // 'escapedText' property | ||
| + private final StringProperty escapedText = new SimpleStringProperty(); | ||
| + public String getEscapedText() { return escapedText.get(); } | ||
| + public void setEscapedText(String escapedText) { this.escapedText.set(escapedText); } | ||
| + public StringProperty escapedTextProperty() { return escapedText; } | ||
| + | ||
| + // 'escapeCharacters' property | ||
| + private final StringProperty escapeCharacters = new SimpleStringProperty(); | ||
| + public String getEscapeCharacters() { return escapeCharacters.get(); } | ||
| + public void setEscapeCharacters(String escapeCharacters) { this.escapeCharacters.set(escapeCharacters); } | ||
| + public StringProperty escapeCharactersProperty() { return escapeCharacters; } | ||
| + | ||
| + private String escape(String s) { | ||
| + String escapeChars = getEscapeCharacters(); | ||
| + return !Utils.isNullOrEmpty(escapeChars) | ||
| + ? s.replaceAll("([" + escapeChars.replaceAll("(.)", "\\\\$1") + "])", "\\\\$1") | ||
| + : s; | ||
| + } | ||
| + | ||
| + private String unescape(String s) { | ||
| + String escapeChars = getEscapeCharacters(); | ||
| + return !Utils.isNullOrEmpty(escapeChars) | ||
| + ? s.replaceAll("\\\\([" + escapeChars.replaceAll("(.)", "\\\\$1") + "])", "$1") | ||
| + : s; | ||
| + } | ||
| +} | ||