01: /*
02: * Copyright (c) 2005-2008 Substance Kirill Grouchnikov. All Rights Reserved.
03: *
04: * Redistribution and use in source and binary forms, with or without
05: * modification, are permitted provided that the following conditions are met:
06: *
07: * o Redistributions of source code must retain the above copyright notice,
08: * this list of conditions and the following disclaimer.
09: *
10: * o Redistributions in binary form must reproduce the above copyright notice,
11: * this list of conditions and the following disclaimer in the documentation
12: * and/or other materials provided with the distribution.
13: *
14: * o Neither the name of Substance Kirill Grouchnikov nor the names of
15: * its contributors may be used to endorse or promote products derived
16: * from this software without specific prior written permission.
17: *
18: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
20: * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
22: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
25: * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
26: * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
27: * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
28: * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29: */
30: package org.jvnet.substance;
31:
32: import java.lang.reflect.Method;
33: import java.security.AccessControlException;
34: import java.util.*;
35:
36: import javax.swing.JComponent;
37: import javax.swing.UIManager;
38: import javax.swing.colorchooser.AbstractColorChooserPanel;
39: import javax.swing.plaf.ComponentUI;
40:
41: import org.jvnet.substance.utils.SubstanceCoreUtilities;
42:
43: import contrib.ch.randelshofer.quaqua.Quaqua14ColorChooserUI;
44:
45: /**
46: * UI for color chooser in <b>Substance</b> look and feel. This UI delegate is
47: * removed in Lite versions of <b>Substance</b>.
48: *
49: * @author Kirill Grouchnikov
50: */
51: public class SubstanceColorChooserUI extends Quaqua14ColorChooserUI {
52: public static ComponentUI createUI(JComponent c) {
53: return new SubstanceColorChooserUI();
54: }
55:
56: @Override
57: protected AbstractColorChooserPanel[] createDefaultChoosers() {
58: String[] defaultChoosers = (String[]) UIManager
59: .get("ColorChooser.defaultChoosers");
60:
61: List<AbstractColorChooserPanel> panelList = new LinkedList<AbstractColorChooserPanel>();
62: // AbstractColorChooserPanel[] panels = new
63: // AbstractColorChooserPanel[defaultChoosers.length];
64: for (int i = 0; i < defaultChoosers.length; i++) {
65: try {
66: Method setBundleMethod = Class.forName(
67: defaultChoosers[i]).getMethod("setLabelBundle",
68: new Class[] { ResourceBundle.class });
69: setBundleMethod.invoke(null,
70: new Object[] { SubstanceCoreUtilities
71: .getResourceBundle(null) });
72: } catch (Exception exc) {
73: // ignore - either the method doesn't exist or the invocation
74: // failed. Nothing to do in both cases.
75: }
76: try {
77: AbstractColorChooserPanel panel = (AbstractColorChooserPanel) Class
78: .forName(defaultChoosers[i]).newInstance();
79: panelList.add(panel);
80: } catch (AccessControlException e) {
81: // ignore - happens on unsigned apps in WebStart environment
82: } catch (Exception e) {
83: e.printStackTrace();
84: throw new InternalError("Unable to instantiate "
85: + defaultChoosers[i]);
86: }
87: }
88: return panelList.toArray(new AbstractColorChooserPanel[0]);
89: }
90: }
|