1 /*
   2  * Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package javafx.scene.web;
  27 
  28 
  29 import com.sun.javafx.scene.control.ControlHelper;
  30 import javafx.css.StyleableProperty;
  31 
  32 import javafx.scene.control.Control;
  33 
  34 import javafx.print.PrinterJob;
  35 import javafx.scene.control.Skin;
  36 
  37 
  38 /**
  39  * A control that allows for users to edit text, and apply styling to this text.
  40  * The underlying data model is HTML, although this is not shown visually to the
  41  * end-user.
  42  * @since JavaFX 2.0
  43  */
  44 public class HTMLEditor extends Control {
  45 
  46     /**
  47      * Creates a new instance of the HTMLEditor control.
  48      */
  49     public HTMLEditor() {
  50         ((StyleableProperty) ControlHelper.skinClassNameProperty(this)).applyStyle(
  51             null,
  52             "javafx.scene.web.HTMLEditorSkin"
  53         );
  54         getStyleClass().add("html-editor");
  55     }
  56 
  57     @Override protected Skin<?> createDefaultSkin() {
  58         return new HTMLEditorSkin(this);
  59     }
  60 
  61     /**
  62      * Returns the HTML content of the editor.
  63      */
  64     public String getHtmlText() {
  65         return ((HTMLEditorSkin)getSkin()).getHTMLText();
  66     }
  67 
  68     /**
  69      * Sets the HTML content of the editor. Note that if the contentEditable
  70      * property on the <body> tag of the provided HTML is not set to true, the
  71      * HTMLEditor will become read-only. You can ensure that the text remains
  72      * editable by ensuring the body appears as such:
  73      * <code>
  74      * &lt;body contentEditable="true"&gt;
  75      * </code>
  76      *
  77      * @param htmlText The full HTML markup to put into the editor. This should
  78      *      include all normal HTML elements, starting with
  79      *      <code>&lt;html&gt;</code>, and including a <code>&lt;body&gt;</code>.
  80      */
  81     public void setHtmlText(String htmlText) {
  82         ((HTMLEditorSkin)getSkin()).setHTMLText(htmlText);
  83     }
  84 
  85     /**
  86      * Prints the content of the editor using the given printer job.
  87      * <p>This method does not modify the state of the job, nor does it call
  88      * {@link PrinterJob#endJob}, so the job may be safely reused afterwards.
  89      *
  90      * @param job printer job used for printing
  91      * @since JavaFX 8.0
  92      */
  93     public void print(PrinterJob job) {
  94         ((HTMLEditorSkin)getSkin()).print(job);
  95     }
  96 }