001 /*
002 * Copyright 2002-2005 Sun Microsystems, Inc. All Rights Reserved.
003 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004 *
005 * This code is free software; you can redistribute it and/or modify it
006 * under the terms of the GNU General Public License version 2 only, as
007 * published by the Free Software Foundation. Sun designates this
008 * particular file as subject to the "Classpath" exception as provided
009 * by Sun in the LICENSE file that accompanied this code.
010 *
011 * This code is distributed in the hope that it will be useful, but WITHOUT
012 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014 * version 2 for more details (a copy is included in the LICENSE file that
015 * accompanied this code).
016 *
017 * You should have received a copy of the GNU General Public License version
018 * 2 along with this work; if not, write to the Free Software Foundation,
019 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020 *
021 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022 * CA 95054 USA or visit www.sun.com if you need additional information or
023 * have any questions.
024 */
025
026 package javax.swing.plaf.synth;
027
028 import java.beans.*;
029 import javax.swing.*;
030 import java.awt.Dimension;
031 import java.awt.Graphics;
032 import java.awt.Insets;
033 import javax.swing.plaf.ComponentUI;
034 import javax.swing.plaf.SeparatorUI;
035 import javax.swing.plaf.UIResource;
036 import javax.swing.plaf.DimensionUIResource;
037 import sun.swing.plaf.synth.SynthUI;
038
039 /**
040 * A Synth L&F implementation of SeparatorUI. This implementation
041 * is a "combined" view/controller.
042 *
043 * @version 1.22 05/05/07
044 * @author Shannon Hickey
045 * @author Joshua Outwater
046 */
047 class SynthSeparatorUI extends SeparatorUI implements
048 PropertyChangeListener, SynthUI {
049 private SynthStyle style;
050
051 public static ComponentUI createUI(JComponent c) {
052 return new SynthSeparatorUI();
053 }
054
055 public void installUI(JComponent c) {
056 installDefaults((JSeparator) c);
057 installListeners((JSeparator) c);
058 }
059
060 public void uninstallDefaults(JComponent c) {
061 uninstallListeners((JSeparator) c);
062 uninstallDefaults((JSeparator) c);
063 }
064
065 public void installDefaults(JSeparator c) {
066 updateStyle(c);
067 }
068
069 private void updateStyle(JSeparator sep) {
070 SynthContext context = getContext(sep, ENABLED);
071 SynthStyle oldStyle = style;
072
073 style = SynthLookAndFeel.updateStyle(context, this );
074
075 if (style != oldStyle) {
076 if (sep instanceof JToolBar.Separator) {
077 Dimension size = ((JToolBar.Separator) sep)
078 .getSeparatorSize();
079 if (size == null || size instanceof UIResource) {
080 size = (DimensionUIResource) style.get(context,
081 "ToolBar.separatorSize");
082 if (size == null) {
083 size = new DimensionUIResource(10, 10);
084 }
085 ((JToolBar.Separator) sep).setSeparatorSize(size);
086 }
087 }
088 }
089
090 context.dispose();
091 }
092
093 public void uninstallDefaults(JSeparator c) {
094 SynthContext context = getContext(c, ENABLED);
095
096 style.uninstallDefaults(context);
097 context.dispose();
098 style = null;
099 }
100
101 public void installListeners(JSeparator c) {
102 c.addPropertyChangeListener(this );
103 }
104
105 public void uninstallListeners(JSeparator c) {
106 c.removePropertyChangeListener(this );
107 }
108
109 public void update(Graphics g, JComponent c) {
110 SynthContext context = getContext(c);
111
112 JSeparator separator = (JSeparator) context.getComponent();
113 SynthLookAndFeel.update(context, g);
114 context.getPainter()
115 .paintSeparatorBackground(context, g, 0, 0,
116 c.getWidth(), c.getHeight(),
117 separator.getOrientation());
118 paint(context, g);
119 context.dispose();
120 }
121
122 public void paint(Graphics g, JComponent c) {
123 SynthContext context = getContext(c);
124
125 paint(context, g);
126 context.dispose();
127 }
128
129 protected void paint(SynthContext context, Graphics g) {
130 JSeparator separator = (JSeparator) context.getComponent();
131 context.getPainter().paintSeparatorForeground(context, g, 0, 0,
132 separator.getWidth(), separator.getHeight(),
133 separator.getOrientation());
134 }
135
136 public void paintBorder(SynthContext context, Graphics g, int x,
137 int y, int w, int h) {
138 JSeparator separator = (JSeparator) context.getComponent();
139 context.getPainter().paintSeparatorBorder(context, g, x, y, w,
140 h, separator.getOrientation());
141 }
142
143 public Dimension getPreferredSize(JComponent c) {
144 SynthContext context = getContext(c);
145
146 int thickness = style.getInt(context, "Separator.thickness", 2);
147 Insets insets = c.getInsets();
148 Dimension size;
149
150 if (((JSeparator) c).getOrientation() == JSeparator.VERTICAL) {
151 size = new Dimension(
152 insets.left + insets.right + thickness, insets.top
153 + insets.bottom);
154 } else {
155 size = new Dimension(insets.left + insets.right, insets.top
156 + insets.bottom + thickness);
157 }
158 context.dispose();
159 return size;
160 }
161
162 public Dimension getMinimumSize(JComponent c) {
163 return getPreferredSize(c);
164 }
165
166 public Dimension getMaximumSize(JComponent c) {
167 return new Dimension(Short.MAX_VALUE, Short.MAX_VALUE);
168 }
169
170 public SynthContext getContext(JComponent c) {
171 return getContext(c, getComponentState(c));
172 }
173
174 private SynthContext getContext(JComponent c, int state) {
175 return SynthContext.getContext(SynthContext.class, c,
176 SynthLookAndFeel.getRegion(c), style, state);
177 }
178
179 private Region getRegion(JComponent c) {
180 return SynthLookAndFeel.getRegion(c);
181 }
182
183 private int getComponentState(JComponent c) {
184 return SynthLookAndFeel.getComponentState(c);
185 }
186
187 public void propertyChange(PropertyChangeEvent evt) {
188 if (SynthLookAndFeel.shouldUpdateStyle(evt)) {
189 updateStyle((JSeparator) evt.getSource());
190 }
191 }
192 }
|