org.nuxeo.launcher.gui.ColoredTextPane.java Source code

Java tutorial

Introduction

Here is the source code for org.nuxeo.launcher.gui.ColoredTextPane.java

Source

/*
 * (C) Copyright 2011-2015 Nuxeo SA (http://nuxeo.com/) and others.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * 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 "AS IS" 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.
 *
 * Contributors:
 *     Julien Carsique
 *
 */

package org.nuxeo.launcher.gui;

import java.awt.Color;

import javax.swing.JTextPane;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.rtf.RTFEditorKit;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * Colored text pane. Allow to choose the style when appending some text.
 *
 * @author jcarsique
 * @since 5.4.2
 */
public class ColoredTextPane extends JTextPane {

    private static final long serialVersionUID = 1L;

    private static final Log log = LogFactory.getLog(ColoredTextPane.class);

    private SimpleAttributeSet style;

    private Document doc;

    private int maxSize = 0;

    private boolean follow = true;

    /**
     * @since 5.5
     * @return true if caret will follow additions
     */
    public boolean isFollow() {
        return follow;
    }

    /**
     * Whether to make the caret follow or not the additions (pin/unpin)
     *
     * @since 5.5
     * @param follow true to make the caret follow additions
     */
    public void setFollow(boolean follow) {
        this.follow = follow;
    }

    /**
     * Limits the size of the text. 0 means no limit (default value).
     *
     * @since 5.5
     * @param maxSize maximum number of character kept
     */
    public void setMaxSize(int maxSize) {
        this.maxSize = maxSize;
    }

    public ColoredTextPane() {
        style = new SimpleAttributeSet();
        setContentType("text/rtf");
        setEditorKit(new RTFEditorKit());
        doc = getDocument();
    }

    /**
     * Append text at the end of document, choosing foreground and background colors, and bold attribute.
     *
     * @param text Text to append
     * @param color Foreground color
     * @param bgColor Background color
     * @param isBold Is the text bold ?
     */
    public void append(String text, Color color, Color bgColor, boolean isBold) {
        StyleConstants.setForeground(style, color);
        StyleConstants.setBackground(style, bgColor);
        StyleConstants.setBold(style, isBold);
        int len = doc.getLength();
        try {
            doc.insertString(len, text + "\n", style);
            if (maxSize > 0 && len > maxSize) {
                doc.remove(0, len - maxSize);
            }
        } catch (BadLocationException e) {
            log.error(e);
        }
        if (follow) {
            setCaretPosition(doc.getLength());
        }
    }

    /**
     * Calls {@link #append(String, Color)} with Color.WHITE foreground color.
     *
     * @see #append(String, Color) #append(String, Color, Color, boolean)
     */
    public void append(String text) {
        append(text, Color.WHITE);
    }

    /**
     * Calls {@link #append(String, Color, Color, boolean)} with foreground color given as parameter, background color
     * equal to component background and isBold equal to false.
     *
     * @see #append(String, Color, Color, boolean)
     */
    public void append(String text, Color color) {
        append(text, color, getBackground(), false);
    }

    /**
     * Calls {@link #append(String, Color, Color, boolean)} with background color equal to component background.
     *
     * @see #append(String, Color, Color, boolean)
     */
    public void append(String text, Color color, boolean isBold) {
        append(text, color, getBackground(), isBold);
    }

}