History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/sun/swing/DefaultLookup.java (1 of 18352 files). Show all

Unified · Split

java/pkg/sun/swing/DefaultLookup.java+217−0
@@ -0,0 +1,217 @@
1+/*
2+ * Copyright (c) 2003, 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+package sun.swing;
26+
27+import java.awt.Color;
28+import java.awt.Insets;
29+import javax.swing.*;
30+import javax.swing.border.Border;
31+import javax.swing.plaf.ComponentUI;
32+import sun.awt.AppContext;
33+
34+/**
35+ * DefaultLookup provides a way to customize the lookup done by the
36+ * UIManager. The default implementation of DefaultLookup forwards
37+ * the call to the UIManager.
38+ * <p>
39+ * <b>WARNING:</b> While this class is public, it should not be treated as
40+ * public API and its API may change in incompatable ways between dot dot
41+ * releases and even patch releases. You should not rely on this class even
42+ * existing.
43+ *
44+ * @author Scott Violet
45+ */
46+public class DefaultLookup {
47+ /**
48+ * Key used to store DefaultLookup for AppContext.
49+ */
50+ private static final Object DEFAULT_LOOKUP_KEY = new
51+ StringBuffer("DefaultLookup");
52+ /**
53+ * Thread that last asked for a default.
54+ */
55+ private static Thread currentDefaultThread;
56+ /**
57+ * DefaultLookup for last thread.
58+ */
59+ private static DefaultLookup currentDefaultLookup;
60+
61+ /**
62+ * If true, a custom DefaultLookup has been set.
63+ */
64+ private static boolean isLookupSet;
65+
66+
67+ /**
68+ * Sets the DefaultLookup instance to use for the current
69+ * <code>AppContext</code>. Null implies the UIManager should be
70+ * used.
71+ */
72+ public static void setDefaultLookup(DefaultLookup lookup) {
73+ synchronized(DefaultLookup.class) {
74+ if (!isLookupSet && lookup == null) {
75+ // Null was passed in, and no one has invoked setDefaultLookup
76+ // with a non-null value, we don't need to do anything.
77+ return;
78+ }
79+ else if (lookup == null) {
80+ // null was passed in, but someone has invoked setDefaultLookup
81+ // with a non-null value, use an instance of DefautLookup
82+ // which will fallback to UIManager.
83+ lookup = new DefaultLookup();
84+ }
85+ isLookupSet = true;
86+ AppContext.getAppContext().put(DEFAULT_LOOKUP_KEY, lookup);
87+ currentDefaultThread = Thread.currentThread();
88+ currentDefaultLookup = lookup;
89+ }
90+ }
91+
92+ public static Object get(JComponent c, ComponentUI ui, String key) {
93+ boolean lookupSet;
94+ synchronized(DefaultLookup.class) {
95+ lookupSet = isLookupSet;
96+ }
97+ if (!lookupSet) {
98+ // No one has set a valid DefaultLookup, use UIManager.
99+ return UIManager.get(key, c.getLocale());
100+ }
101+ Thread thisThread = Thread.currentThread();
102+ DefaultLookup lookup;
103+ synchronized(DefaultLookup.class) {
104+ // See if we've already cached the DefaultLookup for this thread,
105+ // and use it if we have.
106+ if (thisThread == currentDefaultThread) {
107+ // It is cached, use it.
108+ lookup = currentDefaultLookup;
109+ }
110+ else {
111+ // Not cached, get the DefaultLookup to use from the AppContext
112+ lookup = (DefaultLookup)AppContext.getAppContext().get(
113+ DEFAULT_LOOKUP_KEY);
114+ if (lookup == null) {
115+ // Fallback to DefaultLookup, which will redirect to the
116+ // UIManager.
117+ lookup = new DefaultLookup();
118+ AppContext.getAppContext().put(DEFAULT_LOOKUP_KEY, lookup);
119+ }
120+ // Cache the values to make the next lookup easier.
121+ currentDefaultThread = thisThread;
122+ currentDefaultLookup = lookup;
123+ }
124+ }
125+ return lookup.getDefault(c, ui, key);
126+ }
127+
128+ //
129+ // The following are convenience method that all use getDefault.
130+ //
131+ public static int getInt(JComponent c, ComponentUI ui, String key,
132+ int defaultValue) {
133+ Object iValue = get(c, ui, key);
134+
135+ if (iValue == null || !(iValue instanceof Number)) {
136+ return defaultValue;
137+ }
138+ return ((Number)iValue).intValue();
139+ }
140+
141+ public static int getInt(JComponent c, ComponentUI ui, String key) {
142+ return getInt(c, ui, key, -1);
143+ }
144+
145+ public static Insets getInsets(JComponent c, ComponentUI ui, String key,
146+ Insets defaultValue) {
147+ Object iValue = get(c, ui, key);
148+
149+ if (iValue == null || !(iValue instanceof Insets)) {
150+ return defaultValue;
151+ }
152+ return (Insets)iValue;
153+ }
154+
155+ public static Insets getInsets(JComponent c, ComponentUI ui, String key) {
156+ return getInsets(c, ui, key, null);
157+ }
158+
159+ public static boolean getBoolean(JComponent c, ComponentUI ui, String key,
160+ boolean defaultValue) {
161+ Object iValue = get(c, ui, key);
162+
163+ if (iValue == null || !(iValue instanceof Boolean)) {
164+ return defaultValue;
165+ }
166+ return ((Boolean)iValue).booleanValue();
167+ }
168+
169+ public static boolean getBoolean(JComponent c, ComponentUI ui, String key) {
170+ return getBoolean(c, ui, key, false);
171+ }
172+
173+ public static Color getColor(JComponent c, ComponentUI ui, String key,
174+ Color defaultValue) {
175+ Object iValue = get(c, ui, key);
176+
177+ if (iValue == null || !(iValue instanceof Color)) {
178+ return defaultValue;
179+ }
180+ return (Color)iValue;
181+ }
182+
183+ public static Color getColor(JComponent c, ComponentUI ui, String key) {
184+ return getColor(c, ui, key, null);
185+ }
186+
187+ public static Icon getIcon(JComponent c, ComponentUI ui, String key,
188+ Icon defaultValue) {
189+ Object iValue = get(c, ui, key);
190+ if (iValue == null || !(iValue instanceof Icon)) {
191+ return defaultValue;
192+ }
193+ return (Icon)iValue;
194+ }
195+
196+ public static Icon getIcon(JComponent c, ComponentUI ui, String key) {
197+ return getIcon(c, ui, key, null);
198+ }
199+
200+ public static Border getBorder(JComponent c, ComponentUI ui, String key,
201+ Border defaultValue) {
202+ Object iValue = get(c, ui, key);
203+ if (iValue == null || !(iValue instanceof Border)) {
204+ return defaultValue;
205+ }
206+ return (Border)iValue;
207+ }
208+
209+ public static Border getBorder(JComponent c, ComponentUI ui, String key) {
210+ return getBorder(c, ui, key, null);
211+ }
212+
213+ public Object getDefault(JComponent c, ComponentUI ui, String key) {
214+ // basic
215+ return UIManager.get(key, c.getLocale());
216+ }
217+}