0N/A/*
3909N/A * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
0N/A *
0N/A * This code is free software; you can redistribute it and/or modify it
0N/A * under the terms of the GNU General Public License version 2 only, as
2362N/A * published by the Free Software Foundation. Oracle designates this
0N/A * particular file as subject to the "Classpath" exception as provided
2362N/A * by Oracle in the LICENSE file that accompanied this code.
0N/A *
0N/A * This code is distributed in the hope that it will be useful, but WITHOUT
0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0N/A * version 2 for more details (a copy is included in the LICENSE file that
0N/A * accompanied this code).
0N/A *
0N/A * You should have received a copy of the GNU General Public License version
0N/A * 2 along with this work; if not, write to the Free Software Foundation,
0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
0N/A *
2362N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2362N/A * or visit www.oracle.com if you need additional information or have any
2362N/A * questions.
0N/A */
0N/A
0N/Apackage javax.swing.plaf.synth;
0N/A
0N/Aimport javax.swing.*;
0N/Aimport javax.swing.text.*;
0N/Aimport javax.swing.plaf.*;
0N/Aimport java.beans.PropertyChangeEvent;
0N/Aimport java.awt.*;
0N/A
0N/A/**
0N/A * Provides the look and feel for a styled text editor in the
0N/A * Synth look and feel.
0N/A * <p>
0N/A * <strong>Warning:</strong>
0N/A * Serialized objects of this class will not be compatible with
0N/A * future Swing releases. The current serialization support is
0N/A * appropriate for short term storage or RMI between applications running
0N/A * the same version of Swing. As of 1.4, support for long term storage
0N/A * of all JavaBeans<sup><font size="-2">TM</font></sup>
0N/A * has been added to the <code>java.beans</code> package.
0N/A * Please see {@link java.beans.XMLEncoder}.
0N/A *
0N/A * @author Shannon Hickey
1999N/A * @since 1.7
0N/A */
1999N/Apublic class SynthTextPaneUI extends SynthEditorPaneUI {
0N/A
0N/A /**
0N/A * Creates a UI for the JTextPane.
0N/A *
0N/A * @param c the JTextPane object
1999N/A * @return the UI object
0N/A */
0N/A public static ComponentUI createUI(JComponent c) {
0N/A return new SynthTextPaneUI();
0N/A }
0N/A
0N/A /**
0N/A * Fetches the name used as a key to lookup properties through the
0N/A * UIManager. This is used as a prefix to all the standard
0N/A * text properties.
0N/A *
0N/A * @return the name ("TextPane")
0N/A */
1999N/A @Override
0N/A protected String getPropertyPrefix() {
0N/A return "TextPane";
0N/A }
0N/A
1999N/A /**
2385N/A * Installs the UI for a component. This does the following
2385N/A * things.
2385N/A * <ol>
2385N/A * <li>
2385N/A * Sets opaqueness of the associated component according to its style,
2385N/A * if the opaque property has not already been set by the client program.
2385N/A * <li>
2385N/A * Installs the default caret and highlighter into the
2385N/A * associated component. These properties are only set if their
2385N/A * current value is either {@code null} or an instance of
2385N/A * {@link UIResource}.
2385N/A * <li>
2385N/A * Attaches to the editor and model. If there is no
2385N/A * model, a default one is created.
2385N/A * <li>
2385N/A * Creates the view factory and the view hierarchy used
2385N/A * to represent the model.
2385N/A * </ol>
2385N/A *
2385N/A * @param c the editor component
3469N/A * @see javax.swing.plaf.basic.BasicTextUI#installUI
2385N/A * @see ComponentUI#installUI
1999N/A */
1999N/A @Override
0N/A public void installUI(JComponent c) {
0N/A super.installUI(c);
0N/A updateForeground(c.getForeground());
0N/A updateFont(c.getFont());
0N/A }
0N/A
0N/A /**
0N/A * This method gets called when a bound property is changed
0N/A * on the associated JTextComponent. This is a hook
0N/A * which UI implementations may change to reflect how the
0N/A * UI displays bound properties of JTextComponent subclasses.
0N/A * If the font, foreground or document has changed, the
0N/A * the appropriate property is set in the default style of
0N/A * the document.
0N/A *
0N/A * @param evt the property change event
0N/A */
1999N/A @Override
0N/A protected void propertyChange(PropertyChangeEvent evt) {
0N/A super.propertyChange(evt);
0N/A
0N/A String name = evt.getPropertyName();
0N/A
0N/A if (name.equals("foreground")) {
0N/A updateForeground((Color)evt.getNewValue());
0N/A } else if (name.equals("font")) {
0N/A updateFont((Font)evt.getNewValue());
0N/A } else if (name.equals("document")) {
0N/A JComponent comp = getComponent();
0N/A updateForeground(comp.getForeground());
0N/A updateFont(comp.getFont());
0N/A }
0N/A }
0N/A
0N/A /**
0N/A * Update the color in the default style of the document.
0N/A *
0N/A * @param color the new color to use or null to remove the color attribute
0N/A * from the document's style
0N/A */
0N/A private void updateForeground(Color color) {
0N/A StyledDocument doc = (StyledDocument)getComponent().getDocument();
0N/A Style style = doc.getStyle(StyleContext.DEFAULT_STYLE);
0N/A
0N/A if (style == null) {
0N/A return;
0N/A }
0N/A
0N/A if (color == null) {
0N/A style.removeAttribute(StyleConstants.Foreground);
0N/A } else {
0N/A StyleConstants.setForeground(style, color);
0N/A }
0N/A }
0N/A
0N/A /**
0N/A * Update the font in the default style of the document.
0N/A *
0N/A * @param font the new font to use or null to remove the font attribute
0N/A * from the document's style
0N/A */
0N/A private void updateFont(Font font) {
0N/A StyledDocument doc = (StyledDocument)getComponent().getDocument();
0N/A Style style = doc.getStyle(StyleContext.DEFAULT_STYLE);
0N/A
0N/A if (style == null) {
0N/A return;
0N/A }
0N/A
0N/A if (font == null) {
0N/A style.removeAttribute(StyleConstants.FontFamily);
0N/A style.removeAttribute(StyleConstants.FontSize);
0N/A style.removeAttribute(StyleConstants.Bold);
0N/A style.removeAttribute(StyleConstants.Italic);
0N/A } else {
0N/A StyleConstants.setFontFamily(style, font.getName());
0N/A StyleConstants.setFontSize(style, font.getSize());
0N/A StyleConstants.setBold(style, font.isBold());
0N/A StyleConstants.setItalic(style, font.isItalic());
0N/A }
0N/A }
0N/A
1999N/A @Override
0N/A void paintBackground(SynthContext context, Graphics g, JComponent c) {
0N/A context.getPainter().paintTextPaneBackground(context, g, 0, 0,
0N/A c.getWidth(), c.getHeight());
0N/A }
0N/A
1999N/A /**
1999N/A * @inheritDoc
1999N/A */
1999N/A @Override
0N/A public void paintBorder(SynthContext context, Graphics g, int x,
0N/A int y, int w, int h) {
0N/A context.getPainter().paintTextPaneBorder(context, g, x, y, w, h);
0N/A }
0N/A}